{"id":84114,"date":"2020-06-05T07:42:55","date_gmt":"2020-06-05T05:42:55","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/one-cloud-os-urovnya-data-czentra-v-odnoklassnikah"},"modified":"2020-06-05T07:42:55","modified_gmt":"2020-06-05T05:42:55","slug":"one-cloud-os-urovnya-data-czentra-v-odnoklassnikah","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/one-cloud-os-urovnya-data-czentra-v-odnoklassnikah","title":{"rendered":"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/fa983acacec59ff2d4ed098f87223971.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aloha, emberek! Oleg Anastasyev vagyok, az Odnoklassznika platform csapat\u00e1ban dolgozom. Rajtam k\u00edv\u00fcl rengeteg hardver is dolgozik az Odnoklassznikaiban. N\u00e9gy adatk\u00f6zpontunk van, amelyek k\u00f6r\u00fclbel\u00fcl 500 \u00e1llv\u00e1nyt tartalmaznak, t\u00f6bb mint 8000 szerverrel. Egy id\u0151 ut\u00e1n r\u00e1j\u00f6tt\u00fcnk, hogy az \u00faj kezel\u0151rendszer bevezet\u00e9se lehet\u0151v\u00e9 teszi a berendez\u00e9sek hat\u00e9konyabb kihaszn\u00e1l\u00e1s\u00e1t, a hozz\u00e1f\u00e9r\u00e9sek kezel\u00e9s\u00e9nek megk\u00f6nny\u00edt\u00e9s\u00e9t, a sz\u00e1m\u00edt\u00e1si er\u0151forr\u00e1sok automatiz\u00e1lt (\u00fajra)eloszt\u00e1s\u00e1t, az \u00faj szolg\u00e1ltat\u00e1sok gyorsabb ind\u00edt\u00e1s\u00e1t \u00e9s a nagyobb incidensekre val\u00f3 gyorsabb reag\u00e1l\u00e1st. <\/p>\n<p><\/p>\n<p>Mi lett ennek az eredm\u00e9nye? <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Rajtam \u00e9s a rengeteg hardveren k\u00edv\u00fcl m\u00e1s emberek is dolgoznak ezen a hardveren: m\u00e9rn\u00f6k\u00f6k, akik k\u00f6zvetlen\u00fcl az adatk\u00f6zpontokban tal\u00e1lhat\u00f3k; h\u00e1l\u00f3zati szakemberek, akik a h\u00e1l\u00f3zati eszk\u00f6z\u00f6ket konfigur\u00e1lj\u00e1k; adminisztr\u00e1torok, vagyis SRE-k, akik biztos\u00edtj\u00e1k az infrastrukt\u00fara hibamentess\u00e9g\u00e9t; \u00e9s fejleszt\u0151i csapatok, akik k\u00f6z\u00fcl mindegyik felel\u0151s a port\u00e1l egy r\u00e9sz\u00e9nek funkci\u00f3i\u00e9rt. Az \u00e1ltaluk k\u00e9sz\u00edtett szoftver valahogy \u00edgy m\u0171k\u00f6dik:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/592fd0acfa7322eb80fbb85601a92918.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A felhaszn\u00e1l\u00f3k k\u00e9r\u00e9sei \u00e9rkeznek a f\u0151port\u00e1l frontendjeire <noindex><a rel=\"nofollow\" href=\"http:\/\/www.ok.ru\/\">www.ok.ru<\/a><\/noindex>, valamint m\u00e1sokra is, p\u00e9ld\u00e1ul a zenei API frontendre. Az \u00fczleti logika feldolgoz\u00e1s\u00e1hoz h\u00edvj\u00e1k az alkalmaz\u00e1sszervert, amely a k\u00e9r\u00e9s feldolgoz\u00e1sa sor\u00e1n h\u00edvja a sz\u00fcks\u00e9ges specializ\u00e1lt mikroszolg\u00e1ltat\u00e1sokat \u2014 one-graph (a t\u00e1rsadalmi kapcsolatok grafik\u00e1ja), user-cache (felhaszn\u00e1l\u00f3i profilok cache) stb.<\/p>\n<p><\/p>\n<p>Ezek k\u00f6z\u00fcl minden szolg\u00e1ltat\u00e1s sz\u00e1mos g\u00e9pen fut, \u00e9s mindegyiknek vannak felel\u0151s fejleszt\u0151i, akik a modulok m\u0171k\u00f6d\u00e9s\u00e9\u00e9rt, \u00fczemeltet\u00e9s\u00e9\u00e9rt \u00e9s technol\u00f3giai fejl\u0151d\u00e9s\u00e9\u00e9rt felelnek. Mindezeket a szolg\u00e1ltat\u00e1sokat fizikai szervereken ind\u00edtjuk, \u00e9s eg\u00e9szen nemr\u00e9gig pontosan egy feladat futott minden egyes szerveren, azaz a szerverek speci\u00e1lisak voltak egy konkr\u00e9t feladatra.<\/p>\n<p><\/p>\n<p>Mi\u00e9rt van ez \u00edgy? Ennek a megk\u00f6zel\u00edt\u00e9snek t\u00f6bb el\u0151nye volt:<\/p>\n<p><\/p>\n<ul>\n<li>Megk\u00f6nny\u00edti <strong>a t\u00f6meges kezel\u00e9st<\/strong>. Tegy\u00fck fel, hogy a feladat bizonyos k\u00f6nyvt\u00e1rakat vagy be\u00e1ll\u00edt\u00e1sokat ig\u00e9nyel. Akkor a szerver pontosan egy meghat\u00e1rozott csoportra lesz hozz\u00e1rendelve, le\u00edrj\u00e1k a cfengine politik\u00e1t ennek a csoportnak (vagy m\u00e1r le\u00edrva van), \u00e9s ezt a konfigur\u00e1ci\u00f3t k\u00f6zpontos\u00edtva \u00e9s automatikusan telep\u00edtik az \u00f6sszes ehhez a csoporthoz tartoz\u00f3 szerverre.<\/li>\n<li>Egyszer\u0171s\u00edti <strong>a diagnosztik\u00e1t<\/strong>. Tegy\u00fck fel, hogy egy megn\u00f6vekedett CPU terhel\u00e9st vizsg\u00e1lsz, \u00e9s r\u00e1j\u00f6ssz, hogy ezt a terhel\u00e9st csak az a feladat gener\u00e1lhatta, amelyik ezen a fizikai processzoron fut. A hib\u00e1s keres\u00e9se nagyon gyorsan v\u00e9get \u00e9r.<\/li>\n<li>Egyszer\u0171s\u00edti <strong>monitoroz\u00e1s<\/strong>. Ha valami nincs rendben a szerverrel, a monitor \u00e9rtes\u00edt err\u0151l, \u00e9s pontosan tudod, ki a hib\u00e1s.<\/li>\n<\/ul>\n<p><\/p>\n<p>A t\u00f6bb replik\u00e1b\u00f3l \u00e1ll\u00f3 szolg\u00e1ltat\u00e1snak sz\u00e1mos szervert osztanak ki \u2013 egyet mindegyikre. Ekkor a sz\u00e1m\u00edt\u00e1si er\u0151forr\u00e1s a szolg\u00e1ltat\u00e1s sz\u00e1m\u00e1ra nagyon egyszer\u0171en kioszthat\u00f3: annyi er\u0151forr\u00e1st haszn\u00e1lhat a szolg\u00e1ltat\u00e1s, ah\u00e1ny szervere van. A 'szimpla' itt nem azt jelenti, hogy k\u00f6nny\u0171 haszn\u00e1lni, hanem hogy a forr\u00e1sok eloszt\u00e1sa manu\u00e1lisan t\u00f6rt\u00e9nik.<\/p>\n<p><\/p>\n<p>Ez a megk\u00f6zel\u00edt\u00e9s lehet\u0151v\u00e9 tette sz\u00e1munkra, hogy <strong>specializ\u00e1lt hardverkoncepci\u00f3kat<\/strong> alkossunk a szerveren fut\u00f3 feladatra. Ha a feladat nagy mennyis\u00e9g\u0171 adatot t\u00e1rol, akkor 4U-szervert haszn\u00e1lunk, egy 38 lemezes h\u00e1zzal. Ha a feladat tiszt\u00e1n sz\u00e1m\u00edt\u00e1si jelleg\u0171, akkor olcs\u00f3bb 1U-szervert v\u00e1s\u00e1rolhatunk. Ez hat\u00e9kony a sz\u00e1m\u00edt\u00e1si er\u0151forr\u00e1sok szempontj\u00e1b\u00f3l. Ezen megk\u00f6zel\u00edt\u00e9s lehet\u0151v\u00e9 teszi, hogy a g\u00e9pek sz\u00e1m\u00e1t n\u00e9gy r\u00e9szre cs\u00f6kkents\u00fck, amikor a terhel\u00e9s egy bar\u00e1ts\u00e1gos k\u00f6z\u00f6ss\u00e9gi h\u00e1l\u00f3zathoz hasonl\u00f3. <\/p>\n<p><\/p>\n<p>Ez a sz\u00e1m\u00edt\u00e1si er\u0151forr\u00e1sok hat\u00e9kony haszn\u00e1lata gazdas\u00e1gi hat\u00e9konys\u00e1got is kell, hogy biztos\u00edtson, ha abb\u00f3l indulunk ki, hogy a legdr\u00e1g\u00e1bb a szerver. Hossz\u00fa ideig a hardver volt a legdr\u00e1g\u00e1bb, \u00e9s sok energi\u00e1t fektett\u00fcnk a k\u00f6lts\u00e9gek cs\u00f6kkent\u00e9s\u00e9be, olyan algoritmusok kidolgoz\u00e1s\u00e1val, amelyek a megb\u00edzhat\u00f3s\u00e1g cs\u00f6kkent\u00e9s\u00e9re ir\u00e1nyultak. Ma pedig m\u00e1r eljutottunk arra a szintre, ahol a szerver \u00e1ra m\u00e1r nem d\u00f6nt\u0151. Ha nem sz\u00e1m\u00edtjuk a legfrissebb egzotik\u00e1t, akkor a szerverek konkr\u00e9t konfigur\u00e1ci\u00f3ja a rackben nem sz\u00e1m\u00edt. Most egy m\u00e1sik probl\u00e9ma mer\u00fclt fel \u2013 a szerver \u00e1ltal elfoglalt hely \u00e1ra a adatk\u00f6zpontban, azaz a rackben.<\/p>\n<p><\/p>\n<p>Miut\u00e1n r\u00e1j\u00f6tt\u00fcnk, hogy ez igaz, \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy kisz\u00e1moljuk, mennyire hat\u00e9konyan haszn\u00e1ljuk a rackeket.<br \/>\nA legjobban teljes\u00edt\u0151 szerver \u00e1r\u00e1t vett\u00fck alapul, amely gazdas\u00e1gilag indokolt, \u00e9s kisz\u00e1moltuk, h\u00e1ny ilyen szervert tudunk elhelyezni a rackekben, h\u00e1ny feladatot tudn\u00e1nk rajtuk futtatni az \u201eegy szerver = egy feladat\u201d r\u00e9gi modell alapj\u00e1n, \u00e9s hogy ezek a feladatok mennyire tudn\u00e1k kihaszn\u00e1lni a berendez\u00e9st. A sz\u00e1m\u00edt\u00e1sok elkeser\u00edtettek minket. Kider\u00fclt, hogy a rackek kihaszn\u00e1lts\u00e1ga k\u00f6r\u00fclbel\u00fcl 11 %. A k\u00f6vetkeztet\u00e9s egy\u00e9rtelm\u0171: n\u00f6veln\u00fcnk kell az adatk\u00f6zpontok kihaszn\u00e1lts\u00e1g\u00e1t. Az egyszer\u0171 megold\u00e1snak t\u0171nik: egy szerveren t\u00f6bb feladatot kell futtatni egyszerre. De itt kezd\u0151dnek a neh\u00e9zs\u00e9gek. <\/p>\n<p><\/p>\n<p>A t\u00f6meges konfigur\u00e1ci\u00f3 dr\u00e1maian bonyol\u00f3dik \u2014 most m\u00e1r lehetetlenn\u00e9 v\u00e1lik, hogy egy szerverhez egyetlen csoportot rendelj\u00fcnk. Hiszen most egy szerveren t\u00f6bb csapat k\u00fcl\u00f6nb\u00f6z\u0151 feladatainak fut\u00e1sa lehets\u00e9ges. Ezenk\u00edv\u00fcl a konfigur\u00e1ci\u00f3 elt\u00e9r\u0151 alkalmaz\u00e1sok sz\u00e1m\u00e1ra \u00fctk\u00f6zhet. A diagnosztika is bonyolultabb\u00e1 v\u00e1lik: ha megn\u00f6vekedett processzor- vagy lemezhaszn\u00e1latot l\u00e1tsz a szerveren, nem tudod, hogy melyik feladat okozza a probl\u00e9m\u00e1t.<\/p>\n<p><\/p>\n<p>De a legfontosabb, hogy a feladatok k\u00f6z\u00f6tt, amelyek egy g\u00e9pen futnak, nincs elk\u00fcl\u00f6n\u00edt\u00e9s. P\u00e9ld\u00e1ul a grafikon az \u00e1tlagos v\u00e1laszid\u0151r\u0151l egy szerver feladathoz, miel\u0151tt \u00e9s miut\u00e1n egy m\u00e1sik, az els\u0151h\u00f6z nem kapcsol\u00f3d\u00f3 sz\u00e1m\u00edt\u00e1si alkalmaz\u00e1s indult el ugyanazon a szerveren \u2014 a f\u0151 feladat v\u00e1laszideje jelent\u0151sen megn\u00f6vekedett.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/c7c07359ae572ca8c84a4c63559e4083.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nyilv\u00e1nval\u00f3, hogy a feladatokat vagy kont\u00e9nerekben, vagy virtu\u00e1lis g\u00e9pekben kell futtatni. Mivel szinte minden feladatunk egyetlen oper\u00e1ci\u00f3s rendszer (Linux) alatt fut, vagy arra van optimaliz\u00e1lva, nem sz\u00fcks\u00e9ges sok k\u00fcl\u00f6nb\u00f6z\u0151 oper\u00e1ci\u00f3s rendszer t\u00e1mogat\u00e1sa. Ez\u00e9rt a virtualiz\u00e1ci\u00f3ra nincs sz\u00fcks\u00e9g, mert a t\u00f6bbletk\u00f6lts\u00e9gek miatt kev\u00e9sb\u00e9 hat\u00e9kony mint a kont\u00e9neriz\u00e1l\u00e1s.<\/p>\n<p><\/p>\n<p>A Docker containers implementation for running tasks directly on servers is a good candidate: filesystem images effectively solve problems with conflicting configurations. The ability to compose images from multiple layers allows us to significantly reduce the amount of data required for their deployment on infrastructure, isolating common parts into separate base layers. This way, the base (and largest) layers can be quickly cached across the infrastructure, and only small layers will need to be transferred for delivering various types of applications and versions. <\/p>\n<p><\/p>\n<p>Additionally, the ready-made registry and image tagging in Docker provide us with ready primitives for versioning and delivering code to production.<\/p>\n<p><\/p>\n<p>Docker, like any other similar technology, provides us with a certain level of container isolation out of the box. For example, memory isolation\u2014each container is allocated a memory usage limit of the machine, which it cannot exceed. Container CPU usage can also be isolated. For us, however, the standard isolation was insufficient. More on that below.<\/p>\n<p><\/p>\n<p>Directly running containers on servers is just part of the challenge. Another aspect is placing containers on servers. We need to understand which container can be placed on which server. This is not a simple task, as containers need to be deployed as densely as possible on servers without compromising their performance. Such placement can also be complex from a fault tolerance perspective. Often we want to place replicas of the same service in different racks or even different data center halls so that in the event of a rack or hall failure, we do not lose all replicas of the service at once. <\/p>\n<p><\/p>\n<p>Distributing containers manually is not an option when you have 8,000 servers and 8,000 to 16,000 containers. <\/p>\n<p><\/p>\n<p>Moreover, we wanted to give developers more autonomy in resource allocation so they could place their services in production without administrator assistance. At the same time, we wanted to maintain control to ensure that a secondary service does not consume all the resources of our data centers. <\/p>\n<p><\/p>\n<p>It is clear that we need a management layer that would handle this automatically.<\/p>\n<p><\/p>\n<p>Itt vagyunk egy egyszer\u0171 \u00e9s \u00e9rthet\u0151 k\u00e9ppel, amelyet minden \u00e9p\u00edt\u00e9sz im\u00e1d: h\u00e1rom n\u00e9gyzet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/079df6e79874ef55b0d967fde3d5feca.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>one-cloud mester \u2014 hibamentes klaszter, amely a felh\u0151 orchestr\u00e1ci\u00f3j\u00e1\u00e9rt felel. A fejleszt\u0151 egy manifesztet k\u00fcld a mesternek, amely tartalmazza az \u00f6sszes sz\u00fcks\u00e9ges inform\u00e1ci\u00f3t a szolg\u00e1ltat\u00e1s elhelyez\u00e9s\u00e9hez. A mester ennek alapj\u00e1n parancsokat ad a kiv\u00e1lasztott minionoknak (g\u00e9pek, amelyek a kont\u00e9nerek ind\u00edt\u00e1s\u00e1ra szolg\u00e1lnak). A minionokon tal\u00e1lhat\u00f3 \u00fcgyn\u00f6k megkapja a parancsot, adja a saj\u00e1t Docker parancsait, \u00e9s a Docker konfigur\u00e1lja a Linux kernelt a megfelel\u0151 kont\u00e9ner ind\u00edt\u00e1s\u00e1hoz. A parancsok v\u00e9grehajt\u00e1sa mellett az \u00fcgyn\u00f6k folyamatosan t\u00e1j\u00e9koztatja a mestert a minion g\u00e9p \u00e1llapot\u00e1nak, valamint az azon fut\u00f3 kont\u00e9nerek \u00e1llapot\u00e1nak v\u00e1ltoz\u00e1sair\u00f3l.<\/p>\n<p><\/p>\n<h2 id=\"raspredelenie-resursov\">Er\u0151forr\u00e1sok eloszt\u00e1sa<\/h2>\n<p><\/p>\n<p>Most n\u00e9zz\u00fck meg egy bonyolultabb er\u0151forr\u00e1sel \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 a sok minion sz\u00e1m\u00e1ra.<\/p>\n<p><\/p>\n<p>A one-cloud-ban az sz\u00e1m\u00edt\u00e1si forr\u00e1s:<\/p>\n<p><\/p>\n<ul>\n<li>A CPU sz\u00e1m\u00edt\u00e1si teljes\u00edtm\u00e9nye, amelyet egy konkr\u00e9t feladat ig\u00e9nyel. <\/li>\n<li>A feladat sz\u00e1m\u00e1ra el\u00e9rhet\u0151 mem\u00f3ria mennyis\u00e9ge. <\/li>\n<li>H\u00e1l\u00f3zati forgalom. Minden minionnak van egy konkr\u00e9t h\u00e1l\u00f3zati interf\u00e9sze, amelynek korl\u00e1tozott s\u00e1vsz\u00e9less\u00e9ge van, ez\u00e9rt nem lehet a feladatokat \u00fagy elosztani, hogy ne vegy\u00fck figyelembe az \u00e1ltaluk \u00e1tadott adatmennyis\u00e9get. <\/li>\n<li>Lemezek. Nyilv\u00e1nval\u00f3, hogy a feladat adataihoz sz\u00fcks\u00e9ges hely mellett a lemez t\u00edpust is kijel\u00f6l\u00fcnk: HDD vagy SSD. A lemezek v\u00e9ges sz\u00e1m\u00fa k\u00e9r\u00e9st tudnak kiszolg\u00e1lni m\u00e1sodpercenk\u00e9nt \u2014 IOPS. Ez\u00e9rt a feladatok sz\u00e1m\u00e1ra, amelyek t\u00f6bb IOPS-t gener\u00e1lnak, mint amit egy lemez el tud l\u00e1tni, 'spindleket' is ki kell osztanunk \u2014 azaz olyan lemezes eszk\u00f6z\u00f6ket, amelyeket kifejezetten a feladatra kell fenntartani.<\/li>\n<\/ul>\n<p><\/p>\n<p>Teh\u00e1t egy szolg\u00e1ltat\u00e1s, p\u00e9ld\u00e1ul a user-cache sz\u00e1m\u00e1ra az ig\u00e9nyelt er\u0151forr\u00e1sokat \u00edgy r\u00f6gz\u00edthetj\u00fck: 400 processzormag, 2,5 TB mem\u00f3ria, 50 Gb\/s forgalom mindk\u00e9t ir\u00e1nyba, 6 TB HDD-n, amely 100 spindl\u00e9n tal\u00e1lhat\u00f3. Vagy a sz\u00e1munkra megszokott form\u00e1ban \u00edgy:<\/p>\n<p><\/p>\n<pre><code>alloc:\n    cpu: 400\n    mem: 2500\n    lan_in: 50g\n    lan_out: 50g\n    hdd:100x6T<\/code><\/pre>\n<p><\/p>\n<p>A user-cache szolg\u00e1ltat\u00e1s er\u0151forr\u00e1sai csak a production infrastrukt\u00far\u00e1ban el\u00e9rhet\u0151 \u00f6sszes er\u0151forr\u00e1s egy r\u00e9sz\u00e9t fogyasztj\u00e1k. Ez\u00e9rt fontos biztos\u00edtani, hogy hirtelen, ak\u00e1r \u00fczemeltet\u0151i hiba miatt, a user-cache ne fogyasszon el t\u00f6bb er\u0151forr\u00e1st, mint amennyit kapott. Vagyis limit\u00e1lnunk kell az er\u0151forr\u00e1sokat. De mivel k\u00f6tn\u00e9nk a kv\u00f3t\u00e1t?<\/p>\n<p><\/p>\n<p>T\u00e9rj\u00fcnk vissza a jelent\u0151sen leegyszer\u0171s\u00edtett komponens-interakci\u00f3s s\u00e9m\u00e1nkhoz, \u00e9s rajzoljuk \u00e1t t\u00f6bb r\u00e9szletess\u00e9ggel \u2014 \u00edgy: <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/27e5bfbffadd3d4b9fdc6bf138d135ed.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ami szembet\u0171n\u0151:<\/p>\n<p><\/p>\n<ul>\n<li>A webfrontend \u00e9s a zene ugyanannak az alkalmaz\u00e1sservernek az elk\u00fcl\u00f6n\u00edtett klasztereiben m\u0171k\u00f6dik.<\/li>\n<li>K\u00fcl\u00f6nb\u00f6z\u0151 logikai r\u00e9tegeket k\u00fcl\u00f6n\u00edthet\u00fcnk el, amelyekhez ezek a klaszterek tartoznak: frontendek, cache-ek, adatt\u00e1rol\u00f3 \u00e9s kezel\u0151 r\u00e9teg.<\/li>\n<li>A frontend nem homog\u00e9n, ezek k\u00fcl\u00f6nb\u00f6z\u0151 funkcion\u00e1lis alrendszerek. <\/li>\n<li>A cache-eket is el lehet osztani a rendszeren bel\u00fcl, amelynek az adatait cache-elik.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u00dajra rajzoljuk a k\u00e9pet:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/905dacc0aca859e65bd33ef751a557cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hopp\u00e1! Hierarchi\u00e1t l\u00e1tunk! Ez azt jelenti, hogy er\u0151forr\u00e1sokat nagyobb egys\u00e9gekben oszthatunk el: jel\u00f6lj\u00fck ki a hierarchia csom\u00f3pontj\u00e1ra a felel\u0151s fejleszt\u0151t, amely a funkcion\u00e1lis alrendszerhez kapcsol\u00f3dik (mint a k\u00e9pen a \u00abmusic\u00bb), \u00e9s ehhez a hierarchia szinthez hozz\u00e1rendelhetj\u00fck a kv\u00f3t\u00e1t. Ez a hierarchia rugalmasabb szervez\u00e9st is lehet\u0151v\u00e9 tesz a szolg\u00e1ltat\u00e1sok kezel\u00e9s\u00e9nek megk\u00f6nny\u00edt\u00e9s\u00e9re. P\u00e9ld\u00e1ul az \u00f6sszes webkiszolg\u00e1l\u00f3t, mivel ez egy nagyon nagy csoportos\u00edt\u00e1s, t\u00f6bb kisebb csoportra osztjuk, amelyeket a k\u00e9pen group1, group2 n\u00e9ven jel\u00f6lt\u00fcnk meg.<\/p>\n<p><\/p>\n<p>A felesleges vonalak elt\u00e1vol\u00edt\u00e1s\u00e1val minden csom\u00f3pontunkat laposabb form\u00e1ban r\u00f6gz\u00edthetj\u00fck: <strong>group1.web.front<\/strong>, <strong>api.music.front<\/strong>, <strong>user-cache.cache<\/strong>.<\/p>\n<p><\/p>\n<p>\u00cdgy jutunk el a \u201ehierarchikus sor\u201d fogalm\u00e1hoz. Ennek neve van, mint p\u00e9ld\u00e1ul \u201egroup1.web.front\u201d. Er\u0151forr\u00e1s kv\u00f3t\u00e1t \u00e9s felhaszn\u00e1l\u00f3i jogokat rendel\u00fcnk hozz\u00e1. A DevOps szakembernek jogokat adunk a szolg\u00e1ltat\u00e1s sorba \u00e1ll\u00edt\u00e1s\u00e1ra, \u00e9s ez a munkat\u00e1rs b\u00e1rmit ind\u00edthat a sorban, m\u00edg az OpsDev munkat\u00e1rsnak adminisztr\u00e1tori jogai vannak, \u00edgy m\u00e1r tudja kezelni a sort, embereket kijel\u00f6lni, ezeknek jogokat adni, stb. A sorban ind\u00edtott szolg\u00e1ltat\u00e1sok a sor kv\u00f3t\u00e1j\u00e1n bel\u00fcl fognak teljes\u00fclni. Ha a sor sz\u00e1m\u00edt\u00e1si kv\u00f3t\u00e1ja nem elegend\u0151 az \u00f6sszes szolg\u00e1ltat\u00e1s egyidej\u0171 futtat\u00e1s\u00e1hoz, akkor ezek egym\u00e1s ut\u00e1n fognak v\u00e9grehajt\u00e1sra ker\u00fclni, ez\u00e1ltal saj\u00e1t sort alkotva. <\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg r\u00e9szletesebben a szolg\u00e1ltat\u00e1sokat. Minden szolg\u00e1ltat\u00e1snak van egy teljes neve, amely mindig mag\u00e1ban foglalja a sor nev\u00e9t. \u00cdgy a webfrontend szolg\u00e1ltat\u00e1s neve <strong>ok-web.group1.web.front<\/strong>. A kapcsol\u00f3d\u00f3 alkalmaz\u00e1sserver szolg\u00e1ltat\u00e1s neve pedig <strong>ok-app.group1.web.front<\/strong>. Minden szolg\u00e1ltat\u00e1snak van egy manifestje, amely tartalmaz minden sz\u00fcks\u00e9ges inform\u00e1ci\u00f3t a konkr\u00e9t g\u00e9peken val\u00f3 elhelyez\u00e9shez: mennyi er\u0151forr\u00e1st ig\u00e9nyel ez a feladat, milyen konfigur\u00e1ci\u00f3 sz\u00fcks\u00e9ges hozz\u00e1, h\u00e1ny p\u00e9ld\u00e1nyra van sz\u00fcks\u00e9g, a szolg\u00e1ltat\u00e1s hibakezel\u00e9si tulajdons\u00e1gai. \u00c9s a szolg\u00e1ltat\u00e1s g\u00e9peken val\u00f3 elhelyez\u00e9se ut\u00e1n megjelennek a p\u00e9ld\u00e1nyai. Ezeket is egy\u00e9rtelm\u0171en az p\u00e9ld\u00e1ny sz\u00e1m\u00e1val \u00e9s a szolg\u00e1ltat\u00e1s nev\u00e9vel nevezik meg: <strong>1.ok-web.group1.web.front, 2.ok-web.group1.web.front, ...<\/strong><\/p>\n<p><\/p>\n<p>Ez nagyon k\u00e9nyelmes: csak a fut\u00f3 kont\u00e9ner nev\u00e9re n\u00e9zve sok mindent azonnal kider\u00edthet\u00fcnk.<\/p>\n<p><\/p>\n<p>Most ismerkedj\u00fcnk meg azzal, hogy ezek a p\u00e9ld\u00e1nyok val\u00f3j\u00e1ban mit is hajtanak v\u00e9gre: a feladatokkal.<\/p>\n<p><\/p>\n<h2 id=\"klassy-izolyacii-zadach\">Feladatok izol\u00e1ci\u00f3s oszt\u00e1lyai<\/h2>\n<p><\/p>\n<p>Minden feladat az OK-ban (\u00e9s val\u00f3sz\u00edn\u0171leg mindenhol m\u00e1shol is) csoportokra oszthat\u00f3:<\/p>\n<p><\/p>\n<ul>\n<li><strong>R\u00f6vid k\u00e9sleltet\u00e9s\u0171 feladatok \u2014 prod<\/strong>. Az ilyen feladatok \u00e9s szolg\u00e1ltat\u00e1sok eset\u00e9ben a v\u00e1lasz k\u00e9s\u00e9se (latency) nagyon fontos, hogy a rendszer mennyire gyorsan tudja feldolgozni az egyes k\u00e9r\u00e9seket. P\u00e9ld\u00e1k ilyen feladatokra: webfrontek, gyors\u00edt\u00f3t\u00e1rak, alkalmaz\u00e1s szerverek, OLTP t\u00e1rol\u00f3k stb.<\/li>\n<li><strong>Sz\u00e1m\u00edt\u00e1si feladatok \u2014 batch<\/strong>. Itt nem sz\u00e1m\u00edt minden egyes k\u00e9r\u00e9s feldolgoz\u00e1si sebess\u00e9ge; fontos, hogy az adott (nagy) id\u0151intervallumban h\u00e1ny \u00f6sszes sz\u00e1m\u00edt\u00e1st v\u00e9gez el ez a feladat (throughput). Ilyenek b\u00e1rmilyen MapReduce, Hadoop, g\u00e9pi tanul\u00e1s, statisztika feladat.<\/li>\n<li><strong>H\u00e1tt\u00e9rfeladatok \u2014 idle<\/strong>. Az ilyen feladatok eset\u00e9ben sem a latency, sem a throughput nem t\u00fal fontos. Ide tartoznak k\u00fcl\u00f6nf\u00e9le tesztek, migr\u00e1ci\u00f3k, \u00e1tsz\u00e1m\u00edt\u00e1sok, adatok konvert\u00e1l\u00e1sa egyik form\u00e1tumb\u00f3l a m\u00e1sikba. Egyfel\u0151l hasonl\u00edtanak a sz\u00e1m\u00edt\u00e1si feladatokra, m\u00e1sfel\u0151l pedig nem nagyon \u00e9rdekel minket, hogy milyen gyorsan fejez\u0151dnek be. <\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg, hogyan fogyasztj\u00e1k az ilyen feladatok az er\u0151forr\u00e1sokat, p\u00e9ld\u00e1ul a k\u00f6zponti feldolgoz\u00f3egys\u00e9g (CPU) er\u0151forr\u00e1sait.<\/p>\n<p><\/p>\n<p><strong>R\u00f6vid k\u00e9sleltet\u00e9s\u0171 feladatok.<\/strong> Egy ilyen feladat CPU-felhaszn\u00e1l\u00e1s\u00e1nak mint\u00e1ja ehhez hasonl\u00f3 lesz:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/1ed82c0df76325eb30056ad9af86e86e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A felhaszn\u00e1l\u00f3t\u00f3l \u00e9rkezik egy k\u00e9r\u00e9s, a feladat elkezdi haszn\u00e1lni az \u00f6sszes el\u00e9rhet\u0151 CPU magot, feldolgoz, visszat\u00e9r egy v\u00e1lasz, v\u00e1rja a k\u00f6vetkez\u0151 k\u00e9rd\u00e9st, \u00e9s \u00e1ll. \u00c9rkezik a k\u00f6vetkez\u0151 k\u00e9r\u00e9s \u2014 \u00fajra veszi az \u00f6sszes el\u00e9rhet\u0151 er\u0151forr\u00e1st, feldolgoz, v\u00e1r a k\u00f6vetkez\u0151re.<\/p>\n<p><\/p>\n<p>A minim\u00e1lis k\u00e9sleltet\u00e9s biztos\u00edt\u00e1s\u00e1hoz ennek a feladatnak maximum a felhaszn\u00e1l\u00e1s\u00e1hoz kell igazodnunk, \u00e9s a sz\u00fcks\u00e9ges magok sz\u00e1m\u00e1t el\u0151 kell rezerv\u00e1lnunk a minyonhoz (g\u00e9pre, amely v\u00e9grehajtja a feladatot). \u00cdgy a feladatunkra vonatkoz\u00f3 reserv\u00e1l\u00e1si k\u00e9plet a k\u00f6vetkez\u0151k\u00e9ppen alakul:<\/p>\n<p><\/p>\n<pre><code>alloc: cpu = 4 (max)<\/code><\/pre>\n<p><\/p>\n<p>Ha van egy 16 magos minion g\u00e9p\u00fcnk, akkor pontosan n\u00e9gy ilyen feladatot lehet elhelyezni rajta. K\u00fcl\u00f6n kiemelj\u00fck, hogy az ilyen feladatok \u00e1tlagos processzorhaszn\u00e1lata gyakran nagyon alacsony \u2014 ami nyilv\u00e1nval\u00f3, hiszen a feladat jelent\u0151s r\u00e9sz\u00e9t azzal t\u00f6lti, hogy a k\u00e9r\u00e9sre v\u00e1r, \u00e9s nem csin\u00e1l semmit.<\/p>\n<p><\/p>\n<p><strong>Sz\u00e1m\u00edt\u00e1si feladatok.<\/strong> Nekik a mint\u00e1zatuk egy kicsit m\u00e1s lesz:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/35b37fa1d70a137287cafdbfe3bcfc2e.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az ilyen feladatok \u00e1tlagos er\u0151forr\u00e1s-felhaszn\u00e1l\u00e1sa viszonylag magas. Gyakran azt akarjuk, hogy a sz\u00e1m\u00edt\u00e1si feladat egy meghat\u00e1rozott id\u0151n bel\u00fcl teljes\u00fclj\u00f6n, ez\u00e9rt el\u0151 kell foglalni a minim\u00e1lis sz\u00e1m\u00fa processzort, amely sz\u00fcks\u00e9ges ahhoz, hogy a sz\u00e1m\u00edt\u00e1s egy elfogadhat\u00f3 id\u0151n bel\u00fcl befejez\u0151dj\u00f6n. Az el\u0151foglal\u00e1si k\u00e9plet\u00fck \u00edgy n\u00e9z ki:<\/p>\n<p><\/p>\n<pre><code>alloc: cpu = [1,*)<\/code><\/pre>\n<p><\/p>\n<p><em>\"K\u00e9rlek, helyezd el a minionon, ahol van legal\u00e1bb egy szabad mag, a t\u00f6bbivel meg mindent elfoglalhat\".<\/em><\/p>\n<p><\/p>\n<p>Itt m\u00e1r sokkal jobban kihaszn\u00e1lhat\u00f3 a teljes\u00edtm\u00e9ny, mint a r\u00f6vid k\u00e9sleltet\u00e9s\u0171 feladatokn\u00e1l. De a nyeres\u00e9g sokkal nagyobb lesz, ha a k\u00e9t feladat t\u00edpust egy g\u00e9pen egyes\u00edtj\u00fck, \u00e9s a forr\u00e1saikat folyamatosan osztjuk el. Amikor a r\u00f6vid k\u00e9sleltet\u00e9s\u0171 feladat processzort ig\u00e9nyel \u2014 azt azonnal megkapja, ha pedig a forr\u00e1sokra m\u00e1r nincs sz\u00fcks\u00e9g \u2014 \u00e1tker\u00fclnek a sz\u00e1m\u00edt\u00e1si feladathoz, azaz valahogy \u00edgy:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/875ad8d3f6a01e4fd0a89d0931e986c1.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De hogyan csin\u00e1ljuk ezt?<\/p>\n<p><\/p>\n<p>El\u0151sz\u00f6r is n\u00e9zz\u00fck meg a prod-t \u00e9s annak alloc: cpu = 4. N\u00e9gy magot kell el\u0151foglalnunk. A Docker run eset\u00e9ben ezt k\u00e9tf\u00e9lek\u00e9ppen lehet megtenni: <\/p>\n<p><\/p>\n<ul>\n<li>A k\u00f6vetkez\u0151 opci\u00f3val <code>--cpuset=1-4<\/code>, azaz n\u00e9gy meghat\u00e1rozott magot kiadni a feladatnak a g\u00e9pen.<\/li>\n<li>Haszn\u00e1lja a <code>--cpuquota=400_000 --cpuperiod=100_000<\/code>, a processzorid\u0151 kv\u00f3t\u00e1j\u00e1t, azaz megadni, hogy val\u00f3s id\u0151ben a feladat legfeljebb 400 ms processzorid\u0151t haszn\u00e1l el 100 ms-onk\u00e9nt. Ugyanazt a n\u00e9gy magot kapjuk. <\/li>\n<\/ul>\n<p><\/p>\n<p>De melyik m\u00f3dszer lesz alkalmas?<\/p>\n<p><\/p>\n<p>A cpuset looks quite attractive. The task has four dedicated cores, which means the processor caches will operate at maximum efficiency. There is a downside to this: we would have to take on the task of distributing computations across the underutilized cores of the machine instead of the OS, which is quite a non-trivial task, especially if we try to place batch tasks on such a machine. Tests have shown that the quota option is better suited here: it gives the operating system more freedom to choose a core for executing the task at the moment and CPU time is distributed more efficiently.<\/p>\n<p><\/p>\n<p>Let's figure out how to reserve the minimum number of cores in docker. The quota for batch tasks is no longer applicable because there is no need to limit the maximum; it's enough to guarantee a minimum. And here the option fits well. <code>docker run --cpushares<\/code>.<\/p>\n<p><\/p>\n<p>We agreed that if the batch requires a guarantee of at least one core, we specify <code>--cpushares=1024<\/code>, and if at least two cores are needed, we specify <code>--cpushares=2048<\/code>. CPU shares do not interfere with CPU time allocation as long as there is enough time. Thus, if prod is not currently using all four of its cores\u2014nothing limits batch tasks, and they can use additional CPU time. However, in the situation of CPU scarcity, if prod has consumed all four of its cores and hit the quota\u2014the remaining CPU time will be distributed proportionally to cpushares, i.e., in the situation with three free cores, one will be allocated to the task with 1024 cpushares, while the other two will go to the task with 2048 cpushares.<\/p>\n<p><\/p>\n<p>But using quota and shares is not enough. We need to ensure that tasks with short latency receive priority over batch tasks when allocating CPU time. Without such prioritization, the batch task will consume all CPU time at the moment it is needed by prod. In Docker run, there are no options for prioritizing containers, but CPU scheduler policies in Linux come to the rescue. Detailed information about them can be read <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man2\/sched_setscheduler.2.html\">itt<\/a><\/noindex>, but in this article, we'll briefly cover them:<\/p>\n<p><\/p>\n<ul>\n<li><strong>SCHED_OTHER<\/strong><br \/>\nBy default, all ordinary user processes on a Linux machine receive this.<\/li>\n<li><strong>SCHED_BATCH<\/strong><br \/>\nEr\u0151forr\u00e1s-ig\u00e9nyes folyamatokhoz k\u00e9sz\u00fclt. Amikor egy feladatot elhelyez\u00fcnk a processzorban, \u00fagynevezett aktiv\u00e1l\u00e1si b\u00fcntet\u00e9st vezet\u00fcnk be: egy ilyen feladat kisebb val\u00f3sz\u00edn\u0171s\u00e9ggel kap processzorfunkci\u00f3t, ha azt \u00e9ppen egy SCHED_OTHER feladat haszn\u00e1lja.<\/li>\n<li><strong>SCHED_IDLE<\/strong><br \/>\nOlyan h\u00e1tt\u00e9rfolyamat, amelynek rendk\u00edv\u00fcl alacsony priorit\u00e1sa van, m\u00e9g a nice \u201319-n\u00e9l is alacsonyabb. Haszn\u00e1ljuk a ny\u00edlt forr\u00e1sk\u00f3d\u00fa k\u00f6nyvt\u00e1runkat. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/odnoklassniki\/one-nio\">one-nio<\/a><\/noindex>, hogy a sz\u00fcks\u00e9ges politik\u00e1t a kont\u00e9ner ind\u00edt\u00e1sakor a<\/li>\n<\/ul>\n<p><\/p>\n<pre><code class=\"java\">one.nio.os.Proc.sched_setscheduler(pid, Proc.SCHED_IDLE)<\/code><\/pre>\n<p><\/p>\n<p>De m\u00e9g ha nem is programozik Java nyelven, ugyanezt megteheti a chrt parancs seg\u00edts\u00e9g\u00e9vel:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">chrt -i 0 $pid<\/code><\/pre>\n<p><\/p>\n<p>Mindent \u00f6sszegezve, az elszigetelts\u00e9gi szinteinket egy t\u00e1bl\u00e1zatba foglaljuk \u00f6ssze a vil\u00e1gosabb \u00e1ttekint\u00e9s \u00e9rdek\u00e9ben:<\/p>\n<p><\/p>\n<p>Izol\u00e1ci\u00f3s oszt\u00e1ly<br \/>\nP\u00e9lda alloc<br \/>\nDocker futtat\u00e1si opci\u00f3k<br \/>\nsched_setscheduler chrt*<\/p>\n<p>Prod<br \/>\ncpu = 4<br \/>\n<code>--cpuquota=400000<\/code> <code>--cpuperiod=100000<\/code><br \/>\nSCHED_OTHER<\/p>\n<p>Batch<br \/>\nCpu = [1, * )<br \/>\n<code>--cpushares=1024<\/code><br \/>\nSCHED_BATCH<\/p>\n<p>Idle<br \/>\nCpu= [2, *)<br \/>\n<code>--cpushares=2048<\/code><br \/>\nSCHED_IDLE<\/p>\n<p><\/p>\n<p>*Ha a chrt parancsot a kont\u00e9nerb\u0151l v\u00e9gzi, sz\u00fcks\u00e9ge lehet a sys_nice jogosults\u00e1gra, mivel alap\u00e9rtelmez\u00e9s szerint a Docker ezt a jogosults\u00e1got megsz\u00fcnteti a kont\u00e9ner ind\u00edt\u00e1sakor.<\/p>\n<p><\/p>\n<p>De a feladatok nemcsak processzort, hanem forgalmat is fogyasztanak, ami a h\u00e1l\u00f3zati feladat k\u00e9sleltet\u00e9s\u00e9re m\u00e9g nagyobb hat\u00e1ssal van, mint a processzor er\u0151forr\u00e1sainak helytelen eloszt\u00e1sa. \u00cdgy term\u00e9szetesen olyan k\u00e9pet szeretn\u00e9nk kapni a forgalomr\u00f3l is. Azaz amikor a prod-feladat adatcsomagokat k\u00fcld a h\u00e1l\u00f3zatra, max sebess\u00e9get kv\u00f3t\u00e1zunk (k\u00e9plet <em>alloc: lan=[*,500mbps)<\/em> ), amely mellett a prod ezt megteheti. A batch sz\u00e1m\u00e1ra viszont csak a minim\u00e1lis \u00e1tviteli sebess\u00e9get garant\u00e1ljuk, de a maxim\u00e1lisat nem korl\u00e1tozzuk (k\u00e9plet <em>alloc: lan=[10Mbps,*)<\/em> ) Itt a prod forgalom priorit\u00e1st \u00e9lvez a batch-feladatokkal szemben.<br \/>\nItt a Dockernek nincsenek olyan primit\u00edv elemei, amelyeket felhaszn\u00e1lhatn\u00e1nk. De seg\u00edts\u00e9g\u00fcnkre j\u00f6n a <noindex><a rel=\"nofollow\" href=\"http:\/\/lartc.org\/\">Linux Traffic Control<\/a><\/noindex>. A k\u00edv\u00e1nt eredm\u00e9nyt a <noindex><a rel=\"nofollow\" href=\"http:\/\/linux-ip.net\/articles\/hfsc.en\/\">Hierarchical Fair Service Curve<\/a><\/noindex>seg\u00edts\u00e9g\u00e9vel \u00e9rt\u00fck el. Ezzel k\u00e9t forgalmi oszt\u00e1lyt v\u00e1lasztunk ki: a magas priorit\u00e1s\u00fa prod-ot \u00e9s az alacsony priorit\u00e1s\u00fa batch\/idle-t. Ennek eredm\u00e9nyek\u00e9nt a kimen\u0151 forgalom konfigur\u00e1ci\u00f3ja a k\u00f6vetkez\u0151k\u00e9ppen alakul:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/gh\/5k\/kf\/gh5kkfwkhwv0ilmbdmdbo83dp6k.png\"><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/3f52a968118b6021bd0c920af17a00c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>itt 1:0 \u2014 &#171;gy\u00f6k\u00e9r qdisc&#187; a hsfc diszcipl\u00edn\u00e1ban; 1:1 \u2014 hsfc gyermekoszt\u00e1ly k\u00f6z\u00f6s s\u00e1vsz\u00e9less\u00e9g-korl\u00e1toz\u00e1ssal 8 Gbit\/s sebess\u00e9ggel, amely al\u00e1 a kont\u00e9nerek \u00f6sszes gyermekoszt\u00e1ly\u00e1t helyezik; 1:2 \u2014 hsfc gyermekoszt\u00e1ly, amely k\u00f6z\u00f6s minden batch \u00e9s idle feladat sz\u00e1m\u00e1ra &#171;dinamikus&#187; korl\u00e1toz\u00e1ssal, amir\u0151l al\u00e1bb. A t\u00f6bbi hsfc gyermekoszt\u00e1ly a jelenleg fut\u00f3 prod-kont\u00e9nerekhez rendelt dedik\u00e1lt oszt\u00e1lyok, amelyek korl\u00e1toz\u00e1saik a manifest\u00fcknek megfelel\u0151en \u2014 450 \u00e9s 400 Mbit\/s. Minden hsfc oszt\u00e1lyn\u00e1l egy qdisc sor fq vagy fq_codel van hozz\u00e1rendelve, a linux kernel verzi\u00f3j\u00e1t\u00f3l f\u00fcgg\u0151en, a forgalmi cs\u00facsok miatti csomagvesztes\u00e9gek elker\u00fcl\u00e9se \u00e9rdek\u00e9ben. <\/p>\n<p><\/p>\n<p>A tc diszcipl\u00edn\u00e1k \u00e1ltal\u00e1ban csak a kimen\u0151 forgalom prioriz\u00e1l\u00e1s\u00e1ra szolg\u00e1lnak. De mi a bej\u00f6v\u0151 forgalmat is prioriz\u00e1lni akarjuk \u2014 hiszen b\u00e1rmely batch feladat egyszer\u0171en kidobhatja az \u00f6sszes bej\u00f6v\u0151 csatorn\u00e1t, p\u00e9ld\u00e1ul egy nagy adatcsomag be\u00e9rkez\u00e9sekor a map&amp;reduce sz\u00e1m\u00e1ra. Ehhez modulra van sz\u00fcks\u00e9g\u00fcnk, <noindex><a rel=\"nofollow\" href=\"https:\/\/serverfault.com\/questions\/350023\/tc-ingress-policing-and-ifb-mirroring\">ifb<\/a><\/noindex>, amely virtu\u00e1lis ifbX interf\u00e9szt hoz l\u00e9tre minden h\u00e1l\u00f3zati interf\u00e9szhez, \u00e9s \u00e1tir\u00e1ny\u00edtja a bej\u00f6v\u0151 forgalmat az interf\u00e9szr\u0151l a kimen\u0151 forgalomra az ifbX-en. Ezt k\u00f6vet\u0151en az ifbX-re ugyanazok a diszcipl\u00edn\u00e1k alkalmazand\u00f3k a kimen\u0151 forgalom ellen\u0151rz\u00e9s\u00e9re, amelyek konfigur\u00e1ci\u00f3ja a hsfc eset\u00e9ben nagyon hasonl\u00f3 lesz:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/iz\/ao\/-k\/izao-kgthgu_ptgyq9cjb1il0wm.png\"><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/967da9c0637cc70ba195af781db18adf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>K\u00eds\u00e9rleteink sor\u00e1n meg\u00e1llap\u00edtottuk, hogy a legjobb hsfc teljes\u00edtm\u00e9ny akkor \u00e9rhet\u0151 el, ha a 1:2 oszt\u00e1lyba tartoz\u00f3, nem priorit\u00e1sos batch\/idle forgalmat a minion g\u00e9peken legfeljebb egy bizonyos szabad s\u00e1vsz\u00e9less\u00e9gig korl\u00e1tozzuk. Ellenkez\u0151 esetben a nem priorit\u00e1sos forgalom t\u00falzottan befoly\u00e1solja a prod feladatok k\u00e9sleltet\u00e9s\u00e9t. A szabad s\u00e1vsz\u00e9less\u00e9g aktu\u00e1lis nagys\u00e1g\u00e1t a miniond m\u00e1sodpercenk\u00e9nt hat\u00e1rozza meg, az \u00f6sszes prod feladat \u00e1tlagos forgalomfogyaszt\u00e1s\u00e1nak m\u00e9r\u00e9s\u00e9vel <img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/9d6f38110d3b1693afe222b01430b9bb.jpg\" style=\"display:block;margin: 0 auto;\" \/> \u00e9s levonva azt a h\u00e1l\u00f3zati interf\u00e9sz s\u00e1vsz\u00e9less\u00e9g\u00e9b\u0151l, <img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/d5608ec4c58e44b8571ab0b1d0cc7701.jpg\" style=\"display:block;margin: 0 auto;\" \/> kis tartal\u00e9kkal, azaz.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/fb01347c2224bd5bbd82169861eeb7e4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A s\u00e1vok f\u00fcggetlen\u00fcl ker\u00fclnek meghat\u00e1roz\u00e1sra a bej\u00f6v\u0151 \u00e9s kimen\u0151 forgalomra. Ennek megfelel\u0151en az \u00faj \u00e9rt\u00e9kek szerint a miniond \u00fajrakonfigur\u00e1lja a 1:2 nem priorit\u00e1sos oszt\u00e1ly korl\u00e1tait.<\/p>\n<p><\/p>\n<p>\u00cdgy megval\u00f3s\u00edtottuk mindh\u00e1rom izol\u00e1ci\u00f3s oszt\u00e1lyt: prod, batch \u00e9s idle. Ezek az oszt\u00e1lyok jelent\u0151s hat\u00e1ssal vannak a feladatok teljes\u00edtm\u00e9ny\u00e9re. Ez\u00e9rt \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy ezt a tulajdons\u00e1got a hierarchia tetej\u00e9re helyezz\u00fck, hogy a hierarchikus sorra n\u00e9zve azonnal vil\u00e1gos legyen, hogy mivel \u00e1llunk szemben: <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/34dc89c461db711b19a0f4eccc50efce.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mindannyian ismer\u0151sek vagyunk <strong>szolg\u00e1ltat\u00e1s szeretne hozz\u00e1f\u00e9rni egy<\/strong> \u00e9s <strong>zene<\/strong> a frontok ekkor a hierarchi\u00e1n bel\u00fcl a prod al\u00e1 ker\u00fclnek. P\u00e9ld\u00e1ul a batch al\u00e1 helyezz\u00fck a szolg\u00e1ltat\u00e1st, <strong>zenei katal\u00f3gus<\/strong>, amely id\u0151r\u0151l id\u0151re \u00f6ssze\u00e1ll\u00edtja a dalok katal\u00f3gus\u00e1t az \u201eOszt\u00e1lyt\u00e1rsak\u201d -ban felt\u00f6lt\u00f6tt mp3 f\u00e1jlok k\u00e9szlet\u00e9b\u0151l. Az idle szolg\u00e1ltat\u00e1sok p\u00e9ld\u00e1j\u00e1ul szolg\u00e1lhat <strong>zene transzform\u00e1tor<\/strong>, amely normaliz\u00e1lja a zene hanger\u0151szintj\u00e9t.<\/p>\n<p><\/p>\n<p>Ism\u00e9t elt\u00e1vol\u00edtva a felesleges sorokat, le tudjuk \u00edrni a szolg\u00e1ltat\u00e1saink nev\u00e9t laposabban, hozz\u00e1f\u0171zve a feladatizol\u00e1ci\u00f3s oszt\u00e1lyt a szolg\u00e1ltat\u00e1s teljes nev\u00e9nek v\u00e9g\u00e9hez: <strong>web.front.prod<\/strong>, <strong>catalog.music.batch<\/strong>, <strong>transformer.music.idle<\/strong>.<\/p>\n<p><\/p>\n<p>Most, hogy r\u00e1n\u00e9z\u00fcnk a szolg\u00e1ltat\u00e1s nev\u00e9re, nemcsak azt \u00e9rtj\u00fck meg, milyen funkci\u00f3t l\u00e1t el, hanem a szigetel\u00e9si oszt\u00e1ly\u00e1t is, \u00edgy a kritikalit\u00e1s\u00e1t stb.<\/p>\n<p><\/p>\n<p>Minden nagyszer\u0171, de van egy keser\u0171 igazs\u00e1g. Teljesen izol\u00e1lni a feladatokat, amelyek egy g\u00e9pen futnak, lehetetlen.<\/p>\n<p><\/p>\n<p>Amit el\u00e9rt\u00fcnk: ha a batch intenz\u00edven fogyasztja a <strong>a f\u0151 DB p\u00e9ld\u00e1nyhoz<\/strong> processzor er\u0151forr\u00e1sait, akkor a be\u00e9p\u00edtett CPU \u00fctemez\u0151 a Linuxban nagyon j\u00f3l v\u00e9gzi a dolg\u00e1t, \u00e9s a hat\u00e1sa a prod-feladatra gyakorlatilag elhanyagolhat\u00f3. De ha ez a batch-feladat akt\u00edvan dolgozni kezd a mem\u00f3ri\u00e1val, akkor a k\u00f6lcs\u00f6n\u00f6s hat\u00e1s m\u00e1r megjelenik. Ez az\u00e9rt van, mert a prod-feladat 'ki\u00fcr\u00edti' a processzor mem\u00f3ria cache-\u00e9t \u2014 ennek eredm\u00e9nyek\u00e9nt a cache-ben n\u00f6vekednek a hiba\u00fctk\u00f6z\u00e9sek, \u00e9s a processzor lassabban dolgozza fel a prod-feladatot. Egy ilyen batch-feladat ak\u00e1r 10%-kal is megn\u00f6velheti a tipikus prod-kont\u00e9ner\u00fcnkh\u00f6z sz\u00fcks\u00e9ges k\u00e9sleltet\u00e9st.<\/p>\n<p><\/p>\n<p>A forgalom izol\u00e1l\u00e1sa m\u00e9g nehezebb, mivel a modern h\u00e1l\u00f3zati k\u00e1rty\u00e1knak bels\u0151 csomag-sorba \u00e1ll\u00edt\u00e1suk van. Ha egy csomag a batch-feladatb\u00f3l els\u0151k\u00e9nt jut be az ilyen sorba, az els\u0151k\u00e9nt is ker\u00fcl tov\u00e1bb\u00edt\u00e1sra a k\u00e1belen, \u00e9s ezen nem tudunk v\u00e1ltoztatni.<\/p>\n<p><\/p>\n<p>R\u00e1ad\u00e1sul eddig csak a TCP-forgalom prioritiz\u00e1l\u00e1s\u00e1nak feladat\u00e1t siker\u00fclt megoldanunk: UDP eset\u00e9ben a hsfc megk\u00f6zel\u00edt\u00e9s nem m\u0171k\u00f6dik. M\u00e9g a TCP-forgalom eset\u00e9ben is, ha a batch-feladat sok forgalmat gener\u00e1l, ez is k\u00f6r\u00fclbel\u00fcl 10%-os k\u00e9sleltet\u00e9st okoz a prod-feladatra.<\/p>\n<p><\/p>\n<h2 id=\"otkazoustoychivost\">Hibat\u0171r\u00e9s<\/h2>\n<p><\/p>\n<p>A one-cloud fejleszt\u00e9s egyik c\u00e9lja az Oszt\u00e1lyt\u00e1rsak megb\u00edzhat\u00f3s\u00e1g\u00e1nak jav\u00edt\u00e1sa volt. Ez\u00e9rt most szeretn\u00e9m r\u00e9szletesebben megvizsg\u00e1lni a lehets\u00e9ges hiba- \u00e9s baleseti forgat\u00f3k\u00f6nyveket. Kezdj\u00fck egy egyszer\u0171 forgat\u00f3k\u00f6nyvvel \u2014 egy kont\u00e9ner le\u00e1ll\u00e1s\u00e1val. <\/p>\n<p><\/p>\n<p>A kont\u00e9ner \u00f6nmag\u00e1ban t\u00f6bbf\u00e9lek\u00e9ppen is meghib\u00e1sodhat. Ez lehet valamif\u00e9le k\u00eds\u00e9rlet, hiba vagy probl\u00e9ma a manifestben, ami miatt a prod-feladat t\u00f6bb er\u0151forr\u00e1st kezd el fogyasztani, mint ami a manifestben szerepel. Volt olyan eset\u00fcnk, amikor egy fejleszt\u0151 egy bonyolult algoritmust val\u00f3s\u00edtott meg, sokszor \u00e1tdolgozta, \u00e9s annyira t\u00falbonyol\u00edtotta, hogy v\u00e9g\u00fcl a feladat meglehet\u0151sen nem trivialisan ciklusba ker\u00fclt. Mivel a prod-feladat magasabb priorit\u00e1s\u00fa, mint az \u00f6sszes t\u00f6bbi a hasonl\u00f3 minionokon, elkezdte felhaszn\u00e1lni az \u00f6sszes el\u00e9rhet\u0151 CPU-er\u0151forr\u00e1st. Ebben a helyzetben az elszigetel\u00e9s seg\u00edtett, pontosabban a CPU-id\u0151re vonatkoz\u00f3 kv\u00f3ta. Ha a feladatnak kv\u00f3t\u00e1ja van kijel\u00f6lve, a feladat nem fogyaszt t\u00f6bbet. Ennek eredm\u00e9nyek\u00e9nt a batch- \u00e9s egy\u00e9b prod-feladatok, amelyek ugyanazon a g\u00e9pen futottak, nem vettek \u00e9szre semmit. <\/p>\n<p><\/p>\n<p>A m\u00e1sodik lehets\u00e9ges probl\u00e9ma a kont\u00e9ner le\u00e1ll\u00e1sa. Itt a restart politik\u00e1k seg\u00edtenek nek\u00fcnk, mindenki ismeri \u0151ket, a Docker pedig nagyszer\u0171en kezeli. Gyakorlatilag minden prod-feladatnak \u00e1lland\u00f3 restart politik\u00e1ja van. N\u00e9ha az on_failure-t haszn\u00e1ljuk batch-feladatokn\u00e1l vagy a prod-kont\u00e9nerek hibakeres\u00e9sekor.<\/p>\n<p><\/p>\n<p>Mi a teend\u0151, ha egy eg\u00e9sz minion nem el\u00e9rhet\u0151?<\/p>\n<p><\/p>\n<p>Nyilv\u00e1nval\u00f3, hogy ind\u00edtsunk kont\u00e9nert egy m\u00e1sik g\u00e9pen. Az \u00e9rdekes itt az, hogy mi t\u00f6rt\u00e9nik a kont\u00e9nerhez rendelt IP-c\u00edmmel (c\u00edmekkel). <\/p>\n<p><\/p>\n<p>Kijel\u00f6lhet\u00fcnk a kont\u00e9nereknek olyan IP-c\u00edmeket, mint a minion g\u00e9pek\u00e9, ahol ezek a kont\u00e9nerek futnak. Ekkor, amikor egy kont\u00e9nert egy m\u00e1sik g\u00e9pen ind\u00edtunk, az IP-c\u00edme megv\u00e1ltozik, \u00e9s minden kliensnek meg kell \u00e9rtenie, hogy a kont\u00e9ner \u00e1tk\u00f6lt\u00f6z\u00f6tt, most egy m\u00e1sik c\u00edmre kell menni\u00fck, ami k\u00fcl\u00f6n szolg\u00e1ltat\u00e1st ig\u00e9nyel, a Service Discovery-t. <\/p>\n<p><\/p>\n<p>A Service Discovery k\u00e9nyelmes. A piacon sokf\u00e9le megold\u00e1s l\u00e9tezik k\u00fcl\u00f6nb\u00f6z\u0151 megb\u00edzhat\u00f3s\u00e1gi szintekkel a szolg\u00e1ltat\u00e1sok nyilv\u00e1ntart\u00e1s\u00e1nak megszervez\u00e9s\u00e9re. Gyakran az ilyen megold\u00e1sokban megval\u00f3s\u00edtj\u00e1k a terhel\u00e9seloszt\u00f3 logik\u00e1j\u00e1t, t\u00e1rolnak kieg\u00e9sz\u00edt\u0151 konfigur\u00e1ci\u00f3t KV-t\u00e1rol\u00f3 form\u00e1j\u00e1ban stb.<br \/>\nAzonban szeretn\u00e9nk elker\u00fclni egy k\u00fcl\u00f6n nyilv\u00e1ntart\u00e1s bevezet\u00e9s\u00e9nek sz\u00fcks\u00e9gess\u00e9g\u00e9t, mert ez egy kritikus rendszert jelentene, amelyet minden szolg\u00e1ltat\u00e1s haszn\u00e1l a termel\u00e9sben. Ez\u00e9rt ez potenci\u00e1lis meghib\u00e1sod\u00e1si pont, \u00e9s nagyon megb\u00edzhat\u00f3 megold\u00e1st kell v\u00e1lasztani vagy kifejleszteni, ami nyilv\u00e1nval\u00f3an nagyon neh\u00e9z, id\u0151ig\u00e9nyes \u00e9s k\u00f6lts\u00e9ges. <\/p>\n<p><\/p>\n<p>\u00c9s m\u00e9g egy nagy hi\u00e1nyoss\u00e1g: ahhoz, hogy a r\u00e9gi infrastrukt\u00far\u00e1nk egy\u00fcttm\u0171k\u00f6dj\u00f6n az \u00fajjal, teljesen \u00e1t kellene \u00edrni az \u00f6sszes feladatot valamilyen Service Discovery rendszert haszn\u00e1lva. A munka nagyon sok, helyenk\u00e9nt gyakorlatilag lehetetlen, amikor alacsony szint\u0171 eszk\u00f6z\u00f6kr\u0151l van sz\u00f3, amelyek az OS magasszintj\u00e9n vagy k\u00f6zvetlen\u00fcl a hardverrel m\u0171k\u00f6dnek. E funkci\u00f3 megval\u00f3s\u00edt\u00e1sa bevett megold\u00e1smint\u00e1k seg\u00edts\u00e9g\u00e9vel, mint p\u00e9ld\u00e1ul <noindex><a rel=\"nofollow\" href=\"https:\/\/linkerd.io\">side-car<\/a><\/noindex> helyenk\u00e9nt tov\u00e1bbi terhel\u00e9st, helyenk\u00e9nt pedig a m\u0171k\u00f6dtet\u00e9s bonyolultabb\u00e1 v\u00e1l\u00e1s\u00e1t \u00e9s tov\u00e1bbi hibalehet\u0151s\u00e9geket jelentene. Nem akartuk bonyol\u00edtani a helyzetet, ez\u00e9rt \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy a Service Discovery haszn\u00e1lat\u00e1t opcion\u00e1liss\u00e1 tessz\u00fck. <\/p>\n<p><\/p>\n<p>A one-cloud-ban az IP k\u00f6veti a kont\u00e9nert, azaz minden feladat p\u00e9ld\u00e1nynak saj\u00e1t IP-c\u00edme van. Ez a c\u00edm \u201estatikus\u201d: minden p\u00e9ld\u00e1ny sz\u00e1m\u00e1ra r\u00f6gz\u00edt\u00e9sre ker\u00fcl a szolg\u00e1ltat\u00e1s els\u0151 felh\u0151be k\u00fcld\u00e9sekor. Ha a szolg\u00e1ltat\u00e1s \u00e9lete sor\u00e1n k\u00fcl\u00f6nb\u00f6z\u0151 sz\u00e1m\u00fa p\u00e9ld\u00e1nyt futtatott, akkor v\u00e9g\u00fcl annyi IP-c\u00edm lesz hozz\u00e1 rendelve, ah\u00e1ny p\u00e9ld\u00e1ny a maximum volt.<\/p>\n<p><\/p>\n<p>Ezek a c\u00edmek k\u00e9s\u0151bb nem v\u00e1ltoznak: egyszeri hozz\u00e1rendel\u00e9s ut\u00e1n folyamatosan fennmaradnak a szolg\u00e1ltat\u00e1s \u00e9lete sor\u00e1n a production k\u00f6rnyezetben. Az IP-c\u00edmek a kont\u00e9nerek ut\u00e1n k\u00f6vetik a h\u00e1l\u00f3zatban. Ha a kont\u00e9nert egy m\u00e1sik minyonra helyezik \u00e1t, akkor a c\u00edm is \u00e1tker\u00fcl vele. <\/p>\n<p><\/p>\n<p>\u00cdgy a szolg\u00e1ltat\u00e1s neve \u00e9s az IP-c\u00edmek list\u00e1j\u00e1nak p\u00e1ros\u00edt\u00e1sa nagyon ritk\u00e1n v\u00e1ltozik. Ha \u00fajra megn\u00e9zz\u00fck a szolg\u00e1ltat\u00e1s p\u00e9ld\u00e1nyneveit, amelyeket a cikk elej\u00e9n eml\u00edtett\u00fcnk (<strong>1.ok-web.group1.web.front.prod, 2.ok-web.group1.web.front.prod, \u2026<\/strong>), akkor \u00e9szrevehetj\u00fck, hogy ezek hasonl\u00edtanak a DNS-ben haszn\u00e1lt FQDN-re. \u00cdgy van, a szolg\u00e1ltat\u00e1s p\u00e9ld\u00e1nyainak nev\u00e9t az IP-c\u00edm\u00fck\u00f6n val\u00f3 megjelen\u00edt\u00e9shez DNS protokollt haszn\u00e1lunk. R\u00e1ad\u00e1sul ez a DNS visszaadja az \u00f6sszes kont\u00e9ner minden lefoglalt IP-c\u00edm\u00e9t \u2014 mind az akt\u00edv, mind a le\u00e1ll\u00edtott kont\u00e9nerek\u00e9t (tegy\u00fck fel, hogy h\u00e1rom replik\u00e1t haszn\u00e1lunk, de \u00f6t c\u00edm van lefoglalva \u2014 mind az \u00f6t vissza lesz adva). Az \u00fcgyfelek, miut\u00e1n megkapt\u00e1k ezt az inform\u00e1ci\u00f3t, megpr\u00f3b\u00e1lnak kapcsolatot l\u00e9tes\u00edteni az \u00f6sszes \u00f6t replik\u00e1val \u2014 \u00e9s \u00edgy hat\u00e1rozz\u00e1k meg, hogy melyek m\u0171k\u00f6dnek. Ez a hozz\u00e1f\u00e9rhet\u0151s\u00e9g meghat\u00e1roz\u00e1sa sokkal megb\u00edzhat\u00f3bb, mivel nem \u00e9rint sem a DNS, sem a Szolg\u00e1ltat\u00e1s Felfedez\u00e9s, teh\u00e1t nincsenek nehezen megoldhat\u00f3 probl\u00e9m\u00e1k az inform\u00e1ci\u00f3k aktualit\u00e1s\u00e1nak \u00e9s e rendszerek hibamentess\u00e9g\u00e9nek biztos\u00edt\u00e1s\u00e1val. S\u0151t, a kritikus szolg\u00e1ltat\u00e1sokban, amelyekt\u0151l az eg\u00e9sz port\u00e1l m\u0171k\u00f6d\u00e9se f\u00fcgg, ak\u00e1r a DNS-t is teljesen kihagyhatjuk, \u00e9s egyszer\u0171en az IP-c\u00edmeket bele\u00edrhatjuk a konfigur\u00e1ci\u00f3ba.<\/p>\n<p><\/p>\n<p>Az IP-k kont\u00e9nerekkel val\u00f3 \u00e1tvitel\u00e9nek megval\u00f3s\u00edt\u00e1sa nem trivi\u00e1lis \u2014 \u00e9s a m\u0171k\u00f6d\u00e9s\u00e9t egy k\u00f6vetkez\u0151 p\u00e9ld\u00e1n mutatjuk be:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/faf99c2609a57daa1bdc193cb0f4cb31.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tegy\u00fck fel, hogy a one-cloud mester utas\u00edtja M1 miny\u00f3ot, hogy ind\u00edtsa el <strong>1.ok-web.group1.web.front.prod<\/strong> az 1.1.1.1. c\u00edmmel. A miny\u00f3n fut <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bird_Internet_routing_daemon\">BIRD<\/a><\/noindex>, amely ezt a c\u00edmet bejelenti a speci\u00e1lis szervereknek <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Route_reflector\">route reflector<\/a><\/noindex>. Az ut\u00f3bbiak BGP session-t fenntartanak a h\u00e1l\u00f3zati berendez\u00e9ssel, amelyhez a 1.1.1.1 c\u00edmr\u0151l az M1-hez vezet\u0151 \u00fatvonalat k\u00f6zvet\u00edtik. Az M1 m\u00e1r Linux eszk\u00f6z\u00f6kkel ir\u00e1ny\u00edtja a csomagokat a kont\u00e9ner belsej\u00e9be. H\u00e1rom route reflector server van, mivel ez a one-cloud infrastukt\u00fara nagyon kritikus r\u00e9sze \u2014 n\u00e9lk\u00fcl\u00fck a h\u00e1l\u00f3zat nem m\u0171k\u00f6dik one-cloudban. Ezeket k\u00fcl\u00f6nb\u00f6z\u0151 \u00e1llv\u00e1nyokban helyezz\u00fck el, lehet\u0151leg a adatk\u00f6zpont k\u00fcl\u00f6nb\u00f6z\u0151 term\u00e9ben, hogy cs\u00f6kkents\u00fck annak val\u00f3sz\u00edn\u0171s\u00e9g\u00e9t, hogy mindh\u00e1rom egyszerre meghib\u00e1sodjon.<\/p>\n<p><\/p>\n<p>Most felt\u00e9telezz\u00fck, hogy a kapcsolat a one-cloud mester \u00e9s az M1 miny\u00f3 k\u00f6z\u00f6tt megszakadt. A one-cloud mester most azzal a felt\u00e9telez\u00e9ssel fog cselekedni, hogy az M1 teljesen hib\u00e1s. Teh\u00e1t utas\u00edtja az M2 miny\u00f3ot, hogy ind\u00edtsa el <strong>web.group1.web.front.prod<\/strong> ugyanazzal a 1.1.1.1 c\u00edmzettel. Most k\u00e9t ellentmond\u00e1sos \u00fatvonalunk van a h\u00e1l\u00f3zatban az 1.1.1.1-hez: M1-en \u00e9s M2-n. Az ilyen konfliktusok felold\u00e1s\u00e1hoz Multi Exit Discriminatort haszn\u00e1lunk, amely a BGP bejelent\u00e9sben van megadva. Ez egy sz\u00e1m, amely megmutatja a bejelentett \u00fatvonal s\u00faly\u00e1t. A ellentmond\u00e1sos \u00fatvonalak k\u00f6z\u00fcl a kisebb MED \u00e9rt\u00e9kkel rendelkez\u0151 lesz a kiv\u00e1lasztott. A master one-cloud a MED-et az IP-c\u00edmek integr\u00e1lt r\u00e9sz\u00e9nek tekinti. El\u0151sz\u00f6r az IP-c\u00edm megfelel\u0151en nagy MED-el = 1 000 000 ker\u00fcl bejegyz\u00e9sre. Azonban ha az kont\u00e9ner s\u00fcrg\u0151s \u00e1tkonfigur\u00e1l\u00e1s\u00e1ra van sz\u00fcks\u00e9g, a master cs\u00f6kkenti a MED-et, \u00edgy M2 m\u00e1r megkapja a parancsot, hogy jelentse be az 1.1.1.1 c\u00edmet MED = 999 999 \u00e9rt\u00e9kkel. Az M1-en m\u0171k\u00f6d\u0151 p\u00e9ld\u00e1ny ezalatt kapcsolat n\u00e9lk\u00fcl marad, \u00e9s a tov\u00e1bbi sorsa nem \u00e9rdekel minket eg\u00e9szen addig, am\u00edg a kapcsolat vissza nem \u00e1ll a master-rel, amikor is le\u00e1ll\u00edt\u00e1sra ker\u00fcl, mint r\u00e9gi dublikon.<\/p>\n<p><\/p>\n<h2 id=\"avarii\">Hib\u00e1k<\/h2>\n<p><\/p>\n<p>A adatk\u00f6zpontok \u00f6sszes ir\u00e1ny\u00edt\u00f3 rendszere \u00e1ltal\u00e1ban j\u00f3l kezeli a kisebb hib\u00e1kat. A kont\u00e9ner kies\u00e9se gyakorlatilag norm\u00e1lis b\u00e1rmilyen helyzetben.<\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg, hogyan kezelj\u00fck a hib\u00e1t, p\u00e9ld\u00e1ul amikor \u00e1ramkimarad\u00e1s t\u00f6rt\u00e9nik egy vagy t\u00f6bb adatk\u00f6zponti teremben.<\/p>\n<p><\/p>\n<p>Mit jelent a hiba az adatk\u00f6zpont ir\u00e1ny\u00edt\u00f3 rendszer\u00e9 sz\u00e1m\u00e1ra? El\u0151sz\u00f6r is, ez egy t\u00f6meges, egyidej\u0171 le\u00e1ll\u00e1s, ahol sok g\u00e9p munk\u00e1ja megszakad, \u00e9s az ir\u00e1ny\u00edt\u00f3 rendszernek egyszerre kell nagyon sok kont\u00e9nert migr\u00e1lnia. De ha a hiba nagyon sz\u00e9lesk\u00f6r\u0171, el\u0151fordulhat, hogy az \u00f6sszes feladat nem tud \u00e1tkonfigur\u00e1l\u00f3dni m\u00e1s minyonokra, mert az adatk\u00f6zpont er\u0151forr\u00e1s-capacit\u00e1sa 100% al\u00e1 cs\u00f6kken. <\/p>\n<p><\/p>\n<p>Gyakran a hib\u00e1k egy\u00fctt j\u00e1rnak az ir\u00e1ny\u00edt\u00f3 r\u00e9teg le\u00e1ll\u00e1s\u00e1val is. Ez t\u00f6rt\u00e9nhet az \u0151 berendez\u00e9seik meghib\u00e1sod\u00e1sa miatt, de gyakrabban az\u00e9rt, mert a hib\u00e1kat nem tesztelik, \u00e9s az ir\u00e1ny\u00edt\u00f3 r\u00e9teg mag\u00e1t\u00f3l is le\u00e1ll a megn\u00f6vekedett terhel\u00e9s miatt. <\/p>\n<p><\/p>\n<p>Mit lehet kezdeni mindezzel?<\/p>\n<p><\/p>\n<p>A t\u00f6meges migr\u00e1ci\u00f3k azt jelentik, hogy az infrastrukt\u00far\u00e1ban sok tev\u00e9kenys\u00e9g, migr\u00e1ci\u00f3 \u00e9s elhelyez\u00e9s jelenik meg. Minden migr\u00e1ci\u00f3nak sz\u00fcks\u00e9ge van egy kis id\u0151re a kont\u00e9nerek k\u00e9peinek sz\u00e1ll\u00edt\u00e1s\u00e1hoz \u00e9s kib\u0151v\u00edt\u00e9s\u00e9hez a minyonokhoz, kont\u00e9nerek elind\u00edt\u00e1s\u00e1hoz \u00e9s inicializ\u00e1l\u00e1s\u00e1hoz stb. Ez\u00e9rt c\u00e9lszer\u0171, hogy a fontosabb feladatok el\u0151bb induljanak el, mint a kev\u00e9sb\u00e9 fontosak.<\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck \u00e1t \u00fajb\u00f3l a j\u00f3l ismert szolg\u00e1ltat\u00e1si hierarchi\u00e1nkat, \u00e9s pr\u00f3b\u00e1ljuk meg meg\u00e1llap\u00edtani, hogy mely feladatokat szeretn\u00e9nk el\u0151sz\u00f6r v\u00e9grehajtani.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/2e827271adb8d3ff3d385e53553aaacf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Term\u00e9szetesen ezek azok a folyamatok, amelyek k\u00f6zvetlen\u00fcl r\u00e9szt vesznek a felhaszn\u00e1l\u00f3i k\u00e9r\u00e9sek feldolgoz\u00e1s\u00e1ban, azaz a prod. Ezt jelezz\u00fck azzal, hogy <strong>a telep\u00edt\u00e9si priorit\u00e1s<\/strong> \u2013 egy sz\u00e1m, amely hozz\u00e1rendelhet\u0151 egy sorhoz. Ha egy sor priorit\u00e1sa magasabb, a szolg\u00e1ltat\u00e1sai els\u0151bbs\u00e9get kapnak.<\/p>\n<p><\/p>\n<p>A prod-n\u00e1l magasabb priorit\u00e1sokat \u00e1ll\u00edtunk be, 0; a batch-n\u00e1l kiss\u00e9 alacsonyabbakat, 100; az idle-n\u00e1l pedig m\u00e9g alacsonyabbakat, 200. A priorit\u00e1sok hierarchikusan alkalmazand\u00f3k. Minden feladat, amely a hierarchi\u00e1ban alacsonyabb helyen \u00e1ll, a megfelel\u0151 priorit\u00e1ssal rendelkezik. Ha azt akarjuk, hogy a cache-ek a frontendek el\u0151tt induljanak a prod-on bel\u00fcl, a cache-nek 0 priorit\u00e1st, a frontend al-sorozatnak pedig 1 priorit\u00e1st adunk. Ha p\u00e9ld\u00e1ul azt akarjuk, hogy a frontendek k\u00f6z\u00fcl a f\u0151 port\u00e1l induljon el els\u0151k\u00e9nt, m\u00edg a zenei frontend csak k\u00e9s\u0151bb, a m\u00e1sodiknak alacsonyabb priorit\u00e1st adhatunk \u2013 10.<\/p>\n<p><\/p>\n<p>A k\u00f6vetkez\u0151 probl\u00e9ma az er\u0151forr\u00e1sok hi\u00e1nya. Teh\u00e1t, sok berendez\u00e9s meghib\u00e1sodott, eg\u00e9sz termek a datacenterben, \u00e9s annyi szolg\u00e1ltat\u00e1st ind\u00edtottunk, hogy most m\u00e1r mindenkinek nem jut elegend\u0151 er\u0151forr\u00e1s. Meg kell hat\u00e1roznunk, mely feladatokat kell fel\u00e1ldoznunk, hogy a f\u0151 kritikus szolg\u00e1ltat\u00e1sok m\u0171k\u00f6djenek. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/1b1ad3da16df6677dd0ba4b038cdd7d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A telep\u00edt\u00e9si priorit\u00e1ssal ellent\u00e9tben nem tudunk minden batch-feladatot \u00f6nk\u00e9nyesen fel\u00e1ldozni, n\u00e9h\u00e1nyuk fontos a portal m\u0171k\u00f6d\u00e9s\u00e9hez. Ez\u00e9rt k\u00fcl\u00f6n kiemelt\u00fck <strong>a kiszor\u00edt\u00e1si priorit\u00e1st<\/strong> a feladat sz\u00e1m\u00e1ra. A telep\u00edt\u00e9s sor\u00e1n egy magasabb priorit\u00e1s\u00fa feladat kiszor\u00edthatja, azaz le\u00e1ll\u00edthatja az alacsonyabb priorit\u00e1s\u00fa feladatot, ha nincs t\u00f6bb szabad minion. Ebben az esetben a alacsony priorit\u00e1s\u00fa feladat val\u00f3sz\u00edn\u0171leg ugyanolyan elhelyezetlen marad, azaz nem lesz megfelel\u0151 minion elegend\u0151 szabad er\u0151forr\u00e1ssal.<\/p>\n<p><\/p>\n<p>A hierarchi\u00e1nkban nagyon egyszer\u0171 meghat\u00e1rozni egy olyan kiszor\u00edt\u00e1si priorit\u00e1st, hogy a prod- \u00e9s batch-feladatok kiszor\u00edts\u00e1k vagy le\u00e1ll\u00edts\u00e1k az idle-feladatokat, de ne egym\u00e1st, \u00fagy, hogy az idle priorit\u00e1s\u00e1t 200-ra \u00e1ll\u00edtjuk. Ahogyan a telep\u00edt\u00e9si priorit\u00e1s eset\u00e9ben is, a hierarchi\u00e1nkat haszn\u00e1lhatjuk arra, hogy bonyolultabb szab\u00e1lyokat le\u00edrjunk. P\u00e9ld\u00e1ul jelezhetj\u00fck, hogy a zenei funkci\u00f3kkal \u00e1ldozunk fel, ha nem el\u00e9g a forr\u00e1sunk a f\u0151 webport\u00e1lhoz, a megfelel\u0151 csom\u00f3pontok priorit\u00e1s\u00e1t alacsonyabbra \u00e1ll\u00edtva: 10.<\/p>\n<p><\/p>\n<h2 id=\"avarii-dc-celikom\">Teljes datacenter balesetek<\/h2>\n<p><\/p>\n<p>Mi\u00e9rt hib\u00e1sodhat meg az eg\u00e9sz datacenter? Term\u00e9szeti csap\u00e1s. Volt egy remek poszt, hogyan <noindex><a rel=\"nofollow\" href=\"https:\/\/habrahabr.ru\/company\/dataline\/blog\/333578\/\">hatott a hurrik\u00e1n a datacenter m\u0171k\u00f6d\u00e9s\u00e9re<\/a><\/noindex>A l\u00e9tez\u0151 probl\u00e9m\u00e1k k\u00f6z\u00e9 tartozik, hogy egy alkalommal egy hajl\u00e9ktalan a csatorn\u00e1ban felgy\u00fajtotta az optik\u00e1t, \u00e9s az adatk\u00f6zpont teljesen elvesztette a kapcsolatot a t\u00f6bbi helysz\u00ednnel. A meghib\u00e1sod\u00e1s oka lehet az emberi t\u00e9nyez\u0151 is: a kezel\u0151 olyan parancsot adhat ki, amely miatt az eg\u00e9sz adatk\u00f6zpont \u00f6sszeomlik. Ez nagyobb hib\u00e1k miatt is bek\u00f6vetkezhet. \u00d6sszess\u00e9g\u00e9ben az adatk\u00f6zpontok le\u00e1ll\u00e1sa nem ritka jelens\u00e9g. N\u00e1lunk ez p\u00e1r havonta el\u0151fordul. <\/p>\n<p><\/p>\n<p>\u00c9s ezt tessz\u00fck, hogy senki ne posztoljon #ok\u017eiv\u00ed a Twitterre.<\/p>\n<p><\/p>\n<p>Az els\u0151 strat\u00e9gia az izol\u00e1ci\u00f3. Minden one-cloud p\u00e9ld\u00e1ny elk\u00fcl\u00f6n\u00edtett \u00e9s csak egy adatk\u00f6zpont g\u00e9peit tudja kezelni. Teh\u00e1t, ha egy felh\u0151 meghib\u00e1sodik hib\u00e1k vagy a kezel\u0151 t\u00e9ves parancsa miatt, az csak egy adatk\u00f6zpont elveszt\u00e9s\u00e9t jelenti. Felk\u00e9sz\u00fclt\u00fcnk erre: van egy tartal\u00e9kpolitika, amely alapj\u00e1n az alkalmaz\u00e1s \u00e9s az adatok replik\u00e1i minden adatk\u00f6zpontban tal\u00e1lhat\u00f3k. Hibat\u0171r\u0151 adatb\u00e1zisokat haszn\u00e1lunk, \u00e9s id\u0151szakosan tesztelj\u00fck a meghib\u00e1sod\u00e1sokat.<br \/>\nMivel ma n\u00e9gy adatk\u00f6zpontunk van, teh\u00e1t n\u00e9gy k\u00fcl\u00f6n\u00e1ll\u00f3, teljesen elk\u00fcl\u00f6n\u00edtett one-cloud p\u00e9ld\u00e1nyunk is l\u00e9tezik.<\/p>\n<p><\/p>\n<p>Ez a megk\u00f6zel\u00edt\u00e9s nemcsak a fizikai meghib\u00e1sod\u00e1sokkal szemben v\u00e9d, hanem a kezel\u0151 hib\u00e1ival szemben is.<\/p>\n<p><\/p>\n<p>Mit lehet m\u00e9g tenni az emberi t\u00e9nyez\u0151vel? Amikor a kezel\u0151 furcsa vagy potenci\u00e1lisan vesz\u00e9lyes parancsot ad a felh\u0151nek, hirtelen k\u00e9rheti, hogy oldjon meg egy kis feladatot, hogy ellen\u0151rizze, mennyire j\u00f3l gondolkodott. P\u00e9ld\u00e1ul, ha valamilyen t\u00f6meges le\u00e1ll\u00edt\u00e1s t\u00f6rt\u00e9nik, vagy csak furcsa parancs \u2014 replik\u00e1k sz\u00e1m\u00e1nak cs\u00f6kkent\u00e9se vagy a k\u00e9pk\u00e9p neve megv\u00e1ltoztat\u00e1sa, nem csak a verzi\u00f3sz\u00e1m a \u00faj manifestben.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/vh\/vw\/0d\/vhvw0dzobo9sd4x7zih_cnfnlu8.png\"><img decoding=\"async\" alt=\"One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassznikaiban\" src=\"\/wp-content\/uploads\/2020\/06\/f7ee44a77e30612a3cd99a6f7aee3820.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<h2 id=\"itogi\">\u00d6sszegz\u00e9s<\/h2>\n<p><\/p>\n<p>A one-cloud megk\u00fcl\u00f6nb\u00f6ztet\u0151 jellemz\u0151i: <\/p>\n<p><\/p>\n<ul>\n<li><strong>Hierarchikus \u00e9s \u00e1ttekinthet\u0151 szolg\u00e1ltat\u00e1s- \u00e9s kont\u00e9nernevez\u00e9si s\u00e9ma,<\/strong>, amely lehet\u0151v\u00e9 teszi, hogy nagyon gyorsan megtudjuk, mir\u0151l van sz\u00f3, mir\u0151l sz\u00f3l, hogyan m\u0171k\u00f6dik, \u00e9s ki felel \u00e9rte. <\/li>\n<li>Saj\u00e1t <strong>prod \u00e9s batch feladatok \u00f6sszevon\u00e1s\u00e1nak technik\u00e1j\u00e1t<\/strong>alkalmazzuk a minionokon, hogy n\u00f6velj\u00fck a g\u00e9pek k\u00f6z\u00f6tti hat\u00e9konys\u00e1got. cpuset helyett CPU kv\u00f3t\u00e1kat, r\u00e9szesed\u00e9seket, CPU \u00fctemez\u00e9si politik\u00e1kat \u00e9s Linux QoS-t haszn\u00e1lunk.<\/li>\n<li>Teljesen izol\u00e1lni a g\u00e9pen fut\u00f3 kont\u00e9nereket nem siker\u00fclt, de k\u00f6lcs\u00f6nhat\u00e1suk 20%-on bel\u00fcl marad.<\/li>\n<li>A szolg\u00e1ltat\u00e1sok hierarchi\u00e1j\u00e1nak megszervez\u00e9se seg\u00edt az automatiz\u00e1lt v\u00e9szhelyzeti elt\u00e1vol\u00edt\u00e1sban <strong>helyez\u00e9si \u00e9s ki\u00fct\u00e9si priorit\u00e1sok \u00e1ltal.<\/strong>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"chavo\">GYIK<\/h2>\n<p><\/p>\n<p>Mi\u00e9rt nem haszn\u00e1ltunk k\u00e9sz megold\u00e1st.<\/p>\n<p><\/p>\n<ul>\n<li>A k\u00fcl\u00f6nb\u00f6z\u0151 feladatizol\u00e1ci\u00f3s oszt\u00e1lyok elt\u00e9r\u0151 logik\u00e1t ig\u00e9nyelnek a minionok elhelyez\u00e9s\u00e9hez. M\u00edg a prod feladatok egyszer\u0171 er\u0151forr\u00e1s-\u00f6r\u00f6kl\u00e9ssel helyezhet\u0151k el, a batch \u00e9s idle feladatokat a g\u00e9pek minionjainak val\u00f3s er\u0151forr\u00e1s-kihozatala alapj\u00e1n kell elhelyezni. <\/li>\n<li>Az olyan er\u0151forr\u00e1sok figyelembev\u00e9tel\u00e9nek sz\u00fcks\u00e9gess\u00e9ge, mint: \n<ul>\n<li>h\u00e1l\u00f3zati s\u00e1vsz\u00e9less\u00e9g;<\/li>\n<li>lemezek t\u00edpusa \u00e9s \"spindlek.\"<\/li>\n<\/ul>\n<\/li>\n<li>A szolg\u00e1ltat\u00e1sok priorit\u00e1s\u00e1nak meghat\u00e1roz\u00e1sa a v\u00e9szhelyzetek felsz\u00e1mol\u00e1sakor, a csapatok er\u0151forr\u00e1sokkal kapcsolatos jogai \u00e9s kv\u00f3t\u00e1i, amit hierarchikus sorokkal oldunk meg a one-cloudban.<\/li>\n<li>Az emberi nevek haszn\u00e1lata a kont\u00e9nerekhez a v\u00e9szhelyzetekre \u00e9s incidensekre val\u00f3 reakci\u00f3id\u0151 cs\u00f6kkent\u00e9se \u00e9rdek\u00e9ben.<\/li>\n<li>A Service Discovery egyidej\u0171, \u00e1ltal\u00e1nos bevezet\u00e9s\u00e9nek lehetetlens\u00e9ge; a f\u00e9mes hoszton elhelyezett feladatokkal val\u00f3 hossz\u00fa egy\u00fctt\u00e9l\u00e9s sz\u00fcks\u00e9gess\u00e9ge \u2014 amit a kont\u00e9nerek m\u00f6g\u00f6tti \"statikus\" IP-c\u00edmek megoldanak, \u00e9s mint k\u00f6vetkezm\u00e9ny, a nagy h\u00e1l\u00f3zati infrastrukt\u00far\u00e1val val\u00f3 egyedi integr\u00e1ci\u00f3 sz\u00fcks\u00e9gess\u00e9ge.<\/li>\n<\/ul>\n<p><\/p>\n<p>Mindezek a funkci\u00f3k jelent\u0151s \u00e1talak\u00edt\u00e1sokat ig\u00e9nyeln\u00e9nek a megl\u00e9v\u0151 megold\u00e1sokban, \u00e9s a munka mennyis\u00e9g\u00e9t \u00e9rt\u00e9kelve r\u00e1j\u00f6tt\u00fcnk, hogy saj\u00e1t megold\u00e1sunkat hasonl\u00f3 er\u0151fesz\u00edt\u00e9sekkel tudjuk kifejleszteni. De a saj\u00e1t megold\u00e1sunk sokkal k\u00f6nnyebben m\u0171k\u00f6dtethet\u0151 \u00e9s fejleszthet\u0151 lesz - nincs benne felesleges absztrakci\u00f3, amely a sz\u00e1munkra sz\u00fcks\u00e9gtelen funkci\u00f3kat t\u00e1mogatja. <\/p>\n<p><\/p>\n<p>Akik az utols\u00f3 sorokat olvass\u00e1k - k\u00f6sz\u00f6nj\u00fck a t\u00fcrelm\u00fcket \u00e9s figyelm\u00fcket!<\/p>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/odnoklassniki\/blog\/346868\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0410\u043b\u043e\u0445\u0430, \u043f\u0438\u043f\u043b! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041e\u043b\u0435\u0433 \u0410\u043d\u0430\u0441\u0442\u0430\u0441\u044c\u0435\u0432, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u041e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u0430\u0445 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u0410 \u043a\u0440\u043e\u043c\u0435 \u043c\u0435\u043d\u044f, \u0432 \u041e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0443\u0447\u0430 \u0436\u0435\u043b\u0435\u0437\u0430. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0435 \u0426\u041e\u0414\u0430, \u0432 \u043d\u0438\u0445 \u043e\u043a\u043e\u043b\u043e 500 \u0441\u0442\u043e\u0435\u043a \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0441 8 \u0442\u044b\u0441\u044f\u0447\u0430\u043c\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0412 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u043a\u0443, \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":84115,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-84114","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=\"\u0410\u043b\u043e\u0445\u0430, \u043f\u0438\u043f\u043b!\" \/>\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\/one-cloud-os-urovnya-data-czentra-v-odnoklassnikah\" \/>\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\udd47One-cloud \u2014 \u041e\u0421 \u0443\u0440\u043e\u0432\u043d\u044f \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430 \u0432 \u041e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u0430\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0410\u043b\u043e\u0445\u0430, \u043f\u0438\u043f\u043b!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/one-cloud-os-urovnya-data-czentra-v-odnoklassnikah\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-05T05:42:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-05T05:42:55+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\udd47One-cloud \u2014 adatk\u00f6zponti oper\u00e1ci\u00f3s rendszer az Odnoklassnikin | ProHoster","description":"Aloha, n\u00e9p!","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/one-cloud-os-urovnya-data-czentra-v-odnoklassnikah","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\udd47One-cloud \u2014 \u041e\u0421 \u0443\u0440\u043e\u0432\u043d\u044f \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430 \u0432 \u041e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u0430\u0445 | ProHoster","og:description":"\u0410\u043b\u043e\u0445\u0430, \u043f\u0438\u043f\u043b!","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/one-cloud-os-urovnya-data-czentra-v-odnoklassnikah","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-05T05:42:55+00:00","article:modified_time":"2020-06-05T05:42:55+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"84114","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 15:04:42","updated":"2022-10-02 14:53:14","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\/84114","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=84114"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/84114\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/84115"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=84114"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=84114"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=84114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}