Ignite Service Grid – taaskĂ€ivitamine

26. veebruaril korraldasime Apache Ignite GreenSource'i kohtumise, kus esinesid avatud lĂ€htekoodiga projekti panustajad. Apache Ignite. Selle kogukonna jaoks oli oluline sĂŒndmus komponendi Ignite Service Grid, mille abil saab kasutaja mikroteenuseid otse Ignite'i klastri sisse juurutada. Sellest keerulisest protsessist rÀÀkis kohtumisel Vyacheslav Daradur, tarkvarainsener ja ĂŒle kahe aasta Apache Ignite'i kaastöötaja.

Ignite Service Grid – taaskĂ€ivitamine

Alustame sellest, mis asi on Apache Ignite ĂŒldse. See on andmebaas, mis esindab jaotatud Key/Value salvestusruumi, mis toetab SQL-i, tehingutekĂ€itlemist ja vahemĂ€lumist. Lisaks vĂ”imaldab Ignite kasutajateenuste juurutamist otse Ignite'i klastri sees. Arendajatele on kĂ€tkestatud kĂ”ik Ignite'i pakutavad tööriistad — jaotatud andmestruktuurid, sĂ”numiedastus, voog ja arvutus ning andmevĂ”rk. NĂ€iteks, kasutades andmevĂ”rku, kaob vajadus hallata eraldi infrastruktuuri andmehoidla jaoks, mille tulemusena vĂ€heneb sellega seotud kulu.

Ignite Service Grid – taaskĂ€ivitamine

Kasutades Service Gridi API-t, saab teenuse juurutada, lihtsalt mÀÀrates konfiguratsioonis juurutusskeemi ja vastava teenuse.

Tavaliselt on juurutusskeem — see, kui palju instantsi peaks klastri sĂ”lmedes olema. On kaks tĂŒĂŒpilist juurutusskeemi. Esiteks on Cluster Singleton: igal ajal on klastris garanteeritult ainult ĂŒks kasutajateenuse eksemplar. Teiseks on Node Singleton: igas klastrisĂ”lmes on ĂŒks teenuse eksemplar.

Ignite Service Grid – taaskĂ€ivitamine

Kasutaja saab mÀÀrata teenuse instantside arvu kogu klastri ulatuses ja mÀÀrata predikaadi sobivate sÔlmede filtreerimiseks. Sellise stsenaariumi korral arvutab Service Grid ise vÀlja optimiseeritud jaotuse teenuste juurutamiseks.

Lisaks on olemas selline funktsioon nagu Affinity Service. Affinity on funktsioon, mis mÀÀrab vĂ”tmete seose partitsioonidega ja partii seose sĂ”lmedega topoloogias. VĂ”tme abil saab mÀÀrata primaarse sĂ”lme, kus andmed asuvad. Nii saab seostada oma teenuse vĂ”tmega ja affinity-funktsiooni vahemĂ€lu. Kui affinity-funktsioon muutub, toimub automaatne redeploy. Nii on teenus alati paigutatud lĂ€hedale andmetele, millega see peab manipuleerima, vĂ€hendades seelĂ€bi juurdepÀÀsu kulusid. Sellist skeemi vĂ”ib nimetada teatud tĂŒĂŒpi kolokatsioonide arvutusteks.

NĂŒĂŒd, kui oleme uurinud, milles seisneb Service Grid vĂ”lu, rÀÀgime selle arenguloost.

Mis oli varem

Eelmine Service Grid'i rakendus pĂ”hines tehingureplikatsioonil pĂ”hineval sĂŒsteemi vahemĂ€lul Ignite. SĂ”na "vahemĂ€lu" all mĂ”istetakse Ignites andmesalvestust. See ei ole midagi ajutist, nagu vĂ”iks arvata. Kuigi vahemĂ€lu on replikatsiooni all ja igas sĂ”lmes on kogu andmekogum, on vahemĂ€lu sees partitsioneeritud esitus. See on seotud salvestuste optimeerimisega.

Ignite Service Grid – taaskĂ€ivitamine

Mis juhtus, kui kasutaja soovis teenust vÀlja panna?

  • KĂ”ik sĂ”lmed klastris registreerisid end andmete muutuste jĂ€lgimiseks salvestuses, kasutades sisseehitatud mehhanismi Continuous Query.
  • Algatava sĂ”lme read-committed tehingu kaudu tegi andmebaasi kirje, mis sisaldas teenuse konfiguratsiooni, sealhulgas serialiseeritud eksemplari.
  • Uue kirje teavitamisel arvutas koordinaator jaotuse vastavalt konfiguratsioonile. Saadud objekt kirjutati tagasi andmebaasi.
  • Kui sĂ”lm kuulus jaotusse, pidi koordinaator selle vĂ€lja panema.

