En écoutant l'interview de Scott Hanselman avec l'équipe de Stack Overflow ( parties 1 et 2 ), il a insisté sur le fait que le serveur SQL et le serveur d'applications devraient être sur des machines distinctes. Est-ce juste pour s'assurer que si un serveur est compromis, les deux systèmes ne sont pas accessibles? Les problèmes de sécurité l'emportent-ils sur la complexité de deux serveurs (surcoût, connexion réseau dédiée entre les deux, plus de maintenance, etc.), en particulier pour une petite application, où aucune des pièces n'utilise trop de CPU ou de mémoire? Même avec deux serveurs, avec un serveur compromis, un attaquant pourrait encore faire de sérieux dommages, soit en supprimant la base de données, soit en manipulant le code de l'application.
Pourquoi serait-ce si grave si les performances ne sont pas un problème?
Cela n'a pas vraiment d' importance (vous pouvez facilement exécuter votre site avec le Web / la base de données sur la même machine), c'est juste l'étape la plus simple de la mise à l'échelle.
C'est exactement ce que StackOverflow a fait - en commençant par une seule machine exécutant IIS / SQL Server, puis quand il a commencé à être lourdement chargé, un deuxième serveur a été acheté et le serveur SQL a été déplacé dessus.
Si les performances ne sont pas un problème, ne gaspillez pas d'argent en achetant / en entretenant deux serveurs.
la source
D'autre part, se référant à un autre blog de Scott (Watermasyck, de Telligent) - ils ont constaté que la plupart des utilisateurs pouvaient accélérer les sites Web (en utilisant le serveur communautaire de Telligent), en plaçant la base de données sur la même machine que le site Web. Cependant, dans le cas de leur client, le serveur de base de données et le serveur Web sont généralement les seules applications sur cette machine, et le site Web ne sollicite pas trop la machine. Ensuite, l'efficacité de ne pas avoir à envoyer davantage de données sur le réseau a compensé l'augmentation de la tension.
la source
Je pense que le principal facteur serait la performance. Le code du serveur Web / de l'application et SQL Server mettront en cache les données couramment demandées en mémoire et vous tuez les performances de votre cache en les exécutant dans le même espace mémoire.
la source
Tom a raison à ce sujet. D'autres raisons sont que ce n'est pas rentable et qu'il existe des risques de sécurité supplémentaires.
Les serveurs Web ont des exigences matérielles différentes de celles des serveurs de base de données. Les serveurs de base de données s'en tirent mieux avec beaucoup de mémoire et une matrice de disques très rapide, tandis que les serveurs Web n'ont besoin que de suffisamment de mémoire pour mettre en cache les fichiers et les requêtes de base de données fréquentes (selon votre configuration). En ce qui concerne la rentabilité, les deux serveurs ne seront pas nécessairement moins chers, mais le rapport performances / coût devrait être plus élevé car vous n'avez pas à différentes applications en concurrence pour les ressources. Pour cette raison, vous devrez probablement dépenser beaucoup plus pour un serveur qui répond aux deux et offre des performances équivalentes à 2 serveurs spécialisés.
Le problème de sécurité est que si la machine unique est compromise, le serveur Web et la base de données sont vulnérables. Avec deux serveurs, vous avez une certaine marge de manœuvre car le 2ème serveur sera toujours sécurisé (au moins pendant un certain temps).
En outre, il existe certains avantages en termes d'évolutivité, car il se peut que vous n'ayez à gérer que quelques serveurs de base de données utilisés par un ensemble d'applications Web différentes. De cette façon, vous avez moins de travail à faire pour appliquer les mises à niveau ou les correctifs et régler les performances. Je pense qu'il existe des outils de gestion de serveur pour faciliter ces tâches (dans le cas d'une seule machine).
la source
La sécurité est une préoccupation majeure. Idéalement, votre serveur de base de données doit être placé derrière un pare-feu avec uniquement les ports requis pour accéder aux données ouverts. Votre application Web doit se connecter au serveur de base de données avec un compte SQL qui possède juste assez de droits pour que l'application fonctionne et pas plus. Par exemple, vous devez supprimer les droits qui permettent de supprimer des objets et vous ne devriez certainement pas vous connecter en utilisant des comptes tels que «sa».
Dans le cas où vous perdez le serveur Web à cause d'un détournement (c'est-à-dire une élévation complète des privilèges vers les droits d'administrateur), le pire des cas est que la base de données de votre application peut être compromise mais pas l'ensemble du serveur de base de données (comme ce serait le cas si le serveur de base de données et serveur Web étaient la même machine). Si vous avez chiffré vos chaînes de connexion à la base de données et que le pirate n'est pas assez averti pour les déchiffrer, tout ce que vous avez perdu est le serveur Web.
la source
Un facteur qui n'a pas encore été mentionné est l'équilibrage de charge. Si vous commencez par considérer le serveur Web et la base de données comme des machines distinctes, vous optimisez le nombre d'allers-retours réseau et il devient également plus facile d'ajouter un deuxième serveur Web ou un deuxième moteur de base de données à mesure que les besoins augmentent.
la source
Je peux dire par expérience de première main que c'est souvent une bonne idée de placer le serveur Web et la base de données sur différentes machines. Si vous avez une application qui consomme beaucoup de ressources, cela peut facilement provoquer un pic de cycles du processeur sur la machine, ce qui entraîne essentiellement l'arrêt de la machine. Cependant, si votre application a une utilisation limitée de la base de données, ce ne serait probablement pas grave de les faire partager un serveur.
la source
Wow, personne n'évoque le fait que si vous achetez réellement un serveur SQL à 5k dollars, vous voudrez peut-être l'utiliser pour plus que votre application Web. Si vous utilisez express, peut-être que vous ne vous en souciez pas. Je vois des serveurs SQL exécuter des bases de données pour 20 à 30 applications, donc les mettre sur le serveur Web ne serait pas intelligent.
Deuxièmement, cela dépend de la destination du serveur. Je travaille pour des sociétés financières et le gouvernement. Nous utilisons donc une approche folle dans le cul consistant à n'utiliser que des sprocs et à limiter les ports du serveur Web à SQL. Donc, si l'application Web est piratée. La seule chose que le pirate peut faire est d'appeler des sprocs car le compte utilisateur sur le serveur Web est verrouillé pour ne voir / appeler que les sprocs de la base de données. Alors maintenant, le pirate doit trouver comment entrer dans la base de données. Si c'est bien sur le serveur Web, c'est facile d'accès.
la source
Je suis d'accord avec Daniel Earwicker - la question de sécurité est assez imparfaite.
Si vous avez une configuration de boîte unique avec un serveur Web et uniquement la base de données pour ce serveur Web, si ce serveur Web est compromis, vous perdez à la fois le serveur Web et uniquement la base de données de cette application spécifique.
C'est exactement la même chose que ce qui se passe si vous perdez le serveur Web sur une configuration à 2 serveurs. Vous perdez le serveur Web, et uniquement la base de données pour cette application spécifique.
L'argument selon lequel `` l'intégrité du reste du serveur de base de données est maintenue '' lorsque vous avez une configuration à 2 serveurs n'est pas pertinent, car dans le premier scénario, tous les autres serveurs de base de données relatifs à toutes les autres applications (s'il y en a) restent également inchangés - étant, comme ils le sont, hébergés ailleurs.
De même, à la question posée par Kev «qu'en est-il de toutes les autres bases de données résidant sur le serveur DB? Tout ce que vous avez perdu est une base de données.
En revanche, dans une configuration à 2 serveurs, où l'attaquant avait accès au serveur Web, et par proxy, des droits limités (dans le meilleur des cas) sur le serveur de base de données, ils pourraient mettre en danger les bases de données de toutes les autres applications en portant des requêtes lentes et gourmandes en mémoire ou en maximisant l'espace de stockage disponible sur le serveur de base de données. En séparant les applications en leurs propres préoccupations, tout comme la virtualisation, vous les isolez également à des fins de sécurité de manière positive.
la source
Cela dépend de l'application et du but. Lorsque la haute disponibilité et les performances ne sont pas essentielles, il n'est pas mal de ne pas séparer la base de données et le serveur Web. Compte tenu en particulier des gains de performances - si l'application effectue un grand nombre de requêtes de base de données, une quantité considérable de charge réseau peut être supprimée en gardant tout sur le même système, en maintenant les temps de réponse bas.
la source
Je pense que c'est parce que les deux machines doivent généralement être optimisées de différentes manières. À part cela, je n'en ai aucune idée, nous exécutons toutes nos applications avec la base de données du serveur sur la même machine - à condition que nous ne soyons pas confrontés au public - mais nous n'avons eu aucun problème.
Je ne peux pas imaginer que trop de gens se soucient du fait qu'une machine soit compromise sur les deux, car l'application Web aura généralement un accès presque illimité aux données, sinon au schéma à l'intérieur de la base de données.
Intéressé par ce que les autres pourraient dire.
la source
J'ai écouté ce podcast, et c'était amusant, mais l'argument de la sécurité n'avait aucun sens pour moi. Si vous avez compromis le serveur A et que ce serveur peut accéder aux données du serveur B, vous avez instantanément accès aux données du serveur B.
la source
Les licences de base de données ne sont pas faciles et sont souvent facturées par CPU, donc en séparant vos serveurs Web, vous pouvez réduire le coût de vos licences de base de données.
Par exemple, si vous avez 1 serveur faisant à la fois le Web et la base de données contenant 8 CPU, vous devrez payer pour une licence de 8 cpu. Cependant, si vous avez deux serveurs avec chacun 4 processeurs et exécutez la base de données sur un serveur, vous n'aurez à payer que pour 4 licences de processeur.
la source
Une préoccupation supplémentaire est que les bases de données aiment prendre toute la mémoire disponible et la garder en réserve pour le moment où elles veulent l'utiliser. Vous pouvez le forcer à limiter la mémoire, mais cela peut considérablement ralentir l'accès aux données.
la source
Dire qu'il y a un réel gain de performances à obtenir en exécutant un serveur de base de données sur un serveur Web est un argument erroné.
Étant donné que les serveurs de base de données acceptent des chaînes de requête et renvoient des ensembles de résultats, les données qui circulent réellement du serveur de données au serveur Web sont relativement petites, mais la puissance requise pour traiter la requête et générer l'ensemble de résultats est relativement importante. Optimiser les performances autour du temps de transfert des données, c'est donc optimiser autour de la mauvaise chose.
En ce qui concerne la sécurité, il y a des avantages à avoir le serveur de données sur un boîtier différent du serveur Web. Avoir une telle configuration n'est pas la fin de toute la sécurité, mais c'est un pas dans la bonne direction.
En ce qui concerne l'évolutivité, il est facile et relativement peu coûteux d'ajouter des serveurs Web et de les mettre en cluster pour gérer l'augmentation du trafic. Il n'est pas si facile et bon marché d'ajouter des serveurs de données et de les regrouper. En outre, les serveurs Web et les serveurs de données ont des besoins matériels différents, de sorte que plusieurs boîtiers contribuent à l'évolutivité.
Si vous commencez petit et que vous n'avez qu'une seule boîte, alors une bonne solution serait d'utiliser des machines virtuelles. L'exécution du serveur Web et du serveur de données dans différentes machines virtuelles sur un hôte vous donne tous les gains de boîtes séparées au prix d'un prix de grande boîte.
la source
Le système d'exploitation est une autre considération. Bien que votre base de données puisse nécessiter des espaces mémoire plus importants et donc UNIX, votre serveur Web - ou plus précisément votre serveur d'applications puisque vous ne mentionnez que deux niveaux - peut être basé sur .Net et donc nécessiter Windows.
la source
D'accord! Voici le truc, il est plus sûr d'avoir votre serveur DB installé sur une autre machine et votre application sur le serveur Web. Vous connectez ensuite votre application à la base de données avec un lien Web. Merci.
la source