{"id":35006,"date":"2019-10-31T22:01:47","date_gmt":"2019-10-31T19:01:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\/"},"modified":"2019-10-31T22:01:47","modified_gmt":"2019-10-31T19:01:47","slug":"5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","title":{"rendered":"5 principes de bon sens pour cr\u00e9er des applications cloud-native","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Les applications \u00ab cloud natives \u00bb ou simplement \u00ab cloud \u00bb sont sp\u00e9cifiquement con\u00e7ues pour fonctionner dans des infrastructures cloud. Elles sont g\u00e9n\u00e9ralement construites comme un ensemble de microservices faiblement coupl\u00e9s, emball\u00e9s dans des conteneurs, qui sont eux-m\u00eames g\u00e9r\u00e9s par une plateforme cloud. Ces applications sont par d\u00e9faut pr\u00eates \u00e0 faire face aux pannes, ce qui signifie qu'elles fonctionnent de mani\u00e8re fiable et \u00e9voluent m\u00eame en cas de d\u00e9faillances graves au niveau de l'infrastructure. L'inconv\u00e9nient est un ensemble de contraintes (contrats) que la plateforme cloud impose aux applications conteneuris\u00e9es pour pouvoir les g\u00e9rer de mani\u00e8re automatique.<\/p>\n<p><img decoding=\"async\" alt=\"5 principes de bon sens pour cr\u00e9er des applications cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/1f4af6f356ed36d3fbd8adef333501fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBien conscient de la n\u00e9cessit\u00e9 et de l'importance de la transition vers des applications cloud, de nombreuses organisations ne savent toujours pas par o\u00f9 commencer. Dans ce billet, nous examinerons un certain nombre de principes, dont le respect dans le d\u00e9veloppement d'applications conteneuris\u00e9es permettra de r\u00e9aliser le potentiel des plateformes cloud et d'obtenir un fonctionnement fiable et une \u00e9volutivit\u00e9 des applications m\u00eame en cas de d\u00e9faillances graves au niveau de l'infrastructure informatique. L'objectif final des principes expos\u00e9s ici est d'apprendre \u00e0 cr\u00e9er des applications pouvant \u00eatre g\u00e9r\u00e9es automatiquement par des plateformes cloud comme Kubernetes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Principes de conception logicielle<\/h3>\n<p>\nDans le monde de la programmation, les principes sont compris comme des r\u00e8gles assez g\u00e9n\u00e9rales \u00e0 respecter lors de la conception de logiciels. Elles peuvent \u00eatre appliqu\u00e9es ind\u00e9pendamment du langage de programmation utilis\u00e9. Chaque principe a ses propres objectifs, souvent atteints \u00e0 l'aide de mod\u00e8les et de bonnes pratiques. Il existe \u00e9galement un ensemble de principes fondamentaux de cr\u00e9ation de logiciels de qualit\u00e9, dont tous les autres d\u00e9coulent. Voici quelques exemples de principes fondamentaux :<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/KISS_(%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF)\">KISS<\/a><\/noindex> (Keep it simple, stupid) \u2013 ne pas compliquer les choses ;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Don%E2%80%99t_repeat_yourself\">DRY<\/a><\/noindex> (Don\u2019t repeat yourself) \u2013 ne pas se r\u00e9p\u00e9ter ;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/YAGNI\">YAGNI<\/a><\/noindex> (You aren\u2019t gonna need it) \u2013 ne pas cr\u00e9er quelque chose dont on n'a pas un besoin imm\u00e9diat ;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A0%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">SoC<\/a><\/noindex> (Separation of concerns) \u2013 s\u00e9parer les responsabilit\u00e9s.<\/li>\n<\/ul>\n<p>\nComme on peut le voir, ces principes ne fixent pas de r\u00e8gles sp\u00e9cifiques, mais rel\u00e8vent plut\u00f4t du bon sens bas\u00e9 sur l'exp\u00e9rience pratique, que de nombreux d\u00e9veloppeurs partagent et auxquels ils se r\u00e9f\u00e8rent r\u00e9guli\u00e8rement.<br \/>\nDe plus, il existe <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">SOLID<\/a><\/noindex> \u2013 un ensemble des cinq premiers principes de la programmation et de la conception orient\u00e9es objet, formul\u00e9s par Robert Martin. SOLID comprend des principes compl\u00e9mentaires et interpr\u00e9tables qui, lorsqu'ils sont appliqu\u00e9s ensemble, aident \u00e0 cr\u00e9er des syst\u00e8mes logiciels de meilleure qualit\u00e9 et \u00e0 les maintenir plus efficacement \u00e0 long terme.<\/p>\n<p>Les principes SOLID s'appliquent au domaine de la POO et sont formul\u00e9s \u00e0 l'aide de concepts tels que classes, interfaces et h\u00e9ritage. Par analogie, des principes de d\u00e9veloppement peuvent \u00e9galement \u00eatre formul\u00e9s pour les applications cloud, o\u00f9 l'\u00e9l\u00e9ment de base n'est pas une classe, mais un conteneur. En suivant ces principes, on peut cr\u00e9er des applications bas\u00e9es sur des conteneurs qui r\u00e9pondent mieux aux objectifs et exigences des plateformes cloud comme Kubernetes.<\/p>\n<h3>Conteneurs orient\u00e9s cloud : approche Red Hat<\/h3>\n<p>\nAujourd'hui, il est relativement facile d'emballer pratiquement n'importe quelle application dans des conteneurs. Cependant, pour que les applications s'automatisent et s'orchestrent efficacement au sein d'une plateforme cloud comme Kubernetes, des efforts suppl\u00e9mentaires sont n\u00e9cessaires.<br \/>\nLes id\u00e9es pr\u00e9sent\u00e9es ci-dessous sont bas\u00e9es sur la m\u00e9thodologie <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">L'application en douze facteurs<\/a><\/noindex> et de nombreux autres travaux sur diff\u00e9rents aspects de la cr\u00e9ation d'applications web, allant de la gestion du code source \u00e0 des mod\u00e8les de mise \u00e0 l'\u00e9chelle. Les principes d\u00e9crits ne concernent que le d\u00e9veloppement d'applications bas\u00e9es sur des conteneurs, construits selon une architecture microservices, et destin\u00e9es aux plateformes cloud telles que Kubernetes. L'\u00e9l\u00e9ment de base dans notre discussion est l'image du conteneur, et par environnement d'ex\u00e9cution pr\u00e9vu des conteneurs, nous entendons la plateforme d'orchestration des conteneurs. L'objectif des principes propos\u00e9s est de cr\u00e9er des conteneurs pour lesquels la plupart des plateformes d'orchestration peuvent automatiser les t\u00e2ches de planification (scheduling \u2013 choix de l'h\u00f4te pour lancer une instance de conteneur), de mise \u00e0 l'\u00e9chelle et de surveillance. Les principes sont expos\u00e9s dans un ordre arbitraire.<\/p>\n<h3>Principe de la t\u00e2che unique (Single Concern Principle, SCP)<\/h3>\n<p>\nCe principe est en grande partie similaire au principe de la responsabilit\u00e9 unique (Single Responsibility Principle, <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%B5%D0%B4%D0%B8%D0%BD%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8\">SRP<\/a><\/noindex>), qui fait partie du principe SOLID et stipule que chaque objet doit avoir une seule responsabilit\u00e9, et cette responsabilit\u00e9 doit \u00eatre enti\u00e8rement encapsul\u00e9e dans la classe. L'essence du SRP est que chaque responsabilit\u00e9 est une raison de modification, et la classe ne doit avoir qu'une seule raison de changer.<\/p>\n<p>Dans le SCP, au lieu du mot \u00ab responsabilit\u00e9 \u00bb (responsibility), nous utilisons le mot \u00ab t\u00e2che \u00bb (concern) pour indiquer un niveau d'abstraction plus \u00e9lev\u00e9 et une port\u00e9e plus large pour le conteneur par rapport \u00e0 la classe OOP. Et si l'objectif du SRP est d'avoir seulement une raison pour des modifications, le SCP vise \u00e0 \u00e9largir les possibilit\u00e9s de r\u00e9utilisation et de remplacement des conteneurs. En suivant le SRP et en cr\u00e9ant un conteneur qui r\u00e9sout une seule t\u00e2che et le fait de mani\u00e8re fonctionnellement compl\u00e8te, vous augmentez les chances de r\u00e9utiliser ce conteneur dans divers contextes d'application.<\/p>\n<p>Le principe SCP stipule que chaque conteneur doit r\u00e9soudre une seule t\u00e2che et bien la r\u00e9aliser. De plus, le SCP dans le monde des conteneurs est atteint plus facilement que le SRP dans le monde de l'OOP, car les conteneurs effectuent g\u00e9n\u00e9ralement un seul processus, et la plupart du temps, ce processus r\u00e9sout une seule t\u00e2che.<\/p>\n<p>Si un microservice conteneur doit r\u00e9soudre plusieurs t\u00e2ches \u00e0 la fois, il peut \u00eatre d\u00e9compos\u00e9 en conteneurs unidimensionnels et regroup\u00e9 dans un m\u00eame pod (unit\u00e9 de d\u00e9ploiement de la plateforme de conteneurisation) \u00e0 l'aide de mod\u00e8les sidecar et init-containers. De plus, le SCP facilite le remplacement d'un ancien conteneur (par exemple, un serveur web ou un broker de messages) par un nouveau qui r\u00e9sout la m\u00eame t\u00e2che mais poss\u00e8de des fonctionnalit\u00e9s \u00e9tendues ou se scale mieux.<\/p>\n<p><img decoding=\"async\" alt=\"5 principes de bon sens pour cr\u00e9er des applications cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/a029e1ca36ace66550c94087e4aecc8e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Le principe de haute observabilit\u00e9 (High Observability Principle, HOP)<\/h3>\n<p>\nLors de l'utilisation de conteneurs comme moyen unifi\u00e9 d'empaquetage et de d\u00e9ploiement d'applications, celles-ci sont consid\u00e9r\u00e9es comme des \u00ab bo\u00eetes noires \u00bb. Cependant, lorsqu'il s'agit de conteneurs cloud, ils doivent fournir des API sp\u00e9cifiques \u00e0 l'environnement d'ex\u00e9cution pour contr\u00f4ler la sant\u00e9 des conteneurs et prendre les mesures appropri\u00e9es si n\u00e9cessaire. Sans cela, il sera impossible d'uniformiser l'automatisation de la mise \u00e0 jour des conteneurs et la gestion de leur cycle de vie, ce qui, \u00e0 son tour, nuira \u00e0 la r\u00e9silience et \u00e0 l'utilisation pratique du syst\u00e8me logiciel.<\/p>\n<p><img decoding=\"async\" alt=\"5 principes de bon sens pour cr\u00e9er des applications cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/7df1320108d9b635c10c6cf41d5dfef6.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\nEn pratique, une application conteneuris\u00e9e doit, au minimum, disposer d'une API pour diff\u00e9rents types de contr\u00f4les de sant\u00e9 : des tests de disponibilit\u00e9 (liveness) et des tests de pr\u00e9paration (readiness). Si l'application pr\u00e9tend offrir davantage, elle doit \u00e9galement fournir d'autres moyens de contr\u00f4le de son \u00e9tat. Par exemple, l'enregistrement d'\u00e9v\u00e9nements importants via STDERR et STDOUT pour l'agr\u00e9gation des journaux \u00e0 l'aide d'outils comme Fluentd, Logstash et autres. Ainsi que l'int\u00e9gration avec des biblioth\u00e8ques de tra\u00e7age et de collecte de m\u00e9triques, telles que OpenTracing, Prometheus, etc.<\/p>\n<p>En g\u00e9n\u00e9ral, l'application peut toujours \u00eatre consid\u00e9r\u00e9e comme une \u00ab bo\u00eete noire \u00bb, mais elle doit \u00eatre \u00e9quip\u00e9e de toutes les API n\u00e9cessaires \u00e0 la plateforme pour qu'elle puisse surveiller et g\u00e9rer l'application de la meilleure mani\u00e8re possible.<\/p>\n<h3>Principe de conformit\u00e9 au cycle de vie (Life-cycle Conformance Principle, LCP)<\/h3>\n<p>\nLCP est l'antith\u00e8se de HOP. Si HOP stipule que le conteneur doit fournir des API \u00e0 la plateforme pour la lecture, LCP exige que l'application soit capable de recevoir des informations de la plateforme. De plus, le conteneur doit non seulement recevoir des \u00e9v\u00e9nements, mais aussi s'adapter, c'est-\u00e0-dire r\u00e9agir \u00e0 eux. D'o\u00f9 le nom du principe, qui peut \u00eatre consid\u00e9r\u00e9 comme une exigence de fournir des API \u00e0 la plateforme pour l'\u00e9criture.<\/p>\n<p><img decoding=\"async\" alt=\"5 principes de bon sens pour cr\u00e9er des applications cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/f32f5d133597ae3905206badc6677f92.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLes plateformes disposent de diff\u00e9rents types d'\u00e9v\u00e9nements qui aident \u00e0 g\u00e9rer le cycle de vie du conteneur. Cependant, c'est l'application elle-m\u00eame qui doit d\u00e9cider lesquels d'entre eux percevoir et comment r\u00e9agir.<\/p>\n<p>Il est clair que certains \u00e9v\u00e9nements sont plus importants que d'autres. Par exemple, si une application ne g\u00e8re pas bien les arr\u00eats inattendus, elle doit pouvoir recevoir des messages signal: terminate (SIGTERM) et initier sa proc\u00e9dure d'arr\u00eat d\u00e8s que possible, afin de terminer avant de recevoir signal: kill (SIGKILL), qui vient apr\u00e8s SIGTERM.<\/p>\n<p>De plus, des \u00e9v\u00e9nements tels que PostStart et PreStop peuvent \u00eatre cruciaux pour le cycle de vie de l'application. Par exemple, apr\u00e8s le d\u00e9marrage, une application peut n\u00e9cessiter un certain temps de \"r\u00e9chauffement\" avant de pouvoir r\u00e9pondre aux requ\u00eates. Ou l'application doit de mani\u00e8re particuli\u00e8re lib\u00e9rer des ressources lors de son arr\u00eat.<\/p>\n<h3>Principe de non-modification de l'image du conteneur (Image Immutability Principle, IIP)<\/h3>\n<p>\nIl est g\u00e9n\u00e9ralement admis que les applications conteneuris\u00e9es doivent rester inchang\u00e9es apr\u00e8s la construction, m\u00eame si elles sont ex\u00e9cut\u00e9es dans diff\u00e9rents environnements. Cela n\u00e9cessite d'externaliser le stockage des donn\u00e9es au moment de l'ex\u00e9cution (autrement dit, d'utiliser des moyens externes pour cela), ainsi que de se fier \u00e0 des configurations externes adapt\u00e9es \u00e0 l'environnement d'ex\u00e9cution sp\u00e9cifique, plut\u00f4t que de modifier ou de cr\u00e9er des conteneurs uniques pour chaque environnement. Apr\u00e8s toute modification de l'application, l'image du conteneur doit \u00eatre reconstruite et d\u00e9ploy\u00e9e dans tous les environnements utilis\u00e9s. D'ailleurs, un principe similaire est utilis\u00e9 dans la gestion des syst\u00e8mes informatiques, connu sous le nom de principe de non-modification des serveurs et de l'infrastructure. <\/p>\n<p>L'objectif de l'IIP est d'\u00e9viter la cr\u00e9ation d'images de conteneurs distincts pour diff\u00e9rents environnements d'ex\u00e9cution et d'utiliser la m\u00eame image avec la configuration correspondante pour un environnement sp\u00e9cifique. Suivre ce principe permet de mettre en \u0153uvre des pratiques importantes en termes d'automatisation des syst\u00e8mes cloud, telles que le retour en arri\u00e8re (roll-back) et l'application (roll-forward) des mises \u00e0 jour d'application.<\/p>\n<p><img decoding=\"async\" alt=\"5 principes de bon sens pour cr\u00e9er des applications cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/86b93724830b37f82bf289b797407480.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Principe de la g\u00e9n\u00e9ricit\u00e9 des processus (Process Disposability Principle, PDP)<\/h3>\n<p>\nL'une des caract\u00e9ristiques les plus importantes d'un conteneur est son \u00e9ph\u00e9m\u00e9rit\u00e9 : une instance de conteneur est facilement cr\u00e9\u00e9e et facilement d\u00e9truite, ce qui permet de la remplacer \u00e0 tout moment par une autre instance. Il peut y avoir de nombreuses raisons pour un tel remplacement : \u00e9chec d'un test de validit\u00e9, mise \u00e0 l'\u00e9chelle de l'application, migration vers un autre h\u00f4te, \u00e9puisement des ressources de la plateforme ou d'autres situations. <\/p>\n<p><img decoding=\"async\" alt=\"5 principes de bon sens pour cr\u00e9er des applications cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/858287b23c276363313e35cf18b81190.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\nEn cons\u00e9quence, les applications conteneuris\u00e9es doivent conserver leur \u00e9tat \u00e0 l'aide de moyens externes, ou utiliser pour cela des sch\u00e9mas distribu\u00e9s internes avec redondance. De plus, l'application doit d\u00e9marrer rapidement et se terminer rapidement, et doit \u00e9galement \u00eatre pr\u00eate \u00e0 faire face \u00e0 une d\u00e9faillance mat\u00e9rielle fatale soudaine.<\/p>\n<p>Une des pratiques qui aide \u00e0 mettre en \u0153uvre ce principe consiste \u00e0 cr\u00e9er des conteneurs de petite taille. Les environnements cloud peuvent automatiquement choisir un h\u00f4te pour ex\u00e9cuter un exemplaire de conteneur, donc plus la taille du conteneur est petite, plus il d\u00e9marrera rapidement - il sera simplement copi\u00e9 plus rapidement sur l'h\u00f4te cible via le r\u00e9seau.<\/p>\n<h3>Principe d'autosuffisance (Self-containment Principle, S-CP)<\/h3>\n<p>\nSelon ce principe, \u00e0 l'\u00e9tape de construction, tous les composants n\u00e9cessaires sont inclus dans le conteneur. Le conteneur doit \u00eatre construit en supposant qu'il n'y a qu'un noyau Linux propre dans le syst\u00e8me, donc toutes les biblioth\u00e8ques suppl\u00e9mentaires n\u00e9cessaires doivent \u00eatre plac\u00e9es dans le conteneur lui-m\u00eame. On doit \u00e9galement y placer des \u00e9l\u00e9ments tels que l'environnement d'ex\u00e9cution pour le langage de programmation concern\u00e9, la plateforme d'application (si n\u00e9cessaire) et d'autres d\u00e9pendances requises lors de l'ex\u00e9cution de l'application conteneuris\u00e9e. <\/p>\n<p><img decoding=\"async\" alt=\"5 principes de bon sens pour cr\u00e9er des applications cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/ecc7425510d63e4914c0c9a7e90b02a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Les exceptions ne sont faites que pour les configurations qui varient d'un environnement \u00e0 l'autre et doivent \u00eatre fournies \u00e0 l'ex\u00e9cution, par exemple, via Kubernetes ConfigMap.<\/p>\n<p>L'application peut inclure plusieurs composants conteneuris\u00e9s, comme un conteneur de SGBD dans le cadre d'une application web conteneuris\u00e9e. Selon le principe S-CP, ces conteneurs ne doivent pas \u00eatre fusionn\u00e9s en un seul, mais doivent \u00eatre con\u00e7us de mani\u00e8re \u00e0 ce que le conteneur SGBD contienne tout le n\u00e9cessaire pour le fonctionnement de la base de donn\u00e9es, tandis que le conteneur de l'application web contienne tout le n\u00e9cessaire pour le fonctionnement de l'application web, y compris le serveur web. En cons\u00e9quence, lors de l'ex\u00e9cution, le conteneur de l'application web d\u00e9pendra du conteneur SGBD et s'adressera \u00e0 lui au besoin.<\/p>\n<h3>Principe de confinement \u00e0 l'ex\u00e9cution (Runtime Confinement Principle, RCP)<\/h3>\n<p>\nLe principe S-CP d\u00e9termine comment un conteneur doit \u00eatre assembl\u00e9 et ce que doit contenir le fichier binaire de l'image. Mais un conteneur n'est pas simplement une \"bo\u00eete noire\" qui n'a qu'une seule caract\u00e9ristique : la taille du fichier. Pendant l'ex\u00e9cution, le conteneur acquiert d'autres dimensions : la quantit\u00e9 de m\u00e9moire utilis\u00e9e, le temps processeur et d'autres ressources syst\u00e8me.<\/p>\n<p><img decoding=\"async\" alt=\"5 principes de bon sens pour cr\u00e9er des applications cloud-native\" src=\"\/wp-content\/uploads\/2019\/06\/a52e6a656892e57479ac014a3e6f4316.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nC'est ici que le principe RCP entre en jeu, selon lequel le conteneur doit d\u00e9coupler ses exigences en ressources syst\u00e8me et les transmettre \u00e0 la plateforme. En ayant des profils de ressources pour chaque conteneur (quelles ressources CPU, m\u00e9moire, r\u00e9seau et syst\u00e8me de disque sont n\u00e9cessaires), la plateforme peut optimiser la gestion et l'autoscaling, g\u00e9rer les capacit\u00e9s informatiques et maintenir les niveaux SLA pour les conteneurs.<\/p>\n<p>Outre la satisfaction des exigences des ressources du conteneur, il est \u00e9galement important que l'application ne d\u00e9passe pas les limites qu'elle a elle-m\u00eame d\u00e9finies. Sinon, en cas de p\u00e9nurie de ressources, la plateforme aura plus de chances de l'inclure dans la liste des applications \u00e0 interrompre ou \u00e0 migrer.<\/p>\n<p>Lorsqu'on parle d'orientation vers le cloud, nous faisons avant tout r\u00e9f\u00e9rence \u00e0 la mani\u00e8re de travailler. <br \/>\nNous avons formul\u00e9 ci-dessus une s\u00e9rie de principes g\u00e9n\u00e9raux qui \u00e9tablissent les bases m\u00e9thodologiques pour construire des applications conteneuris\u00e9es de qualit\u00e9 pour des environnements cloud.<\/p>\n<p>Il est \u00e0 noter qu'en plus de ces principes g\u00e9n\u00e9raux, vous aurez \u00e9galement besoin de m\u00e9thodes et techniques avanc\u00e9es pour travailler avec des conteneurs. De plus, nous avons plusieurs recommandations succinctes, qui sont plus sp\u00e9cifiques et doivent \u00eatre appliqu\u00e9es (ou non) en fonction de la situation :<\/p>\n<ul>\n<li>Essayez de r\u00e9duire la taille des images : supprimez les fichiers temporaires et n'installez pas de paquets inutiles \u2013 plus la taille du conteneur est r\u00e9duite, plus il se construit et se copie rapidement sur l'h\u00f4te cible via le r\u00e9seau.<\/li>\n<li>Concentrez-vous sur des User-ID arbitraires : n'utilisez pas la commande sudo ou des User-ID sp\u00e9ciaux pour ex\u00e9cuter vos conteneurs.<\/li>\n<li>\u00c9tiquetez les ports importants : les num\u00e9ros de ports peuvent \u00eatre assign\u00e9s aussi bien \u00e0 l'ex\u00e9cution, mais il est pr\u00e9f\u00e9rable de les sp\u00e9cifier \u00e0 l'aide de la commande EXPOSE \u2013 cela facilitera l'utilisation de vos images par d'autres personnes et programmes. <\/li>\n<li>Stockez des donn\u00e9es permanentes sur des volumes : les donn\u00e9es qui doivent persister apr\u00e8s la destruction d'un conteneur doivent \u00eatre enregistr\u00e9es sur des volumes.<\/li>\n<li>\u00c9crivez des m\u00e9tadonn\u00e9es d'image : les \u00e9tiquettes, balises et annotations facilitent l'utilisation des images - les autres d\u00e9veloppeurs vous en seront reconnaissants.<\/li>\n<li>Synchronisez l'h\u00f4te et les images : certaines applications conteneuris\u00e9es n\u00e9cessitent la synchronisation du conteneur avec l'h\u00f4te sur certains attributs, comme l'heure ou l'identifiant de machine.<\/li>\n<li>En conclusion, nous partageons des mod\u00e8les et des meilleures pratiques qui vous aideront \u00e0 mettre en \u0153uvre plus efficacement les principes mentionn\u00e9s ci-dessus :<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.slideshare.net\/luebken\/container-patterns\">www.slideshare.net\/luebken\/container-patterns<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/engine\/userguide\/eng-image\/dockerfile_best-practices\">docs.docker.com\/engine\/userguide\/eng-image\/dockerfile_best-practices<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"http:\/\/docs.projectatomic.io\/container-best-practices\">docs.projectatomic.io\/container-best-practices<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.openshift.com\/enterprise\/3.0\/creating_images\/guidelines.html\">docs.openshift.com\/enterprise\/3.0\/creating_images\/guidelines.html<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.usenix.org\/system\/files\/conference\/hotcloud16\/hotcloud16_burns.pdf\">www.usenix.org\/system\/files\/conference\/hotcloud16\/hotcloud16_burns.pdf<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/leanpub.com\/k8spatterns\/\">leanpub.com\/k8spatterns<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/12factor.net\/\">12factor.net<\/a><\/noindex><\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/events.redhat.com\/profile\/form\/index.cfm?intcmp=701f20000012s47AAA&amp;PKFormID=0x5789474c4\"><b>Webinaire sur la nouvelle version de la OpenShift Container Platform - 4<\/b><\/a><\/noindex><br \/>\n11 juin \u00e0 11h00<\/p>\n<p>Ce que vous apprendrez :<\/p>\n<ul>\n<li>Red Hat Enterprise Linux CoreOS immuable<\/li>\n<li>OpenShift service mesh<\/li>\n<li>Cadre Operator<\/li>\n<li>Cadre Knative<\/li>\n<\/ul>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/redhatrussia\/blog\/455024\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445. \u041e\u0431\u044b\u0447\u043d\u043e \u043e\u043d\u0438 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u0441\u043b\u0430\u0431\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439. \u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0441\u0431\u043e\u044f\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430\u0434\u0435\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u043e\u0442\u043a\u0430\u0437\u0430\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043c\u0435\u0434\u0430\u043b\u0438 \u2013 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26340,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-35006","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.\" \/>\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\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\" \/>\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\udd475 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f cloud-native apps | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\" \/>\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=\"2019-10-31T19:01:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:01:47+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\udd47 5 principes de bon sens pour cr\u00e9er des applications cloud-native | ProHoster","description":"Les applications \u00ab cloud-native \u00bb ou simplement \u00ab des applications cloud \u00bb sont cr\u00e9\u00e9es sp\u00e9cifiquement pour fonctionner dans des infrastructures cloud.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","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\udd475 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u043e\u0432 \u0437\u0434\u0440\u0430\u0432\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f cloud-native apps | ProHoster","og:description":"\u00ab\u041e\u0431\u043b\u0430\u0447\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb (cloud native) \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u00ab\u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0435\u00bb \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445.","og:url":"https:\/\/prohoster.info\/fr\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","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":"2019-10-31T19:01:47+00:00","article:modified_time":"2019-10-31T19:01:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35006","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":"2026-01-21 21:27:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:11:30","updated":"2026-01-21 21:27:19","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\/35006","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=35006"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/35006\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/26340"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=35006"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=35006"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=35006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}