Mis meid ei rahuldanud

MÔnes etapis jÔudsime jÀreldusele: teenustega ei saa nii töötada. PÔhjuseid oli mitu.

Kui juurutamise ajal toimus mĂ”ni viga, sai sellest teada ainult selle sĂ”lme logidest, kus see juhtus. Eksisteeris ainult asĂŒnkroonne juurutamine, seega pĂ€rast kasutaja juhtimise tagastamist juurutamismeetodist vajas teenuse kĂ€ivitamine veel veidi aega — ja selle aja jooksul ei saanud kasutaja midagi juhtida. Et Service Grid'i edasi arendada, uusi funktsioone rakendada, uusi kasutajaid kaasata ja kĂ”igi elu lihtsamaks teha, oli vaja midagi muuta.

Uue Service Grid'i projekteerimisel soovisime kĂ”igepealt tagada sĂŒnkroonse juurutamise: kui kasutaja saab API kaudu juhtimise tagasi, saab ta kohe teenuseid kasutada. Soovisime anda algatajatele ka vĂ”imaluse juurutamise vigu töödelda.

Samuti soovisime rakendamise lihtsustamist, nimelt loobuda tehingutest ja taaskaalutamisest. Kuigi vahemÀlu on replikeeritud ja tasakaalu ei ole, esines suurtel juurutustel mitmete sÔlmede vahel probleeme. SÔlmed peavad teavet vahetama topoloogia muutmisel ja suurte juurutuste korral vÔivad need andmed olla vÀga mahukad.

Kui topoloogia oli ebastabiilne, vajas koordineerija teenuste jaotuse uuesti arvutamiseks. Üldiselt, kui tuleb töötada tehingutega ebastabiilses topoloogias, vĂ”ivad need viia keerukalt prognoositavate vigadeni.

Probleemid

Millised suured muutused oleksid ilma kaasnevate probleemideta? Esimene neist oli topoloogia muutus. Tuleb mÔista, et igal ajal, isegi teenuse juurutamise hetkel, vÔib sÔlm jÔuda klastrisse vÔi sellest vÀlja minna. Veelgi enam, kui juurutamise hetkel liitub sÔlm klastriga, on vajalik kogu teenuste teabe jÀrjepidev edastamine 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Ă”iks eraldi nimekirja koostada:

  • Kuidas juurutada staatiliselt konfigureeritud teenuseid sĂ”lme kĂ€ivitamisel?
  • SĂ”lme vĂ€ljumine klastrist – mida teha, kui sĂ”lm majutas teenuseid?
  • Mida teha, kui koordineerija on vahetunud?
  • Mida teha, kui klient on klastriga uuesti ĂŒhendatud?
  • Kas tuleb töödelda aktiveerimise/deaktiveerimise pĂ€ringuid ja kuidas?
  • Aga mis juhtub, kui hĂ€vitamispĂ€ring saatakse vahemĂ€lule, mida on seotud affiniteedi teenustega?

Ja see ei ole kaugeltki kÔik.

Lahendus

SihtmĂ€rgiks valisime sĂŒndmustel pĂ”hineva lĂ€henemise, rakendades protsesside vahelist suhtlust sĂ”numite kaudu. Ignite'is on juba rakendatud kaks komponente, mis vĂ”imaldavad sĂ”lmedel ĂŒksteisele sĂ”numeid edastada — communication-spi ja discovery-spi.

Ignite Service Grid – taaskĂ€ivitamine

Communication-spi vĂ”imaldab sĂ”lmedel omavahel otse suhelda ja sĂ”numeid edastada. See sobib hĂ€sti suurte andmemahtude edastamiseks. Discovery-spi vĂ”imaldab saata sĂ”numi kĂ”igile klastris olevatele sĂ”lmedele. TĂŒĂŒpilises rakenduses toimub see «ring» topoloogia kaudu. On ka integreerimine Zookeeperiga, mille puhul kasutatakse «tĂ€ht» topoloogiat. Tasub mainida ka ĂŒhte olulist hetke: discovery-spi annab garantii, et sĂ”numid toimetatakse Ă”iges jĂ€rjekorras kĂ”igile sĂ”lmedele.

