{"id":35906,"date":"2019-10-31T22:07:29","date_gmt":"2019-10-31T19:07:29","guid":{"rendered":"https:\/\/prohoster.info\/blog\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika\/"},"modified":"2019-10-31T22:07:29","modified_gmt":"2019-10-31T19:07:29","slug":"perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika","title":{"rendered":"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ebben a cikkben arr\u00f3l fogok mes\u00e9lni, hogyan alakult \u00e1t az \u00e1ltalam kezelt projekt egy nagy monolitb\u00f3l mikroszolg\u00e1ltat\u00e1sok rendszer\u00e9v\u00e9.<\/p>\n<p>A projekt t\u00f6rt\u00e9nete m\u00e1r el\u00e9g r\u00e9gre ny\u00falik vissza, a 2000-es \u00e9vek elej\u00e9re. Az els\u0151 verzi\u00f3kat Visual Basic 6 nyelven \u00edrt\u00e1k. Az id\u0151 m\u00fal\u00e1s\u00e1val vil\u00e1goss\u00e1 v\u00e1lt, hogy a j\u00f6v\u0151ben nehezen lesz fenntarthat\u00f3 a fejleszt\u00e9s ezen a nyelven, mivel az IDE \u00e9s maga a nyelv lassan fejl\u0151dik. A 2000-es \u00e9vek v\u00e9g\u00e9n \u00fagy d\u00f6nt\u00f6ttek, hogy \u00e1tt\u00e9rnek egy \u00edg\u00e9retesebb C# nyelvre. Az \u00faj verzi\u00f3 p\u00e1rhuzamosan k\u00e9sz\u00fclt a r\u00e9gi finom\u00edt\u00e1s\u00e1val, egyre t\u00f6bb k\u00f3d \u00edr\u00f3dott .NET k\u00f6rnyezetben. A C# backend eredetileg szolg\u00e1ltat\u00e1sorient\u00e1lt architekt\u00far\u00e1ra \u00e9p\u00fclt, azonban a fejleszt\u00e9s sor\u00e1n k\u00f6z\u00f6s k\u00f6nyvt\u00e1rakat haszn\u00e1ltak a logika sz\u00e1m\u00e1ra, \u00e9s a szolg\u00e1ltat\u00e1sok egyetlen folyamatban futottak. Olyan alkalmaz\u00e1s j\u00f6tt l\u00e9tre, amelyet \u201eszolg\u00e1ltat\u00e1smonolitnak\u201d nevezt\u00fcnk. <\/p>\n<p>Az ilyen architekt\u00fara egyik kev\u00e9s el\u0151nye volt, hogy a szolg\u00e1ltat\u00e1sok k\u00e9pesek voltak egym\u00e1st h\u00edvni egy k\u00fcls\u0151 API-n kereszt\u00fcl. Egy\u00e9rtelm\u0171 jelek mutattak arra, hogy \u00e9rdemes lenne \u00e1tt\u00e9rni a helyesebb szolg\u00e1ltat\u00e1sorient\u00e1lt, k\u00e9s\u0151bb pedig mikroszolg\u00e1ltat\u00e1s alap\u00fa architekt\u00far\u00e1ra. <\/p>\n<p>A dekompoz\u00edci\u00f3s munk\u00e1nkat k\u00f6r\u00fclbel\u00fcl 2015 k\u00f6r\u00fcl kezdt\u00fck. M\u00e9g mindig nem \u00e9rt\u00fck el az ide\u00e1lis \u00e1llapotot - maradtak a nagy projekt r\u00e9szei, amelyeket m\u00e1r nehezen lehet monolitnak nevezni, de mikroszolg\u00e1ltat\u00e1soknak sem n\u00e9znek ki. Ennek ellen\u00e9re a fejl\u0151d\u00e9s jelent\u0151s. <br \/>\nErr\u0151l fogok besz\u00e9lni a cikkben.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/132bb4ea6b9dbcdd202ee090f2b86289.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Tartalom<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#1\"> A megl\u00e9v\u0151 megold\u00e1s architekt\u00far\u00e1ja \u00e9s probl\u00e9m\u00e1i<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#2\">Elv\u00e1r\u00e1sok a mikroszolg\u00e1ltat\u00e1sokkal szemben<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#3\">Az \u00e1tt\u00e9r\u00e9s probl\u00e9m\u00e1i<\/a><\/noindex><\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"#4\">Hogyan l\u00e9pj\u00fcnk a monolitb\u00f3l mikroszolg\u00e1ltat\u00e1sokra<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#5\">Els\u0151 m\u00f3d<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#6\">M\u00e1sodik m\u00f3dszer<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#7\">Harmadik m\u00f3dszer<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#8\">Negyedik m\u00f3dszer<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#9\">Munka az adatb\u00e1zissal<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#10\">A megl\u00e9v\u0151 t\u00e1bl\u00e1zatok elk\u00fcl\u00f6n\u00edt\u00e9se<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#11\">Elk\u00fcl\u00f6n\u00edt\u00e9s \u00e1talak\u00edt\u00e1ssal<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#12\">Munka a forr\u00e1sk\u00f3ddal<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#13\">Infrastrukt\u00fara probl\u00e9m\u00e1k<\/a><\/noindex>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"#16\">K\u00e9zi telep\u00edt\u00e9s a k\u00f6rnyezetekbe<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#14\">K\u00fcl\u00f6n loggol\u00e1s<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"#15\">Kapcsol\u00f3d\u00f3 szolg\u00e1ltat\u00e1sok tesztel\u00e9se \u00e9s hibakeres\u00e9se<\/a><\/noindex><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><noindex><a rel=\"nofollow\" name=\"1\"><\/a><\/noindex><b><\/p>\n<h3>A megl\u00e9v\u0151 megold\u00e1s architekt\u00far\u00e1ja \u00e9s probl\u00e9m\u00e1i<\/h3>\n<p><\/b><br \/>\nAz architekt\u00fara kezdetben a k\u00f6vetkez\u0151k\u00e9ppen n\u00e9zett ki: a UI egy k\u00fcl\u00f6n alkalmaz\u00e1s, a monolitikus r\u00e9sz Visual Basic 6 nyelven \u00edr\u00f3dott, a .NET alkalmaz\u00e1s \u00f6sszekapcsolt szolg\u00e1ltat\u00e1sok halmaz\u00e1t alkotta, amely egy meglehet\u0151sen nagy adatb\u00e1zissal dolgozott.<\/p>\n<p><b>A kor\u00e1bbi megold\u00e1s h\u00e1tr\u00e1nyai<\/b><\/p>\n<p><u>Egys\u00e9ges hibapont<\/u><br \/>\nEgyetlen hiba\u00fczeneti pontunk volt: a .NET alkalmaz\u00e1s egy folyamatban futott. Ha b\u00e1rmelyik modulban hiba t\u00f6rt\u00e9nt, az eg\u00e9sz alkalmaz\u00e1s le\u00e1llt, \u00e9s \u00fajra kellett ind\u00edtani. Mivel sok folyamat automatiz\u00e1l\u00f3dik k\u00fcl\u00f6nb\u00f6z\u0151 felhaszn\u00e1l\u00f3k sz\u00e1m\u00e1ra, egy hiba miatt egy id\u0151re az \u00f6sszes felhaszn\u00e1l\u00f3 nem tudta haszn\u00e1lni az alkalmaz\u00e1st. A programhib\u00e1kn\u00e1l a redundancia sem seg\u00edtett. <\/p>\n<p><u>Fejleszt\u00e9sek sora<\/u><br \/>\nEz a hi\u00e1nyoss\u00e1g ink\u00e1bb szervezeti jelleg\u0171. Az alkalmaz\u00e1sunkban sok \u00fcgyf\u00e9l van, \u00e9s mindannyian min\u00e9l hamarabb szeretn\u00e9k a m\u00f3dos\u00edt\u00e1sokat elv\u00e9gezni. Kor\u00e1bban ezt p\u00e1rhuzamosan nem lehetett megtenni, ez\u00e9rt az \u00f6sszes \u00fcgyf\u00e9l egy sorba \u00e1llt. Ez a folyamat negat\u00edvan \u00e9rintette az \u00fczletet, hiszen be kellett bizony\u00edtaniuk, hogy a feladatuk \u00e9rt\u00e9kes. A fejleszt\u0151i csapat pedig id\u0151t t\u00f6lt\u00f6tt a sor megszervez\u00e9s\u00e9vel, ami sok id\u0151t \u00e9s energi\u00e1t em\u00e9sztett fel, a term\u00e9k pedig nem tudott olyan gyorsan v\u00e1ltozni, ahogyan azt elv\u00e1rt\u00e1k.<\/p>\n<p><u>Nem optim\u00e1lis er\u0151forr\u00e1s-haszn\u00e1lat<\/u><br \/>\nAmikor a szolg\u00e1ltat\u00e1sokat egyetlen folyamatban helyezt\u00fck el, mindig teljesen \u00e1tm\u00e1soltuk a konfigur\u00e1ci\u00f3t szerverr\u0151l szerverre. Szerett\u00fck volna a legjobban megterhelt szolg\u00e1ltat\u00e1sokat k\u00fcl\u00f6n\u00e1ll\u00f3an kezelni, hogy ne pazaroljunk el er\u0151forr\u00e1sokat, \u00e9s hogy rugalmasabb ir\u00e1ny\u00edt\u00e1st nyerj\u00fcnk a telep\u00edt\u00e9si s\u00e9m\u00e1nkon.<\/p>\n<p><u>Neh\u00e9z modern technol\u00f3gi\u00e1kat bevezetni<\/u><br \/>\nA fejleszt\u0151k sz\u00e1m\u00e1ra ismert probl\u00e9ma: szeretn\u00e9nk modern technol\u00f3gi\u00e1kat bevezetni a projektbe, de nincs r\u00e1 lehet\u0151s\u00e9g. Egy nagy monolitikus megold\u00e1sn\u00e1l b\u00e1rmilyen friss\u00edt\u00e9s a jelenlegi k\u00f6nyvt\u00e1rra, nem is besz\u00e9lve az \u00fajra val\u00f3 \u00e1tt\u00e9r\u00e9sr\u0151l, meglehet\u0151sen bonyolult feladatt\u00e1 v\u00e1lik. Hosszasan kell bizony\u00edtanunk a csapatvezet\u0151nek, hogy ez t\u00f6bb el\u0151nyt hoz, mint amennyi idegesked\u00e9st okoz. <\/p>\n<p><u>A v\u00e1ltoztat\u00e1sok kiad\u00e1si neh\u00e9zs\u00e9ge<\/u><br \/>\nEz volt a legs\u00falyosabb probl\u00e9ma - minden k\u00e9t h\u00f3napban \u00faj verzi\u00f3t adtunk ki. <br \/>\nMinden kiad\u00e1s val\u00f3di katasztr\u00f3f\u00e1v\u00e1 v\u00e1lt a bank sz\u00e1m\u00e1ra, a tesztel\u00e9s \u00e9s a fejleszt\u0151k er\u0151fesz\u00edt\u00e9sei ellen\u00e9re. Az \u00fczlet tudta, hogy a h\u00e9t elej\u00e9n az funkcionalit\u00e1s egy r\u00e9sze nem fog m\u0171k\u00f6dni. A fejleszt\u0151k pedig tudt\u00e1k, hogy komoly incidensek v\u00e1rnak r\u00e1juk egy h\u00e9tre. <br \/>\nMindenkinek voltak v\u00e1gyai a helyzet megv\u00e1ltoztat\u00e1s\u00e1ra. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"2\"><\/a><\/noindex><b><\/p>\n<h3>Elv\u00e1r\u00e1sok a mikroszolg\u00e1ltat\u00e1sokkal szemben<\/h3>\n<p><\/b><br \/>\n<u>A komponensek kiad\u00e1sa \u00e9retts\u00e9g szerint. <\/u>A komponensek kiad\u00e1sa a k\u00e9sz\u00fclts\u00e9g f\u00fcggv\u00e9ny\u00e9ben a megold\u00e1s dekompon\u00e1l\u00e1s\u00e1nak \u00e9s k\u00fcl\u00f6nb\u00f6z\u0151 folyamatok lev\u00e1laszt\u00e1s\u00e1nak k\u00f6sz\u00f6nhet\u0151en.<\/p>\n<p><u>Kis term\u00e9kcsapatok.<\/u> Ez fontos, mert egy nagy csapat az \u00f6reg monoliton nehezen kezelhet\u0151. Az ilyen csapatnak szigor\u00fa folyamatok ment\u00e9n kellett dolgoznia, pedig a kreativit\u00e1sra \u00e9s f\u00fcggetlens\u00e9gre v\u00e1gytunk. Ezt csak a kis csapatok engedhett\u00e9k meg maguknak.<\/p>\n<p><u>A szolg\u00e1ltat\u00e1sok izol\u00e1l\u00e1sa k\u00fcl\u00f6n folyamatokban.<\/u> Ide\u00e1lisan kont\u00e9nerekben szeretn\u00e9nk izol\u00e1lni, de a .NET Framework alatt \u00edrt sok szolg\u00e1ltat\u00e1s csak Windows alatt fut. Most kezdik felt\u0171nni a .NET Core alap\u00fa szolg\u00e1ltat\u00e1sok, de ezek m\u00e9g nem elterjedtek.<\/p>\n<p><u>A telep\u00edt\u00e9s rugalmass\u00e1ga.<\/u> Szeretn\u00e9nk a szolg\u00e1ltat\u00e1sokat \u00fagy kombin\u00e1lni, ahogyan nek\u00fcnk sz\u00fcks\u00e9ges, nem pedig ahogyan a k\u00f3d megk\u00f6veteli.<\/p>\n<p><u>\u00daj technol\u00f3gi\u00e1k haszn\u00e1lata.<\/u> Ez minden programoz\u00f3 sz\u00e1m\u00e1ra \u00e9rdekes.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"3\"><\/a><\/noindex><b><\/p>\n<h3>Az \u00e1tt\u00e9r\u00e9s probl\u00e9m\u00e1i<\/h3>\n<p><\/b><br \/>\nTerm\u00e9szetesen, ha a monolitot mikroszolg\u00e1ltat\u00e1sokra bontani egyszer\u0171 lenne, err\u0151l nem besz\u00e9ln\u00e9nk konferenci\u00e1kon \u00e9s nem \u00edrn\u00e1nk cikkeket. A folyamatban sok buktat\u00f3 van, a f\u0151bb akad\u00e1lyokat \u00edrom le, amik megnehez\u00edtett\u00e9k sz\u00e1munkra.<\/p>\n<p><b>Az els\u0151 probl\u00e9ma<\/b> tipikus a legt\u00f6bb monolit sz\u00e1m\u00e1ra: az \u00fczleti logika \u00f6sszekapcsolts\u00e1ga. Amikor monolitot \u00edrunk, akkor szeretn\u00e9nk \u00fajrahaszn\u00e1lni a oszt\u00e1lyainkat, hogy ne kelljen felesleges k\u00f3dot \u00edrni. Azonban mikroszolg\u00e1ltat\u00e1sokra val\u00f3 \u00e1t\u00e1ll\u00e1skor ez probl\u00e9m\u00e1v\u00e1 v\u00e1lik: az eg\u00e9sz k\u00f3d el\u00e9g szoros kapcsolatban \u00e1ll, \u00e9s neh\u00e9z a szolg\u00e1ltat\u00e1sok sz\u00e9tv\u00e1laszt\u00e1sa.<\/p>\n<p>A munka megkezd\u00e9sekor a repozit\u00f3riumban t\u00f6bb mint 500 projekt \u00e9s 700 ezer sor k\u00f3d volt. Ez el\u00e9g nagy megold\u00e1s \u00e9s <b>a m\u00e1sodik probl\u00e9ma<\/b>. Egyszer\u0171en nem volt lehets\u00e9ges, hogy csak \u00fagy sz\u00e9tv\u00e1lasszuk mikroszolg\u00e1ltat\u00e1sokra.<\/p>\n<p><b>A harmadik probl\u00e9ma<\/b> \u2014 a sz\u00fcks\u00e9ges infrastrukt\u00fara hi\u00e1nya. Gyakorlatilag a forr\u00e1sk\u00f3d manu\u00e1lis m\u00e1sol\u00e1s\u00e1val foglalkoztunk a szerverekre.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"4\"><\/a><\/noindex><b><\/p>\n<h3>Hogyan l\u00e9pj\u00fcnk a monolitb\u00f3l mikroszolg\u00e1ltat\u00e1sokra<\/h3>\n<p><\/b><br \/>\n<u>Mikroszolg\u00e1ltat\u00e1sok kiemel\u00e9se<\/u><\/p>\n<p>El\u0151sz\u00f6r is, azonnal meghat\u00e1roztuk, hogy a mikroszolg\u00e1ltat\u00e1sokra val\u00f3 sz\u00e9tv\u00e1laszt\u00e1s iterat\u00edv folyamat. Mindig elv\u00e1rt\u00e1k t\u0151l\u00fcnk, hogy p\u00e1rhuzamosan v\u00e9gezz\u00fck az \u00fczleti feladatok fejleszt\u00e9s\u00e9t. Hogyan v\u00e9gezz\u00fck ezt technikailag \u2014 ez m\u00e1r a mi probl\u00e9m\u00e1nk. Ez\u00e9rt felk\u00e9sz\u00fclt\u00fcnk az iterat\u00edv folyamatra. M\u00e1sk\u00e9pp nem m\u0171k\u00f6dik, ha nagy alkalmaz\u00e1sod van, \u00e9s az eredetileg nincs felk\u00e9sz\u00fclve arra, hogy \u00e1t\u00edrj\u00e1k.<\/p>\n<p>Milyen m\u00f3dszereket haszn\u00e1lunk a mikroszolg\u00e1ltat\u00e1sok kiemel\u00e9s\u00e9re?<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"5\"><\/a><\/noindex><b>Els\u0151 m\u00f3d <\/b>\u2014 a megl\u00e9v\u0151 modulokat szolg\u00e1ltat\u00e1sk\u00e9nt kiemelni. Ebben a tekintetben szerencs\u00e9nk volt: m\u00e1r voltak kialak\u00edtott szolg\u00e1ltat\u00e1sok, amelyek WCF protokollt haszn\u00e1ltak. Ezek k\u00fcl\u00f6n\u00e1ll\u00f3 \u00f6sszes\u00edt\u00e9sekbe voltak sz\u00e9tsz\u00f3rva. \u00c9n k\u00fcl\u00f6n-k\u00fcl\u00f6n vitt\u00fck \u00e1t \u0151ket, minden egyes \u00f6sszes\u00edt\u00e9shez egy kis ind\u00edt\u00f3modult hozz\u00e1adva. Ezt a csod\u00e1latos Topshelf k\u00f6nyvt\u00e1rral \u00edrtuk, amely lehet\u0151v\u00e9 teszi, hogy az alkalmaz\u00e1st szolg\u00e1ltat\u00e1sk\u00e9nt \u00e9s konzolk\u00e9nt is futtassuk. Ez k\u00e9nyelmes a hibakeres\u00e9shez, mivel nem sz\u00fcks\u00e9ges tov\u00e1bbi projektek a megold\u00e1sban.<\/p>\n<p>A szolg\u00e1ltat\u00e1sok \u00fczleti logik\u00e1hoz kapcsol\u00f3dtak, mivel k\u00f6z\u00f6s \u00f6sszes\u00edt\u00e9seket haszn\u00e1ltak \u00e9s k\u00f6z\u00f6s adatb\u00e1zissal dolgoztak. Neh\u00e9z volt \u0151ket tiszta \u00e9rtelemben mikroszolg\u00e1ltat\u00e1soknak nevezni. Mindazon\u00e1ltal ezek a szolg\u00e1ltat\u00e1sok k\u00fcl\u00f6n-k\u00fcl\u00f6n megjelen\u00edthet\u0151k voltak, k\u00fcl\u00f6nb\u00f6z\u0151 folyamatokban. M\u00e1r ez lehet\u0151v\u00e9 tette a k\u00f6lcs\u00f6n\u00f6s hat\u00e1suk cs\u00f6kkent\u00e9s\u00e9t, ami cs\u00f6kkentette a p\u00e1rhuzamos fejleszt\u00e9s \u00e9s az egyetlen meghib\u00e1sod\u00e1si pont probl\u00e9m\u00e1it.<\/p>\n<p>A hosttal val\u00f3 \u00f6sszes\u00edt\u00e9s mind\u00f6ssze egy sor k\u00f3d a Program oszt\u00e1lyban. A Topshelf kezel\u00e9se egy seg\u00e9doszt\u00e1lyba van elrejtve.<\/p>\n<pre><code class=\"plaintext\">namespace RBA.Services.Accounts.Host\n{\n   internal class Program\n   {\n      private static void Main(string[] args)\n      {\n        HostRunner.Run(\"RBA.Services.Accounts.Host\");\n\n       }\n    }\n}\n<\/code><\/pre>\n<p>\n<noindex><a rel=\"nofollow\" name=\"6\"><\/a><\/noindex><b>A mikroszolg\u00e1ltat\u00e1sok kiemel\u00e9s\u00e9nek m\u00e1sodik m\u00f3dja:<\/b> \u00faj feladatok megold\u00e1s\u00e1ra l\u00e9trehozni \u0151ket. Ha ek\u00f6zben a monolit nem n\u0151, m\u00e1r ez is nagyszer\u0171, azt jelenti, hogy j\u00f3 ir\u00e1nyba haladunk. \u00daj feladatok megold\u00e1s\u00e1hoz pr\u00f3b\u00e1ltunk k\u00fcl\u00f6n\u00e1ll\u00f3 szolg\u00e1ltat\u00e1sokat l\u00e9trehozni. Ha lehet\u0151s\u00e9g volt r\u00e1, akkor a lehet\u0151 leg\"kanonikusabb\" szolg\u00e1ltat\u00e1sokat k\u00e9sz\u00edtett\u00fck, amelyek teljes m\u00e9rt\u00e9kben kezelik a saj\u00e1t adatmodellj\u00fcket, k\u00fcl\u00f6n adatb\u00e1zissal. <\/p>\n<p>Mi, ak\u00e1rcsak sokan m\u00e1sok, az autentik\u00e1ci\u00f3s \u00e9s enged\u00e9lyez\u00e9si szolg\u00e1ltat\u00e1sokkal kezdt\u00fck. Ezek ide\u00e1lisan megfelelnek erre. F\u00fcggetlenek, jellemz\u0151en elk\u00fcl\u00f6n\u00edtett adatmodellt haszn\u00e1lnak. \u0150k maguk nem l\u00e9pnek kapcsolatba a monolittal, csak \u0151 fordul hozz\u00e1juk k\u00fcl\u00f6nb\u00f6z\u0151 feladatok megold\u00e1s\u00e1ra. Ezeken a szolg\u00e1ltat\u00e1sokon lehet elkezdeni az \u00faj architekt\u00far\u00e1ra val\u00f3 \u00e1tt\u00e9r\u00e9st, rajtuk ki lehet pr\u00f3b\u00e1lni az infrastrukt\u00far\u00e1t, valamint k\u00fcl\u00f6nb\u00f6z\u0151 h\u00e1l\u00f3zati k\u00f6nyvt\u00e1rakkal kapcsolatos megk\u00f6zel\u00edt\u00e9seket, stb. Szervezet\u00fcnkn\u00e9l nincs olyan csapat, amely ne tudn\u00e1 megval\u00f3s\u00edtani az autentik\u00e1ci\u00f3s szolg\u00e1ltat\u00e1st. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"7\"><\/a><\/noindex><b>A mikroszolg\u00e1ltat\u00e1sok kiemel\u00e9s\u00e9nek harmadik m\u00f3dja<\/b>, amelyet haszn\u00e1lunk, kiss\u00e9 specifikus sz\u00e1munkra. Ez a v\u00e1llalati logika kiemel\u00e9se a UI r\u00e9tegb\u0151l. Az alapvet\u0151 UI alkalmaz\u00e1sunk asztali, amely, ak\u00e1rcsak a backend, C#-on \u00edr\u00f3dott. A fejleszt\u0151k id\u0151nk\u00e9nt hib\u00e1ztak, \u00e9s a UI-ra helyezt\u00e9k a logika egyes r\u00e9szeit, amelyeknek a backendben kellett volna l\u00e9tezni\u00fck \u00e9s \u00fajrahaszn\u00e1lhat\u00f3ak kellett volna legyenek. <\/p>\n<p>Ha megn\u00e9z\u00fcnk egy val\u00f3s p\u00e9ld\u00e1t a UI r\u00e9sz\u00e9nek k\u00f3dj\u00e1b\u00f3l, l\u00e1that\u00f3, hogy a d\u00f6nt\u00e9s nagy r\u00e9sze val\u00f3di v\u00e1llalati logik\u00e1t tartalmaz, amely m\u00e1s folyamatokban is hasznos, nem csup\u00e1n a UI \u0171rlap fejleszt\u00e9s\u00e9hez. <\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/74c7b90ff94b343816ab3ac2fa0673c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA UI val\u00f3di logik\u00e1j\u00e1nak csak az utols\u00f3 p\u00e1r sora van ott. Ezt \u00e1thelyezt\u00fck a szerverre, hogy \u00fajrahaszn\u00e1lhat\u00f3 legyen, ezzel cs\u00f6kkentve a UI-t \u00e9s biztos\u00edtva a helyes architekt\u00far\u00e1t.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"8\"><\/a><\/noindex><b>A negyedik, legfontosabb m\u00f3dszer a mikroszolg\u00e1ltat\u00e1sok kiemel\u00e9s\u00e9re<\/b>, amely lehet\u0151v\u00e9 teszi a monolit cs\u00f6kkent\u00e9s\u00e9t \u2014 ez a megl\u00e9v\u0151 szolg\u00e1ltat\u00e1sok \u00e1talak\u00edt\u00e1ssal val\u00f3 kiemel\u00e9se. Amikor a megl\u00e9v\u0151 modulokat \u00fagy helyezz\u00fck \u00e1t, ahogy vannak, az eredm\u00e9ny nem mindig tetszik a fejleszt\u0151knek, \u00e9s az \u00fczleti folyamat a funkci\u00f3 l\u00e9trehoz\u00e1sa \u00f3ta elavulhatott. A refaktoriz\u00e1l\u00e1s r\u00e9v\u00e9n fenntarthatjuk az \u00faj \u00fczleti folyamatot, mivel az \u00fczlet k\u00f6vetelm\u00e9nyei folyamatosan v\u00e1ltoznak. Jav\u00edthatjuk a forr\u00e1st, elt\u00e1vol\u00edthatjuk a j\u00f3l ismert hib\u00e1kat, \u00e9s jobb min\u0151s\u00e9g\u0171 adatmodellt hozhatunk l\u00e9tre. Sok el\u0151ny halmoz\u00f3dik fel.<\/p>\n<p>A szolg\u00e1ltat\u00e1sok \u00e1talak\u00edt\u00e1ssal val\u00f3 elk\u00fcl\u00f6n\u00edt\u00e9se elv\u00e1laszthatatlan a korl\u00e1tozott kontextus fogalm\u00e1t\u00f3l. Ez a fogalom az objektum-orient\u00e1lt tervez\u00e9sb\u0151l sz\u00e1rmazik. Arra utal, hogy a domain modell egy szakasza, ahol minden kifejez\u00e9s egy\u00e9rtelm\u0171en meghat\u00e1rozott egy egys\u00e9ges nyelven. N\u00e9zz\u00fck meg a biztos\u00edt\u00e1sok \u00e9s sz\u00e1ml\u00e1k kontextus\u00e1nak p\u00e9ld\u00e1j\u00e1t. Van egy monolitikus alkalmaz\u00e1sunk, \u00e9s a biztos\u00edt\u00e1sokkal dolgoznunk kell a sz\u00e1ml\u00e1val. Azt v\u00e1rjuk, hogy a fejleszt\u0151 a m\u00e1sik \u00f6sszegy\u0171jt\u00e9sben tal\u00e1l egy megl\u00e9v\u0151 \u201eSz\u00e1mla\u201d oszt\u00e1lyt, hivatkozik r\u00e1 a \u201eBiztos\u00edt\u00e1s\u201d oszt\u00e1lyb\u00f3l, \u00e9s m\u0171k\u00f6d\u0151 k\u00f3dot kapunk. A DRY elv \u00e9rv\u00e9nyes\u00fclni fog, a feladat a megl\u00e9v\u0151 k\u00f3d felhaszn\u00e1l\u00e1s\u00e1val gyorsabban elv\u00e9gezhet\u0151 lesz.<\/p>\n<p>V\u00e9g\u00fcl kider\u00fcl, hogy a sz\u00e1ml\u00e1k \u00e9s a biztos\u00edt\u00e1sok kontextusai \u00f6sszefon\u00f3dnak. Amikor \u00faj k\u00f6vetelm\u00e9nyek mer\u00fclnek fel, ez a kapcsolat megnehez\u00edti a fejleszt\u00e9st, n\u00f6velve a m\u00e1r \u00edgy is bonyolult \u00fczleti logika komplexit\u00e1s\u00e1t. Ennek a probl\u00e9m\u00e1nak a megold\u00e1s\u00e1hoz a k\u00f3dban meg kell tal\u00e1lni a hat\u00e1rokat a kontextusok k\u00f6z\u00f6tt, \u00e9s el kell t\u00e1vol\u00edtani a megs\u00e9rt\u00e9s\u00fcket. P\u00e9ld\u00e1ul a biztos\u00edt\u00e1sok kontextus\u00e1nak val\u00f3sz\u00edn\u0171leg elegend\u0151 lesz a 20 sz\u00e1mjegyb\u0151l \u00e1ll\u00f3 K\u00f6zponti Bank sz\u00e1mlasz\u00e1m \u00e9s a sz\u00e1mla megnyit\u00e1s\u00e1nak d\u00e1tuma. <\/p>\n<p>Az ezen korl\u00e1tozott kontextusokat egym\u00e1st\u00f3l elk\u00fcl\u00f6n\u00edtve \u00e9s a mikroszolg\u00e1ltat\u00e1sok kiemel\u00e9s\u00e9nek folyamat\u00e1t elkezdve olyan megk\u00f6zel\u00edt\u00e9st alkalmaztunk, mint a k\u00fcls\u0151 API-k l\u00e9trehoz\u00e1sa az alkalmaz\u00e1son bel\u00fcl. Ha tudtuk, hogy egy modulnak mikroszolg\u00e1ltat\u00e1ss\u00e1 kell v\u00e1lnia, \u00e9s valamilyen m\u00f3don meg kell v\u00e1ltoznia a folyamat sor\u00e1n, akkor azonnal megh\u00edvtuk a logik\u00e1t, amely egy m\u00e1sik korl\u00e1tozott kontextushoz tartozik, k\u00fcls\u0151 h\u00edv\u00e1sokon kereszt\u00fcl. P\u00e9ld\u00e1ul REST-en vagy WCF-en kereszt\u00fcl.<\/p>\n<p>Hat\u00e1rozottan elhat\u00e1roztuk, hogy nem fogunk elker\u00fclni olyan k\u00f3dot, amely megk\u00f6veteli a megosztott tranzakci\u00f3k v\u00e9grehajt\u00e1s\u00e1t. A mi eset\u00fcnkben meglehet\u0151sen k\u00f6nny\u0171 volt betartani ezt a szab\u00e1lyt. Eddig nem mer\u00fclt fel olyan helyzet, amikor val\u00f3ban sz\u00fcks\u00e9g lett volna szigor\u00fa megosztott tranzakci\u00f3kra - a modulok k\u00f6z\u00f6tti v\u00e9gs\u0151 konzisztencia elegend\u0151 volt.<\/p>\n<p>Vizsg\u00e1ljunk meg egy konkr\u00e9t p\u00e9ld\u00e1t. Van egy fogalom, az orchestr\u00e1tor - egy cs\u0151vezet\u00e9k, amely a 'k\u00e9relem' entit\u00e1st dolgozza fel. L\u00e9p\u00e9sr\u0151l l\u00e9p\u00e9sre l\u00e9trehozza az \u00fcgyfelet, a sz\u00e1ml\u00e1t \u00e9s a bankk\u00e1rty\u00e1t. Ha az \u00fcgyf\u00e9l \u00e9s a sz\u00e1mla sikeresen l\u00e9trej\u00f6n, de a k\u00e1rtya l\u00e9trehoz\u00e1sa meghi\u00fasul, a k\u00e9relem nem v\u00e1lt 'sikeres' st\u00e1tusz\u00fav\u00e1, \u00e9s a 'k\u00e1rtya nem l\u00e9trehozva' st\u00e1tuszban marad. A j\u00f6v\u0151beli h\u00e1tt\u00e9rtev\u00e9kenys\u00e9g fel fogja venni \u00e9s befejezi azt. A rendszer egy ideig inkonzisztens \u00e1llapotban marad, de ez sz\u00e1munkra \u00f6sszess\u00e9g\u00e9ben elfogadhat\u00f3.<\/p>\n<p>Ha m\u00e9gis felmer\u00fcl a helyzet, amikor egy r\u00e9szadatokat konzisztensen kell menteni, akkor val\u00f3sz\u00edn\u0171leg a szolg\u00e1ltat\u00e1s \u00f6sszes\u0171r\u00edt\u00e9s\u00e9re megy\u00fcnk, hogy ezt egyetlen folyamatban dolgozhassuk fel. <\/p>\n<p>N\u00e9zz\u00fck meg a mikroszolg\u00e1ltat\u00e1s kiemel\u00e9s\u00e9nek p\u00e9ld\u00e1j\u00e1t. Hogyan lehet viszonylag biztons\u00e1gosan a termel\u00e9si k\u00f6rnyezetbe juttatni? Ebben a p\u00e9ld\u00e1ban van egy k\u00fcl\u00f6n r\u00e9sz a rendszerb\u0151l - a b\u00e9rsz\u00e1mfejt\u00e9si modul, amelynek egyik k\u00f3dr\u00e9sze mikroszolg\u00e1ltat\u00e1sk\u00e9nt szeretn\u00e9nk m\u0171k\u00f6dtetni.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/346af271b0c3f99897d330e56f713f18.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl\u0151sz\u00f6r l\u00e9trehozzuk a mikroszolg\u00e1ltat\u00e1st, \u00e1t\u00edrva a k\u00f3dot. Fejlesztj\u00fck azokat a r\u00e9szeket, amelyek nem feleltek meg az elv\u00e1r\u00e1sainknak. Megval\u00f3s\u00edtjuk az \u00fcgyf\u00e9l \u00faj \u00fczleti ig\u00e9nyeit. Hozz\u00e1adunk egy API Gateway-t az UI \u00e9s a h\u00e1tt\u00e9r k\u00f6z\u00f6tt, amely biztos\u00edtja a h\u00edv\u00e1sok tov\u00e1bb\u00edt\u00e1s\u00e1t. <\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/bec8d68f20f3ec53af0cef225a51c2b3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEzut\u00e1n bevezetj\u00fck ezt a konfigur\u00e1ci\u00f3t pr\u00f3ba\u00fczemre. A felhaszn\u00e1l\u00f3ink t\u00f6bbs\u00e9ge tov\u00e1bbra is a r\u00e9gi \u00fczleti folyamatokkal dolgozik. Az \u00faj felhaszn\u00e1l\u00f3k sz\u00e1m\u00e1ra kifejlesztj\u00fck a monolitikus alkalmaz\u00e1s \u00faj verzi\u00f3j\u00e1t, amely m\u00e1r nem tartalmazza ezt a folyamatot. L\u00e9nyeg\u00e9ben a monolit \u00e9s a mikroszolg\u00e1ltat\u00e1s egyar\u00e1nt pr\u00f3ba\u00fczemben m\u0171k\u00f6dik.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/27e98812746bb7f142fa3a3c3a03b52f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA sikeres pr\u00f3ba\u00fczem sor\u00e1n meg\u00e9rtj\u00fck, hogy az \u00faj konfigur\u00e1ci\u00f3 val\u00f3ban m\u0171k\u00f6d\u0151k\u00e9pes, elt\u00e1vol\u00edthatjuk a r\u00e9gi monolitot, \u00e9s az \u00faj konfigur\u00e1ci\u00f3t a r\u00e9gi megold\u00e1s hely\u00e9re \u00e1ll\u00edthatjuk.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/11dcf1d771b57d3921c0aa91b82646e1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00d6sszess\u00e9g\u00e9ben szinte minden megl\u00e9v\u0151 m\u00f3dszert alkalmazunk a monolit forr\u00e1sk\u00f3dj\u00e1nak elv\u00e1laszt\u00e1s\u00e1ra. Ezek mind cs\u00f6kkentik az alkalmaz\u00e1s r\u00e9szeinek m\u00e9ret\u00e9t, \u00e9s \u00faj k\u00f6nyvt\u00e1rakra v\u00e1ltanak, jav\u00edtva a forr\u00e1sk\u00f3d min\u0151s\u00e9g\u00e9t.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"9\"><\/a><\/noindex><b><\/p>\n<h3>Munka az adatb\u00e1zissal<\/h3>\n<p><\/b><br \/>\nAz adatb\u00e1zisunk nehezebben oszthat\u00f3 sz\u00e9t, mint a forr\u00e1sk\u00f3d, mivel nemcsak a jelenlegi s\u00e9m\u00e1t tartalmazza, hanem a felhalmozott t\u00f6rt\u00e9neti adatokat is.<\/p>\n<p>Az adatb\u00e1zisunknak, mint sok m\u00e1snak, volt egy fontos h\u00e1tr\u00e1nya is - hatalmas m\u00e9rete. Ezt az adatb\u00e1zist a monolit bonyolult \u00fczleti logik\u00e1j\u00e1nak megfelel\u0151en tervezt\u00e9k, \u00e9s a k\u00fcl\u00f6nb\u00f6z\u0151 korl\u00e1tozott kontextusok k\u00f6z\u00f6tt \u00f6sszekapcsol\u00f3d\u00e1sok halmoz\u00f3dtak fel a t\u00e1bl\u00e1k k\u00f6z\u00f6tt.<\/p>\n<p>A mi eset\u00fcnkben, a sok probl\u00e9ma (nagy adatb\u00e1zis, sz\u00e1mos kapcsol\u00f3d\u00e1s, n\u00e9ha \u00e9rthetetlen hat\u00e1rok a t\u00e1bl\u00e1k k\u00f6z\u00f6tt) mellett egy olyan probl\u00e9ma mer\u00fclt fel, amely sok nagy projektben el\u0151fordul: a megosztott adatb\u00e1zis mint\u00e1zat alkalmaz\u00e1sa. Az adatok t\u00e1bl\u00e1kb\u00f3l vettek \u00e1t n\u00e9zeten kereszt\u00fcl, replik\u00e1ci\u00f3val, \u00e9s m\u00e1s rendszerekbe ker\u00fcltek, ahol sz\u00fcks\u00e9g volt erre a replik\u00e1ci\u00f3ra. Ennek k\u00f6vetkezt\u00e9ben nem tudtuk a t\u00e1bl\u00e1kat k\u00fcl\u00f6n s\u00e9m\u00e1ba helyezni, mert akt\u00edvan haszn\u00e1lt\u00e1k \u0151ket.<\/p>\n<p>A feloszt\u00e1sban seg\u00edt nek\u00fcnk a k\u00f3dban alkalmazott korl\u00e1tozott kontextusokra val\u00f3 bont\u00e1s. Ez \u00e1ltal\u00e1ban elegend\u0151en j\u00f3 elk\u00e9pzel\u00e9st ad arr\u00f3l, hogyan bontjuk le az adatokat az adatb\u00e1zis szintj\u00e9n. Meg\u00e9rtj\u00fck, hogy mely t\u00e1bl\u00e1k tartoznak egy korl\u00e1tozott kontextushoz, \u00e9s melyek tartoznak egy m\u00e1sikhoz.<\/p>\n<p>K\u00e9t glob\u00e1lis adatb\u00e1zis-sebess\u00e9gi m\u00f3dszert alkalmaztunk: a megl\u00e9v\u0151 t\u00e1bl\u00e1k elv\u00e1laszt\u00e1sa \u00e9s a kidolgoz\u00e1ssal val\u00f3 elv\u00e1laszt\u00e1s.<\/p>\n<p>A megl\u00e9v\u0151 t\u00e1bl\u00e1k elv\u00e1laszt\u00e1sa olyan m\u00f3dszer, amelyet j\u00f3l alkalmazhatunk, ha az adatszerkezet kiv\u00e1l\u00f3 min\u0151s\u00e9g\u0171, megfelel az \u00fczleti k\u00f6vetelm\u00e9nyeknek, \u00e9s mindenki el\u00e9gedett vele. Ebben az esetben k\u00fcl\u00f6n s\u00e9ma al\u00e1 helyezhetj\u00fck a megl\u00e9v\u0151 t\u00e1bl\u00e1kat.<\/p>\n<p>A kidolgoz\u00e1ssal val\u00f3 elv\u00e1laszt\u00e1s akkor sz\u00fcks\u00e9ges, amikor az \u00fczleti modell er\u0151sen megv\u00e1ltozott, \u00e9s a t\u00e1bl\u00e1k m\u00e1r egy\u00e1ltal\u00e1n nem felelnek meg az ig\u00e9nyeinknek.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"10\"><\/a><\/noindex><b>A megl\u00e9v\u0151 t\u00e1bl\u00e1k elv\u00e1laszt\u00e1sa.<\/b> Meg kell hat\u00e1roznunk, hogy mit fogunk elv\u00e1lasztani. En\u00e9lk\u00fcl a tud\u00e1s n\u00e9lk\u00fcl semmi nem m\u0171k\u00f6dik, \u00e9s itt seg\u00edthet a k\u00f3dban a korl\u00e1tozott kontextusok elv\u00e1laszt\u00e1sa. \u00c1ltal\u00e1noss\u00e1gban elmondhat\u00f3, ha siker\u00fcl meg\u00e9rteni az eredeti k\u00f3d kontextusainak hat\u00e1rait, vil\u00e1goss\u00e1 v\u00e1lik, hogy mely t\u00e1bl\u00e1k tartoznak az elv\u00e1lasztand\u00f3k list\u00e1j\u00e1ba.<\/p>\n<p>K\u00e9pzelj\u00fck el, hogy van egy megold\u00e1sunk, ahol a monolit k\u00e9t modulja egy k\u00f6z\u00f6s adatb\u00e1zison dolgozik. Azt szeretn\u00e9nk, hogy az elv\u00e1lasztott t\u00e1bl\u00e1k egy r\u00e9sz\u00e9t csak egy modul \u00e9rje el, m\u00edg a m\u00e1sik modul az API-n kereszt\u00fcl l\u00e9pjen vele kapcsolatba. Kezdetben elegend\u0151, ha csak \u00edr\u00e1s t\u00f6rt\u00e9nik az API-n kereszt\u00fcl. Ez sz\u00fcks\u00e9ges felt\u00e9tel ahhoz, hogy a mikroszolg\u00e1ltat\u00e1sok f\u00fcggetlens\u00e9g\u00e9r\u0151l besz\u00e9lhess\u00fcnk. Az olvas\u00e1si kapcsolatokat fenntarthatjuk, am\u00edg ez nem jelent nagy probl\u00e9m\u00e1t.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/1602637ad752ac055f475cfa45d95e95.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00f6vetkez\u0151 l\u00e9p\u00e9sk\u00e9nt az elv\u00e1lasztott t\u00e1bl\u00e1kkal foglalkoz\u00f3 k\u00f3dr\u00e9szletet, ak\u00e1r kidolgoz\u00e1ssal, ak\u00e1r an\u00e9lk\u00fcl, k\u00fcl\u00f6n mikroszolg\u00e1ltat\u00e1sk\u00e9nt kiemelhetj\u00fck, \u00e9s k\u00fcl\u00f6n folyamatban, kont\u00e9nerben futtathatjuk. Ez egy k\u00fcl\u00f6n szolg\u00e1ltat\u00e1s lesz, amely kapcsolatban \u00e1ll a monolit adatb\u00e1zis\u00e1val \u00e9s azokkal a t\u00e1bl\u00e1kkal, amelyek k\u00f6zvetlen\u00fcl nem tartoznak hozz\u00e1. A monolit tov\u00e1bbra is olvas\u00e1si kapcsolaton van az elv\u00e1lasztott r\u00e9szleggel. <\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/36011f4e6be4f6a2f19f2f074b645dcb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00e9s\u0151bb elt\u00e1vol\u00edtjuk ezt a kapcsolatot, teh\u00e1t a monolit alkalmaz\u00e1sb\u00f3l az elv\u00e1lasztott t\u00e1bl\u00e1k adatait is \u00e1t\u00e1ll\u00edtjuk API-ra.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/290f91bbfccac2a4b384078e4cf4e337.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEzut\u00e1n v\u00e1lasszuk el a k\u00f6z\u00f6s adatb\u00e1zisb\u00f3l azokat a t\u00e1bl\u00e1kat, amelyekkel csak az \u00faj mikroszolg\u00e1ltat\u00e1s dolgozik. A t\u00e1bl\u00e1kat kiemelhetj\u00fck egy k\u00fcl\u00f6n s\u00e9m\u00e1ba vagy ak\u00e1r egy k\u00fcl\u00f6n fizikai adatb\u00e1zisba is. Az olvas\u00e1si kapcsolat tov\u00e1bbra is megmarad a mikroszolg\u00e1ltat\u00e1s \u00e9s a monolit adatb\u00e1zisa k\u00f6z\u00f6tt, de ez nem nagy probl\u00e9ma, ebben a konfigur\u00e1ci\u00f3ban el\u00e9gg\u00e9 sok\u00e1ig \u00e9letk\u00e9pes maradhat.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/ab947ac6a38ffbccd4e2b51103aef609.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz utols\u00f3 l\u00e9p\u00e9s a kapcsolatok teljes elt\u00e1vol\u00edt\u00e1sa. Ebben az esetben lehet, hogy sz\u00fcks\u00e9g\u00fcnk lesz az adatb\u00e1zis f\u0151 migr\u00e1l\u00e1s\u00e1ra. N\u00e9ha \u00fajra fel szeretn\u00e9nk haszn\u00e1lni n\u00e9h\u00e1ny, k\u00fcls\u0151 rendszerekb\u0151l m\u00e1solt adatot vagy referencia\u00e9rt\u00e9ket t\u00f6bb adatb\u00e1zisban. Ez id\u0151nk\u00e9nt el\u0151fordul n\u00e1lunk.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/f40cf17dd56b9575751e370c44f08344.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"11\"><\/a><\/noindex><b>\u00c1talak\u00edt\u00f3 oszt\u00e1ly.<\/b> Ez a m\u00f3dszer nagyon hasonl\u00f3 az els\u0151h\u00f6z, csak ford\u00edtott sorrendben t\u00f6rt\u00e9nik. Azonnal l\u00e9trej\u00f6n egy \u00faj adatb\u00e1zis \u00e9s egy \u00faj mikroservice, amely az API-n kereszt\u00fcl l\u00e9p kapcsolatba a monolitikus rendszerrel. De k\u00f6zben megmarad egy adatb\u00e1zis-t\u00e1bl\u00e1k halmaza, amelyeket a j\u00f6v\u0151ben szeretn\u00e9nk elt\u00e1vol\u00edtani. Erre m\u00e1r nincs sz\u00fcks\u00e9g, az \u00faj modellben helyettes\u00edtett\u00fck.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/c94932033e47cfa1fd56595ab9a19246.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAhhoz, hogy ez a s\u00e9ma m\u0171k\u00f6dj\u00f6n, val\u00f3sz\u00edn\u0171leg sz\u00fcks\u00e9g lesz egy \u00e1tmeneti id\u0151szakra.<\/p>\n<p>Ezut\u00e1n k\u00e9t lehets\u00e9ges megk\u00f6zel\u00edt\u00e9s \u00e1ll rendelkez\u00e9sre.<\/p>\n<p><b>Az els\u0151<\/b>: duplik\u00e1ljuk az \u00f6sszes adatot az \u00faj \u00e9s a r\u00e9gi adatb\u00e1zisokban. Ebben az esetben adatduplicit\u00e1s j\u00f6n l\u00e9tre, szinkroniz\u00e1l\u00e1si probl\u00e9m\u00e1k l\u00e9phetnek fel. De cser\u00e9be k\u00e9t k\u00fcl\u00f6nb\u00f6z\u0151 \u00fcgyfelet kezelhet\u00fcnk. Az egyik az \u00faj verzi\u00f3val dolgozik, a m\u00e1sik a r\u00e9givel.<\/p>\n<p><b>M\u00e1sodik<\/b>: az adatokat valamilyen \u00fczleti jellemz\u0151 alapj\u00e1n osztjuk sz\u00e9t. P\u00e9ld\u00e1ul a rendszer\u00fcnkben volt 5 term\u00e9k, amely a r\u00e9gi adatb\u00e1zisban t\u00e1rol\u00f3dott. A hatodikot egy \u00faj \u00fczleti feladat keret\u00e9ben \u00faj adatb\u00e1zisba helyezz\u00fck. De sz\u00fcks\u00e9g\u00fcnk lesz egy API Gateway-re, amely szinkroniz\u00e1lja ezeket az adatokat \u00e9s megmutatja az \u00fcgyf\u00e9lnek, honnan \u00e9s mit kell venni.<\/p>\n<p>Mindk\u00e9t megk\u00f6zel\u00edt\u00e9s m\u0171k\u00f6d\u0151k\u00e9pes, v\u00e1lasszon a helyzet f\u00fcggv\u00e9ny\u00e9ben.<\/p>\n<p>Miut\u00e1n megbizonyosodtunk arr\u00f3l, hogy minden m\u0171k\u00f6dik, a monolit egy r\u00e9sz\u00e9t, amely a r\u00e9gi adatb\u00e1zis-strukt\u00far\u00e1kkal dolgozik, le lehet kapcsolni. <\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/973bf5015bdf49a290a5b901f89628cc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz utols\u00f3 l\u00e9p\u00e9s a r\u00e9gi adattagok elt\u00e1vol\u00edt\u00e1sa lesz. <\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/fe83acc07077b7eb3717138e3c20c005.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00d6sszefoglalva elmondhat\u00f3, hogy adatb\u00e1zissal kapcsolatos probl\u00e9m\u00e1ink vannak: nehezebb vele dolgozni a forr\u00e1sk\u00f3ddal \u00f6sszehasonl\u00edtva, nehezebb a sz\u00e9tv\u00e1laszt\u00e1s, de megoldhat\u00f3 \u00e9s sz\u00fcks\u00e9ges is. Tal\u00e1ltunk n\u00e9h\u00e1ny m\u00f3dszert, amelyek lehet\u0151v\u00e9 teszik a biztons\u00e1gos v\u00e9grehajt\u00e1st, v\u00e9g\u00fcl is az adatokkal hib\u00e1zni k\u00f6nnyebb, mint a forr\u00e1sk\u00f3ddal. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"12\"><\/a><\/noindex><b><\/p>\n<h3>Munka a forr\u00e1sk\u00f3ddal<\/h3>\n<p><\/b><br \/>\n\u00cdgy n\u00e9zett ki a forr\u00e1sk\u00f3d s\u00e9m\u00e1ja, amikor elkezdt\u00fck elemezni a monolitikus projektet.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/a6d886e37117ccf8f63106d6616aa653.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA r\u00e9tegeket h\u00e1rom r\u00e9szre lehet osztani. Az indul\u00f3 modulok, b\u0151v\u00edtm\u00e9nyek, szolg\u00e1ltat\u00e1sok \u00e9s k\u00fcl\u00f6nb\u00f6z\u0151 tev\u00e9kenys\u00e9gek r\u00e9teg\u00e9r\u0151l van sz\u00f3. Val\u00f3j\u00e1ban ezek voltak a bejut\u00e1si pontok egy monolitikus megold\u00e1son bel\u00fcl. Mindannyian szorosan kapcsol\u00f3dtak a Common r\u00e9teghez. Ebben volt a v\u00e1llalati logika, amelyet a szolg\u00e1ltat\u00e1sok k\u00f6z\u00f6sen haszn\u00e1ltak, \u00e9s sz\u00e1mos kapcsolat. Minden szolg\u00e1ltat\u00e1s \u00e9s b\u0151v\u00edtm\u00e9ny ak\u00e1r 10 vagy ann\u00e1l t\u00f6bb k\u00f6z\u00f6s komponenst haszn\u00e1lt, a m\u00e9ret\u00fckt\u0151l \u00e9s a fejleszt\u0151k lelkiismeret\u00e9t\u0151l f\u00fcgg\u0151en.<\/p>\n<p>Szerencs\u00e9nk volt, mert voltak infrastruktur\u00e1lis k\u00f6nyvt\u00e1raink, amelyeket k\u00fcl\u00f6n is lehetett haszn\u00e1lni. <\/p>\n<p>N\u00e9ha el\u0151fordult, hogy egyes Common objektumok val\u00f3j\u00e1ban nem tartoztak ehhez a r\u00e9teghez, hanem infrastruktur\u00e1lis k\u00f6nyvt\u00e1rak voltak. Ezt \u00e1tnevez\u00e9ssel oldott\u00e1k meg.<\/p>\n<p>A legnagyobb aggodalmat a korl\u00e1tozott kontextusok okozt\u00e1k. El\u0151fordult, hogy 3-4 kontextus keveredett egyetlen Common csomagban, \u00e9s egym\u00e1st haszn\u00e1lt\u00e1k egyes \u00fczleti funkci\u00f3k keretein bel\u00fcl. Meg kellett \u00e9rten\u00fcnk, hol lehet ezt sz\u00e9tv\u00e1lasztani \u00e9s milyen hat\u00e1rok ment\u00e9n, valamint mit tegy\u00fcnk a sz\u00e9tv\u00e1laszt\u00e1s t\u00e9rk\u00e9pez\u00e9s\u00e9vel a forr\u00e1sk\u00f3d csomagokra.<\/p>\n<p>T\u00f6bb szab\u00e1lyt fogalmaztunk meg a k\u00f3d sz\u00e9tv\u00e1laszt\u00e1s\u00e1nak folyamat\u00e1ra.<\/p>\n<p><b>Els\u0151<\/b>: m\u00e1r nem akartuk a v\u00e1llalati logika k\u00f6z\u00f6s haszn\u00e1lat\u00e1t a szolg\u00e1ltat\u00e1sok, tev\u00e9kenys\u00e9gek \u00e9s b\u0151v\u00edtm\u00e9nyek k\u00f6z\u00f6tt. Szerett\u00fck volna, ha a v\u00e1llalati logika f\u00fcggetlen legyen a mikroszolg\u00e1ltat\u00e1sok keretein bel\u00fcl. M\u00e1sr\u00e9szr\u0151l, a mikroszolg\u00e1ltat\u00e1sok, elvileg, teljesen f\u00fcggetlen szolg\u00e1ltat\u00e1sokk\u00e9nt l\u00e9teznek. \u00dagy \u00e9rzem, hogy ez a megk\u00f6zel\u00edt\u00e9s n\u00e9mileg pazarl\u00f3, \u00e9s nehezen el\u00e9rhet\u0151, hiszen p\u00e9ld\u00e1ul a C#-on \u00edr\u00f3dott szolg\u00e1ltat\u00e1sok \u00edgy is \u00f6sszekapcsol\u00f3dnak a standard k\u00f6nyvt\u00e1rral. A rendszer\u00fcnk C#-ban k\u00e9sz\u00fclt, m\u00e1s technol\u00f3gi\u00e1kat eddig m\u00e9g nem haszn\u00e1ltunk. Ez\u00e9rt \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy megengedhetj\u00fck magunknak a k\u00f6z\u00f6s technikai csomagok haszn\u00e1lat\u00e1t. A legfontosabb, hogy ne legyenek benne v\u00e1llalati logika r\u00e9szletek. Ha van egy k\u00e9nyelmes burkol\u00f3 az ORM-en, amit haszn\u00e1lsz, akkor nagyon k\u00f6lts\u00e9ges \u00e1tm\u00e1solni azt szolg\u00e1ltat\u00e1sr\u00f3l szolg\u00e1ltat\u00e1sra.<\/p>\n<p>Csapatunk a t\u00e1rgyorient\u00e1lt tervez\u00e9s h\u00edve, ez\u00e9rt a \u201ehagymaarchitekt\u00fara\u201d t\u00f6k\u00e9letesen illeszkedik hozz\u00e1nk. Szolg\u00e1ltat\u00e1saink alapj\u00e1t nem az adatel\u00e9r\u00e9si r\u00e9teg k\u00e9pezi, hanem egy domain logik\u00e1b\u00f3l \u00e1ll\u00f3 \u00f6sszes\u00edt\u00e9s, amely csak az \u00fczleti logik\u00e1t tartalmazza, \u00e9s mentes az infrastrukt\u00far\u00e1val val\u00f3 kapcsolatokt\u00f3l. Ennek k\u00f6sz\u00f6nhet\u0151en f\u00fcggetlen\u00fcl tudjuk fejleszteni a domain \u00f6sszes\u00edt\u00e9st a keretrendszerekkel kapcsolatos probl\u00e9m\u00e1k megold\u00e1sa \u00e9rdek\u00e9ben.<\/p>\n<p>Ebben a f\u00e1zisban tal\u00e1lkoztunk az els\u0151 komoly probl\u00e9m\u00e1val. A szolg\u00e1ltat\u00e1snak egy domain \u00f6sszes\u00edt\u00e9sre kellett hivatkoznia, a logik\u00e1t f\u00fcggetlenk\u00e9nt szerett\u00fck volna megval\u00f3s\u00edtani, \u00e9s itt a DRY elv jelent\u0151sen akad\u00e1lyozott minket. A fejleszt\u0151k el akart\u00e1k ker\u00fclni a duplik\u00e1ci\u00f3t, ez\u00e9rt a szomsz\u00e9dos \u00f6sszes\u00edt\u00e9sekb\u0151l szerett\u00e9k volna \u00fajra felhaszn\u00e1lni az oszt\u00e1lyokat, \u00e9s ennek k\u00f6vetkezt\u00e9ben a domainek ism\u00e9t \u00f6sszekapcsol\u00f3dtak. Elemezt\u00fck az eredm\u00e9nyeket, \u00e9s \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy tal\u00e1n a probl\u00e9ma a forr\u00e1sk\u00f3d t\u00e1rol\u00e1s\u00e1nak ter\u00fclet\u00e9n is rejlik. Volt egy nagy t\u00e1rol\u00f3nk, ahol minden forr\u00e1sk\u00f3d megtal\u00e1lhat\u00f3 volt. Nagyon neh\u00e9z volt az eg\u00e9sz projekthez megold\u00e1st l\u00e9trehozni helyi g\u00e9pen. Ez\u00e9rt a projekt egyes r\u00e9szeihez k\u00fcl\u00f6n kicsi megold\u00e1sokat hoztunk l\u00e9tre, \u00e9s senki sem tiltotta, hogy b\u00e1rmilyen k\u00f6z\u00f6s vagy domain \u00f6sszes\u00edt\u00e9st hozz\u00e1adjunk, \u00e9s \u00fajra felhaszn\u00e1ljuk. Az egyetlen eszk\u00f6z, amely megakad\u00e1lyozta ezt, a k\u00f3dellen\u0151rz\u00e9s volt. De n\u00e9ha ez is hib\u00e1zott.<\/p>\n<p>Ekkor elkezdt\u00fck \u00e1t\u00e1llni a k\u00fcl\u00f6n t\u00e1rolok modellj\u00e9re. Az \u00fczleti logika t\u00f6bb\u00e9 nem sziv\u00e1rgott \u00e1t a szolg\u00e1ltat\u00e1sok k\u00f6z\u00f6tt, a domainek val\u00f3ban f\u00fcggetlenn\u00e9 v\u00e1ltak. A korl\u00e1tozott kontextusok sokkal vil\u00e1gosabbak lettek. Hogyan haszn\u00e1ljuk fel ekkor az infrastrukt\u00fara k\u00f6nyvt\u00e1rakat? K\u00fcl\u00f6n t\u00e1rol\u00f3ba helyezt\u00fck \u0151ket, majd Nuget-csomagokba z\u00e1rtuk, amelyeket az Artifactoryba helyezt\u00fcnk. B\u00e1rmilyen m\u00f3dos\u00edt\u00e1s eset\u00e9n a build \u00e9s publik\u00e1l\u00e1s automatikusan t\u00f6rt\u00e9nik.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/8ddbc750dc7c6d397a459acf7825de90.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSzolg\u00e1ltat\u00e1saink pontosan \u00fagy hivatkoznak a bels\u0151 infrastrukt\u00fara csomagokra, mint a k\u00fcls\u0151kre. A k\u00fcls\u0151 k\u00f6nyvt\u00e1rakat a Nuget-b\u0151l t\u00f6ltj\u00fck le. Az Artifactoryval, ahov\u00e1 ezeket a csomagokat elhelyezt\u00fck, k\u00e9t csomagkezel\u0151t alkalmaztunk. A kis t\u00e1rol\u00f3kban szint\u00e9n Nugetet haszn\u00e1ltunk. A t\u00f6bb szolg\u00e1ltat\u00e1st tartalmaz\u00f3 t\u00e1rol\u00f3kban a Paketet haszn\u00e1ltuk, amely nagyobb verzi\u00f3egys\u00e9gess\u00e9get biztos\u00edt a modulok k\u00f6z\u00f6tt.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/672a25a70a481bff68baebe963184ccd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz\u00e9rt az alap k\u00f3don dolgozva, n\u00e9mi architekt\u00fara m\u00f3dos\u00edt\u00e1ssal \u00e9s a t\u00e1rol\u00f3k sz\u00e9tv\u00e1laszt\u00e1s\u00e1val a szolg\u00e1ltat\u00e1saink f\u00fcggetlenebb\u00e9 v\u00e1lnak.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"13\"><\/a><\/noindex><b><\/p>\n<h3>Infrastrukt\u00fara probl\u00e9m\u00e1k<\/h3>\n<p><\/b><br \/>\nA mikroszolg\u00e1ltat\u00e1sokra val\u00f3 \u00e1tt\u00e9r\u00e9s sor\u00e1n fell\u00e9p\u0151 probl\u00e9m\u00e1k t\u00f6bbs\u00e9ge az infrastrukt\u00far\u00e1val kapcsolatos. Automatikus telep\u00edt\u00e9sre lesz sz\u00fcks\u00e9g, \u00faj k\u00f6nyvt\u00e1rakra az infrastrukt\u00fara m\u0171k\u00f6d\u00e9s\u00e9hez.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"16\"><\/a><\/noindex><b>K\u00e9zi telep\u00edt\u00e9s a k\u00f6rnyezetekbe<\/b><\/p>\n<p>A k\u00f6rnyezetek telep\u00edt\u00e9s\u00e9t kezdetben k\u00e9zzel v\u00e9gezt\u00fck. Ennek a folyamatnak az automatiz\u00e1l\u00e1s\u00e1hoz CI\/CD cs\u0151vezet\u00e9ket hoztunk l\u00e9tre. A folyamatos sz\u00e1ll\u00edt\u00e1st v\u00e1lasztottuk, mert a folyamatos telep\u00edt\u00e9s jelenleg nem elfogadhat\u00f3 sz\u00e1munkra az \u00fczleti folyamatok szempontj\u00e1b\u00f3l. \u00cdgy a telep\u00edt\u00e9s gombnyom\u00e1sra t\u00f6rt\u00e9nik, a tesztel\u00e9s viszont automatikusan zajlik.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/0fc092326a48813398c6f3a031197bab.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz Atlassian, a Bitbucket adja a forr\u00e1sk\u00f3dok t\u00e1rol\u00e1s\u00e1t, m\u00edg a Bamboo a buildel\u00e9shez sz\u00fcks\u00e9ges. Szeretj\u00fck a Cake nyelv\u0171 build script-eket \u00edrni, mert az ugyanaz, mint a C#. Az Artifactory-ba m\u00e1r k\u00e9szen \u00e9rkeznek a csomagok, \u00e9s az Ansible automatikusan a tesztkiszolg\u00e1l\u00f3kra ker\u00fcl, ahonnan azokat azonnal tesztelhetj\u00fck.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/fcc743cfaa4a24b906ceeb40ec1ba0a0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"14\"><\/a><\/noindex><b><\/p>\n<h3>K\u00fcl\u00f6n loggol\u00e1s<\/h3>\n<p><\/b><br \/>\nEgyszer, a monolit egyik \u00f6tlete a k\u00f6z\u00f6s napl\u00f3z\u00e1s biztos\u00edt\u00e1sa volt. A k\u00fcl\u00f6nb\u00f6z\u0151 napl\u00f3kkal is foglalkoznunk kellett, amelyek a lemezeken vannak. A napl\u00f3ink text f\u00e1jlokba \u00edr\u00f3dnak. A standard ELK stack haszn\u00e1lat\u00e1t d\u00f6nt\u00f6tt\u00fck el. Nem akartunk k\u00f6zvetlen\u00fcl az ELK-be \u00edrni a szolg\u00e1ltat\u00f3k r\u00e9v\u00e9n, \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy kieg\u00e9sz\u00edtj\u00fck a sz\u00f6veges napl\u00f3kat, \u00e9s a napl\u00f3kba be\u00edrjuk a nyomoz\u00e1si azonos\u00edt\u00f3t az azonos\u00edt\u00f3 form\u00e1j\u00e1ban, hozz\u00e1adva a szolg\u00e1ltat\u00e1s nev\u00e9t, hogy ezeket a napl\u00f3kat k\u00e9s\u0151bb elemezni lehessen.<\/p>\n<p><img decoding=\"async\" alt=\"\u00c1t\u00e1ll\u00e1s a monolitikus rendszerr\u0151l a mikroservice-ekre: t\u00f6rt\u00e9nelem \u00e9s gyakorlat\" src=\"\/wp-content\/uploads\/2019\/07\/8e58c66ac134e65abe34b59939f31483.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA Filebeat seg\u00edts\u00e9g\u00e9vel lehet\u0151s\u00e9g\u00fcnk ny\u00edlik a napl\u00f3ink gy\u0171jt\u00e9s\u00e9re, <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/hu\/server\/\"   title=\"szerverek\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1338\">szerverek<\/a>, majd azok \u00e1talak\u00edt\u00e1s\u00e1ra, a Kibana seg\u00edts\u00e9g\u00e9vel k\u00e9rd\u00e9seket gener\u00e1lni a felhaszn\u00e1l\u00f3i fel\u00fcleten, \u00e9s megfigyelni, hogyan zajlott a h\u00edv\u00e1s a szolg\u00e1ltat\u00e1sok k\u00f6z\u00f6tt. Ezen nagyban seg\u00edt a nyomoz\u00e1si azonos\u00edt\u00f3.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"15\"><\/a><\/noindex><b><\/p>\n<h3>Kapcsol\u00f3d\u00f3 szolg\u00e1ltat\u00e1sok tesztel\u00e9se \u00e9s hibakeres\u00e9se<\/h3>\n<p><\/b><br \/>\nKezdetben nem teljesen \u00e9rtett\u00fck, hogyan kellene debug-olnunk a fejlesztett szolg\u00e1ltat\u00e1sokat. A monolit\u00e1k eset\u00e9ben minden egyszer\u0171 volt, elind\u00edtottuk a helyi g\u00e9p\u00fcnk\u00f6n. Eleinte hasonl\u00f3an pr\u00f3b\u00e1lkoztunk a mikroszolg\u00e1ltat\u00e1sokkal is, de n\u00e9ha egy mikroszolg\u00e1ltat\u00e1s teljes ind\u00edt\u00e1s\u00e1hoz t\u00f6bb m\u00e1sik ind\u00edt\u00e1sa is sz\u00fcks\u00e9ges, ami k\u00e9nyelmetlen. R\u00e1 kellett d\u00f6bbenn\u00fcnk, hogy sz\u00fcks\u00e9ges \u00e1tt\u00e9rni arra a modellre, amikor csak azokat a szolg\u00e1ltat\u00e1sokat tartjuk a helyi g\u00e9pen, amelyeket debug-olni szeretn\u00e9nk. A t\u00f6bbi szolg\u00e1ltat\u00e1s a prod-konfigur\u00e1ci\u00f3val megegyez\u0151 szerverekr\u0151l \u00e9rhet\u0151 el. A debug\u00e1l\u00e1s ut\u00e1n, a tesztel\u00e9s sor\u00e1n, minden feladathoz a tesztk\u00f6rnyezetre csak a m\u00f3dos\u00edtott szolg\u00e1ltat\u00e1sokat telep\u00edtj\u00fck. \u00cdgy a megold\u00e1s olyan form\u00e1ban ker\u00fcl tesztel\u00e9sre, ahogyan a j\u00f6v\u0151ben a prodban is meg fog jelenni.<\/p>\n<p>Vannak olyan szerverek, amelyeken csak a production verzi\u00f3k futnak. Ezek a szerverek sz\u00fcks\u00e9gesek incidenst eset\u00e9n, a telep\u00edt\u00e9s el\u0151tti ellen\u0151rz\u00e9shez \u00e9s bels\u0151 k\u00e9pz\u00e9sekhez.<\/p>\n<p>Hozz\u00e1ad\u00f3dott egy automatikus tesztel\u00e9si folyamat a n\u00e9pszer\u0171 Specflow k\u00f6nyvt\u00e1r seg\u00edts\u00e9g\u00e9vel. A teszteket automatikusan ind\u00edtj\u00e1k az NUnit seg\u00edts\u00e9g\u00e9vel, k\u00f6zvetlen\u00fcl az Ansible-b\u00f3l val\u00f3 telep\u00edt\u00e9s ut\u00e1n. Ha a feladat teljesen automatiz\u00e1lva van, nincs sz\u00fcks\u00e9g manu\u00e1lis tesztel\u00e9sre. B\u00e1r id\u0151nk\u00e9nt m\u00e9gis sz\u00fcks\u00e9ges a tov\u00e1bbi manu\u00e1lis tesztel\u00e9s. Azoknak a teszteknek a meghat\u00e1roz\u00e1s\u00e1ra, amelyeket egy adott feladathoz kell v\u00e9grehajtani, a Jir\u00e1ban c\u00edmk\u00e9ket haszn\u00e1lunk.<\/p>\n<p>Tov\u00e1bb\u00e1 megn\u0151tt az ig\u00e9ny a terhel\u00e9ses tesztel\u00e9s ir\u00e1nt, ami kor\u00e1bban csak ritk\u00e1n t\u00f6rt\u00e9nt. A tesztek futtat\u00e1s\u00e1hoz a JMeter-t haszn\u00e1ljuk, a t\u00e1rol\u00e1sukhoz az InfluxDB-t, \u00e9s a folyamat grafikonjainak elk\u00e9sz\u00edt\u00e9s\u00e9hez a Grafana-t.<\/p>\n<p><b><\/p>\n<h3>Mit \u00e9rt\u00fcnk el?<\/h3>\n<p><\/b><br \/>\nEl\u0151sz\u00f6r is megszabadultunk a 'kiad\u00e1sok' fogalm\u00e1t\u00f3l. Megsz\u0171ntek a k\u00e9t h\u00f3napos monstrum kiad\u00e1sok, amikor ez a nagy g\u00e9pezet telep\u00edtve volt a production k\u00f6rnyezetbe, ideiglenesen t\u00f6nkre t\u00e9ve az \u00fczleti folyamatokat. Jelenleg \u00e1tlagosan 1,5 naponta telep\u00edt\u00fcnk szolg\u00e1ltat\u00e1sokat, csoportos\u00edtva \u0151ket, mivel csak azut\u00e1n indulnak be, hogy azokat j\u00f3v\u00e1hagyt\u00e1k.<\/p>\n<p>Rendszer\u00fcnkben nincsenek fat\u00e1lis hib\u00e1k. Ha egy mikroszolg\u00e1ltat\u00e1st hib\u00e1val adunk ki, akkor az ehhez kapcsol\u00f3d\u00f3 funkcionalit\u00e1s megs\u00e9r\u00fcl, de a t\u00f6bbi funkcionalit\u00e1s nem szenved k\u00e1rosod\u00e1st. Ez jelent\u0151sen jav\u00edtja a felhaszn\u00e1l\u00f3i \u00e9lm\u00e9nyt.<\/p>\n<p>Keletkezett lehet\u0151s\u00e9g van a telep\u00edt\u00e9si s\u00e9ma kezel\u00e9s\u00e9re. Sz\u00fcks\u00e9g eset\u00e9n a szolg\u00e1ltat\u00e1scsoportokat k\u00fcl\u00f6n kezelhetj\u00fck a t\u00f6bbi megold\u00e1st\u00f3l.<\/p>\n<p>Ezenk\u00edv\u00fcl jelent\u0151sen cs\u00f6kkentett\u00fck a hossz\u00fa v\u00e1r\u00f3list\u00e1k probl\u00e9m\u00e1j\u00e1t. K\u00fcl\u00f6n term\u00e9kcsapatok j\u00f6ttek l\u00e9tre, amelyek f\u00fcggetlen\u00fcl dolgoznak egyes szolg\u00e1ltat\u00e1sokkal. A Scrum folyamat ebben az esetben j\u00f3l alkalmazhat\u00f3. Egy konkr\u00e9t csapatnak lehet k\u00fcl\u00f6n term\u00e9kfelel\u0151se, aki feladatokat ad neki. <\/p>\n<p><b><\/p>\n<h3>\u00d6sszefoglal\u00f3<\/h3>\n<p><\/b><\/p>\n<ul>\n<li>A mikroszolg\u00e1ltat\u00e1sok j\u00f3l alkalmazhat\u00f3k bonyolult rendszerek dekompoz\u00edci\u00f3j\u00e1ra. A folyamat sor\u00e1n kezdetben meg\u00e9rtj\u00fck, mi van a rendszer\u00fcnkben, milyen korl\u00e1tozott kontextusok l\u00e9teznek, hol vannak a hat\u00e1raik. Ez lehet\u0151v\u00e9 teszi, hogy helyesen osszuk el a fejleszt\u00e9seket a modulok k\u00f6z\u00f6tt, \u00e9s elker\u00fclj\u00fck a k\u00f3d \u00f6sszezavarod\u00e1s\u00e1t. <\/li>\n<li>A mikroszolg\u00e1ltat\u00e1sok szervezeti el\u0151ny\u00f6ket ny\u00fajtanak. Gyakran csak mint architekt\u00far\u00e1r\u00f3l besz\u00e9lnek, de b\u00e1rmilyen architekt\u00fara a v\u00e1llalkoz\u00e1s ig\u00e9nyeinek kiel\u00e9g\u00edt\u00e9s\u00e9re szolg\u00e1l, \u00e9s nem \u00f6nmag\u00e1\u00e9rt van. Ez\u00e9rt elmondhatjuk, hogy a mikroszolg\u00e1ltat\u00e1sok j\u00f3l alkalmasak kisebb csapatok feladatainak megold\u00e1s\u00e1ra, figyelembe v\u00e9ve, hogy a Scrum nagyon n\u00e9pszer\u0171 jelenleg.<\/li>\n<li>A feloszt\u00e1s egy iterat\u00edv folyamat. Nem lehet csak \u00fagy elvenni egy alkalmaz\u00e1st, \u00e9s egyszer\u0171en mikroszolg\u00e1ltat\u00e1sokra osztani. Az \u00edgy kapott term\u00e9k val\u00f3sz\u00edn\u0171leg nem lesz m\u0171k\u00f6d\u0151k\u00e9pes. A mikroszolg\u00e1ltat\u00e1sok kiemel\u00e9se sor\u00e1n \u00e9rdemes \u00e1t\u00edrni a megl\u00e9v\u0151 \u00f6r\u00f6ks\u00e9get, azaz olyan k\u00f3dot l\u00e9trehozni, amely tetszik nek\u00fcnk, \u00e9s jobban kiel\u00e9g\u00edti az \u00fczleti ig\u00e9nyeket a funkcionalit\u00e1s \u00e9s a sebess\u00e9g szempontj\u00e1b\u00f3l.\n<p><i>Egy kis figyelmeztet\u00e9s:<\/i> a mikroszolg\u00e1ltat\u00e1sokra val\u00f3 \u00e1t\u00e1ll\u00e1s k\u00f6lts\u00e9gei meglehet\u0151sen jelent\u0151sek. Csak az infrastrukt\u00fara probl\u00e9m\u00e1inak megold\u00e1s\u00e1ra is sok id\u0151t ford\u00edtottunk. Ez\u00e9rt ha van egy kis alkalmaz\u00e1sa, amely nem ig\u00e9nyel speci\u00e1lis m\u00e9retez\u00e9st, \u00e9s nincs sok \u00fcgyfele, akik harcolnak a csapata figyelm\u00e9\u00e9rt \u00e9s idej\u00e9\u00e9rt, akkor lehet, hogy a mikroszolg\u00e1ltat\u00e1sok nem sz\u00fcks\u00e9gesek \u00d6nnek ma. Ez el\u00e9g dr\u00e1ga. Ha a mikroszolg\u00e1ltat\u00e1sokkal kezdi el a folyamatot, akkor a k\u00f6lts\u00e9gek kezdetben magasabbak lesznek, mint ha ugyanazt a projektet monolit fejleszt\u00e9ssel ind\u00edtan\u00e1. <\/p>\n<p>P.S. Egy \u00e9rzelmibb elmond\u00e1s (mintha szem\u00e9lyesen \u00d6nnek sz\u00f3ln\u00e9k) \u2013 itt <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=qTNbx18DzpQ\">linkre kattintva<\/a><\/noindex>. <br \/>\nItt van a besz\u00e1mol\u00f3 teljes verzi\u00f3ja.<\/li>\n<\/ul>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/raiffeisenbank\/blog\/458404\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u0441\u0432\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e, \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2000. \u041f\u0435\u0440\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u044b\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 Visual Basic 6. \u0421 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a IDE [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26858,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-35906","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u0441\u0432\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e, \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2000.\" \/>\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\/hu\/blog\/administrirovanie\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c: \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u0441\u0432\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e, \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2000.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika\" \/>\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:07:29+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:07:29+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\u00c1t\u00e1ll\u00e1s a monolithr\u00f3l a mikroszolg\u00e1ltat\u00e1sokra: t\u00f6rt\u00e9net \u00e9s gyakorlat | ProHoster","description":"Ebben a cikkben arr\u00f3l fogok besz\u00e9lni, hogyan alakult a projekt, amin dolgozom, egy nagy monolitb\u00f3l egy mikroszolg\u00e1ltat\u00e1sokb\u00f3l \u00e1ll\u00f3 rendszerr\u00e9. A projekt t\u00f6rt\u00e9nete m\u00e1r r\u00e9gen, a 2000-es \u00e9vek elej\u00e9n kezd\u0151d\u00f6tt.","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u043a \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c: \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 | ProHoster","og:description":"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0435\u043a\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u0430 \u0432 \u043d\u0430\u0431\u043e\u0440 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430\u0447\u0430\u043b \u0441\u0432\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e, \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2000.","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/perehod-ot-monolita-k-mikroservisam-istoriya-i-praktika","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:07:29+00:00","article:modified_time":"2019-10-31T19:07:29+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"35906","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-02-09 17:04:56","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:54:38","updated":"2026-02-09 17:04:56","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/35906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=35906"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/35906\/revisions"}],"predecessor-version":[{"id":158582,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/35906\/revisions\/158582"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/26858"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=35906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=35906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=35906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}