{"id":3911,"date":"2016-10-03T07:00:15","date_gmt":"2016-10-03T06:00:15","guid":{"rendered":"https:\/\/blog.fabianpiau.com\/?p=3911"},"modified":"2022-03-27T20:40:35","modified_gmt":"2022-03-27T19:40:35","slug":"microservices-architecture-best-practices","status":"publish","type":"post","link":"https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/","title":{"rendered":"Architecture Microservices &#8211; Les bonnes pratiques"},"content":{"rendered":"<p><a class=\"lang\" href=\"https:\/\/blog.fabianpiau.com\/en\/2016\/10\/03\/microservices-architecture-best-practices\/\" title=\"Read in english\"><strong class=\"labellang\"><span class=\"en\">&nbsp;<\/span>English version available<\/strong><\/a><\/p>\n<p>Je travaille sur une architecture microservices depuis assez longtemps maintenant et j&rsquo;ai assist\u00e9 \u00e0 pas mal de conf\u00e9rences sur le sujet. Dans cet article, je veux rassembler mon exp\u00e9rience pour vous donner quelques conseils bas\u00e9s sur mon retour d&rsquo;exp\u00e9rience. Chaque titre repr\u00e9sente ce que vous ne devez pas faire suivi d&rsquo;une description de ce que vous devriez faire \u00e0 la place. M\u00eame si vous faites d\u00e9j\u00e0 des microservices sur votre projet, cela peut tout de m\u00eame \u00eatre une bonne lecture (je l&rsquo;esp\u00e8re) et un rafra\u00eechissement de vos connaissances. Aussi, n&rsquo;h\u00e9sitez pas \u00e0 commenter l&rsquo;article et partager vos propres retours!<\/p>\n<div class=\"info\"><strong class=\"label\">Disclaimer<\/strong><br \/>\nVous pouvez appeler une architecture microservices SOA (ou appelez la comme bon vous semble), mais je pr\u00e9f\u00e8re utiliser le mot \u00e0 la mode pour le r\u00e9f\u00e9rencement de mon blog. ;)\n<\/div>\n<p>L&rsquo;adoption d&rsquo;une architecture microservices n&rsquo;est pas si ais\u00e9e. Ecrire des microservices, ce n&rsquo;est pas seulement coder, c&rsquo;est \u00e9galement un bouleversement des \u00e9quipes et de la structure de l&rsquo;organisation.<\/p>\n<p class=\"center\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" title=\"Lego Microservices\" src=\"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/post\/00086\/lego.png?resize=550%2C196&#038;ssl=1\" alt=\"Lego Microservices\" width=\"550\" height=\"196\" \/><\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Extrait moi donc tout ce code complexe, il sera plus simple dans un microservice!<\/h4>\n<p>L&rsquo;adoption est toujours un peu plus facile lorsqu&rsquo;elle commence sur un nouveau projet, quand on d\u00e9marre de z\u00e9ro. Si tel est votre cas, alors vous \u00eates chanceux! Si vous voulez casser une application monolithique en un ensemble de microservices, \u00e9vitez de le faire en une seule fois, la mani\u00e8re big bang est le meilleur moyen de faire tout sauter. Essayez de regrouper l&rsquo;ensemble des fonctionnalit\u00e9s similaires qui peuvent \u00eatre inclus au sein d&rsquo;un microservice. Assurez-vous que toutes ces fonctionnalit\u00e9s soient bien test\u00e9es avant d&rsquo;engager votre refactoring. Si la couverture de code par les tests est faible, vous devez commencer par l&rsquo;\u00e9criture de tests. Cela vous permettra non seulement d&rsquo;am\u00e9liorer le code du monolithe, mais vous r\u00e9utiliserez ainsi ce code dans votre futur microservice. Gardez \u00e0 l&rsquo;esprit que vous pr\u00e9parez l&rsquo;extraction, ce travail ne sera donc pas inutile.<\/p>\n<p>Si vous ne disposez pas suffisamment de tests, vous allez faire les choses \u00e0 l&rsquo;aveuglette et vous ne serez plus en mesure de vous assurer que vous n&rsquo;avez rien cass\u00e9, la r\u00e9gression est la derni\u00e8re chose que vous voulez. Pour r\u00e9sumer, \u00e9crivez des tests d&rsquo;int\u00e9gration autour du code que vous voulez extraire, ensuite vous pouvez commencer \u00e0 extraire la fonctionnalit\u00e9 pour cr\u00e9er un microservice. Vos tests d&rsquo;int\u00e9gration devront toujours \u00eatre au vert, mais la plomberie derri\u00e8re aura chang\u00e9.<\/p>\n<p>Commencez petit et facile au d\u00e9but. Et n&rsquo;ayez pas peur de dupliquer du code. Une fois que votre microservice est branch\u00e9 et fonctionne bien, vous pouvez supprimer le code dupliqu\u00e9 du monolithe. Faire de l&rsquo;<a href=\"https:\/\/fr.wikipedia.org\/wiki\/A\/B_testing\" target=\"_blank\" title=\"D\u00e9finition A\/B testing\" rel=\"noopener noreferrer\">A\/B testing<\/a> peut aussi aider, vous pouvez rerouter progressivement le trafic vers le nouveau microservice et voir comment le syst\u00e8me r\u00e9agit.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Le pi\u00e8ge du &lsquo;micro-monolith-service&rsquo;<\/h4>\n<p>Gardez le microservice assez petit et pas trop complexe. Il n&rsquo;y a pas de r\u00e9ponse magique \u00e0 la question combien de lignes de code pour un service pour \u00eatre consid\u00e9r\u00e9 comme un microservice? Cela se base plus sur le ressentiment et des bases techniques saines avec un design bien construit. Si un nouveau membre de l&rsquo;\u00e9quipe a besoin d&rsquo;une journ\u00e9e pour comprendre le code et ce que votre microservice fait, alors vous avez probablement un souci. Quelques heures tout au plus devraient largement suffire.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Vous devez parser un fichier XML, laissez-moi \u00e9crire un microservice pour \u00e7a!<\/h4>\n<p>C&rsquo;est l&rsquo;autre extr\u00eame, il faut \u00e9viter de cr\u00e9er un microservice quand une simple librairie est suffisante. Vous ne voulez pas avoir une profondeur d&rsquo;appel trop grande (nombre de requ\u00eates imbriqu\u00e9es). Si vous avez plus de 3 requ\u00eates imbriqu\u00e9es, vous faites probablement des nanoservices. Un appel implique une latence r\u00e9seau et une \u00e9ventuelle d\u00e9faillance. Si un microservice doit \u00eatre d\u00e9ploy\u00e9 avec une API, une librairie sera directement int\u00e9gr\u00e9e sans surco\u00fbt op\u00e9rationnel. Il y a donc un \u00e9quilibre entre co\u00fbt <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Devops\" title=\"D\u00e9finition DevOps\" target=\"_blank\" rel=\"noopener noreferrer\">DevOps<\/a> et complexit\u00e9 monolithique.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>D\u00e9sol\u00e9, je ne peux pas vous aider, je n&rsquo;ai pas travaill\u00e9 sur ce microservice&#8230;<\/h4>\n<p>Il est impossible que toutes les \u00e9quipes soient responsables de tous les microservices. La synchronisation et la communication entre vos \u00e9quipes devient primordiale. J&rsquo;ai tr\u00e8s souvent entendu le fait qu&rsquo;une \u00e9quipe ne devrait pas \u00eatre responsable d&rsquo;un microservice, et que tout le monde devrait \u00eatre en mesure de changer et de travailler sur n&rsquo;importe quel microservice. Eh bien, en r\u00e9alit\u00e9 ce n&rsquo;est pas vraiment le cas! N\u00e9anmoins, vous pouvez adopter quelques bonnes pratiques pour rendre ce concept plus facile.<\/p>\n<p>A mon avis, une \u00e9quipe responsable d&rsquo;un microservice signifie qu&rsquo;elle est responsable de la construction et de la bonne ex\u00e9cution. Quand quelque chose coince en production, l&rsquo;\u00e9quipe devrait \u00eatre le principal point de contact. Vous aurez juste \u00e0 trouver une personne au sein de l&rsquo;\u00e9quipe qui acceptera un appel \u00e0 5h du matin&#8230; Je plaisante ;)<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Spring, Dropwizard, Finagle, Clojure, faisons un mix de tout \u00e7a!<\/h4>\n<p>Essayez de vous limiter \u00e0 une stack technologique commune pour tous vos microservices. Je sais qu&rsquo;un grand avantage des microservices est que vous pouvez les construire avec n&rsquo;importe quel langage ou technologies. Mais les d\u00e9veloppeurs passionn\u00e9s auront tendance \u00e0 utiliser le dernier framework \u00e0 la mode. Dans le long terme et avec l&rsquo;in\u00e9vitable turn-over, la maintenance de vos microservices va devenir douloureuse et finir en cauchemar. Le passage de microservices entre les \u00e9quipes va devenir tr\u00e8s difficile, voire impossible. C&rsquo;est pour cela, je pense qu&rsquo;il est important de se limiter \u00e0 un certain nombre de technologies.<\/p>\n<p>De nombreuses technologies sont disponibles pour faire des microservices, vous devez utiliser quelque chose de fiable, maintenu, et ainsi de suite. Quelle s\u00e9rialisation, texte ou binaire? REST, Thrift, SOAP? Solution open-source ou du fait-maison? Il n&rsquo;y a pas de bonne r\u00e9ponse. Comparez les diff\u00e9rentes technologies, les avantages et les inconv\u00e9nients, et utilisez la solution la plus appropri\u00e9e pour votre besoin.<\/p>\n<p>Dans le m\u00eame temps, cette limitation ne devrait pas vous emp\u00eacher d&rsquo;innover. Ne vous limitez pas \u00e0 ce que vous utilisez et ma\u00eetrisez d\u00e9j\u00e0 si vous pensez qu&rsquo;il y a une meilleure solution sur le march\u00e9. Essayez-la sur un nouveau microservice (de pr\u00e9f\u00e9rence non critique pour le syst\u00e8me) avec un POC, puis en cas de succ\u00e8s, vous pouvez la propager \u00e0 l&rsquo;ensemble du syst\u00e8me.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Qu&rsquo;en est-il du stockage des donn\u00e9es?<\/h4>\n<p>Vous pouvez \u00eatre plus flexible sur le type de data store. C&rsquo;est une d\u00e9pendance externe, et elle doit \u00eatre adapt\u00e9e en fonction des besoins (base de donn\u00e9es relationnelle, noSQL, en m\u00e9moire, acc\u00e8s en lecture seule&#8230;).<\/p>\n<p>Gardez vos data stores ind\u00e9pendants, chaque microservice est un gardien de ses donn\u00e9es. Vous ne devriez jamais le contourner en liant un microservice au data store d&rsquo;un autre. Ce serait une tr\u00e8s mauvaise conception. Dans le cas o\u00f9 vous \u00eates limit\u00e9 \u00e0 une base de donn\u00e9es, \u00e7a ne posera pas de probl\u00e8me car vous pouvez d\u00e9finir diff\u00e9rents sch\u00e9mas pour chaque microservice afin de limiter les acc\u00e8s.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Si un microservice tombe, tout mon syst\u00e8me est en panne&#8230;<\/h4>\n<p>Il est important de concevoir une bonne architecture, c&rsquo;est le socle technique qui supportera vos microservices. Pensez scalabilit\u00e9, circuit breaker (pattern coupe circuit), service discovery (d\u00e9couverte des services) d\u00e8s le d\u00e9but du projet, surtout pas un mois avant de mettre en production avec des milliers d&rsquo;utilisateurs potentiels. Vous devez toujours garder cela \u00e0 l&rsquo;esprit \u00e0 partir du jour 0. Certaines personnes peuvent argumenter sur ce point, et parfois vous pourriez avoir \u00e0 convaincre le product owner qui ne voit pas de valeur business. Mais croyez-moi, plus vous attendez, plus vous aurez du pain sur la planche, et vous ne serez pas si confiant avec votre architecture tant que toutes ces t\u00e2ches techniques ne seront pas compl\u00e8tes.<\/p>\n<p>Vous avez affaire \u00e0 de nombreuses requ\u00eates distribu\u00e9es sur le r\u00e9seau, qui n&rsquo;est g\u00e9n\u00e9ralement pas tr\u00e8s fiable, il faut imaginer un design r\u00e9silient. Ceci est un \u00e9tat d&rsquo;esprit que l&rsquo;\u00e9quipe se doit d&rsquo;adopter. Vous devez penser aux retries (plusieurs tentatives, en cas d&rsquo;\u00e9chec, on r\u00e9essaie sur une autre instance par exemple), aux appels idempotents et ainsi de suite. Mettre en place des retries n&rsquo;est pas aussi facile que de l&rsquo;expliquer, surtout quand l&rsquo;appel n&rsquo;est pas idempotent. A un certain point, vous aurez besoin d&rsquo;affiner la configuration des tentatives. Par exemple, \u00e9viter des retries au niveau inf\u00e9rieur si on r\u00e9essaie d\u00e9j\u00e0 au niveau sup\u00e9rieur, ou bien adapter le d\u00e9lai d&rsquo;attente entre les tentatives au niveau sup\u00e9rieur, celui-ci devrait \u00eatre plus grand que le d\u00e9lai d&rsquo;attente au niveau inf\u00e9rieur, etc. Tous vos microservices devraient exposer un ensemble d&rsquo;URL de type healthchecks et exposer des m\u00e9triques utiles qu&rsquo;un outil de surveillance pourra utiliser (suivant un mod\u00e8le bas\u00e9 sur des pull ou des push).<\/p>\n<p>Il est \u00e9galement important de tester l&rsquo;infrastructure. Qu&rsquo;est-ce qui se passera si cette instance de microservice tombe? Vous devriez faire du <a href=\"https:\/\/en.wikipedia.org\/wiki\/Monkey_testing\" target=\"_blank\" title=\"D\u00e9finition Monkey testing\" rel=\"noopener noreferrer\">Monkey testing<\/a> (c.-\u00e0-d. \u00e9teindre certains microservices au hasard), le syst\u00e8me devrait r\u00e9agir positivement et \u00eatre encore capable de traiter et de servir les requ\u00eates (en mode d\u00e9grad\u00e9).<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Ok, je vais faire un &lsquo;grep&rsquo; sur la log pour voir ce qui s&rsquo;est pass\u00e9 hier&#8230; Attend&#8230; Il y a 50 logs ici!<\/h4>\n<p>Avoir beaucoup de microservices implique beaucoup d&rsquo;interactions, et donc pas mal de log. Il sera difficile de d\u00e9boguer si quelque chose a mal tourn\u00e9 en production. O\u00f9 est-ce que \u00e7a s&rsquo;est pass\u00e9? Quel fichier de log? Quel environnement? Les ops peuvent se perdre facilement&#8230; Essayez de faire un logging pr\u00e9cis, surtout gardez un identifiant de corr\u00e9lation pour \u00eatre en mesure de retracer la pile d&rsquo;appel \u00e0 travers les diff\u00e9rents fichiers de log.<\/p>\n<p>Soyez proactif et n&rsquo;attendez pas que le client se plaigne. Traquez toute stacktrace qui se produit, d\u00e9clenchez des alertes et corrigez constamment tous les probl\u00e8mes jusqu&rsquo;\u00e0 ce que vos logs soient \u00ab\u00a0nettoy\u00e9es\u00a0\u00bb et contiennent uniquement des informations utiles et pr\u00e9cises. La mise en place d&rsquo;un outil de surveillance des logs (par exemple <a href=\"https:\/\/www.splunk.com\/\" target=\"_blank\" title=\"Site de Splunk\" rel=\"noopener noreferrer\">Splunk<\/a>, <a href=\"https:\/\/www.elastic.co\/kibana\/\" target=\"_blank\" title=\"Site de Kibana\" rel=\"noopener noreferrer\">Kibana<\/a>&#8230;) aura du sens dans une architecture microservices.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Nous ne pouvons pas tester, nous d\u00e9pendons d&rsquo;un microservice pas encore pr\u00eat<\/h4>\n<p>Lors de l&rsquo;\u00e9criture des tests d&rsquo;int\u00e9gration, mockez toutes les d\u00e9pendances externes au microservice. Surtout si une \u00e9quipe est encore en train de d\u00e9velopper un microservice dont vous d\u00e9pendez. Vous ne voulez pas attendre qu&rsquo;ils aient fini. Par exemple, vous pouvez jeter un oeil \u00e0 <a href=\"https:\/\/wiremock.org\/\" target=\"_blank\" title=\"Site de Wiremock\" rel=\"noopener noreferrer\">Wiremock<\/a>. A l&rsquo;oppos\u00e9, pour les tests de bout en bout (end-to-end), essayez de fournir des outils efficaces et rapides pour les ex\u00e9cuter localement, l&rsquo;utilisation de serveurs embarqu\u00e9s est une bonne fa\u00e7on d&rsquo;y parvenir.<\/p>\n<p>Je l&rsquo;ai d\u00e9j\u00e0 mentionn\u00e9, d\u00e9ployez souvent en production, surtout au d\u00e9but, et n&rsquo;attendez pas 6 mois pour d\u00e9ployer vos microservices. M\u00eame s&rsquo;ils ne sont pas (encore) utiles d&rsquo;un point de vue business, vous serez davantage en confiance lorsque vous travaillerez dessus, et alors vous pourrez impl\u00e9menter la logique m\u00e9tier sans trop vous soucier de l&rsquo;architecture. Plus t\u00f4t vous testez en production, plus t\u00f4t vous pourrez d\u00e9celer des bogues et \u00eatre en mesure de les corriger rapidement.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Nous allons concevoir l&rsquo;API comme \u00e7a pour l&rsquo;instant, au plus simple, nous la changerons plus tard<\/h4>\n<p>Il est difficile d&rsquo;\u00eatre agile lors de la conception d&rsquo;une API, surtout quand celle-ci est publique. Une fois qu&rsquo;une version a \u00e9t\u00e9 livr\u00e9e et commence \u00e0 \u00eatre utilis\u00e9e, tout changement cons\u00e9quent impliquera un changement de contrat de l&rsquo;API. Vous allez alors devoir versionner votre API et, finalement, devoir maintenir plusieurs versions en parall\u00e8le. Il est important de passer un peu de temps au d\u00e9but pour d\u00e9finir un bon contrat pour l&rsquo;API qui sera capable d&rsquo;\u00e9voluer sans breaking changes (id\u00e9alement). Cela semble Waterfall pour vous? Eh bien, c&rsquo;est probablement un peu le cas&#8230;<\/p>\n<p>Toujours garder \u00e0 l&rsquo;esprit qu&rsquo;il faut \u00eatre r\u00e9trocompatible (m\u00eame si les appels sont internes) et utiliser l&rsquo;API versioning. Par exemple, ne pas renommer un champ comme \u00e7a, mais suivre un processus un peu plus long mais s\u00fbr, vous devez ajouter le nouveau champ, gardez l&rsquo;ancien d\u00e9pr\u00e9ci\u00e9 jusqu&rsquo;\u00e0 ce que tous les clients soient migr\u00e9, ensuite vous pouvez le supprimer.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Les ops ont besoin d&rsquo;une journ\u00e9e pour d\u00e9ployer quelques microservices, comment est-ce possible?!<\/h4>\n<p>L&rsquo;\u00e9quipe op\u00e9rationnelle doit changer de mentalit\u00e9, au lieu de d\u00e9ployer et surveiller une grosse et unique application, ils devront g\u00e9rer de nombreuses petites applications et s&rsquo;assurer qu&rsquo;il n&rsquo;y a pas de probl\u00e8me de communication. De quelques \u00e9tapes manuelles, l&rsquo;\u00e9quipe se retrouve avec de nombreuses \u00e9tapes fastidieuses. Ils seront rapidement d\u00e9pass\u00e9s s&rsquo;ils gardent les m\u00eames habitudes, en particulier quand on sait que le nombre de microservices va cro\u00eetre au fil du temps.<\/p>\n<p>Ils auront besoin d&rsquo;automatiser leur travail et \u00e9viter toute \u00e9tape manuelle sujette \u00e0 des erreurs humaines. L&rsquo;adoption d&rsquo;une architecture microservices vous oblige \u00e0 faire du \u00ab\u00a0vrai\u00a0\u00bb DevOps. Le d\u00e9veloppeur doit participer \u00e0 la mise en place de l&rsquo;architecture, il n&rsquo;est plus suffisant de donner un fichier et compter sur les ops pour faire le travail. Les d\u00e9veloppeurs doivent \u00eatre impliqu\u00e9s. Id\u00e9alement, un ops sera d\u00e9di\u00e9 \u00e0 l&rsquo;\u00e9quipe pour s&rsquo;assurer que la configuration r\u00e9seau est correcte, les health checks existent et fonctionnent, il participera aux stand-ups et pourra m\u00eame avoir son bureau avec l&rsquo;\u00e9quipe de d\u00e9v. Il sera sans doute n\u00e9cessaire de commencer \u00e0 utiliser un outil de d\u00e9ploiement automatis\u00e9 tel qu&rsquo;<a href=\"https:\/\/www.ansible.com\/\" target=\"_blank\" title=\"Site de Ansible\" rel=\"noopener noreferrer\">Ansible<\/a>.<\/p>\n<p><br clear=\"none\" \/><\/p>\n<h4>Nous avons pass\u00e9 6 mois sur cette architecture, elle fonctionne super bien&#8230; Par contre on a 50 utilisateurs!<\/h4>\n<p>Dernier conseil, ne pas essayer de tout faire en m\u00eame temps. Vous devez d\u00e9j\u00e0 g\u00e9rer pas mal de probl\u00e9matiques. Vous pouvez mettre de c\u00f4t\u00e9 certains points comme le self-healing (auto-gu\u00e9rison), le service discovery (d\u00e9couverte de service), circuit-breaker (coupe-circuit), auto-scaling, etc. L&rsquo;utilisation de retries et de multiples instances sera suffisant au d\u00e9but. Mais gardez \u00e0 l&rsquo;esprit que vous devrez les mettre en oeuvre \u00e0 un moment donn\u00e9, surtout quand votre syst\u00e8me sera une r\u00e9ussite et sera utilis\u00e9 par des milliers d&rsquo;utilisateurs.<\/p>","protected":false},"excerpt":{"rendered":"<p>&nbsp;English version available Je travaille sur une architecture microservices depuis assez longtemps maintenant et j&rsquo;ai assist\u00e9 \u00e0 pas mal de conf\u00e9rences sur le sujet. Dans cet article, je veux rassembler mon exp\u00e9rience pour vous donner quelques conseils bas\u00e9s sur mon retour d&rsquo;exp\u00e9rience. Chaque titre repr\u00e9sente ce que vous ne devez pas faire suivi d&rsquo;une description [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3912,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[39,280],"class_list":["post-3911","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agile-programming","tag-best-practices","tag-microservices"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Architecture Microservices - Les bonnes pratiques | CarmaBlog<\/title>\n<meta name=\"description\" content=\"&nbsp;English version available Je travaille sur une architecture microservices depuis assez longtemps maintenant et j&#039;ai assist\u00e9 \u00e0 pas mal de conf\u00e9rences\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Architecture Microservices - Les bonnes pratiques | CarmaBlog\" \/>\n<meta property=\"og:description\" content=\"&nbsp;English version available Je travaille sur une architecture microservices depuis assez longtemps maintenant et j&#039;ai assist\u00e9 \u00e0 pas mal de conf\u00e9rences\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/\" \/>\n<meta property=\"og:site_name\" content=\"CarmaBlog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/fabian.piau\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/fabian.piau\" \/>\n<meta property=\"article:published_time\" content=\"2016-10-03T06:00:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-27T19:40:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.fabianpiau.com\/wp-content\/uploads\/2016\/10\/microservices-lego-thumbnail.png\" \/>\n\t<meta property=\"og:image:width\" content=\"300\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Fabian Piau\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@fabianpiau\" \/>\n<meta name=\"twitter:site\" content=\"@fabianpiau\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fabian Piau\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/\"},\"author\":{\"name\":\"Fabian Piau\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"headline\":\"Architecture Microservices &#8211; Les bonnes pratiques\",\"datePublished\":\"2016-10-03T06:00:15+00:00\",\"dateModified\":\"2022-03-27T19:40:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/\"},\"wordCount\":4586,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2016\\\/10\\\/microservices-lego-thumbnail.png?fit=300%2C300&ssl=1\",\"keywords\":[\"bonnes pratiques\",\"microservices\"],\"articleSection\":[\"Programmation agile\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.fabianpiau.com\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/\",\"url\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/\",\"name\":\"Architecture Microservices - Les bonnes pratiques | CarmaBlog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2016\\\/10\\\/microservices-lego-thumbnail.png?fit=300%2C300&ssl=1\",\"datePublished\":\"2016-10-03T06:00:15+00:00\",\"dateModified\":\"2022-03-27T19:40:35+00:00\",\"description\":\"&nbsp;English version available Je travaille sur une architecture microservices depuis assez longtemps maintenant et j'ai assist\u00e9 \u00e0 pas mal de conf\u00e9rences\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[[\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/\"]]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2016\\\/10\\\/microservices-lego-thumbnail.png?fit=300%2C300&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2016\\\/10\\\/microservices-lego-thumbnail.png?fit=300%2C300&ssl=1\",\"width\":300,\"height\":300,\"caption\":\"microservices-lego\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/2016\\\/10\\\/03\\\/microservices-architecture-best-practices\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Homepage\",\"item\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programmation agile\",\"item\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/category\\\/agile-programming\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Microservices architecture &#8211; Best practices\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/\",\"name\":\"CarmaBlog\",\"description\":\"Agilit\u00e9, D\u00e9veloppement Java, Nouvelles technologies et plus...\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/blog.fabianpiau.com\\\/fr\\\/#\\\/schema\\\/person\\\/c5cbffd7cf0b10117877f5dfd1b35f14\",\"name\":\"Fabian Piau\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\",\"width\":567,\"height\":667,\"caption\":\"Fabian Piau\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/blog.fabianpiau.com\\\/wp-content\\\/uploads\\\/2022\\\/08\\\/fabian-pro-small.jpg?fit=567%2C667&ssl=1\"},\"description\":\"D\u00e9veloppeur Java, Fabian s'int\u00e9resse aux nouvelles technologies et plus particuli\u00e8rement \u00e0 leur utilisation dans un contexte agile.\",\"sameAs\":[\"https:\\\/\\\/blog.fabianpiau.com\",\"https:\\\/\\\/www.facebook.com\\\/fabian.piau\",\"https:\\\/\\\/www.instagram.com\\\/fabianpiau\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/fabianpiau\\\/\",\"https:\\\/\\\/x.com\\\/fabianpiau\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Architecture Microservices - Les bonnes pratiques | CarmaBlog","description":"&nbsp;English version available Je travaille sur une architecture microservices depuis assez longtemps maintenant et j'ai assist\u00e9 \u00e0 pas mal de conf\u00e9rences","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/","og_locale":"fr_FR","og_type":"article","og_title":"Architecture Microservices - Les bonnes pratiques | CarmaBlog","og_description":"&nbsp;English version available Je travaille sur une architecture microservices depuis assez longtemps maintenant et j'ai assist\u00e9 \u00e0 pas mal de conf\u00e9rences","og_url":"https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/","og_site_name":"CarmaBlog","article_publisher":"https:\/\/www.facebook.com\/fabian.piau","article_author":"https:\/\/www.facebook.com\/fabian.piau","article_published_time":"2016-10-03T06:00:15+00:00","article_modified_time":"2022-03-27T19:40:35+00:00","og_image":[{"width":300,"height":300,"url":"https:\/\/blog.fabianpiau.com\/wp-content\/uploads\/2016\/10\/microservices-lego-thumbnail.png","type":"image\/png"}],"author":"Fabian Piau","twitter_card":"summary_large_image","twitter_creator":"@fabianpiau","twitter_site":"@fabianpiau","twitter_misc":{"\u00c9crit par":"Fabian Piau","Dur\u00e9e de lecture estim\u00e9e":"22 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.fabianpiau.com\/2016\/10\/03\/microservices-architecture-best-practices\/#article","isPartOf":{"@id":"https:\/\/blog.fabianpiau.com\/2016\/10\/03\/microservices-architecture-best-practices\/"},"author":{"name":"Fabian Piau","@id":"https:\/\/blog.fabianpiau.com\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"headline":"Architecture Microservices &#8211; Les bonnes pratiques","datePublished":"2016-10-03T06:00:15+00:00","dateModified":"2022-03-27T19:40:35+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.fabianpiau.com\/2016\/10\/03\/microservices-architecture-best-practices\/"},"wordCount":4586,"commentCount":5,"publisher":{"@id":"https:\/\/blog.fabianpiau.com\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"image":{"@id":"https:\/\/blog.fabianpiau.com\/2016\/10\/03\/microservices-architecture-best-practices\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2016\/10\/microservices-lego-thumbnail.png?fit=300%2C300&ssl=1","keywords":["bonnes pratiques","microservices"],"articleSection":["Programmation agile"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.fabianpiau.com\/2016\/10\/03\/microservices-architecture-best-practices\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/","url":"https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/","name":"Architecture Microservices - Les bonnes pratiques | CarmaBlog","isPartOf":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/#primaryimage"},"image":{"@id":"https:\/\/blog.fabianpiau.com\/2016\/10\/03\/microservices-architecture-best-practices\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2016\/10\/microservices-lego-thumbnail.png?fit=300%2C300&ssl=1","datePublished":"2016-10-03T06:00:15+00:00","dateModified":"2022-03-27T19:40:35+00:00","description":"&nbsp;English version available Je travaille sur une architecture microservices depuis assez longtemps maintenant et j'ai assist\u00e9 \u00e0 pas mal de conf\u00e9rences","breadcrumb":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":[["https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/"]]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/#primaryimage","url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2016\/10\/microservices-lego-thumbnail.png?fit=300%2C300&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2016\/10\/microservices-lego-thumbnail.png?fit=300%2C300&ssl=1","width":300,"height":300,"caption":"microservices-lego"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.fabianpiau.com\/fr\/2016\/10\/03\/microservices-architecture-best-practices\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Homepage","item":"https:\/\/blog.fabianpiau.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Programmation agile","item":"https:\/\/blog.fabianpiau.com\/fr\/category\/agile-programming\/"},{"@type":"ListItem","position":3,"name":"Microservices architecture &#8211; Best practices"}]},{"@type":"WebSite","@id":"https:\/\/blog.fabianpiau.com\/fr\/#website","url":"https:\/\/blog.fabianpiau.com\/fr\/","name":"CarmaBlog","description":"Agilit\u00e9, D\u00e9veloppement Java, Nouvelles technologies et plus...","publisher":{"@id":"https:\/\/blog.fabianpiau.com\/fr\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.fabianpiau.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":["Person","Organization"],"@id":"https:\/\/blog.fabianpiau.com\/fr\/#\/schema\/person\/c5cbffd7cf0b10117877f5dfd1b35f14","name":"Fabian Piau","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1","width":567,"height":667,"caption":"Fabian Piau"},"logo":{"@id":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2022\/08\/fabian-pro-small.jpg?fit=567%2C667&ssl=1"},"description":"D\u00e9veloppeur Java, Fabian s'int\u00e9resse aux nouvelles technologies et plus particuli\u00e8rement \u00e0 leur utilisation dans un contexte agile.","sameAs":["https:\/\/blog.fabianpiau.com","https:\/\/www.facebook.com\/fabian.piau","https:\/\/www.instagram.com\/fabianpiau\/","https:\/\/www.linkedin.com\/in\/fabianpiau\/","https:\/\/x.com\/fabianpiau"]}]}},"views":5817,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blog.fabianpiau.com\/wp-content\/uploads\/2016\/10\/microservices-lego-thumbnail.png?fit=300%2C300&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pbSHyl-115","_links":{"self":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/posts\/3911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/comments?post=3911"}],"version-history":[{"count":0,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/posts\/3911\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/media\/3912"}],"wp:attachment":[{"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/media?parent=3911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/categories?post=3911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.fabianpiau.com\/fr\/wp-json\/wp\/v2\/tags?post=3911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}