Vaatame saatmisprotokolli. KĂ”ik kasutaja saatmis- ja tĂŒhistamissoovid saadetakse discovery-spi kaudu. See annab jĂ€rgmised garantiid:

  • PĂ€ring jĂ”uab kĂ”igi klastris olevate sĂ”lmedeni. See vĂ”imaldab jĂ€tkata pĂ€ringu töötlemist koordinaatori vahetamisel. Samuti tĂ€hendab see, et iga sĂ”numi puhul on igal sĂ”lmel kĂ”ik vajalikud metaandmed, nagu teenuse konfiguratsioon ja selle serialiseeritud eksemplar.
  • SĂ”numite ranget jĂ€rjekorra edastamist saab kasutada konfiguratsioonide ja konkurentsivĂ”imeliste pĂ€ringute konfliktide lahendamiseks.
  • Kuna sĂ”lme sisenemine topoloogiasse töödeldakse samuti discovery-spi kaudu, saavad uued sĂ”lmed kĂ”ik teenustega töötamiseks vajalikud andmed.

PĂ€ringu saamisel valideerivad klastris olevad sĂ”lmed selle ja loovad töötlemiseks ĂŒlesanded. Need ĂŒlesanded kogutakse jĂ€rjekorda ja seejĂ€rel töödeldakse eraldi töölise poolt teises harudes. See on nii rakendatud, et kuna saatmine vĂ”ib vĂ”tta mĂ€rkimisvÀÀrselt aega, ei tohi kuluka discovery-voo katkestust lubada.

KĂ”iki jĂ€rjekorrast pĂ€ringuid töötleb deployment-manager. Tal on spetsiaalne töötaja, kes tĂ”mbab ĂŒlesande jĂ€rjekorrast ja algatab selle, et alustada ĂŒlesande tĂ€itmist. PĂ€rast seda toimub jĂ€rgnev:

  1. Iga sÔlm arvutab ise jaotuse uuendatud deterministliku assignimise funktsiooni pÔhjal.
  2. SÔlmed koostavad sÔnumi saatmise resultaatidest ja saadavad selle koordinaatorile.
  3. Koordinaator kogub kÔik sÔnumid ja koostab kokkuvÔtte kogu saatmisprotsessist, mis saadetakse discovery-spi kaudu kÔigile klastris olevatele sÔlmedele.
  4. PĂ€rast tulemuse saamist lĂ”ppeb saatmisprotsess, mille jĂ€rel ĂŒlesanne eemaldatakse jĂ€rjekorrast.

Ignite Service Grid – taaskĂ€ivitamine
Uus event-driven disain: org.apache.ignite.internal.processors.service.IgniteServiceProcessor.java

Kui juurutamise ajal toimub tÔrge, lisab sÔlm kohe selle vea sÔnumisse, mis saadetakse koordinaatorile. PÀrast sÔnumite kogumist on koordinaatoril teave kÔigist tÔrgetest juurutamise ajal ja saadab selle sÔnumi discovery-spi kaudu. TÔrgete teave on saadaval igas klastri sÔlmes.

Selle töö algoritmi alusel töödeldakse kĂ”iki olulisi sĂŒndmusi Teenuste Gridis. NĂ€iteks topoloogia muutmine on samuti sĂ”num discovery-spi kaudu. Ja kokkuvĂ”ttes, vĂ”rreldes varasemaga, osutus protokoll piisavalt kergekaaluliseks ja usaldusvÀÀrseks. Nii et see suudab kĂ€sitleda igasuguseid olukordi juurutamise ajal.

Mis saab edasi

NĂŒĂŒd plaanidest. Iga suurem tĂ€iendus projektis Ignite viiakse lĂ€bi kui algatus Ignite'i tĂ€iustamiseks, nn IEP. Teenuste Gridi ĂŒmberkujundamisprotsessil on samuti IEP — IEP №17 naljaka nimega "Õli vahetamine Teenuste Gridis". Kuid tegelikult ei vahetanud me mitte mootori Ă”li, vaid terve mootori.

IEP ĂŒlesanded jagasime kaheks faasiks. Esimene on suur faas, mis hĂ”lmab juurutamise protokolli ĂŒmbertegemist. See on juba peaharusse integreeritud, saate proovida uut Teenuste Gridi, mis ilmub versioonis 2.8. Teine faas hĂ”lmab paljusid muid ĂŒlesandeid:

  • Kuuma uuesti juurutamine
  • Teenuste versioonimine
  • TĂ”rke taluvuse suurendamine
  • Kerge klient
  • Seire- ja erinevate mÔÔdikute arvestuse tööriistad

LĂ”puks saame soovitada teile Teenuste Gridi kĂ”rge kĂ€ttesaadavuse tĂ”rke taluva sĂŒsteemi loomiseks. Ja kutsume teid liituma meiega dev-list ja user-list oma kogemuste jagamiseks. Teie kogemus on tĂ”eliselt oluline kogukonna jaoks, see aitab mĂ”ista, kuhu edasi liikuda ja kuidas edaspidi komponenti arendada.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster