Failover : notre péril est le perfectionnisme et
 la paresse

L'Ă©tĂ©, la rĂ©duction de l'activitĂ© des acheteurs et de l'intensitĂ© des changements d'infrastructure des projets web est quelque chose de traditionnel, nous dit le Capitaine Évidence. Simplement parce que mĂȘme les informaticiens, parfois, partent en vacances. Et les CTO aussi. C'est donc plus difficile pour ceux qui restent Ă  leur poste, mais ce n'est pas le sujet du jour : peut-ĂȘtre que c'est justement pour cela que l'Ă©tĂ© est la meilleure pĂ©riode pour rĂ©flĂ©chir calmement au schĂ©ma de sauvegarde existant et dresser un plan pour l'amĂ©liorer. Et l'expĂ©rience d'Egor Andreyev de [AdminDivision] vous sera utile Ă  cet Ă©gard. AdminDivision, dont il a parlĂ© lors de la confĂ©rence Uptime day.

Lors de la construction de sites de secours, il existe plusieurs piÚges dans lesquels on peut tomber. Et il est absolument inacceptable d'y tomber. Ce qui nous nuit dans tout cela, comme dans bien d'autres domaines, c'est le perfectionnisme et
 la paresse. Nous essayons de tout faire parfaitement, alors qu'il n'est pas nécessaire de tout rendre parfait ! Il faut juste faire certaines choses, mais bien les faire, jusqu'au bout, pour qu'elles fonctionnent correctement.

Le basculement n'est pas un gadget amusant « juste pour le plaisir » ; c'est un outil qui doit faire une seule chose : rĂ©duire le temps d'arrĂȘt, afin que le service et l'entreprise perdent moins d'argent. Dans toutes les mĂ©thodes de sauvegarde, je propose de se demander dans quel contexte se trouvent l'argent.

Failover : notre péril est le perfectionnisme et
 la paresse

Le premier piĂšge: lorsque nous construisons de grands systĂšmes fiables et que nous nous occupons de la sauvegarde, nous rĂ©duisons le nombre de pannes. C'est une terrible illusion. En fait, lorsque nous nous occupons de la sauvegarde, le nombre de pannes augmente probablement. Et si nous faisons tout correctement, nous rĂ©duirons le temps d'arrĂȘt au total. Il y aura plus de pannes, mais elles se produiront avec moins de coĂ»ts. Qu'est-ce que la sauvegarde ? — c'est une complication du systĂšme. Toute complication est nĂ©gative : elle nous donne plus de petites piĂšces, plus de roues dentĂ©es, en un mot, plus d'Ă©lĂ©ments — et donc, un risque de rupture plus grand. Et elles vont effectivement se casser. Et cela arrivera plus souvent. Un exemple simple : disons que nous avons un site utilisant PHP et MySQL, et qu'il doit ĂȘtre rapidement sauvegardĂ©.

D'accord (c) Nous prenons la deuxiĂšme plateforme, construisons un systĂšme identique... La complexitĂ© devient deux fois plus grande — nous avons deux entitĂ©s. De plus, nous ajoutons une certaine logique de transfert de donnĂ©es d'une plateforme Ă  l'autre — c'est-Ă -dire la rĂ©plication des donnĂ©es, la copie de la statique, et ainsi de suite. Ainsi, la logique de rĂ©plication — elle est gĂ©nĂ©ralement trĂšs complexe, et donc, la complexitĂ© globale du systĂšme peut ĂȘtre non pas 2, mais 3, 5, ou mĂȘme 10 fois plus grande.

Le deuxiĂšme piĂšge: lorsque nous construisons de vĂ©ritables systĂšmes complexes, nous imaginons ce que nous voulons obtenir Ă  la fin. VoilĂ  : nous voulons obtenir un systĂšme super fiable qui fonctionne sans aucun temps d'arrĂȘt, qui bascule en une demi-seconde (ou mieux encore, instantanĂ©ment), et nous commençons Ă  concrĂ©tiser nos rĂȘves. Mais ici aussi, il y a un dĂ©tail : plus le temps de basculement souhaitĂ© est court, plus la logique du systĂšme devient complexe. Plus nous devrons rendre cette logique complexe, plus le systĂšme aura tendance Ă  tomber en panne. Et on peut se retrouver dans une situation trĂšs dĂ©sagrĂ©able : nous essayons de toutes nos forces de rĂ©duire le temps d'arrĂȘt, alors qu'en rĂ©alitĂ©, nous compliquons les choses, et lorsque quelque chose ne va pas, le temps d'arrĂȘt sera finalement plus long. On se surprend souvent Ă  penser : eh bien... il valait mieux ne pas avoir de redondance. Il valait mieux que tout fonctionne seul avec un temps d'arrĂȘt comprĂ©hensible.

