{"id":79153,"date":"2020-04-24T19:42:43","date_gmt":"2020-04-24T17:42:43","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom"},"modified":"2020-04-24T19:42:43","modified_gmt":"2020-04-24T17:42:43","slug":"istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","title":{"rendered":"L'histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/d1cad1dfa3513b5794c7be916a9dbb4b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Avec l'exp\u00e9rience dans le secteur IT, on commence \u00e0 r\u00e9aliser que les syst\u00e8mes ont leur propre caract\u00e8re. Ils peuvent \u00eatre dociles, silencieux, capricieux ou aust\u00e8res. Ils peuvent attirer ou repousser. Quoi qu'il en soit, il faut \"n\u00e9gocier\" avec eux, naviguer entre les \"pi\u00e8ges\" et \u00e9tablir des cha\u00eenes d'interaction.<\/p>\n<p><\/p>\n<p>Nous avons donc eu l'honneur de construire une plateforme cloud, et pour cela, il a fallu \"convaincre\" quelques sous-syst\u00e8mes de travailler avec nous. Heureusement, nous avons notre \"langage API\", des mains habiles et une grande dose d'enthousiasme. <\/p>\n<p><\/p>\n<p>Cet article n'abordera pas le c\u00f4t\u00e9 technique hardcore, mais d\u00e9crira les probl\u00e8mes auxquels nous avons \u00e9t\u00e9 confront\u00e9s lors de la construction du cloud. J'ai d\u00e9cid\u00e9 de narrer notre parcours sous la forme d'une l\u00e9g\u00e8re fantaisie technique sur comment nous avons cherch\u00e9 un langage commun avec les syst\u00e8mes et ce qu'il en est ressorti. <\/p>\n<p><\/p>\n<p>Bienvenue sous le capot.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><\/p>\n<h3 id=\"nachalo-puti\">Le d\u00e9but du parcours<\/h3>\n<p><\/p>\n<p>Il y a quelque temps, notre \u00e9quipe a re\u00e7u pour mission de lancer une plateforme cloud pour nos clients. Nous avions le soutien de la direction, des ressources, une infrastructure mat\u00e9rielle et la libert\u00e9 de choisir les technologies pour la mise en \u0153uvre du logiciel.<\/p>\n<p><\/p>\n<p>Il y avait aussi quelques exigences :<\/p>\n<p><\/p>\n<ul>\n<li>le service doit disposer d'un espace client convivial ;<\/li>\n<li>la plateforme doit \u00eatre int\u00e9gr\u00e9e dans le syst\u00e8me de facturation existant ;<\/li>\n<li>la partie logicielle et mat\u00e9rielle : OpenStack + Tungsten Fabric (Open Contrail), que nos ing\u00e9nieurs ont appris \u00e0 \"pr\u00e9parer\" assez bien.<\/li>\n<\/ul>\n<p><\/p>\n<p>Nous parlerons de la mani\u00e8re dont l'\u00e9quipe s'est constitu\u00e9e, de la conception de l'interface de l'espace client et des d\u00e9cisions de design lors d'une autre occasion, si la communaut\u00e9 Habr en montre l'int\u00e9r\u00eat.<br \/>\nLes outils que nous avons d\u00e9cid\u00e9 d'utiliser :<\/p>\n<p><\/p>\n<ul>\n<li>Python + Flask + Swagger + SQLAlchemy \u2014 un ensemble Python tout \u00e0 fait standard ;<\/li>\n<li>Vue.js pour le frontend ;<\/li>\n<li>nous avons d\u00e9cid\u00e9 de g\u00e9rer l'interaction entre les composants et les services avec Celery sur AMQP.<\/li>\n<\/ul>\n<p><\/p>\n<p>Pour anticiper les questions sur le choix de Python, je vais expliquer. Ce langage a trouv\u00e9 sa place dans notre soci\u00e9t\u00e9 et autour de lui s'est form\u00e9e une petite, mais r\u00e9elle culture. Il a donc \u00e9t\u00e9 d\u00e9cid\u00e9 de commencer \u00e0 construire le service avec ce langage. D'autant plus que la rapidit\u00e9 de d\u00e9veloppement est souvent cruciale dans ce genre de t\u00e2ches. <\/p>\n<p><\/p>\n<p>Alors, commen\u00e7ons notre d\u00e9couverte.<\/p>\n<p><\/p>\n<h3 id=\"molchalivyy-bill--billing\">Bill le silencieux \u2014 facturation<\/h3>\n<p><\/p>\n<p><em>Nous connaissions ce gars depuis longtemps. Il \u00e9tait toujours assis \u00e0 c\u00f4t\u00e9 et comptait quelque chose en silence. Parfois, il nous transmettait les requ\u00eates des utilisateurs, \u00e9mettait des factures clients, g\u00e9rait les services. C'\u00e9tait un gars ordinaire et travailleur. Cependant, il y avait des difficult\u00e9s. Il \u00e9tait taciturne, parfois pensif et souvent \u2014 dans ses pens\u00e9es.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/262bb5c9d6234041d264f8e041e647fe.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>La facturation est le premier syst\u00e8me avec lequel nous avons essay\u00e9 de nous lier d'amiti\u00e9. Et la premi\u00e8re difficult\u00e9 que nous avons rencontr\u00e9e \u00e9tait lors du traitement des services.<\/p>\n<p><\/p>\n<p>Par exemple, lors de la cr\u00e9ation ou de la suppression, la t\u00e2che passe dans la file d'attente interne de la facturation. Ainsi, un syst\u00e8me de travail asynchrone avec les services est r\u00e9alis\u00e9. Pour traiter nos types de services, nous devions \u00ab empiler \u00bb nos t\u00e2ches dans cette file d'attente. Et c'est l\u00e0 que nous avons rencontr\u00e9 un probl\u00e8me : le manque de documentation. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/4d96251df014e315308c94f848bc6cd0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>D'apr\u00e8s la description de l'API logicielle, il est n\u00e9anmoins possible de r\u00e9soudre cette t\u00e2che, mais nous n'avions pas le temps de nous consacrer au reverse engineering, donc nous avons extrait la logique \u00e0 l'ext\u00e9rieur et organis\u00e9 une file de t\u00e2ches au-dessus de RabbitMQ. L'op\u00e9ration sur le service est initi\u00e9e par le client dans son tableau de bord, envelopp\u00e9e dans une \u00ab t\u00e2che \u00bb Celery c\u00f4t\u00e9 backend et ex\u00e9cut\u00e9e du c\u00f4t\u00e9 de la facturation et d'OpenStack. Celery permet de g\u00e9rer les t\u00e2ches assez facilement, d'organiser des r\u00e9p\u00e9titions et de suivre l'\u00e9tat. Pour plus d'informations sur \u00ab Celery \u00bb, vous pouvez lire, par exemple, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/433476\/\">ici<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>De plus, la facturation n'a pas arr\u00eat\u00e9 le projet lorsque l'argent \u00e9tait \u00e9puis\u00e9. En discutant avec les d\u00e9veloppeurs, nous avons d\u00e9couvert que lors du comptage selon les statistiques (et nous devons mettre en \u0153uvre exactement cette logique), il y a une relation complexe des r\u00e8gles d'arr\u00eat. Mais ces mod\u00e8les ne s'adaptent pas bien \u00e0 notre r\u00e9alit\u00e9. Nous avons \u00e9galement r\u00e9alis\u00e9 cela via des t\u00e2ches sur Celery, en d\u00e9pla\u00e7ant la logique de gestion des services c\u00f4t\u00e9 backend. <\/p>\n<p><\/p>\n<p>Les deux probl\u00e8mes mentionn\u00e9s ci-dessus ont conduit \u00e0 un l\u00e9ger bouffissement du code et nous devrons nous occuper du refactoring \u00e0 l'avenir, pour extraire la logique de gestion des t\u00e2ches dans un service distinct. Nous devons \u00e9galement stocker une partie des informations sur les utilisateurs et leurs services dans nos propres tables, afin de maintenir cette logique.<\/p>\n<p><\/p>\n<p>Un autre probl\u00e8me est le silence.<\/p>\n<p><\/p>\n<p>Pour certaines requ\u00eates \u00e0 l'API, Billy r\u00e9pond en silence par \u00ab Ok \u00bb. Par exemple, cela s'est produit lorsque nous avons effectu\u00e9 des cr\u00e9dits de paiements promis pendant une p\u00e9riode de test (dont nous parlerons plus tard). Les requ\u00eates \u00e9taient ex\u00e9cut\u00e9es correctement et nous ne voyions pas d'erreurs. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/d03f2c381fd39dbf33f2a0c3eeb1294d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>J'ai d\u00fb examiner les logs en travaillant avec le syst\u00e8me via l'interface utilisateur. Il s'est av\u00e9r\u00e9 que le module de facturation ex\u00e9cute de telles requ\u00eates en modifiant le scope pour un utilisateur sp\u00e9cifique, par exemple, admin, en le transmettant dans le param\u00e8tre su.<\/p>\n<p><\/p>\n<p>Dans l'ensemble, malgr\u00e9 les lacunes de la documentation et quelques erreurs mineures dans l'API, tout s'est plut\u00f4t bien pass\u00e9. Les logs sont tout \u00e0 fait lisibles m\u00eame sous forte charge, si l'on comprend comment ils sont structur\u00e9s et ce qu'il faut rechercher. La structure de la base de donn\u00e9es est complexe, mais assez logique et m\u00eame attrayante dans certains aspects.<\/p>\n<p><\/p>\n<p>Ainsi, pour r\u00e9sumer, les principaux probl\u00e8mes que nous avons rencontr\u00e9s lors de l'interaction sont li\u00e9s aux particularit\u00e9s de la mise en \u0153uvre du syst\u00e8me sp\u00e9cifique : <\/p>\n<p><\/p>\n<ul>\n<li>des \u00ab fonctionnalit\u00e9s \u00bb non document\u00e9es qui nous ont affect\u00e9s d'une mani\u00e8re ou d'une autre ;<\/li>\n<li>des sources ferm\u00e9es (le module de facturation est \u00e9crit en C++), ce qui signifie qu'il \u00e9tait impossible de r\u00e9soudre le probl\u00e8me 1 autrement qu'en utilisant la m\u00e9thode de l'essai et de l'erreur.<\/li>\n<\/ul>\n<p><\/p>\n<p>Heureusement, le produit dispose d'une API suffisamment d\u00e9velopp\u00e9e, et nous avons int\u00e9gr\u00e9 les sous-syst\u00e8mes suivants dans notre espace client :<\/p>\n<p><\/p>\n<ul>\n<li>un module de support technique \u2014 les requ\u00eates de l'espace client sont \u00ab proxifi\u00e9es \u00bb dans le syst\u00e8me de facturation, de mani\u00e8re transparente pour les clients du service ;<\/li>\n<li>un module financier \u2014 permet d'\u00e9mettre des factures aux clients actuels, de r\u00e9aliser des pr\u00e9l\u00e8vements et de g\u00e9n\u00e9rer des documents de paiement ;<\/li>\n<li>un module de gestion des services \u2014 pour lequel nous avons d\u00fb cr\u00e9er notre propre gestionnaire. L'extensibilit\u00e9 du syst\u00e8me a jou\u00e9 en notre faveur et nous avons \u00ab appris \u00bb Billie \u00e0 g\u00e9rer un nouveau type de service.<br \/>\nCela a demand\u00e9 du travail, mais n\u00e9anmoins, je pense que nous nous entendrons avec Billie.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"progulki-po-volframovym-polyam--tungsten-fabric\">Promenades \u00e0 travers des champs de tungst\u00e8ne \u2014 Tungsten Fabric<\/h3>\n<p><\/p>\n<p><em>Des champs de tungst\u00e8ne parsem\u00e9s de centaines de fils, transportant des milliers de bits d'information. Les donn\u00e9es sont regroup\u00e9es en \u00ab paquets \u00bb, analys\u00e9es, construisant des parcours complexes, comme par magie.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/9b6dd46d9f15e0e3393a8c1222abbf2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C'est le domaine d'un second syst\u00e8me avec lequel nous avons d\u00fb nous familiariser \u2014 Tungsten Fabric (TF), anciennement OpenContrail. Sa t\u00e2che est de g\u00e9rer le mat\u00e9riel r\u00e9seau, en fournissant une abstraction logicielle \u00e0 nous, en tant qu'utilisateurs. TF \u2014 SDN, encapsule une logique complexe de travail avec le mat\u00e9riel r\u00e9seau. Il existe un bon article sur la technologie elle-m\u00eame, par exemple, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/muk\/blog\/251959\/\">ici<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Le syst\u00e8me est int\u00e9gr\u00e9 \u00e0 OpenStack (que nous allons aborder ci-dessous) via le plugin Neutron. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/5abe3992efaab3e016a0c51dc0070a94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Interaction des services OpenStack.<\/em><\/p>\n<p><\/p>\n<p>Nous avons \u00e9t\u00e9 introduits \u00e0 ce syst\u00e8me par les gars du d\u00e9partement d'exploitation. Nous utilisons l'API du syst\u00e8me pour g\u00e9rer la pile r\u00e9seau de nos services. Pour l'instant, il ne nous a pos\u00e9 aucun probl\u00e8me majeur ou d'incommodit\u00e9 (je ne me permettrais pas de parler au nom des gars de l'OE), bien qu'il y ait eu quelques incidents cocasses d'interaction.<\/p>\n<p><\/p>\n<p>Le premier probl\u00e8me \u00e9tait le suivant : les commandes n\u00e9cessitant l'affichage d'un grand volume de donn\u00e9es sur la console de l'instance lors de la connexion via SSH \u00ab suspendaient \u00bb la connexion, alors que par VNC tout fonctionnait correctement.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/02bc97d63a1299e1dda08fce0f10fb97.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pour ceux qui ne sont pas familiers avec le probl\u00e8me, cela semble plut\u00f4t amusant : ls \/root fonctionne correctement, alors que, par exemple, top \u00ab se fige \u00bb compl\u00e8tement. Heureusement, nous avons d\u00e9j\u00e0 rencontr\u00e9 des probl\u00e8mes similaires. Nous avons r\u00e9ussi \u00e0 les r\u00e9soudre en ajustant le MTU sur le chemin entre les n\u0153uds de calcul et les routeurs. \u00c0 propos, ce n'est m\u00eame pas un probl\u00e8me de TF.<\/p>\n<p><\/p>\n<p>Le probl\u00e8me suivant nous attendait au tournant. \u00c0 un moment \u00ab merveilleux \u00bb, la magie du routage a disparu, tout simplement. TF a cess\u00e9 de g\u00e9rer le routage sur le mat\u00e9riel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/db2a75ffdf2940b2ca90f73835f7a321.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons travaill\u00e9 avec OpenStack depuis le niveau administrateur et, ensuite, nous passions au niveau de l'utilisateur requis. Le SDN semble \u00ab intercepter \u00bb le champ d'application de l'utilisateur sous lequel les actions sont effectu\u00e9es. Le probl\u00e8me est que ce m\u00eame compte administrateur est utilis\u00e9 pour la communication entre TF et OpenStack. Lors de l'\u00e9tape de changement vers l'utilisateur, la \u00ab magie \u00bb disparaissait. Nous avons d\u00e9cid\u00e9 de cr\u00e9er un compte distinct pour travailler avec le syst\u00e8me. Cela a permis de travailler sans casser les fonctionnalit\u00e9s d'int\u00e9gration.<\/p>\n<p><\/p>\n<h3 id=\"silikonovye-formy-zhizni--openstack\">Les formes de vie silicium \u2014 OpenStack<\/h3>\n<p><\/p>\n<p><em>L'\u00eatre en silicone de forme \u00e9trange vit pr\u00e8s des champs de tungst\u00e8ne. Il ressemble le plus \u00e0 un enfant pr\u00e9pub\u00e8re, capable d'\u00e9craser d'un simple geste, mais il n'exprime pas d'agressivit\u00e9 manifeste. Il ne g\u00e9n\u00e8re pas de peur, mais sa taille inspire des inqui\u00e9tudes. Tout comme la complexit\u00e9 de ce qui se passe autour.<\/em><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/8622d43e0cb963bc9ef2a2ce59a32499.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OpenStack est le noyau de notre plateforme.<\/p>\n<p><\/p>\n<p>OpenStack a plusieurs sous-syst\u00e8mes, parmi lesquels nous utilisons principalement Nova, Glance et Cinder. Chacun a sa propre API. Nova g\u00e8re les ressources de calcul et la cr\u00e9ation d'instances, Cinder s'occupe de la gestion des volumes et de leurs instantan\u00e9s, Glance est le service d'image qui g\u00e8re les mod\u00e8les de syst\u00e8mes d'exploitation et les m\u00e9tadonn\u00e9es associ\u00e9es.<\/p>\n<p><\/p>\n<p>Chaque service s'ex\u00e9cute dans un conteneur, et le courtier de messages est le \u00ab lapin blanc \u00bb \u2014 RabbitMQ.<\/p>\n<p><\/p>\n<p>Ce syst\u00e8me nous a caus\u00e9 le plus de tracas inattendus.<\/p>\n<p><\/p>\n<p>Le premier probl\u00e8me s'est rapidement manifest\u00e9 lorsque nous avons essay\u00e9 de connecter un volume suppl\u00e9mentaire au serveur. L'API Cinder a cat\u00e9goriquement refus\u00e9 d'ex\u00e9cuter cette t\u00e2che. En v\u00e9rit\u00e9, selon OpenStack lui-m\u00eame, la connexion s'\u00e9tablit, mais \u00e0 l'int\u00e9rieur du serveur virtuel, le p\u00e9riph\u00e9rique de disque est absent.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/b4755d893f3f8ad7d7aeab3af69f35cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons d\u00e9cid\u00e9 de \"contourner\" le probl\u00e8me et avons demand\u00e9 la m\u00eame action \u00e0 l'API Nova. R\u00e9sultat \u2014 le p\u00e9riph\u00e9rique se connecte correctement et est accessible \u00e0 l'int\u00e9rieur du serveur. Il semble que le probl\u00e8me survienne lorsque le stockage de blocs ne r\u00e9pond pas \u00e0 Cinder.<\/p>\n<p><\/p>\n<p>Une autre difficult\u00e9 nous attendait lors de la manipulation des disques. Nous n'avons pas pu d\u00e9tacher le volume syst\u00e8me du serveur.<\/p>\n<p><\/p>\n<p>Encore une fois, OpenStack \"jure\" qu'il a d\u00e9truit la connexion et qu'il est maintenant possible de travailler correctement avec le volume s\u00e9par\u00e9ment. Mais l'API \u00e9tait cat\u00e9goriquement r\u00e9ticente \u00e0 effectuer des op\u00e9rations sur le disque. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/952fd7cd11181605c52a7df71cd4f69f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons d\u00e9cid\u00e9 ici de ne pas trop nous battre, mais de changer notre perspective sur la logique de fonctionnement du service. Puisqu'il y a une instance, il doit y avoir un volume syst\u00e8me. Ainsi, l'utilisateur ne peut pas supprimer ou d\u00e9connecter le \"disque\" syst\u00e8me sans d'abord supprimer le \"serveur\".<\/p>\n<p><\/p>\n<p>OpenStack est un syst\u00e8me complexe avec sa propre logique d'interaction et un API compliqu\u00e9. La documentation assez d\u00e9taill\u00e9e et, bien s\u00fbr, la m\u00e9thode des essais et des erreurs (comment faire sans ?) nous ont bien aid\u00e9s.<\/p>\n<p><\/p>\n<h3 id=\"testovyy-zapusk\">Lancement de test<\/h3>\n<p><\/p>\n<p>Nous avons r\u00e9alis\u00e9 le lancement de test en d\u00e9cembre dernier. L'objectif principal \u00e9tait de v\u00e9rifier en conditions r\u00e9elles notre projet du point de vue technique et de l'exp\u00e9rience utilisateur. Le public a \u00e9t\u00e9 invit\u00e9 de mani\u00e8re s\u00e9lective et le test \u00e9tait ferm\u00e9. Cependant, nous avons \u00e9galement laiss\u00e9 la possibilit\u00e9 de demander un acc\u00e8s aux tests sur notre site.<\/p>\n<p><\/p>\n<p>Le test, bien s\u00fbr, ne s'est pas d\u00e9roul\u00e9 sans moments cocasses, car nos aventures ne font que commencer. <\/p>\n<p><\/p>\n<p>Tout d'abord, nous avons mal \u00e9valu\u00e9 l'int\u00e9r\u00eat pour le projet et avons d\u00fb ajouter des n\u0153uds de calcul rapidement pendant le test. Un cas normal pour un cluster, mais il y avait aussi des nuances. Dans la documentation pour une version sp\u00e9cifique de TF, une version pr\u00e9cise du noyau sur lequel la fonction avec vRouter a \u00e9t\u00e9 test\u00e9e est indiqu\u00e9e. Nous avons d\u00e9cid\u00e9 de lancer les n\u0153uds avec des noyaux plus r\u00e9cents. En cons\u00e9quence, TF n'a pas re\u00e7u de routes des n\u0153uds. Il a fallu revenir d'urgence aux noyaux pr\u00e9c\u00e9dents.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/377208246d5e396317fb934a35ed1227.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un autre incident est li\u00e9 \u00e0 la fonctionnalit\u00e9 du bouton \"changer le mot de passe\" dans l'espace personnel. <\/p>\n<p><\/p>\n<p>Nous avons d\u00e9cid\u00e9 d'utiliser JWT pour g\u00e9rer l'acc\u00e8s au tableau de bord, afin d'\u00e9viter de travailler avec des sessions. \u00c9tant donn\u00e9 que les syst\u00e8mes sont vari\u00e9s et largement dispers\u00e9s, nous g\u00e9rons notre propre jeton, dans lequel nous \u00ab encapsulons \u00bb les sessions de facturation et le jeton d'OpenStack. Lorsqu'un mot de passe est modifi\u00e9, le jeton devient \u00e9videmment invalide, car les donn\u00e9es de l'utilisateur ne sont plus valides et doivent \u00eatre r\u00e9\u00e9mises. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/daa27256d0b888b2c59d4bc6129f600d.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons n\u00e9glig\u00e9 ce point, et nous n'avions tout simplement pas les ressources pour \u00e9crire cette partie rapidement. Nous avons d\u00fb retirer des fonctionnalit\u00e9s juste avant le lancement des tests.<br \/>\n\u00c0 l'heure actuelle, nous d\u00e9connectons l'utilisateur si le mot de passe a \u00e9t\u00e9 chang\u00e9.<\/p>\n<p><\/p>\n<p>Malgr\u00e9 ces nuances, le test s'est bien pass\u00e9. En quelques semaines, environ 300 personnes ont visit\u00e9 notre service. Nous avons pu voir le produit du point de vue des utilisateurs, le tester en conditions r\u00e9elles et recueillir des retours qualitatifs. <\/p>\n<p><\/p>\n<h3 id=\"prodolzhenie-sleduet\">La suite \u00e0 suivre<\/h3>\n<p><\/p>\n<p>Pour beaucoup d'entre nous, il s'agit du premier projet de cette envergure. Nous avons tir\u00e9 plusieurs le\u00e7ons pr\u00e9cieuses sur le travail en \u00e9quipe, la prise de d\u00e9cisions architecturales et de conception. Comment int\u00e9grer des syst\u00e8mes complexes avec des ressources limit\u00e9es et les d\u00e9ployer en production. <\/p>\n<p><\/p>\n<p>Bien s\u00fbr, il y a encore beaucoup \u00e0 am\u00e9liorer tant sur le plan du code que sur les points d'int\u00e9gration des syst\u00e8mes. Le projet est encore jeune, mais nous avons la ferme intention d'en faire un service fiable et convivial.<\/p>\n<p><\/p>\n<p>Nous avons d\u00e9j\u00e0 r\u00e9ussi \u00e0 convaincre les syst\u00e8mes. Bill s'occupe docilement des calculs, de la facturation et des requ\u00eates des utilisateurs dans son petit bureau. La \"magie\" des champs de tungst\u00e8ne nous assure une connexion stable. Et seuls OpenStack fait parfois des siennes, criant quelque chose comme \u00ab WSREP n'a pas encore pr\u00e9par\u00e9 le n\u0153ud pour utilisation dans l'application \u00bb. Mais c'est une tout autre histoire...<\/p>\n<p><\/p>\n<p>Nous avons r\u00e9cemment lanc\u00e9 le service.<br \/>\nTous les d\u00e9tails sont disponibles sur notre <noindex><a rel=\"nofollow\" href=\"https:\/\/clo.ru?utm_source=habr&amp;utm_medium=article&amp;utm_campaign=product&amp;utm_term=first_clo\">site<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"L&#039;histoire derri\u00e8re la cr\u00e9ation du service cloud, assaisonn\u00e9e de cyberpunk\" src=\"\/wp-content\/uploads\/2020\/04\/32550980b529a5d7b395b3962218e53e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>\u00c9quipe de d\u00e9veloppement CLO<\/em><\/p>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">Liens utiles<\/b><\/p>\n<p><strong>OpenStack<\/strong><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/nova\/latest\/\">https:\/\/docs.openstack.org\/nova\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/keystone\/latest\/\">https:\/\/docs.openstack.org\/keystone\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/cinder\/latest\/\">https:\/\/docs.openstack.org\/cinder\/latest\/<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openstack.org\/glance\/latest\/\">https:\/\/docs.openstack.org\/glance\/latest\/<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Tungsten Fabric<\/strong><\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.tungsten.io\/en\/latest\/user\/getting-started\/index.html\">http:\/\/docs.tungsten.io\/en\/latest\/user\/getting-started\/index.html<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.juniper.net\/documentation\/en_US\/contrail-cloud10.0\/topics\/concept\/contrail-cloud-openstack-integration-overview.html\">https:\/\/www.juniper.net\/documentation\/en_US\/contrail-cloud10.0\/topics\/concept\/contrail-cloud-openstack-integration-overview.html<\/a><\/noindex><\/li>\n<\/ul>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/first\/blog\/493606\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 IT \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043c\u0435\u044e\u0442 \u0441\u0432\u043e\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043a\u043b\u0430\u0434\u0438\u0441\u0442\u044b\u043c\u0438, \u043c\u043e\u043b\u0447\u0430\u043b\u0438\u0432\u044b\u043c\u0438, \u0432\u0437\u0431\u0430\u043b\u043c\u043e\u0448\u043d\u044b\u043c\u0438, \u0441\u0443\u0440\u043e\u0432\u044b\u043c\u0438. \u041c\u043e\u0433\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u043a \u0441\u0435\u0431\u0435 \u0438\u043b\u0438 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u00ab\u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f\u00bb \u0441 \u043d\u0438\u043c\u0438, \u043b\u0430\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u00ab\u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u0430\u043c\u043d\u044f\u043c\u0438\u00bb \u0438 \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0438\u0445 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412\u043e\u0442 \u0438 \u043d\u0430\u043c \u0432\u044b\u043f\u0430\u043b\u0430 \u0447\u0435\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0431\u043b\u0430\u0447\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443, \u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u00ab\u0443\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u00bb [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":79154,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-79153","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u0440\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0438\u0431\u0435\u0440\u043f\u0430\u043d\u043a\u043e\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-24T17:42:43+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-24T17:42:43+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47L'histoire de la cr\u00e9ation d'un service cloud, agr\u00e9ment\u00e9e de cyberpunk | ProHoster","description":"Avec l'exp\u00e9rience.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u0440\u0438\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043a\u0438\u0431\u0435\u0440\u043f\u0430\u043d\u043a\u043e\u043c | ProHoster","og:description":"\u0421 \u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0442\u0430\u0436\u0430.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/istoriya-sozdaniya-oblachnogo-servisa-pripravlennaya-kiberpankom","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-24T17:42:43+00:00","article:modified_time":"2020-04-24T17:42:43+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"79153","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:43:24","updated":"2022-10-02 03:25:48","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/79153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=79153"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/79153\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/79154"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=79153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=79153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=79153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}