{"id":75,"date":"2020-06-09T11:00:00","date_gmt":"2020-06-09T14:00:00","guid":{"rendered":"https:\/\/dcoder.io\/blog\/migration-cloud-sans-interruption\/"},"modified":"2020-06-09T11:00:00","modified_gmt":"2020-06-09T14:00:00","slug":"migration-cloud-sans-interruption","status":"publish","type":"post","link":"https:\/\/dcoder.io\/blog\/fr\/migration-cloud-sans-interruption\/","title":{"rendered":"Migrer vers le cloud sans interrompre l&#8217;activit\u00e9"},"content":{"rendered":"<p><strong>Migrez par \u00e9tapes, en gardant l&#8217;ancien syst\u00e8me actif jusqu&#8217;\u00e0 ce que le nouveau ait fait ses preuves.<\/strong> L&#8217;ordre qui fonctionne est toujours le m\u00eame : inventaire, conteneurisation, environnement parall\u00e8le, migration des donn\u00e9es en dernier, et un plan de retour arri\u00e8re \u00e9crit avant de commencer.<\/p>\n<p>La migration d&#8217;infrastructure fait partie de ces projets o\u00f9 la r\u00e9ussite est invisible, personne ne remarque rien, et o\u00f9 l&#8217;\u00e9chec se transforme en r\u00e9union de direction. La diff\u00e9rence entre les deux tient rarement au choix du fournisseur.<\/p>\n<h2>D&#8217;abord, l&#8217;inventaire honn\u00eate<\/h2>\n<p>Toute migration qui tourne mal commence par quelqu&#8217;un qui croit savoir ce qui tourne sur le serveur. Prenez le temps de recenser :<\/p>\n<ul>\n<li>Chaque processus actif, y compris ce <code>cron<\/code> que quelqu&#8217;un a configur\u00e9 en 2016 et que personne ne comprend, mais qui produit le rapport utilis\u00e9 par la comptabilit\u00e9 tous les 5 du mois.<\/li>\n<li>Chaque r\u00e9pertoire \u00e9crit sur disque. Les fichiers t\u00e9l\u00e9vers\u00e9s causent plus de probl\u00e8mes de migration que tout le reste, parce qu&#8217;ils disparaissent du sch\u00e9ma et r\u00e9apparaissent en production.<\/li>\n<li>Chaque adresse fig\u00e9e : une IP dans la r\u00e8gle de pare-feu d&#8217;un tiers, un certificat, une int\u00e9gration qui fait confiance \u00e0 votre IP sortante.<\/li>\n<li>Les versions r\u00e9elles du langage, de la base et des biblioth\u00e8ques. \u00ab Sans doute la 12 \u00bb ne compte pas. V\u00e9rifiez.<\/li>\n<\/ul>\n<p>Ce relev\u00e9 prend deux \u00e0 cinq jours et \u00e9vite les trois surprises les plus co\u00fbteuses de la phase finale.<\/p>\n<h2>Conteneurisez avant d&#8217;orchestrer<\/h2>\n<p>La tentation est d&#8217;aller directement \u00e0 Kubernetes. N&#8217;y allez pas. La premi\u00e8re \u00e9tape est de faire tourner l&#8217;application dans un conteneur, n&#8217;importe o\u00f9.<\/p>\n<p>Cet exercice met au jour tout le couplage avec le serveur actuel : chemins absolus, d\u00e9pendances install\u00e9es \u00e0 la main, variable d&#8217;environnement qui n&#8217;existe que sur cette machine, fuseau horaire du syst\u00e8me. C&#8217;est un travail ingrat et c&#8217;est l\u00e0 que se trouve la moiti\u00e9 de la valeur de la migration, car vous obtenez au final un syst\u00e8me que n&#8217;importe qui peut d\u00e9marrer n&#8217;importe o\u00f9.<\/p>\n<p>Si ensuite deux conteneurs derri\u00e8re un r\u00e9partiteur suffisent \u00e0 votre volume, tant mieux : vous n&#8217;avez pas besoin d&#8217;orchestrateur. Kubernetes est excellent et comporte un co\u00fbt d&#8217;exploitation bien r\u00e9el. Adoptez-le quand le probl\u00e8me le justifie.<\/p>\n<h2>Un environnement parall\u00e8le, pas un remplacement<\/h2>\n<p>Montez le nouvel environnement en entier pendant que l&#8217;ancien continue de servir. Pointez une copie de la base dessus. Laissez tourner une \u00e0 deux semaines avec du trafic dupliqu\u00e9 ou l&#8217;usage interne de l&#8217;\u00e9quipe.<\/p>\n<p>C&#8217;est l\u00e0 qu&#8217;apparaissent les \u00e9carts subtils. Un d\u00e9lai d&#8217;expiration diff\u00e9rent. Une biblioth\u00e8que d&#8217;images qui produit un r\u00e9sultat l\u00e9g\u00e8rement diff\u00e9rent. Une requ\u00eate rapide sur l&#8217;ancien disque et lente sur le nouveau stockage. D\u00e9couvrir cela avec l&#8217;ancien syst\u00e8me encore actif est g\u00eanant. Le d\u00e9couvrir la nuit de la bascule, c&#8217;est autre chose.<\/p>\n<h2>Les donn\u00e9es en dernier, et r\u00e9p\u00e9t\u00e9es<\/h2>\n<p>La base de donn\u00e9es est toujours la derni\u00e8re pi\u00e8ce et la seule sans annulation confortable. La proc\u00e9dure qui fonctionne :<\/p>\n<ol>\n<li>Faites le chargement complet \u00e0 l&#8217;avance et maintenez une r\u00e9plication continue de l&#8217;ancien vers le nouveau.<\/li>\n<li><strong>R\u00e9p\u00e9tez la bascule enti\u00e8re<\/strong> en environnement de test, chronom\u00e8tre en main. Vous devez savoir si la fen\u00eatre est de huit minutes ou de deux heures avant de promettre quoi que ce soit \u00e0 qui que ce soit.<\/li>\n<li>Le jour J : passez le syst\u00e8me en lecture seule, attendez que la r\u00e9plication se vide, basculez le DNS et validez avec un sc\u00e9nario de test \u00e9crit \u00e0 l&#8217;avance.<\/li>\n<li>Gardez l&#8217;ancien environnement intact et \u00e9teint pendant deux semaines au minimum.<\/li>\n<\/ol>\n<h2>Le plan de retour arri\u00e8re doit \u00eatre \u00e9crit<\/h2>\n<p>Ce n&#8217;est pas du pessimisme, c&#8217;est une proc\u00e9dure. Avant la bascule, le document r\u00e9pond \u00e0 : quel est le crit\u00e8re objectif d&#8217;abandon, qui prend cette d\u00e9cision, quelles commandes ex\u00e9cuter, combien de temps cela prend, et ce qu&#8217;il advient des donn\u00e9es \u00e9crites dans le nouvel environnement pendant qu&#8217;il \u00e9tait actif.<\/p>\n<p>Si personne ne sait r\u00e9pondre \u00e0 cette derni\u00e8re question, la fen\u00eatre de bascule doit \u00eatre assez courte pour que la r\u00e9ponse soit \u00ab aucune donn\u00e9e significative \u00bb. C&#8217;est pour cela que l&#8217;on migre de nuit, pas par tradition.<\/p>\n<h2>Ce qui rentabilise r\u00e9ellement l&#8217;op\u00e9ration<\/h2>\n<p>Le gain vient rarement de la facture serveur. Beaucoup d&#8217;entreprises migrent et d\u00e9pensent davantage. Le vrai retour appara\u00eet ailleurs.<\/p>\n<p>Un environnement reproductible, d&#8217;abord : monter une copie identique pour tester cesse d&#8217;\u00eatre un projet et devient une commande. Livrer sans crainte, car avec l&#8217;int\u00e9gration continue publier un correctif devient une routine plut\u00f4t qu&#8217;un \u00e9v\u00e9nement. Une restauration test\u00e9e, puisqu&#8217;une sauvegarde que personne n&#8217;a restaur\u00e9e n&#8217;est pas une sauvegarde, et que dans le cloud restaurer pour v\u00e9rifier co\u00fbte quelques euros. Et l&#8217;\u00e9lasticit\u00e9, si votre charge est irr\u00e9guli\u00e8re. Si elle est constante, un serveur d\u00e9di\u00e9 peut revenir moins cher, et il n&#8217;y a aucune honte \u00e0 le reconna\u00eetre.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les \u00e9tapes d&#8217;une migration cloud qui ne tourne pas \u00e0 la nuit blanche : inventaire honn\u00eate, conteneurs avant orchestration, donn\u00e9es en dernier et plan de retour arri\u00e8re \u00e9crit \u00e0 l&#8217;avance.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-75","post","type-post","status-publish","format-standard","hentry","category-sem-categoria"],"_links":{"self":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts\/75","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/comments?post=75"}],"version-history":[{"count":0,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/posts\/75\/revisions"}],"wp:attachment":[{"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/media?parent=75"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/categories?post=75"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dcoder.io\/blog\/wp-json\/wp\/v2\/tags?post=75"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}