Comment peut-on lutter contre cela ? Il faut arrĂȘter de se mentir, arrĂȘter de se flatter en pensant que nous allons construire une fusĂ©e spatiale, mais comprendre de maniĂšre adĂ©quate combien de temps le projet peut effectivement ĂȘtre en attente. Et en fonction de ce temps maximum, nous choisirons en fait les mĂ©thodes dont nous disposerons pour augmenter la fiabilitĂ© de notre systĂšme.

Failover : notre péril est le perfectionnisme et
 la paresse

Il est temps de raconter des « histoires de la vraie vie »  de la vie, bien sĂ»r.

Exemple numéro un

Imaginez un site vitrine pour l'usine de tuyauterie numĂ©ro 1 de la ville de N. Il est Ă©crit en lettres gĂ©antes — USINE DE TUYAUTERIE N° 1. Juste en dessous — le slogan : « Nos tuyaux sont les tuyaux les plus ronds de N ». Et en bas, le numĂ©ro de tĂ©lĂ©phone du directeur gĂ©nĂ©ral et son nom. Nous comprenons qu'il est nĂ©cessaire de rĂ©server — c'est trĂšs important ! Commençons Ă  analyser de quoi cela se compose. C'est de l'HTML statique — c'est-Ă -dire quelques images oĂč le directeur est, en fait, assis Ă  une table dans un sauna avec son partenaire, discutant d'une nouvelle affaire. Nous commençons Ă  penser au temps d'arrĂȘt. Une pensĂ©e nous traverse : il faut rester lĂ  cinq minutes, pas plus. Et voici la question : combien de ventes ont Ă©tĂ© rĂ©alisĂ©es sur notre site ? Combien, combien ? Que signifie « zĂ©ro » ? En effet, cela veut dire que les quatre affaires de l'annĂ©e derniĂšre ont Ă©tĂ© conclues Ă  la mĂȘme table, avec les mĂȘmes personnes, avec qui ils vont au sauna et s'assoient Ă  la table. Nous comprenons qu'il ne se passera rien de terrible mĂȘme si le site reste inactif pendant un jour.

En se basant sur ces Ă©lĂ©ments, nous avons un jour pour mettre cette histoire en place. Nous commençons Ă  rĂ©flĂ©chir au schĂ©ma de rĂ©servation. Et nous choisissons le schĂ©ma de rĂ©servation le plus idĂ©al pour cet exemple : nous ne faisons pas de rĂ©servation. Tout cela peut ĂȘtre mis en place par n'importe quel administrateur en trente minutes, pauses comprises. Installer le serveur web, dĂ©poser les fichiers — tout simplement. Cela fonctionnera. Il n'est pas nĂ©cessaire de surveiller quoi que ce soit, rien ne nĂ©cessite une attention particuliĂšre. Ainsi, la conclusion du premier exemple est assez claire : les services pour lesquels aucune rĂ©servation n'est nĂ©cessaire — cela ne nĂ©cessite pas de rĂ©servation.

Failover : notre péril est le perfectionnisme et
 la paresse

Exemple numéro deux

Blog de l'entreprise : des rĂ©dacteurs spĂ©cialement formĂ©s publient des nouvelles, par exemple, nous avons participĂ© Ă  une telle exposition, ou nous avons lancĂ© un nouveau produit, etc. Supposons qu'il s'agit d'un PHP standard avec WordPress, une petite base de donnĂ©es et un peu de statique. Naturellement, il est Ă©vident que nous ne pouvons pas rester inactifs : « pas plus de cinq minutes ! », tout cela. Mais rĂ©flĂ©chissons un peu plus. Que fait ce blog ? Il reçoit du trafic de Yandex et de Google grĂące Ă  certaines requĂȘtes, de maniĂšre organique. Super. Et les ventes sont-elles liĂ©es Ă  cela d'une quelconque maniĂšre ? RĂ©vĂ©lation : pas vraiment. Le trafic publicitaire va vers le site principal, qui est sur une autre machine. Nous commençons Ă  rĂ©flĂ©chir Ă  un schĂ©ma de sauvegarde du blog. En toute logique, il doit ĂȘtre rĂ©activĂ© en quelques heures, et il serait bon de s'y prĂ©parer. Il serait raisonnable de prendre une machine dans un autre centre de donnĂ©es, d'y installer l'environnement, c'est-Ă -dire le serveur web, PHP, WordPress, MySQL, et de le laisser inactif. Au moment oĂč nous rĂ©alisons que tout est cassĂ©, il faut faire deux choses : dĂ©ployer un dump mysql de 50 Mo, qui se chargera en une minute, et restaurer un certain nombre d'images depuis la sauvegarde. Cela ne prendra pas non plus beaucoup de temps. Ainsi, en une demi-heure, tout cela est opĂ©rationnel. Pas de rĂ©plications, ou par pitiĂ©, de basculement automatique. Conclusion : ce que nous pouvons rapidement restaurer depuis la sauvegarde n'a pas besoin d'ĂȘtre sauvegardĂ©.

Failover : notre péril est le perfectionnisme et
 la paresse

Exemple numéro trois, un peu plus complexe

Boutique en ligne. PHP avec open heart lĂ©gĂšrement modifiĂ©, MySQL avec une base solide. Pas mal de statique (aprĂšs tout, une boutique en ligne a de jolies images HD et tout le reste), Redis pour les sessions et Elasticsearch pour la recherche. Nous commençons Ă  penser au temps d'arrĂȘt. Et ici, il est Ă©videmment clair qu'il est impossible que la boutique en ligne soit inactive pendant un jour sans douleur. Plus elle est inactive, plus nous perdons d'argent. Il est temps d'accĂ©lĂ©rer. Et Ă  quel point ? Je suppose que si nous restons inactifs pendant une heure, personne ne perdra la tĂȘte. Oui, nous perdrons quelque chose, mais si nous nous acharnons, cela ne fera qu'empirer. Nous dĂ©terminons le schĂ©ma de temps d'arrĂȘt acceptable par heure.

Comment peut-on tout cela rĂ©server ? Une machine est nĂ©cessaire dans tous les cas : une heure, c'est plutĂŽt peu. Mysql : ici, une rĂ©plication est requise, une rĂ©plication active, car en une heure, 100 Go de dump ne passeront probablement pas. Statique, images : encore une fois, en une heure, 500 Go pourraient ne pas ĂȘtre transfĂ©rĂ©s Ă  temps. Il serait donc prĂ©fĂ©rable de copier immĂ©diatement les images. Redis : c'est ici que la situation devient plus intĂ©ressante. Les sessions se trouvent dans Redis — nous ne pouvons tout simplement pas le supprimer. Car ce ne serait pas idĂ©al : tous les utilisateurs se retrouveraient dĂ©connectĂ©s, leurs paniers seraient vidĂ©s, etc. Les gens seraient contraints de ressaisir leur identifiant et leur mot de passe, et beaucoup risquent d'abandonner leurs achats. Encore une fois, cela fera chute du taux de conversion. D'un autre cĂŽtĂ©, Redis, tel qu'il est, avec les derniers utilisateurs connectĂ©s, n'est probablement pas nĂ©cessaire non plus. Et un bon compromis serait de prendre Redis et de le restaurer Ă  partir d'une sauvegarde, d'hier, ou, s'il est sauvegardĂ© chaque heure, d'une heure auparavant. Heureusement, sa restauration Ă  partir d'une sauvegarde ne nĂ©cessite que la copie d'un fichier. Et l'histoire la plus fascinante concerne Elasticsearch. Qui a dĂ©jĂ  mis en place la rĂ©plication MySQL ? Qui a dĂ©jĂ  mis en place la rĂ©plication Elasticsearch ? Et chez qui cela a-t-il bien fonctionnĂ© par la suite ? Ce que je veux dire, c'est que nous voyons dans notre systĂšme une sorte d'entitĂ©. Elle semble utile — mais elle est complexe.
C'est compliquĂ© dans le sens oĂč nos collĂšgues ingĂ©nieurs n'ont pas d'expĂ©rience avec cela. Ou ils ont une expĂ©rience nĂ©gative. Ou alors nous comprenons que c'est une technologie assez nouvelle avec des subtilitĂ©s ou des dĂ©fauts. Nous pensons... Mince, elastic est aussi volumineux, il prend aussi beaucoup de temps Ă  restaurer depuis la sauvegarde, que faire ? Nous comprenons que elastic est utilisĂ© pour la recherche dans notre cas. Et comment notre boutique en ligne vend-elle ? Nous allons chez les marketeurs, leur demandons d'oĂč viennent les gens. Ils rĂ©pondent : « 90 % viennent directement sur la fiche produit depuis Yandex-Market ». Et soit ils achĂštent, soit non. Donc, la recherche n'est nĂ©cessaire que pour 10 % des utilisateurs. Et maintenir la rĂ©plication d'elastic, surtout entre diffĂ©rents centres de donnĂ©es dans diffĂ©rentes zones, comporte vraiment beaucoup de subtilitĂ©s. Quelle est la solution ? Nous mettons elastic sur une plateforme rĂ©servĂ©e et nous ne faisons rien avec. Si cela traĂźne, nous pourrions Ă©ventuellement le relancer un jour, mais rien n'est sĂ»r. En gros, la conclusion est plus ou moins la mĂȘme : les services qui n'affectent pas l'argent, nous ne les rĂ©servons pas, encore une fois. Afin de garder le schĂ©ma plus simple.

