nginx derrière les équilibreurs de charge
Hii il y a de meilleur collègue,
J'ai trouvé à Instagram partager leur technologie, mise en œuvre avec d'autres développeurs grâce à leur blog. Ils ont quelques grands des solutions pour les problèmes qu'ils éprouvent. L'une de ces solutions, ils ont un elestic d'équilibrage de la charge sur Amazon avec 3 nginx instances derrière elle. Ma question est quel est la tâche de ceux nginx serveurs? Et ce qui est de la tâche de l'Elastic Load balancers et quelle est la relation entre eux?
Quelqu'un peut-il expliquer moi l'idée derrière cette solution?
Tnx à l'avance.
source d'informationauteur Navid
Vous devez vous connecter pour publier un commentaire.
Exclues: je suis pas un expert en quelque manière que ce soit et je suis sur le processus d'apprentissage sur AWS écosystème moi-même.
La ELB (Elastic load balancer) n'a pas de fonctionnalité sur son propre à l'exception de la réception de la demande et à les acheminer vers le bon serveur. Les serveurs peuvent exécuter nginx, IIS, Apache, lighthttpd, you name it.
Je vais vous donner un véritable cas d'utilisation.
J'ai eu un nginx serveur exécutant un blog wordpress. Ce serveur a été, comme je l'ai dit, alimenté par nginx servir du contenu statique et "amont" .les requêtes php pour phpfpm en cours d'exécution sur le même serveur. Tout allait bien jusqu'à ce que un jour. Ce blog a été présenté sur une émission de télévision. J'ai eu une tonne d'utilisateurs et le serveur ne pouvait pas suivre avec beaucoup de trafic.
Ma première réaction serait de simplement utiliser les AMI (Amazon machine image) pour faire tourner une copie de mon serveur plus puissant instance comme m1.lourd. Le problème était que je savais que j'aurais l'augmentation du trafic dans le temps au cours de la prochaine quelques jours. Bientôt j'aurais à faire tourner une machine plus puissante encore, ça voudrait dire que plus les temps d'arrêt et de trouble.
Au lieu de cela, j'ai lancé un ELB (elastic load balancer) et mis à jour mon DNS pour pointer le trafic du site de l'ELB, et non directement sur le serveur. L'utilisateur ne sait pas à l'ip du serveur ou quoi que ce soit, il ne voit que le ELB, tout le reste se passe à l'intérieur de l'amazon cloud.
La ELB décide du serveur sur lequel le trafic va. Vous pouvez avoir ELB et un seul serveur à la fois (si vous le trafic est faible pour le moment), ou des centaines. Les serveurs peuvent être créés et ajoutés au tableau de serveur (serveur de groupe) à tout moment, ou vous pouvez configurer la mise à l'échelle automatique pour frayer de nouveaux serveurs et de les ajouter à la ELB groupe de serveurs à l'aide d'amazon en ligne de commande, le tout automatiquement.
Cloud d'Amazon watch (un autre produit et une partie importante de AWS écosystème) est toujours à l'écoute de votre serveur de santé et décide du serveur sur lequel il prendra le chemin de cet utilisateur. Il sait aussi quand tous les serveurs sont en train de devenir trop chargé, et est l'agent qui donne l'ordre de générer un autre serveur (à l'aide de votre AMI). Lorsque les serveurs ne sont pas sous une lourde charge plus, ils sont automatiquement détruits (ou à l'arrêt, je ne m'en souviens pas).
De cette façon, j'ai été en mesure de servir tous les utilisateurs à tout moment, et lorsque la charge est légère, j'aurais ELB et un seul serveur nginx. Lorsque la charge a été élevé, je le laisserais décider du nombre de serveurs dont j'ai besoin (en fonction de la charge du serveur). Le temps d'arrêt Minimal. Bien sûr, vous pouvez définir des limites à la quantité de serveurs que vous pouvez vous permettre dans le même temps, et des trucs comme ça pour ne pas être facturé plus de ce que vous pouvez payer.
Vous voir, Instagram gars me dit: - "nous avons utilisé pour exécuter 2 nginx machines et DNS Round-Robin entre eux". C'est inefficace de l'OMI par rapport à ELB. DNS Round-Robin dns de routage de chaque requête vers un autre serveur. Donc, la première va de serveur, la deuxième va de serveur à deux et sur et sur.
ELB fait des montres les serveurs de la SANTÉ (utilisation du processeur, l'utilisation du réseau) et décide de du serveur sur lequel le trafic passe sur cette base. Voyez-vous la différence?
Et ils disent: "L'inconvénient de cette approche est le temps qu'il faut pour que le DNS mise à jour dans le cas où l'une des machines a besoin d'obtenir de déclassement."
DNS Round-robin est une forme d'équilibrage de charge. Mais si un serveur tombe en kaput et vous avez besoin de mettre à jour le DNS pour supprimer ce serveur de la groupe, vous aurez le temps d'arrêt (DNS prend du temps à mettre à jour à tout le monde). Certains utilisateurs seront acheminés à ce mauvais serveur. Avec ELB c'est automatique si le serveur est en mauvaise santé, il ne recevrez plus de trafic, sauf si bien sûr l'ensemble du groupe de serveurs est en mauvaise santé et vous n'avez pas une sorte d'auto-mise à l'échelle de l'installation.
Et maintenant, les gars sur instagram: "Récemment, nous nous sommes déplacés à l'aide d'Amazon Elastic Load Balancer, avec 3 NGINX instances derrière ce qui peut être échangé (et sont automatiquement prises de rotation si elles ne parviennent pas à un examen de santé).".
Le scénario, que j'ai illustré est une fiction. Il est en fait plus complexe que ça, mais rien qui ne peut pas être résolu. Par exemple, si les utilisateurs de télécharger des photos à votre demande, comment pouvez-vous garder une cohérence entre toutes les machines sur le serveur de groupe? Vous auriez besoin de stocker les images sur un service externe comme Amazon s3. Sur un autre post sur Instagram ingénierie – “Les photos elles-mêmes aller directement à Amazon S3, qui stocke actuellement plusieurs téraoctets de données de photos pour nous.”. Si ils ont 3 serveurs nginx sur l'équilibrage de charge et tous les serveurs de servir des pages html sur lequel les liens pour les images des points de S3, vous n'aurez pas de problème. Si l'image est stockée localement sur l'instance – aucun moyen de le faire.
Tous les serveurs sur le ELB auraient également besoin d'une base de données externe. Pour que amazon a RDS – Toutes les machines peuvent pointer sur la même base de données et la cohérence des données serait garanti.
Sur l'image ci-dessus, vous pouvez voir un RDS "réplica en Lecture" - c'est-à RDS façon d'équilibrage de charge. Je ne sais pas beaucoup parler en ce moment, désolé.
Essayer de lire ceci: http://awsadvent.tumblr.com/post/38043683444/using-elb-and-auto-scaling
Meilleures salutations.
Pouvez vous s'il vous plaît point à l'entrée de blog?
Équilibreurs de charge l'équilibrage de la charge. Ils surveillent les serveurs Web de santé (temps de réponse, etc) et de répartir la charge entre les serveurs Web. Sur plus implémentations complexes, il est possible d'avoir de nouveaux serveurs générez automatiquement si il y a un pic de trafic. Bien sûr, vous devez assurez-vous que il y a une cohérence entre les serveurs. ILS PEUVENT partager les mêmes bases de données par exemple.
Je crois donc que l'équilibrage de charge se fait frapper et décide de quel serveur il permettra d'acheminer le trafic en fonction de l'état du serveur.
.
Nginx est un serveur Web qui est très bien servir beaucoup de contenu statique pour les utilisateurs simultanés.
Les demandes de pages dynamiques peuvent être transférées vers un autre serveur à l'aide de cgi. Ou même les serveurs qui exécutent nginx pouvez également exécuter phpfpm.
.
Beaucoup de possibilités. Je suis sur mon téléphone portable, juste maintenant. demain, je peux écrire un peu plus.
En ce qui concerne meilleur.
Je suis conscient que je suis en retard à la fête, mais je pense que l'utilisation de NGINX instances derrière ELB Istagram blog est de fournir une haute disponibilité de l'équilibreur de charge comme décrit ici.
NGINX instances ne semblent pas être utilisés en tant que serveurs web dans le blog.
Pour ce rôle, ils mentionnent:
Donc ELB est simplement utilisé comme un remplacement pour leurs anciens solution avec DNS Round-Robin entre NGINX instances qui n'a pas été en assurant la haute disponibilité.