Ignite Teenuse Grid — taaskĂ€ivitamine

26. veebruaril korraldasime Apache Ignite GreenSourcei kohtumise, kus esinesid avatud lĂ€htekoodiga projekti kontributsioonide autorid. Apache IgniteSelle kogukonna elu tĂ€htsaks sĂŒndmuseks oli komponendi ĂŒmberkujundamine Ignite Service Grid, mis vĂ”imaldab kasutajate mikroteenuseid otse Ignite'i klastris rakendada. Sellest keerulisest protsessist rÀÀkis kohtumisel Vjatseslav Daradur, tarkvarainsener ja juba rohkem kui kahe aasta kontributsioonide autor Apache Ignite'is.

Ignite Teenuse Grid — taaskĂ€ivitamine

Alustame sellest, mis on Apache Ignite. See on andmebaas, mis esindab hajutatud vĂ”tme/vÀÀrtuse salvestust, millel on SQL, tehingute ja vahemĂ€lu toetus. Lisaks vĂ”imaldab Ignite kasutajate teenuseid otse Ignite'i klastris rakendada. Arendajatel on juurdepÀÀs kĂ”ikidele tööriistadele, mida Ignite pakub — hajutatud andmestruktuurid, vestlus, voog, arvutamine ja andmevĂ”rk. NĂ€iteks Data Grid'i kasutamisel kaob vajadus andmesalvestusele eraldi infrastruktuuri haldamiseks, mis omakorda vĂ€hendab sellega seotud kulusid.

Ignite Teenuse Grid — taaskĂ€ivitamine

Kasutades API Service Grid'i, saab teenuse rakendada lihtsalt, mÀÀrates konfigureerimises rakendamise skeemi ja vastava teenuse.

Tavaliselt on deploy skeem nĂ€itaja klastris sĂ”lmedes kasutatavate instantside arvu. On kaks tĂŒĂŒpilist deploy skeemi. Esimene on Cluster Singleton: igal ajahetkel on klastris garanteeritult saadaval ĂŒks kasutaja teenuse instants. Teine on Node Singleton: igas klastrisĂ”lmes on ĂŒks teenuse instants.

Ignite Teenuse Grid — taaskĂ€ivitamine

Kasutaja vÔib samuti mÀÀrata teenuse instantside arvu kogu klastris ja mÀÀratleda predikaadi sobivate sÔlmede filtreerimiseks. Sellisel juhul arvutab Service Grid automaatselt optimaalse jaotuse teenuste deploy jaoks.

Lisaks on olemas funktsioon nimega Affinity Service. Affinity on funktsioon, mis mÀÀratleb vÔtmete seose partitsioonidega ja partii seose sÔlmedega topoloogias. VÔtme kaudu saab mÀÀrata primaarse sÔlme, kus andmed asuvad. Seega saab siduda oma teenuse vÔtmega ja affinity-funktsiooni vahemÀluga. Kui affinity-funktsioon muutub, toimub automaatne redeploy. Nii asetatakse teenus alati andmete lÀhedale, millega ta peab töötama, vÀhendades seelÀbi juurdepÀÀsu kulusid teabele. Sellist skeemi vÔib nimetada omamoodi kolokatsiooniks.

NĂŒĂŒd, kui oleme arutanud Service Gridi eeliseid, rÀÀgime selle arengulugu.

Mis oli varem

Eelmise Service Gridi teostus pĂ”hines Ignite'i tehingute replikatsioonil pĂ”hineval sĂŒsteemi vahemĂ€lul. Ignite'i all peetakse silmas salvestusruumi. See ei ole midagi ajutist, nagu vĂ”iks arvata. Kuigi vahemĂ€lu on replikatsiooniga ja iga sĂ”lm sisaldab kogu andmekogumit, on vahemĂ€lu sees partitsioneeritud esitus. See on seotud salvestusruumide optimeerimisega.

Ignite Teenuse Grid — taaskĂ€ivitamine

Mis juhtus, kui kasutaja soovis teenust juurutada?

  • Klastri kĂ”ik sĂ”lmed registreerusid andmete uuenduste jaoks salvestuses, kasutades sisseehitatud Continuous Query mehhanismi.
  • Algatava sĂ”lme read-committed tehingu all tehti andmebaasi kirje, mis sisaldas teenuse konfiguratsiooni, sealhulgas serialiseeritud instantsi.
  • Uue kirje saamisel arvutas koordinaator jaotuse vĂ€lja konfiguratsiooni pĂ”hjal. Saadud objekt kirjutati tagasi andmebaasi.
  • Kui sĂ”lm kuulus jaotusse, pidi koordinaator selle juurutama.