Failover : notre péril est le perfectionnisme et
 la paresse

Exemple numéro quatre, encore plus compliqué

Integrateur : vente de fleurs, appel de taxi, vente de produits, en gros, tout ce que vous voulez. Une chose sĂ©rieuse qui fonctionne 24/7 pour un grand nombre d'utilisateurs. Avec une pile intĂ©ressante et complĂšte, oĂč il y a des bases intĂ©ressantes, des solutions, une forte charge, et surtout, il est douloureux qu'elle soit en panne pendant plus de 5 minutes. Non seulement parce que les gens n’achĂšteront pas, mais parce qu’ils verront que ça ne fonctionne pas, seront déçus et pourraient ne jamais revenir.

D'accord. Cinq minutes. Que faisons-nous avec ça ? Dans ce cas, nous bĂątissons sĂ©rieusement, avec tous les moyens, une vĂ©ritable plateforme de secours, avec rĂ©plication de tout et n'importe quoi, et Ă©ventuellement, nous automatisons au maximum le basculement vers cette plateforme. Et en plus de cela, il ne faut pas oublier de faire une chose importante : en fait, rĂ©diger un rĂšglement de basculement. Le rĂšglement, mĂȘme si vous avez tout automatisĂ©, peut ĂȘtre trĂšs simple. Genre « lancer ce scĂ©nario ansible », « cocher cette case dans route 53 » et ainsi de suite - mais cela doit ĂȘtre une liste prĂ©cise d'actions.

Tout semble clair. Passer la rĂ©plication — c'est une tĂąche triviale, ou elle peut se faire toute seule. Réécrire le nom de domaine dans le DNS — c'est dans la mĂȘme veine. Le problĂšme, c'est que lorsque ce type de projet Ă©choue, la panique s'installe, et mĂȘme les meilleurs administrateurs peuvent en ĂȘtre affectĂ©s. Sans une instruction claire « ouvrez le terminal, allez ici, l'adresse de notre serveur est toujours celle-ci », il est difficile de respecter un dĂ©lai de 5 minutes pour la rĂ©animation. De plus, lorsque nous utilisons cette procĂ©dure, il est facile d'enregistrer des modifications dans l'infrastructure, par exemple, et d'ajuster la procĂ©dure en consĂ©quence.
Cependant, si le systĂšme de sauvegarde est trĂšs complexe et qu'Ă  un moment donnĂ© nous avons commis une erreur, nous pourrions Ă©galement compromettre notre site de secours et, de plus, transformer les donnĂ©es en citrouille sur les deux sites — ce serait vraiment triste.

Failover : notre péril est le perfectionnisme et
 la paresse

Exemple numéro cinq, pure hardcore.

Un service international avec des centaines de millions d'utilisateurs Ă  travers le monde. Tous les fuseaux horaires possibles, haute charge au maximum, ne pas tomber est impĂ©ratif. Une minute — et ce sera triste. Que faire ? Sauvegarder, encore une fois, de maniĂšre exhaustive. Nous avons fait tout ce qui a Ă©tĂ© dit dans le prĂ©cĂ©dent exemple, et un peu plus. C'est un monde idĂ©al, et notre infrastructure — elle correspond Ă  tous les critĂšres du DevOps IaaC. Tout est dans Git, il suffit d'appuyer sur un bouton.

Que manque-t-il ? Juste une chose — des exercices. Sans eux, c'est impossible. On pourrait penser que tout va parfaitement, que tout est sous contrĂŽle. Nous appuyons sur le bouton, tout se passe. MĂȘme si cela est vrai — et nous savons que ce n'est pas le cas — notre systĂšme interagit avec d'autres systĂšmes. Par exemple, il y a le DNS de Route 53, le stockage S3, l'intĂ©gration avec diverses API. Rien ne peut ĂȘtre prĂ©vu dans cette expĂ©rience thĂ©orique. Et tant que nous n'avons pas vraiment tirĂ© le levier — nous ne saurons pas si cela fonctionne ou non.

Failover : notre péril est le perfectionnisme et
 la paresse

C'est probablement tout. Ne soyez pas paresseux et ne poussez pas trop loin. Et que l'uptime soit avec vous !

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster