{"id":52389,"date":"2019-11-07T00:00:00","date_gmt":"2019-11-06T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/kak-realizuetsya-otkazoustojchivaya-veb-arhitektura-v-platforme-mail-ru-cloud-solutions"},"modified":"2020-02-18T14:00:05","modified_gmt":"2020-02-18T11:00:05","slug":"kak-realizuetsya-otkazoustojchivaya-veb-arhitektura-v-platforme-mail-ru-cloud-solutions","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-realizuetsya-otkazoustojchivaya-veb-arhitektura-v-platforme-mail-ru-cloud-solutions","title":{"rendered":"Kuidas rakendatakse talitlush\u00e4irekindlat veebiarhitektuuri Mail.ru Cloud Solutions platvormil","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kuidas rakendatakse talitlush\u00e4irekindlat veebiarhitektuuri Mail.ru Cloud Solutions platvormil\" src=\"\/wp-content\/uploads\/2019\/11\/fe7af07f3ac5ca4e75009993b742293e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTere, Habr! Mina olen Artyom Karamyshev, s\u00fcsteemi haldamise meeskonna juht. <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.Ru Cloud Solutions (MCS)<\/a><\/noindex>. Viimase aasta jooksul on meil olnud palju uusi tooteid. Soovisime tagada, et API teenused oleksid kergesti skaleeritavad, talitlusp\u00fcsivad ja valmis kiiresti kasvavale kasutajakoormusele. Meie platvorm p\u00f5hineb OpenStackil ja soovin r\u00e4\u00e4kida nendest talitlusp\u00fcsivuse probleemidest, millega oleme silmitsi seisnud, et luua talitlusp\u00fcsiv s\u00fcsteem. Arvan, et see v\u00f5iks huvi pakkuda ka neile, kes arendavad tooteid OpenStackil.<\/p>\n<p>Platvormi \u00fcldine talitlusp\u00fcsivus tuleneb selle komponentide talitlusp\u00fcsivusest. Niisiis, liigume j\u00e4rk-j\u00e4rgult l\u00e4bi k\u00f5ikidest tasemetest, kus oleme avastanud riske ja need k\u00f5rvaldada.<\/p>\n<p>Selle loo videoversioon, mille algallikaks on ettekande Uptime day 4 konverentsil, mille korraldas <noindex><a rel=\"nofollow\" href=\"http:\/\/www.itsumma.ru\">ITSumma<\/a><\/noindex>, on saadaval <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=3b06MVou-vg&amp;list=PLmXjIrLllpkjwuIGkzBkLbI7oHtUadmvZ&amp;index=5\">Uptime Community YouTube kanalil.<\/a><\/noindex>. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>F\u00fc\u00fcsilise arhitektuuri talitlusp\u00fcsivus<\/h2>\n<p>\nMCSi avalik osa asub praegu kahel Tier III andmekeskusel, nende vahel on pimedat kiudkaablit, mis on f\u00fc\u00fcsilisel tasemel reserveeritud erinevate marsruutide jaoks, mille l\u00e4bilaskev\u00f5ime on 200 Gbit\/s. Tier III tase tagab vajaliku f\u00fc\u00fcsilise infrastruktuuri talitlusp\u00fcsivuse taseme. <\/p>\n<p>Pime kiud on reserveeritud nii f\u00fc\u00fcsilisel kui ka loogilisel tasemel. Kanali reserveerimise protsess oli iteratiivne, tekkisid probleemid ja pidevalt t\u00e4iustame side\u00fchendust andmekeskuste vahel. <\/p>\n<blockquote><p>N\u00e4iteks hiljuti, kui t\u00f6\u00f6tati \u00fche andmekeskuse l\u00e4hedal kaevanduses, l\u00f5hkus ekskavaator toru, milles olid nii p\u00f5hikaabel kui ka reserveeritud optiline kaabel. Meie talitlusp\u00fcsiv sidekanal andmekeskusega osutus \u00fches punktis, kaevanduses, haavatavaks. Vastavalt kaotasime osa infrastruktuurist. T\u00f5ime v\u00e4lja j\u00e4reldused, tegime mitmeid samme, sealhulgas paigaldasime k\u00f5rvalasuvasse kaevandusse t\u00e4iendava optika.<\/p><\/blockquote>\n<p>\nAndmekeskustes on sidepakkujate kohalolekupunktid, kellele edastame oma eeliseid BGP kaudu. Iga v\u00f5rgu suuna jaoks valitakse parim m\u00f5\u00f5dik, mis v\u00f5imaldab pakkuda erinevatele klientidele parima kvaliteediga \u00fchendust. Kui \u00fche pakkuja kaudu \u00fchendus katkeb, kohandame oma marsruutimist saadaval olevate pakkujate kaudu.<\/p>\n<p>Pakkuja t\u00f6\u00f6 t\u00f5rke korral l\u00fclitame automaatselt j\u00e4rgmisele. Kui \u00fcks andmekeskus eba\u00f5nnestub, on meil teises andmekeskuses peegelkohalik koopia meie teenustest, mis v\u00f5tavad kogu koormuse enda peale.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas rakendatakse talitlush\u00e4irekindlat veebiarhitektuuri Mail.ru Cloud Solutions platvormil\" src=\"\/wp-content\/uploads\/2019\/11\/295ca212f48dd074d834154666e5b0c3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>F\u00fc\u00fcsilise infrastruktuuri t\u00f5rketaluvus<\/i><\/p>\n<h2>Mida me kasutame t\u00f5rketaluvuse tagamiseks rakendustasandil<\/h2>\n<p>\nMeie teenus on \u00fcles ehitatud mitmete avatud l\u00e4htekoodiga komponentide baasil. <\/p>\n<p><b>ExaBGP<\/b> \u2014 teenus, mis realiseerib mitmeid funktsioone d\u00fcnaamilise marsruutimise protokolli kaudu BGP baasil. Me kasutame seda aktiivselt, et kuulutada v\u00e4lja meie valged IP-aadressid, mille kaudu kasutajad p\u00e4\u00e4sevad API-le.<\/p>\n<p><b>Edasi l\u00e4ks kliendi p\u00e4ring HAProxy-sse, mis lahendas j\u00e4rgmised \u00fclesanded:<\/b> \u2014 k\u00f5rgkoormusega tasakaalustaja, mis lubab seadistada v\u00e4ga paindlikke liikluse tasakaalustamise reegleid erinevatel OSI mudeli tasanditel. Me kasutame seda tasakaalustamiseks k\u00f5igi teenuste ees: andmebaasid, s\u00f5numibrokereid, API-teenuseid, veebiteenuseid, meie sisemisi projekte \u2014 k\u00f5ik on HAProxy taga.<\/p>\n<p><b>API rakendus<\/b> \u2014 veebirakendus, kirjutatud pythonis, mille abil kasutaja haldab oma infrastruktuuri, oma teenust.<\/p>\n<p><b>T\u00f6\u00f6taja rakendus <\/b>(edaspidi lihtsalt t\u00f6\u00f6taja) \u2014 OpenStack teenustes on see infrastruktuuri demon, mis v\u00f5imaldab edastada API-k\u00e4sku infrastruktuurile. N\u00e4iteks toimub ketta loomine just t\u00f6\u00f6tajas, samas kui loomise p\u00e4ring l\u00e4heb API rakendusse. <\/p>\n<h2>Standardne OpenStack rakenduste arhitektuur<\/h2>\n<p>\nEnamik OpenStacki alla arendatavaid teenuseid p\u00fc\u00fcab j\u00e4rgida \u00fchtset paradigmat. Teenus koosneb tavaliselt kahest osast: API-st ja t\u00f6\u00f6tajatest (taustarakenditest). Reeglina on API WSGI rakendus Pythonis, mis t\u00f6\u00f6tab kas iseseisva protsessina (daemon) v\u00f5i olemasoleva veebiserveri Nginx, Apache kaudu. API t\u00f6\u00f6tleb kasutaja p\u00e4ringut ja edastab edasised juhised t\u00f6\u00f6taja rakendusele. Edastamine toimub s\u00f5numivahendi kaudu, tavaliselt RabbitMQ, kuid teisi toetatakse halvasti. Kui s\u00f5numid j\u00f5uavad vahendisse, t\u00f6\u00f6tavad need t\u00f6\u00f6tajad ja vajadusel tagastavad vastuse. <\/p>\n<p>See paradigma eeldab isoleeritud \u00fcldisi rikkepunkte: RabbitMQ ja andmebaasi. RabbitMQ on aga isoleeritud \u00fches teenuses ja v\u00f5ib idee kohaselt olla iga teenuse jaoks individuaalne. Seega, meie MCS-is jagame maksimaalselt neid teenuseid; iga projekti jaoks loome eraldi andmebaasi ja eraldi RabbitMQ. See l\u00e4henemine on hea, kuna rikke korral m\u00f5nes haavatavas kohas ei l\u00f5hku kogu teenust, vaid ainult selle osa.<\/p>\n<p>T\u00f6\u00f6tajate rakenduste arv ei ole millegagi piiratud, mist\u00f5ttu API saab h\u00f5lpsasti horisontaalselt skaleerida koormustasakaalustajate abil j\u00f5udluse ja t\u00f5rkeotsingu suurendamiseks.<\/p>\n<blockquote><p>M\u00f5nes teenuses on teenuse sees vajalik koordineerimine - kui toimub keerulisi j\u00e4rjestikuseid toiminguid API ja t\u00f6\u00f6tlejate vahel. Sellisel juhul kasutatakse \u00fchtset koordineerimiskeskust, klustserite s\u00fcsteemi nagu Redis, Memcache, etcd, mis v\u00f5imaldab \u00fchel t\u00f6\u00f6tlejal \u00f6elda teisele, et see \u00fclesanne on tema p\u00e4ralt (\u201epalun, \u00e4ra v\u00f5ta seda\u201c). Me kasutame etcd-d. Reeglina suhtlevad t\u00f6\u00f6tlejad aktiivselt andmebaasiga, kirjutavad ja loevad sealt teavet. Andmebaasina kasutame MariaDB-d, mis asub meil multimeister-klusteris.\n<\/p><\/blockquote>\n<p>\nKlassikaline \u00fchekordne teenus on korraldatud OpenStackile omase viisi kohaselt. Seda v\u00f5ib pidada isoleeritud s\u00fcsteemiks, mille jaoks on skaleerimise ja t\u00f5rkeotsingu viisid piisavalt selged. N\u00e4iteks, et tagada API t\u00f5rkeotsing, piisab, kui paigaldada nende ette koormustasakaalustaja. T\u00f6\u00f6tajate skaleerimine saavutatakse nende arvu suurendamisega. <\/p>\n<p>Kogu s\u00fcsteemi n\u00f5rk koht on RabbitMQ ja MariaDB. Nende arhitektuur v\u00e4\u00e4rib eraldi artiklit. Selles artiklis soovin keskenduda API talitlush\u00e4irete v\u00e4ltimisele.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas rakendatakse talitlush\u00e4irekindlat veebiarhitektuuri Mail.ru Cloud Solutions platvormil\" src=\"\/wp-content\/uploads\/2019\/11\/f39e5a8ae350864e311bf4db3b9c34b3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Openstacki rakenduse arhitektuur. Pilveplatvormi koormuse ja talitlush\u00e4irete v\u00e4ltimine.<\/i><\/p>\n<h2>Teeme HAProxy koormuse tasandaja talitlush\u00e4irete v\u00e4ltimiseks ExaBGP abil.<\/h2>\n<p>\nKuna meie API-d peavad olema skaleeritavad, kiired ja talitlush\u00e4irete v\u00e4ltimisega, panime nende ette koormuse tasandaja. Valisime HAProxy. Minu arvates omab see k\u00f5iki vajalikke omadusi meie \u00fclesande jaoks: tasandamine mitmel OSI tasemel, haldust\u00fc\u00fcp, paindlikkus ja skaleeritavus, suur hulk tasandamismeetodeid, toeks sessioonitabelid.<\/p>\n<p>Esimene probleem, mille lahendamine on vajalik, on koormuse tasandaja talitlush\u00e4irete v\u00e4ltimine. Lihtsalt koormuse tasandaja paigaldamine loob samuti rikke punkti: koormuse tasandaja eba\u00f5nnestub - teenus kukub v\u00e4lja. Selle v\u00e4ltimiseks kasutasime HAProxy koos ExaBGP-ga.<\/p>\n<p>ExaBGP v\u00f5imaldab rakendada teenuse seisundi kontrollimise mehhanismi. Me kasutasime seda mehhanismi HAProxy t\u00f6\u00f6kindluse kontrollimiseks ning probleemide ilmnemisel l\u00fclitasime HAProxy teenuse BGP-st v\u00e4lja. <\/p>\n<p><b>ExaBGP+HAProxy skeem.<\/b><\/p>\n<ol>\n<li>Installime kolmele serverile vajaliku tarkvara, ExaBGP ja HAProxy. <\/li>\n<li>Loome igas serveris loopback-liidese.<\/li>\n<li>Kasutame k\u00f5igil kolmel serveril selle liidese jaoks sama avalikku IP-aadressi.<\/li>\n<li>Avalik IP-aadress kuulutab v\u00e4lja ExaBGP kaudu internetis. <\/li>\n<\/ol>\n<p>\nTalitlush\u00e4irete v\u00e4ltimine saavutatakse sama IP-aadressi kuulutamisega k\u00f5igilt kolmest serverist. V\u00f5rgu vaates on tegemist sama aadressiga, mis on saadaval kolme erineva j\u00e4rgmise h\u00fcppena. Ruuter n\u00e4eb kolme identset marsruuti, valib oma meetri alusel k\u00f5ige prioriteetsemalt (tavaliselt on see sama valik) ning liiklus suunatakse ainult \u00fchele serverile. <\/p>\n<p>Kui HAProxy t\u00f6\u00f6ga tekivad probleemid v\u00f5i server eba\u00f5nnestub, l\u00f5petab ExaBGP marsruudi kuulutamise ning liiklus sujuvalt l\u00fclitub teisele serverile. <\/p>\n<p>Nii saavutasime koormuse tasandaja talitlush\u00e4irete v\u00e4ltimise.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas rakendatakse talitlush\u00e4irekindlat veebiarhitektuuri Mail.ru Cloud Solutions platvormil\" src=\"\/wp-content\/uploads\/2019\/11\/9fba0718176dc1266f25a2c01ec87348.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>HAProxy koormuse tasandajate talitlush\u00e4irete v\u00e4ltimine.<\/i><\/p>\n<p>Skeem on osutunud mitteideaalseks: me \u00f5ppisime HAProxy varukoopiaid tegema, kuid ei \u00f5ppinud koormust teenuste sees jagama. Seet\u00f5ttu laiendasime skeemi veidi: l\u00e4ksime \u00fcle koormuse tasandamisele mitme avaliku IP-aadressi vahel.<\/p>\n<h2>DNS ja BGP-p\u00f5hine koormuse tasakaalustamine<\/h2>\n<p>\nKoormuse tasakaalustamine meie HAProxy ees on endiselt lahendamata k\u00fcsimus. Siiski, seda on v\u00f5imalik lahendada \u00fcsna lihtsalt, nagu me ka ise tegime.<\/p>\n<p>Kolme serveri tasakaalustamiseks on vajalik 3 avalikku IP-aadressi ja vana hea DNS. Iga\u00fcks neist aadressidest m\u00e4\u00e4ratakse iga HAProxy loopback-liidesele ja kuulutatakse internetis. <\/p>\n<p>OpenStackis kasutatakse ressursside haldamiseks teenuste katalooge, kus m\u00e4\u00e4ratakse mingisuguse teenuse API l\u00f5pp-punkt. Selles kataloogis kirjutame domeeninime \u2014 public.infra.mail.ru, mis lahendatakse DNS kaudu kolme erineva IP-aadressiga. Tulemuseks on koormuse jaotamine kolme aadressi vahel DNS-i kaudu. <\/p>\n<p>Kuna me ei halda avalike IP-aadresside kuulutamisel serveri valimise prioriteete, ei ole see veel tasakaalustamine. \u00dcldiselt valitakse ainult \u00fcks server IP-aadresside vanuse alusel, samas kui kaks teist j\u00e4\u00e4vad k\u00e4est, kuna BGP-s ei ole mingeid meetrikaid m\u00e4\u00e4ratud.<\/p>\n<p>Oleme hakanud kuulutama marsruute ExaBGP kaudu erineva meetriku j\u00e4rgi. Iga koormuse tasakaalustaja kuulutab k\u00f5ik kolm avalikku IP-aadressi, kuid \u00fcks neist, antud koormuse tasakaalustaja jaoks peamine, kuulutatakse minimaalse meetrikaga. Seet\u00f5ttu, kuni k\u00f5ik kolm tasakaalustajat on t\u00f6\u00f6s, saavad esimest IP-aadressi ringlusse esimesest tasakaalustajast, teise aadressi teiselt ja kolmanda aadressi kolmandalt.<\/p>\n<p>Mis juhtub, kui \u00fcks koormuse tasakaalustajatest t\u00f5rjub? Kui m\u00f5ni koormuse tasakaalustaja eba\u00f5nnestub, kuulutatakse tema p\u00f5hjaadress ikka veel kahe teise kaudu, liiklus nende vahel jaotatakse \u00fcmber. Seel\u00e4bi saame kasutajale DNS kaudu kohe mitu IP-aadressi. DNS-i ja erineva meetrikaga tasakaalustamisega saavutame koormuse \u00fchtlase jaotuse k\u00f5igi kolme tasakaalustaja vahel. Ja samal ajal ei kaota me rikke taluvust.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas rakendatakse talitlush\u00e4irekindlat veebiarhitektuuri Mail.ru Cloud Solutions platvormil\" src=\"\/wp-content\/uploads\/2019\/11\/1485367a934aea06b68c6d05c184d263.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>HAProxy tasakaalustamine DNS + BGP-p\u00f5hiselt<\/i><\/p>\n<h2>ExaBGP ja HAProxy vaheline suhtlus<\/h2>\n<p>\nSeega oleme rakendanud rikke taluvuse serveri v\u00e4ljalangemise korral, tuginedes marsruutide kuulutamise l\u00f5petamisele. Kuid HAProxy v\u00f5ib sulguda ka muudel p\u00f5hjustel, kui serveri rike: haldusvead, teenuse sisevead. Soovime sellistel juhtudel kahjustatud koormuse tasakaalustaja koormuse alt eemaldada ja seet\u00f5ttu on vajalik teine mehhanism. <\/p>\n<p>Seet\u00f5ttu, laiendades eelmist skeemi, rakendasime heartbeat'i ExaBGP ja HAProxy vahel. See on tarkvara rakendus ExaBGP ja HAProxy vahelise suhtluse jaoks, kus ExaBGP kasutab rakenduste staatuse kontrollimiseks kohandatud skripte.<\/p>\n<p>Selleks tuleb ExaBGP konfiguratsioonis seadistada tervise kontrollimise t\u00f6\u00f6riist, mis suudab HAProxy staatust j\u00e4lgida. Meie puhul seadistasime HAProxy-s tervise taustteenuse ja ExaBGP kontrollime seda lihtsa GET p\u00e4ringuga. Kui kuulutus l\u00f5petab toimumise, ei tohiks HAProxy t\u00f5en\u00e4oliselt t\u00f6\u00f6tada ja kuulutamine ei ole vajalik. <\/p>\n<p><img decoding=\"async\" alt=\"Kuidas rakendatakse talitlush\u00e4irekindlat veebiarhitektuuri Mail.ru Cloud Solutions platvormil\" src=\"\/wp-content\/uploads\/2019\/11\/d5cda30043fe02ab81355b28c0d83ac6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>HAProxy Tervise Kontroll<\/i><\/p>\n<h2>HAProxy Peers: sessioonide s\u00fcnkroniseerimine <\/h2>\n<p>\nJ\u00e4rgmine, mida tuli teha, oli sessioonide s\u00fcnkroniseerimine. Jaotatud tasakaalustajate kaudu t\u00f6\u00f6tades on keeruline korraldada kliendi sessioonide teabe s\u00e4ilitamist. Kuid HAProxy on \u00fcks v\u00e4heseid tasakaalustajaid, mis suudab seda teha Peers funktsionaalsuse kaudu, mis v\u00f5imaldab edastada HAProxy erinevate protsesside vahel sessioonide tabelid. <\/p>\n<p>On olemas erinevaid tasakaalustamise meetodeid: lihtsad, nagu <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Round-robin_(%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC)\">round-robin<\/a><\/noindex>, ja t\u00e4iustatud, kui kliendi sessioon salvestatakse ja ta j\u00f5uab igal korral samale serverile, nagu varem. Soovisime rakendada teist varianti.<\/p>\n<p>HAProxy-s kasutatakse kliendi sessioonide s\u00e4ilitamiseks selle mehhanismi stick-tables. Need salvestavad kliendi algse IP-aadressi, valitud sihtaadressi (taustteenus) ja teatud teenuseteavet. \u00dcldiselt kasutatakse stick-tabeleid source-IP ja destination-IP paari s\u00e4ilitamiseks, mis on eriti kasulik rakendustes, mis ei suuda edastada kasutaja sessiooni konteksti teisele tasakaalustajale, n\u00e4iteks RoundRobin tasakaalustamise re\u017eiimis.<\/p>\n<p>Kui stick-tabelit \u00f5petada liikuma erinevate HAProxy protsesside vahel (kui toimub tasakaalustamine), saavad meie tasakaalustajad t\u00f6\u00f6tada \u00fche stick-tabelite kogumiga. See v\u00f5imaldab sujuvat kliendi v\u00f5rgu \u00fcleminekut, kui \u00fcks tasakaalustaja kokku kukub, ja kliendi sessioonidega t\u00f6\u00f6tamine j\u00e4tkub valitud taustteenustes, mis olid valitud varem.<\/p>\n<p>\u00d5ige toimimise tagamiseks peab olema lahendatud tasakaalustaja source IP-aadressi probleem, millelt sessioon on loodud. Meie puhul on see d\u00fcnaamiline aadress loopback-interf\u00e4\u00e4sil. <\/p>\n<p>Peers'i \u00f5ige t\u00f6\u00f6 saavutatakse ainult teatud tingimustes. See t\u00e4hendab, et TCP aegumised peavad olema piisavalt suured v\u00f5i \u00fcleminek peab olema piisavalt kiire, et TCP seanss ei katkeks. Sellegipoolest v\u00f5imaldab see sujuvat \u00fcleminekut. <\/p>\n<p>Meie IaaS-is on teenus, mis on ehitatud sama tehnoloogia alusel. See on <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/app\/services\/infra\/balancers-list\/\">Load Balancer teenus OpenStacki jaoks<\/a><\/noindex>, mille nimi on Octavia. See p\u00f5hineb kahe HAProxy protsessi baasil ning selles on algselt olemas peer'ide tugi. Selles teenuses on nad end h\u00e4sti t\u00f5estanud.<\/p>\n<p>Pildil on diagrammil kujutatud peers-tabelite liikumist kolme HAProxy instantsi vahel, on pakutud konfiguratsioon, kuidas seda seadistada:<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas rakendatakse talitlush\u00e4irekindlat veebiarhitektuuri Mail.ru Cloud Solutions platvormil\" src=\"\/wp-content\/uploads\/2019\/11\/d31fab761da627923345b7ace7f0b943.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>HAProxy Peers (seansside s\u00fcnkroonimine)<\/i><\/p>\n<p>Kui te rakendate sarnast skeemi, tuleb selle t\u00f6\u00f6d hoolikalt testida. Pole kindel, et see t\u00f6\u00f6tab samamoodi 100% juhtudel. Kuid v\u00e4hemalt ei kaota te stick-tabeleid, kui on vaja meeles pidada kliendi source IP-d.<\/p>\n<h2>Piirang samaaegsete p\u00e4ringute arvu peale \u00fchelt ja samalt kliendilt<\/h2>\n<p>\nK\u00f5ik avalikud teenused, sealhulgas meie API-d, v\u00f5ivad olla kalduvad p\u00e4ringute laviinidele. Nende p\u00f5hjused v\u00f5ivad olla t\u00e4iesti erinevad, alates kasutajate vigadest kuni sihitud r\u00fcnnakuteni. Meid r\u00fcnnatakse aeg-ajalt DDoS-iga IP-aadresside kaudu. Kliendid teevad sageli vigu oma skriptides, tehes meile mini-DDoS-e.<\/p>\n<p>Nii v\u00f5i teisiti tuleb ette n\u00e4ha lisakaitse. Ilmselge lahendus on piirata p\u00e4ringute arvu API-le ja mitte raisata protsessoriaega pahatahtlike p\u00e4ringute t\u00f6\u00f6tlemiseks.<\/p>\n<p>Selliste piirangute rakendamiseks kasutame rate limits, mis on organiseeritud HAProxy baasil, samade stick-tabelite abil. Piirangute seadistamine on piisavalt lihtne ja v\u00f5imaldab piirata kasutajat API p\u00e4ringute arvu osas. Algoritm salvestab source IP, kust p\u00e4ringud tehakse, ja piirab sama kasutaja samaaegsete p\u00e4ringute arvu. Loomulikult oleme arvutanud igas teenuses API koormuse keskmise profiili ja seadnud piiri, mis on umbes 10 korda suurem kui see v\u00e4\u00e4rtus. J\u00e4tkame siiani t\u00e4helepanelikku olukorra j\u00e4lgimist, hoides k\u00e4e pulsil.<\/p>\n<p>Kuidas see praktikas v\u00e4lja n\u00e4eb? Meil on kliente, kes kasutavad pidevalt meie API-sid automaatselt skaleerimiseks. Nad loovad umbes kakssada-kolmsada virtuaalmasinat varahommikul ja kustutavad need \u00f5htul. OpenStackis virtuaalmasina loomine, koos PaaS-teenustega, t\u00e4hendab v\u00e4hemalt 1000 API-p\u00e4ringut, kuna teenuste vaheline suhtlus toimub samuti l\u00e4bi API. <\/p>\n<p>Sellised \u00fclesannete \u00fclekanded tekitavad \u00fcsna suurt koormust. Me hindasime seda koormust, kogusime p\u00e4evased tipud, suurendasime neid k\u00fcmme korda ja see sai meie rate-limiidiks. Hoidke k\u00e4t pulsil. N\u00e4eme tihti roboteid, skaneerijaid, kes proovivad meie peale vaadata, kas meil on mingeid CGA-skripte, mida k\u00e4ivitada, ja me l\u00f5ikame neid aktiivselt.<\/p>\n<h2>Kuidas v\u00e4rskendada koodibaasi kasutajatele m\u00e4rkamatult<\/h2>\n<p>\nKasutame ka koodi juurutamise protsesside tasemel t\u00f5rketaluvust. Juurutamise ajal v\u00f5ivad esineda t\u00f5rked, kuid nende m\u00f5ju teenuste k\u00e4ttesaadavusele saab minimeerida.<\/p>\n<p>Uuendame pidevalt oma teenuseid ja peame tagama koodibaasi uuendamise protsessi ilma kasutajatele m\u00f5ju avaldamata. Selle \u00fclesande lahendamine \u00f5nnestus meil, kasutades HAProxy haldusv\u00f5imalusi ja meie teenustes Graceful Shutdowni rakendamist.<\/p>\n<p>Selle \u00fclesande lahendamiseks oli vajalik tagada koormuse ja \u201e\u00f5ige\u201d teenuste v\u00e4ljal\u00fclitamine:<\/p>\n<ul>\n<li>HAProxy puhul toimub haldus l\u00e4bi stats-faili, mis on p\u00f5him\u00f5tteliselt soket ja m\u00e4\u00e4ratakse HAProxy konfigurasioonis. Sellele saab komande edastada l\u00e4bi stdio. Kuid meie peamine t\u00f6\u00f6riist konfiguratsioonide kontrollimiseks on ansible, millel on sisse ehitatud moodul HAProxy haldamiseks. Seda kasutame aktiivselt. <\/li>\n<li>Enamik meie teenustest API ja Engine toetab tehnoloogiaid graceful shutdown: seadistamisel ootavad nad, kuni hetke\u00fclesanne, olgu see http-p\u00e4ring v\u00f5i mingi teenus\u00fclesanne, on t\u00e4ielikult l\u00f5petatud. Sama juhtub t\u00f6\u00f6tlejaga. Ta teab k\u00f5iki \u00fclesandeid, mida ta teeb, ja l\u00f5petab, kui k\u00f5ik on edukalt tehtud. <\/li>\n<\/ul>\n<p>\nNende kahe asja t\u00f5ttu n\u00e4eb meie ohutu juurutamisprotsess v\u00e4lja j\u00e4rgmiselt.<\/p>\n<ol>\n<li>Arendaja kogub uue koodipaketi (meie puhul RPM), testib arenduskeskkonnas, testib etapis ja j\u00e4tab etapi-repositooriumisse.<\/li>\n<li>Arendaja esitab juurutamiseks \u00fclesande koos v\u00f5imalikult \u00fcksikasjaliku kirjeldusega \"artefaktidest\": uue paketi versioon, uue funktsionaalsuse kirjeldus ja muud \u00fcksikasjad juurutamiseks vajadusel.<\/li>\n<li>S\u00fcsteemihaldur alustab v\u00e4rskendamist. K\u00e4ivitab Ansible'i m\u00e4ngu, mis omakorda teeb j\u00e4rgmist: \n<ul>\n<li>V\u00f5tab paki stage-repositooriumist ja v\u00e4rskendab paki versiooni tootmisrepositooriumis.<\/li>\n<li>Koostab uuendatava teenuse tausts\u00fcsteemide nimekirja.<\/li>\n<li>L\u00fclitab v\u00e4lja esimese uuendatava teenuse HAProxy's ja ootab, kuni selle protsessid l\u00f5petavad t\u00f6\u00f6. Ait\u00e4h sujuvale sulgemisele, oleme kindlad, et k\u00f5ik praegused kliendi p\u00e4ringud l\u00f5petatakse edukalt.<\/li>\n<li>P\u00e4rast API, t\u00f6\u00f6tlejate ja HAProxy peatamist toimub koodi uuendamine.<\/li>\n<li>Ansible k\u00e4ivitab teenused.<\/li>\n<li>Iga teenuse jaoks t\u00f5mbab ta kindlaid \"nuppe\", mis viivad l\u00e4bi\u00fcksustestis, p\u00f5hinedes eelnevalt m\u00e4\u00e4ratud v\u00f5tmetestidele. Toimub uue koodi p\u00f5hialuste kontroll.<\/li>\n<li>Kui eelmisel sammul ei leitud vigu, aktiveeritakse tausts\u00fcsteem.<\/li>\n<li>Liigume j\u00e4rgmise tausts\u00fcsteemi juurde.<\/li>\n<\/ul>\n<\/li>\n<li>P\u00e4rast k\u00f5igi tausts\u00fcsteemide v\u00e4rskendamist k\u00e4ivitatakse funktsionaalsed testid. Kui neid on puudu, vaatab arendaja igasugust uut funktsionaalsust, mida ta on loonud.<\/li>\n<\/ol>\n<p>\nSellega on juurutamine l\u00f5ppenud.<\/p>\n<p><img decoding=\"async\" alt=\"Kuidas rakendatakse talitlush\u00e4irekindlat veebiarhitektuuri Mail.ru Cloud Solutions platvormil\" src=\"\/wp-content\/uploads\/2019\/11\/2d889fe1af33653e4bfebabe1cce6552.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Teenuse v\u00e4rskendamise ts\u00fckkel<\/i><\/p>\n<p>See skeem ei toimiks, kui meil ei oleks \u00fcht reeglit. Me toetame samal ajal tootmises nii vana kui ka uut versiooni. Varakult, tarkvara arendamise etapis, on paika pandud, et isegi kui teenuse andmebaasis toimuvad muudatused, ei riku need eelmist koodi. Tulemuseks on j\u00e4rkj\u00e4rguline koodibaasi v\u00e4rskendamine.<\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p>\nJagades oma m\u00f5tteid talitlusp\u00fcsiva WEB-arhitektuuri kohta, tahan veel kord r\u00f5hutada selle v\u00f5tmeelemente:<\/p>\n<ul>\n<li>f\u00fc\u00fcsiline talitlusp\u00fcsivus;<\/li>\n<li>v\u00f5rgu talitlusp\u00fcsivus (tasakaalustajad, BGP);<\/li>\n<li>kasutatud ja arendatava tarkvara talitlusp\u00fcsivus.<\/li>\n<\/ul>\n<p>\nK\u00f5igile stabiilset t\u00f6\u00f6aega!<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/474180\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u042f \u0410\u0440\u0442\u0435\u043c \u041a\u0430\u0440\u0430\u043c\u044b\u0448\u0435\u0432, \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Mail.Ru Cloud Solutions (MCS). \u0417\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0433\u043e\u0434 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432. \u041c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u0431\u044b API-\u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043b\u0435\u0433\u043a\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u0431\u044b\u043b\u0438 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u043c\u0438 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u043a \u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u0440\u043e\u0441\u0442\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041d\u0430\u0448\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 OpenStack, \u0438 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u044c, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52389","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\".\" \/>\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\/et\/blog\/administrirovanie\/kak-realizuetsya-otkazoustojchivaya-veb-arhitektura-v-platforme-mail-ru-cloud-solutions\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\u041a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0430\u044f \u0432\u0435\u0431-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 Mail.ru Cloud Solutions | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\".\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-realizuetsya-otkazoustojchivaya-veb-arhitektura-v-platforme-mail-ru-cloud-solutions\" \/>\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-11-06T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:00:05+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\udd47Kuidas rakendatakse talitlusp\u00fcsivat veebiarhitektuuri Mail.ru Cloud Solutions | ProHoster platvormil","description":".","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-realizuetsya-otkazoustojchivaya-veb-arhitektura-v-platforme-mail-ru-cloud-solutions","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\u041a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0430\u044f \u0432\u0435\u0431-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 Mail.ru Cloud Solutions | ProHoster","og:description":".","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/kak-realizuetsya-otkazoustojchivaya-veb-arhitektura-v-platforme-mail-ru-cloud-solutions","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-11-06T21:00:00+00:00","article:modified_time":"2020-02-18T11:00:05+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52389","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 03:27:21","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:44:43","updated":"2026-01-24 03:27:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/52389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=52389"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/52389\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=52389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=52389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=52389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}