Mis meid ei rahuldanud

Mingil hetkel jÔudsime jÀreldusele: teenustega ei saa nii töötada. PÔhjuseid oli mitu.

Kui juurutamise ajal ilmnes mingi viga, sai sellest teada vaid selle sĂ”lme logidest, kus see aset leidis. Oli olemas ainult asĂŒnkroonne juurutamine, seega pĂ€rast juurutamismeetodist kasutaja juhtimise tagasiandmist vajas teenuse kĂ€ivitamine mĂ”ningast lisaaega — ja sel ajal ei saanud kasutaja millegagi operatiivset. Service Gridi edasiviimiseks, uute funktsioonide arendamiseks, uute kasutajate kaasamiseks ja elu kĂ”igile lihtsamaks tegemiseks on vajalik midagi muuta.

Uue Service Gridi kavandamisel soovisime eelkĂ”ige tagada sĂŒnkroonse juurutamise: niipea kui kasutaja sai API-lt juhtimise tagasi, sai ta kohe teenuseid kasutada. Samuti soovisime anda algatajale vĂ”imaluse juurutamisvigu töödelda.

Lisaks soovisime hĂ”lbustada teostust, nimelt eemalduda tehingutest ja ĂŒmberjaotamisest. Kuigi vahemĂ€lu on replitseeritud ja tasakaalustamist ei toimu, tekkisid suure juurutamise ajal, millel oli palju sĂ”lmi, probleemid. SĂ”lmed peavad teabe vahetamiseks suhtlema ning suure juurutamise korral vĂ”ivad need andmed olla vĂ€ga suured.

Kui topoloogia oli ebastabiilne, pidi koordinaator teenuste jaotust uuesti arvutama. Üldiselt, kui tuleb töötada tehingutega ebastabiilses topoloogias, vĂ”ib see viia keeruliselt prognoositavate vigadeni.

Probleemid

Millised suured muutused tulevad ilma kaasnevate probleemideta? Esimene neist oli topoloogia muutmine. Tuleb mÔista, et igal hetkel, isegi teenuse juurutamise ajal, vÔib sÔlm liituda klastri vÔi sellest lahkuda. Veelgi enam, kui sÔlm liitub klastri ajal, tuleb kogu teenuste informatsioon jÀrjepidevalt edastada uuele sÔlmele. Ja jutt ei kÀi ainult sellest, mis on juba juurutatud, vaid ka praegustest ja tulevastest juurutustest.

See on vaid ĂŒks probleem, mille vĂ”ib koostada eraldi nimekirjaks:

  • Kuidas juurutada staatiliselt konfigureeritud teenuseid sĂ”lme kĂ€ivitamisel?
  • SĂ”lme vĂ€ljumine klastrimisest – mida teha, kui sĂ”lm hostis teenuseid?
  • Mida teha, kui koordinaator on vahetunud?
  • Mida teha, kui klient on klastri juurde uuesti ĂŒhendunud?
  • Kas oleks vaja töötleda aktiveerimise/deaktiveerimise pĂ€ringuid ja kuidas?
  • Ent mis siis, kui me kutsume ĂŒles andmete kustutamist, kuid meil on selle kĂŒlge seotud afiinsus-tegevused?

Ja see on alles kaugel.

Lahendus

SihtmĂ€rgiks valisime sĂŒndmuspĂ”hise lĂ€henemise, rakendades protsesside vahelist suhtlemist sĂ”numite kaudu. Ignite'is on juba rakendatud kaks komponenti, mis vĂ”imaldavad sĂ”lmedel omavahel sĂ”numeid edastada — communication-spi ja discovery-spi.

Ignite Teenuse Grid — taaskĂ€ivitamine

Communication-spi vÔimaldab sÔlmedel otse suhelda ja sÔnumeid edastada. See sobib suure hulga andmete edastamiseks. Discovery-spi vÔimaldab saata sÔnumi kÔigile sÔlmedele klastris. Standartse teostuse korral toimub see 'ring' topoloogia kaudu. Samuti on olemas integratsioon Zookeeperiga, juhul kasutatakse 'tÀht' topoloogiat. Oluline on mÀrkida, et discovery-spi annab garantiisid, et sÔnum toimetatakse kindlasti Ôiges jÀrjekorras kÔigile sÔlmedele.

Vaatame juurutamise protokolli. KÔik kasutaja taotlused juurutamiseks ja eemaldamiseks saadetakse discovery-spi kaudu. See annab jÀrgmised garantiid:

  • PĂ€ringu saavad kĂ”ik klastris olevad sĂ”lmed. See vĂ”imaldab pĂ€ringu töötlemist koordinaatori vahetamisel. Samuti tĂ€hendab see, et iga sĂ”lme jaoks on ĂŒhe sĂ”numi korral kĂ”ik vajalikud metaandmed, nagu teenuse seadistus ja selle serialiseeritud instants.
  • Range sĂ”numite kohaletoimetamise jĂ€rjekord vĂ”imaldab lahendada seadistuste ja konkureerivate pĂ€ringute konflikte.
  • Kuna sĂ”lme sisenemine topoloogiasse töödeldakse ka discovery-spi kaudu, jĂ”uavad kĂ”ik teenustega töötamiseks vajalikud andmed uuele sĂ”lmele.

PĂ€ringu saamisel valideerivad klastris olevad sĂ”lmed selle ja koostavad töötlemise ĂŒlesanded. Need ĂŒlesanded pannakse jĂ€rjekorda ning seejĂ€rel töödeldakse neid teises lĂ”imes eraldi töötaja poolt. See on ellu viidud just niimoodi, et juurutamine vĂ”ib vĂ”tta mĂ€rkimisvÀÀrset aega ja kallist discovery-voogu ei tohi viivitada.

Kogu jĂ€rjekonnast saadud pĂ€ringud töötleb juurutushaldur. Tal on eriline töötaja, kes vĂ”tab ĂŒlesande sellest jĂ€rjekorrast ja initsialiseerib selle, et alustada juurutamist. PĂ€rast seda toimuvad jĂ€rgmised toimingud:

  1. Iga sÔlm arvutab jaotuse iseseisvalt tÀnu uuele deterministlikule mÀÀramisfunktsioonile.
  2. SĂ”lmed koostavad teate deploĂŒri tulemustega ja saadavad selle koordinaatorile.
  3. Koordinaator kogub kĂ”ik teated ja koostab kogu deploĂŒri protsessi tulemuse, mis saadetakse discovery-spi kaudu kĂ”igile klastris asuvatele sĂ”lmedele.
  4. Kui tulemus on saadud, lĂ”peb deploĂŒri protsess ja ĂŒlesanne eemaldatakse jĂ€rjekorrast.

Ignite Teenuse Grid — taaskĂ€ivitamine
Uus ĂŒritustel pĂ”hinev disain: org.apache.ignite.internal.processors.service.IgniteServiceProcessor.java

Kui deployimise hetkel ilmneb viga, lisab sÔlm selle vea kohe teatesse, mille ta saadab koordinaatorile. PÀrast teate kogumist omab koordinaator teavet kÔigi deployimise ajal esinenud vigade kohta ja saadab teate discovery-spi kaudu. Teave vigade kohta on kergesti ligipÀÀsetav igas klastris asuvas sÔlmes.

Selle töö algoritmi alusel töödeldakse kĂ”iki olulisi sĂŒndmusi Teenuse Gridis. NĂ€iteks on ka topoloogia muutmine discovery-spi kaudu saadetud teade. Ja ĂŒldiselt, vĂ”rreldes varasema lĂ€henemisega, on protokoll piisavalt kergkaaluline ja usaldusvÀÀrne. SedavĂ”rd, et suudab kĂ€sitleda igasuguseid olukordi deployimise ajal.

Mis jÀrgmiseks?

NĂŒĂŒd plaanidest. Iga suur muudatus Ignite projektis tehakse kui algatus Ignite paremaks muutmiseks, nn IEP. Ka Service Grid'i ĂŒmberkujundamisel on IEP — IEP Nr 17 naljakalt nimelt «Õli vahetus Service Grid'is». Kuid tegelikult muutisime mitte ainult mootori Ă”li, vaid kogu mootori.

IEP ĂŒlesanded on jagatud kaheks faasiks. Esimene — suur faas, mis hĂ”lmab juurutamisprotokolli ĂŒmberehitust. See on juba masterisse lisatud, saate proovida uut Service Grid'i, mis ilmub versioonis 2.8. Teine faas sisaldab paljusid teisi ĂŒlesandeid:

  • Kuum redemodeerimine
  • Teenuste versioonimine
  • Rikkes taluvuse suurendamine
  • Õhuke klient
  • JĂ€lgimise ja erinevate mÔÔdikute arvestamise tööriistad

LĂ”petuseks vĂ”ime soovitada teile Service Grid'i kĂ”rge kĂ€ttesaadavuse ja rikketaluvate sĂŒsteemide loomiseks. Samuti kutsume teid liituma meiega dev-list ja user-list jagama oma kogemusi. Teie kogemus on tĂ”eliselt oluline kogukonna jaoks, see aitab mĂ”ista, kuhu edasi liikuda ja kuidas arendada komponenti tulevikus.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster