{"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\/sv\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","title":{"rendered":"5 sunda f\u00f6rnuftets principer f\u00f6r att skapa cloud-native-appar","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00abMoln-native\u00bb eller helt enkelt \u00abmolnappar\u00bb skapas speciellt f\u00f6r att fungera i molninfrastrukturer. De bygger vanligtvis som ett set av svagt kopplade mikrotj\u00e4nster, f\u00f6rpackade i containrar, som i sin tur hanteras av en molnplattform. S\u00e5dana appar \u00e4r som standard redo f\u00f6r fel, vilket inneb\u00e4r att de p\u00e5 ett tillf\u00f6rlitligt s\u00e4tt fungerar och kan skalas \u00e4ven vid allvarliga infrastruktursfel. En baksida \u00e4r de upps\u00e4ttningar av begr\u00e4nsningar (kontrakt) som molnplattformen p\u00e5l\u00e4gger containertj\u00e4nster f\u00f6r att kunna hantera dem automatiskt.<\/p>\n<p><img decoding=\"async\" alt=\"5 sunda f\u00f6rnuftets principer f\u00f6r att skapa cloud-native-appar\" src=\"\/wp-content\/uploads\/2019\/06\/1f4af6f356ed36d3fbd8adef333501fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMed en klar insikt om n\u00f6dv\u00e4ndigheten och vikten av att \u00f6verg\u00e5 till molnappar, vet m\u00e5nga organisationer fortfarande inte var de ska b\u00f6rja. I detta inl\u00e4gg kommer vi att utforska ett antal principer som, om de f\u00f6ljs vid utvecklingen av containertj\u00e4nster, kommer att m\u00f6jligg\u00f6ra att utnyttja potentialen hos molnplattformar och uppn\u00e5 tillf\u00f6rlitlig funktion och skalning av appar \u00e4ven vid allvarliga IT-infrastrukturfel. Det slutliga m\u00e5let med de principer som presenteras h\u00e4r \u00e4r att l\u00e4ra sig att skapa appar som kan hanteras automatiskt av molnplattformar, s\u00e5som Kubernetes.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Principer f\u00f6r mjukvarudesign<\/h3>\n<p>\nInom programmering refererar principer till ganska allm\u00e4nna regler som m\u00e5ste f\u00f6ljas vid utveckling av programvara. De kan till\u00e4mpas p\u00e5 vilket programmeringsspr\u00e5k som helst. Varje princip har sina egna m\u00e5l, vars verktyg ofta \u00e4r mallar och praxis. Det finns ocks\u00e5 en upps\u00e4ttning grundl\u00e4ggande principer f\u00f6r att skapa kvalitetsmjukvara, fr\u00e5n vilka alla andra principiellt f\u00f6ljer. L\u00e5t oss ge exempel p\u00e5 grundl\u00e4ggande principer:<\/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 h\u00e5ll det enkelt;<\/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 upprepa inte;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/YAGNI\">YAGNI<\/a><\/noindex> (You aren\u2019t gonna need it) \u2013 skapa inte det som inte \u00e4r omedelbart n\u00f6dv\u00e4ndigt;<\/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 separera ansvar.<\/li>\n<\/ul>\n<p>\nSom vi kan se anger dessa principer inga specifika regler, utan tillh\u00f6r en kategori av s\u00e5 kallade sunt f\u00f6rnuft-betraktelser baserade p\u00e5 praktisk erfarenhet, som m\u00e5nga utvecklare delar och som de regelbundet h\u00e4nvisar till.<br \/>\nDessutom finns det <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 en upps\u00e4ttning av de f\u00f6rsta fem principerna f\u00f6r objektorienterad programmering och design, formulerade av Robert Martin. SOLID omfattar allm\u00e4nna och \u00f6ppna f\u00f6r tolkning komplement\u00e4ra principer som, om de till\u00e4mpas tillsammans, hj\u00e4lper till att skapa mer kvalitativa mjukvarusystem och b\u00e4ttre underh\u00e5lla dem p\u00e5 l\u00e5ng sikt.<\/p>\n<p>SOLID-principerna relaterar till OOP och formuleras p\u00e5 ett spr\u00e5k av s\u00e5dana begrepp och koncept som klasser, gr\u00e4nssnitt och arv. P\u00e5 samma s\u00e4tt kan det ocks\u00e5 formuleras utvecklingsprinciper f\u00f6r molnapplikationer, d\u00e4r den grundl\u00e4ggande enheten inte \u00e4r en klass, utan en container. Genom att f\u00f6lja dessa principer kan man skapa containerapplikationer som b\u00e4ttre svarar mot m\u00e5len och behoven hos molnplattformar s\u00e5som Kubernetes.<\/p>\n<h3>Molnorienterade containrar: Red Hat-ansatsen<\/h3>\n<p>\nI dag kan n\u00e4stan vilken applikation som helst relativt enkelt packas i containrar. Men f\u00f6r att applikationer effektivt automatiseras och orkestreras inom en molnplattform som Kubernetes kr\u00e4vs det ytterligare insatser.<br \/>\nGrunden f\u00f6r de id\u00e9er som presenteras nedan \u00e4r metodologin <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)\">The Twelve-Factor App<\/a><\/noindex> och m\u00e5nga andra arbeten som r\u00f6r olika aspekter av att skapa webbapplikationer, fr\u00e5n hantering av k\u00e4llkod till skalningsmodeller. De principer som beskrivs g\u00e4ller endast utveckling av containerapplikationer som \u00e4r uppbyggda p\u00e5 mikrotj\u00e4nster och avsedda f\u00f6r molnplattformar som Kubernetes. Den grundl\u00e4ggande enheten i v\u00e5ra resonemang \u00e4r containeravbildningen, och den avsedda k\u00f6rmilj\u00f6n f\u00f6r containrar definieras som en plattform f\u00f6r orkestrering av containrar. M\u00e5let med de f\u00f6reslagna principerna \u00e4r att skapa containrar f\u00f6r vilka man p\u00e5 de flesta orkestreringsplattformar kan automatisera schemal\u00e4ggningsuppgifter (scheduling \u2013 valet av v\u00e4rd f\u00f6r att k\u00f6ra en container-instans), skalning och \u00f6vervakning. Principerna presenteras i godtycklig ordning.<\/p>\n<h3>Principen om en enda uppgift (Single Concern Principle, SCP)<\/h3>\n<p>\nDenna princip liknar i stor utstr\u00e4ckning principen om en enda ansvarighet (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>), som ing\u00e5r i SOLID-settet och s\u00e4ger att varje objekt ska ha ett enda ansvar, och detta ansvar ska vara helt inkapslat i klassen. K\u00e4rnan i SRP \u00e4r att varje ansvar \u00e4r en orsak till f\u00f6r\u00e4ndringar, och klassen ska ha en och endast en orsak till f\u00f6r\u00e4ndring.<\/p>\n<p>I SCP anv\u00e4nder vi ordet \"uppgift\" (concern) ist\u00e4llet f\u00f6r \"ansvar\" (responsibility) f\u00f6r att indikera en h\u00f6gre abstraktionsniv\u00e5 och en bredare syftning f\u00f6r containern j\u00e4mf\u00f6rt med OOP-klassen. Och om m\u00e5let med SRP \u00e4r att ha endast en orsak till f\u00f6r\u00e4ndringar, s\u00e5 ligger syftet med SCP i att \u00f6ka m\u00f6jligheterna till \u00e5teranv\u00e4ndning och ers\u00e4ttning av containrar. Genom att f\u00f6lja SRP och skapa en container som l\u00f6ser en enda uppgift p\u00e5 ett funktionellt fullst\u00e4ndigt s\u00e4tt \u00f6kar du chansen att \u00e5teranv\u00e4nda denna container i olika applikationssammanhang.<\/p>\n<p>SCP-principen s\u00e4ger att varje container ska l\u00f6sa en enda uppgift och g\u00f6ra det bra. Dessutom uppn\u00e5s SCP i v\u00e4rlden av containrar enklare \u00e4n SRP i OOP-v\u00e4rlden, eftersom containrar vanligtvis utf\u00f6r en enda process, och det mesta av tiden handlar denna process om att l\u00f6sa en enda uppgift.<\/p>\n<p>Om en viss container-mikrotj\u00e4nst m\u00e5ste l\u00f6sa flera uppgifter kan den delas upp i enuppgiftcontainrar och sammanfogas inom en pod (en enhet f\u00f6r drifts\u00e4ttning av containerplattformen) med hj\u00e4lp av sidecar-mallar och init-containrar. Dessutom underl\u00e4ttar SCP ers\u00e4ttningen av en gammal container (till exempel en webbserver eller meddelandebroker) med en ny som l\u00f6ser samma uppgift men har ut\u00f6kad funktionalitet eller b\u00e4ttre skalbarhet.<\/p>\n<p><img decoding=\"async\" alt=\"5 sunda f\u00f6rnuftets principer f\u00f6r att skapa cloud-native-appar\" src=\"\/wp-content\/uploads\/2019\/06\/a029e1ca36ace66550c94087e4aecc8e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Principen f\u00f6r h\u00f6g observerbarhet (High Observability Principle, HOP)<\/h3>\n<p>\nN\u00e4r man anv\u00e4nder containrar som en enhetlig metod f\u00f6r att paketera och k\u00f6ra applikationer betraktas sj\u00e4lva applikationen som en \"svart ruta\". Om det handlar om molncontainrar m\u00e5ste de dock tillhandah\u00e5lla specifika API:er f\u00f6r k\u00f6rmilj\u00f6n f\u00f6r att \u00f6vervaka containerstatus och vid behov vidta l\u00e4mpliga \u00e5tg\u00e4rder. Utan detta kan man inte standardisera automatisering av containeruppdateringar och hantering av deras livscykel, vilket i sin tur f\u00f6rs\u00e4mrar systemets stabilitet och anv\u00e4ndbarhet.<\/p>\n<p><img decoding=\"async\" alt=\"5 sunda f\u00f6rnuftets principer f\u00f6r att skapa cloud-native-appar\" src=\"\/wp-content\/uploads\/2019\/06\/7df1320108d9b635c10c6cf41d5dfef6.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\nI praktiken b\u00f6r en containerapplikation minst ha API:er f\u00f6r olika typer av h\u00e4lsokontroller: livstr\u00e4ningstester (liveness) och beredskapstester (readiness). Om applikationen g\u00f6r anspr\u00e5k p\u00e5 mer, b\u00f6r den ocks\u00e5 erbjuda andra medel f\u00f6r att kontrollera sitt tillst\u00e5nd. Till exempel registrering av viktiga h\u00e4ndelser via STDERR och STDOUT f\u00f6r aggregering av loggar med hj\u00e4lp av Fluentd, Logstash och andra liknande verktyg. Dessutom kr\u00e4vs integration med sp\u00e5rbibliotek och metrikinsamling, s\u00e5som OpenTracing, Prometheus, m.m.<\/p>\n<p>Generellt kan applikationen fortfarande betraktas som en \"svart ruta\", men den m\u00e5ste utrustas med alla API:er som plattformen beh\u00f6ver f\u00f6r att \u00f6vervaka och hantera den p\u00e5 b\u00e4sta s\u00e4tt.<\/p>\n<h3>Livscykel\u00f6verensst\u00e4mmelseprincipen (Life-cycle Conformance Principle, LCP)<\/h3>\n<p>\nLCP \u00e4r en kontrast till HOP. Medan HOP anger att containern ska tillhandah\u00e5lla plattformen API:er f\u00f6r l\u00e4sning, kr\u00e4ver LCP att applikationen har f\u00f6rm\u00e5ga att ta emot information fr\u00e5n plattformen. Dessutom ska containern inte bara ta emot h\u00e4ndelser, utan ocks\u00e5 anpassa sig, det vill s\u00e4ga reagera p\u00e5 dem. D\u00e4rav namnet p\u00e5 principen, som kan ses som ett krav p\u00e5 att tillhandah\u00e5lla plattformen API:er f\u00f6r skrivning.<\/p>\n<p><img decoding=\"async\" alt=\"5 sunda f\u00f6rnuftets principer f\u00f6r att skapa cloud-native-appar\" src=\"\/wp-content\/uploads\/2019\/06\/f32f5d133597ae3905206badc6677f92.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPlattformar har olika typer av h\u00e4ndelser som hj\u00e4lper till att hantera livscykeln f\u00f6r containern. Men det \u00e4r applikationen som ska best\u00e4mma vilka av dessa den ska uppfatta och hur den ska reagera.<\/p>\n<p>Det \u00e4r uppenbart att vissa h\u00e4ndelser \u00e4r viktigare \u00e4n andra. Till exempel, om en applikation inte t\u00e5l ett katastrofalt avslut, m\u00e5ste den kunna ta emot signaler som signal: terminate (SIGTERM) och s\u00e5 snabbt som m\u00f6jligt initiera sin avslutningsprocedur f\u00f6r att hinna innan signal: kill (SIGKILL) kommer, vilket sker efter SIGTERM.<\/p>\n<p>Dessutom kan h\u00e4ndelser som PostStart och PreStop vara viktiga f\u00f6r applikationens livscykel. Till exempel kan en applikation beh\u00f6va viss tid f\u00f6r ''uppv\u00e4rmning'' efter lansering innan den kan svara p\u00e5 f\u00f6rfr\u00e5gningar. Eller s\u00e5 m\u00e5ste applikationen p\u00e5 n\u00e5got s\u00e4rskilt s\u00e4tt frig\u00f6ra resurser vid avslut.<\/p>\n<h3>Principen om of\u00f6r\u00e4nderliga containerbilder (Image Immutability Principle, IIP)<\/h3>\n<p>\nDet \u00e4r allm\u00e4nt accepterat att containerapplikationer ska f\u00f6rbli of\u00f6r\u00e4ndrade efter byggnation, \u00e4ven om de k\u00f6rs i olika milj\u00f6er. D\u00e4rf\u00f6r uppst\u00e5r behovet av att externisera datalagring under k\u00f6rning (det vill s\u00e4ga anv\u00e4nda externa medel f\u00f6r detta), samt att f\u00f6rlita sig p\u00e5 externa, milj\u00f6specifika konfigurationer ist\u00e4llet f\u00f6r att modifiera eller skapa unika containrar f\u00f6r varje milj\u00f6. Efter alla \u00e4ndringar i applikationen m\u00e5ste containerbilden byggas om och distribueras i alla anv\u00e4nda milj\u00f6er. F\u00f6r \u00f6vrigt anv\u00e4nds en liknande princip vid hantering av IT-system, k\u00e4nd som principen om of\u00f6r\u00e4nderliga servrar och infrastruktur. <\/p>\n<p>M\u00e5let med IIP \u00e4r att f\u00f6rhindra skapandet av separata containerbilder f\u00f6r olika k\u00f6rmilj\u00f6er och ist\u00e4llet anv\u00e4nda samma bild \u00f6verallt tillsammans med en l\u00e4mplig konfiguration f\u00f6r den specifika milj\u00f6n. Att f\u00f6lja denna princip m\u00f6jligg\u00f6r implementering av s\u00e5dana viktiga praktiker f\u00f6r automatisering av molnsystem som \u00e5terst\u00e4llning (roll-back) och framg\u00e5ng av uppdateringar av applikationen (roll-forward).<\/p>\n<p><img decoding=\"async\" alt=\"5 sunda f\u00f6rnuftets principer f\u00f6r att skapa cloud-native-appar\" src=\"\/wp-content\/uploads\/2019\/06\/86b93724830b37f82bf289b797407480.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Principen om eng\u00e5ngsanv\u00e4ndning av processer (Process Disposability Principle, PDP)<\/h3>\n<p>\nEn av de viktigaste egenskaperna hos en container \u00e4r dess ephemeralitet: en containerinstans kan l\u00e4tt skapas och l\u00e4tt f\u00f6rst\u00f6ras, vilket g\u00f6r att den n\u00e4r som helst enkelt kan ers\u00e4ttas med en annan instans. Det finns m\u00e5nga anledningar till att en s\u00e5dan ers\u00e4ttning kan beh\u00f6vas: ett misslyckat h\u00e4lsotest, skalning av applikationen, flytt till en annan v\u00e4rd, resursbrist p\u00e5 plattformen eller andra situationer. <\/p>\n<p><img decoding=\"async\" alt=\"5 sunda f\u00f6rnuftets principer f\u00f6r att skapa cloud-native-appar\" src=\"\/wp-content\/uploads\/2019\/06\/858287b23c276363313e35cf18b81190.jpg\" style=\"display:block;margin: 0 auto;\" \/> <br \/>\nSom f\u00f6ljd av detta m\u00e5ste containerbaserade applikationer spara sitt tillst\u00e5nd med hj\u00e4lp av externa medel, eller anv\u00e4nda interna distribuerade scheman med redundans. Dessutom m\u00e5ste applikationen kunna starta snabbt och st\u00e4ngas av snabbt, samt vara f\u00f6rberedd f\u00f6r pl\u00f6tsliga fatala h\u00e5rdvarufel.<\/p>\n<p>En av metoderna som hj\u00e4lper till att uppn\u00e5 detta princip \u00e4r att skapa sm\u00e5 containrar. Molnmilj\u00f6er kan automatiskt v\u00e4lja v\u00e4rden f\u00f6r att k\u00f6ra containerinstanser, s\u00e5 ju mindre storleken p\u00e5 containern \u00e4r, desto snabbare kan den startas \u2013 den kopieras helt enkelt snabbare till m\u00e5lv\u00e4rden via n\u00e4tverket.<\/p>\n<h3>Principen om sj\u00e4lvf\u00f6rs\u00f6rjning (Self-containment Principle, S-CP)<\/h3>\n<p>\nEnligt denna princip inkluderar containern alla n\u00f6dv\u00e4ndiga komponenter under byggfasen. Containern ska byggas med h\u00e4nsyn till att endast en ren Linux-k\u00e4rna finns i systemet, s\u00e5 alla n\u00f6dv\u00e4ndiga ytterligare bibliotek m\u00e5ste placeras i sj\u00e4lva containern. D\u00e4r b\u00f6r ocks\u00e5 finnas saker som k\u00f6rmilj\u00f6n f\u00f6r motsvarande programmeringsspr\u00e5k, applikationsplattform (om n\u00f6dv\u00e4ndigt) och andra beroenden som beh\u00f6vs under arbetet med containerapplikationen. <\/p>\n<p><img decoding=\"async\" alt=\"5 sunda f\u00f6rnuftets principer f\u00f6r att skapa cloud-native-appar\" src=\"\/wp-content\/uploads\/2019\/06\/ecc7425510d63e4914c0c9a7e90b02a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Undantag g\u00f6rs endast f\u00f6r konfigurationer som varierar fr\u00e5n milj\u00f6 till milj\u00f6 och som m\u00e5ste tillhandah\u00e5llas under k\u00f6rning, till exempel genom Kubernetes ConfigMap.<\/p>\n<p>Applikationen kan best\u00e5 av flera containeriserade komponenter, som en separat databascontainer inom en containerbaserad webbapplikation. Enligt principen S-CP ska dessa containrar inte sl\u00e5s ihop till en utan g\u00f6ras s\u00e5 att databascontainern inneh\u00e5ller allt som kr\u00e4vs f\u00f6r att driva databasen, medan webbapplikationscontainern inneh\u00e5ller allt som beh\u00f6vs f\u00f6r att driva webbapplikationen, s\u00e5som webbservern. Som ett resultat kommer webbapplikationscontainern under k\u00f6rning att bero p\u00e5 databascontainern och komma i kontakt med den vid behov.<\/p>\n<h3>Principen om begr\u00e4nsning vid k\u00f6rning (Runtime Confinement Principle, RCP)<\/h3>\n<p>\nPrincipen S-CP definierar hur containern ska byggas och vad den bin\u00e4ra bildfilen ska inneh\u00e5lla. Men containern \u00e4r inte bara en \"svart l\u00e5da\" med en endast en egenskap \u2013 filstorlek. Under k\u00f6rning f\u00e5r containern andra dimensioner: m\u00e4ngden anv\u00e4nd minne, processortid och andra systemresurser.<\/p>\n<p><img decoding=\"async\" alt=\"5 sunda f\u00f6rnuftets principer f\u00f6r att skapa cloud-native-appar\" src=\"\/wp-content\/uploads\/2019\/06\/a52e6a656892e57479ac014a3e6f4316.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nH\u00e4r kommer principen RCP in, enligt vilken containern ska separera sina krav p\u00e5 systemresurser och \u00f6verf\u00f6ra dem till plattformen. Genom att ha resursprofiler f\u00f6r varje container (hur mycket CPU, minne, n\u00e4tverk och lagringsresurser den beh\u00f6ver), kan plattformen optimalt utf\u00f6ra schemal\u00e4ggning och automatisk skalning, hantera IT-kapacitet och uppr\u00e4tth\u00e5lla SLA-niv\u00e5er f\u00f6r containrar.<\/p>\n<p>F\u00f6rutom att tillgodose behoven f\u00f6r containerresurser \u00e4r det ocks\u00e5 viktigt f\u00f6r applikationen att inte \u00f6verskrida de gr\u00e4nser som den sj\u00e4lv angivit. Annars, vid brist p\u00e5 resurser, \u00e4r det mer sannolikt att plattformen inkluderar den p\u00e5 listan \u00f6ver applikationer som ska avbrytas eller migreras.<\/p>\n<p>N\u00e4r vi pratar om molnorientering menar vi f\u00f6rst och fr\u00e4mst hur arbetet utf\u00f6rs. <br \/>\nSom n\u00e4mnts ovan har vi formulerat en rad allm\u00e4nna principer som utg\u00f6r den metodologiska grunden f\u00f6r att bygga kvalitativa containerapplikationer f\u00f6r molnmilj\u00f6er.<\/p>\n<p>Observera att ut\u00f6ver dessa allm\u00e4nna principer kommer du ocks\u00e5 att beh\u00f6va ytterligare avancerade metoder och tekniker f\u00f6r att arbeta med containrar. Dessutom har vi n\u00e5gra korta rekommendationer som \u00e4r mer specifika och b\u00f6r till\u00e4mpas (eller inte till\u00e4mpas) beroende p\u00e5 situationen:<\/p>\n<ul>\n<li>Str\u00e4va efter att minska bilders storlek: ta bort tillf\u00e4lliga filer och installera inte on\u00f6diga paket \u2013 ju mindre storleken p\u00e5 containern, desto snabbare byggs och kopieras den till m\u00e5lhardvaran via n\u00e4tverket.<\/li>\n<li>Fokusera p\u00e5 godtyckliga anv\u00e4ndar-ID:n: anv\u00e4nd inte kommandot sudo eller n\u00e5gra speciella userid f\u00f6r att k\u00f6ra dina containrar.<\/li>\n<li>M\u00e4rk viktiga portar: portnummer kan anges under k\u00f6rning, men det \u00e4r b\u00e4ttre att ange dem med kommandot EXPOSE \u2013 det blir enklare f\u00f6r andra m\u00e4nniskor och program att anv\u00e4nda dina bilder. <\/li>\n<li>Spara best\u00e4ndiga data p\u00e5 volymer: data som ska finnas kvar efter att containern har raderats b\u00f6r skrivas till volymer.<\/li>\n<li>Skriv ner bildens metadata: taggar, etiketter och anteckningar underl\u00e4ttar anv\u00e4ndningen av bilder \u2013 andra utvecklare kommer att uppskatta det.<\/li>\n<li>Synkronisera v\u00e4rden och bilder: vissa containerapplikationer kr\u00e4ver synkronisering av containern med v\u00e4rden baserat p\u00e5 vissa attribut, s\u00e5som tid eller maskinidentifierare.<\/li>\n<li>Avslutningsvis delar vi med oss av mallar och b\u00e4sta praxis som hj\u00e4lper till att effektivisera implementeringen av ovanst\u00e5ende principer:<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>Webinar om den nya versionen av OpenShift Container Platform \u2013 4<\/b><\/a><\/noindex><br \/>\n11 juni kl. 11.00<\/p>\n<p>Vad du kommer att l\u00e4ra dig:<\/p>\n<ul>\n<li>Immutable Red Hat Enterprise Linux CoreOS<\/li>\n<li>OpenShift service mesh<\/li>\n<li>Operator framework<\/li>\n<li>Knative framework<\/li>\n<\/ul>\n<p>K\u00e4lla: <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.4 - 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\/sv\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd475 sunt f\u00f6rnuftprinciper f\u00f6r att skapa cloud-native appar | ProHoster","description":"\"Molnorienterade\" (cloud native) eller helt enkelt \"molnappar\" \u00e4r skapade specifikt f\u00f6r att fungera i molninfrastrukturer.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/news\/5-printsipov-zdravogo-smysla-dlya-sozdaniya-cloud-native-apps","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/35006","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=35006"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/35006\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/26340"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=35006"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=35006"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=35006"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}