Ignite Service Grid ā€” atsāknÄ“Å”ana

26. februārÄ« mēs rÄ«kojām Apache Ignite GreenSource tikÅ”anos, kurā uzstājās atvērtā pirmkoda projekta dalÄ«bnieki. Apache Ignite. SvarÄ«gs notikums Ŕīs kopienas dzÄ«vē bija komponenta pārstrukturÄ“Å”ana Ignite Service Grid, kas ļauj izvietot pielāgotus mikropakalpojumus tieÅ”i Ignite klasterÄ«. ViņŔ tikÅ”anās reizē stāstÄ«ja par Å”o grÅ«to procesu Vjačeslavs Daradurs, programmatÅ«ras inženieris un Apache Ignite lÄ«dzstrādnieks vairāk nekā divus gadus.

Ignite Service Grid ā€” atsāknÄ“Å”ana

Sāksim ar to, kas vispār ir Apache Ignite. Å Ä« ir datu bāze, kas ir sadalÄ«ta atslēgu/vērtÄ«bu krātuve ar SQL, transakciju un keÅ”atmiņas atbalstu. Turklāt Ignite ļauj izvietot pielāgotos pakalpojumus tieÅ”i Ignite klasterÄ«. Izstrādātājam ir piekļuve visiem Ignite piedāvātajiem rÄ«kiem ā€“ izplatÄ«tajām datu struktÅ«rām, ziņojumapmaiņai, straumÄ“Å”anai, skaitļoÅ”anai un datu režģim. Piemēram, izmantojot Data Grid, pazÅ«d atseviŔķas infrastruktÅ«ras administrÄ“Å”anas problēma datu uzglabāŔanai un lÄ«dz ar to saistÄ«tās pieskaitāmās izmaksas.

Ignite Service Grid ā€” atsāknÄ“Å”ana

Izmantojot Service Grid API, varat izvietot pakalpojumu, vienkārÅ”i norādot izvietoÅ”anas shēmu un attiecÄ«gi arÄ« paÅ”u pakalpojumu konfigurācijā.

Parasti izvietoÅ”anas shēma norāda gadÄ«jumu skaitu, kas jāizvieto klasteru mezglos. Ir divas tipiskas izvietoÅ”anas shēmas. Pirmais ir Cluster Singleton: jebkurā laikā tiek garantēts, ka klasterÄ« bÅ«s pieejams viens lietotāja pakalpojuma gadÄ«jums. Otrais ir Node Singleton: katrā klastera mezglā tiek izvietots viens pakalpojuma gadÄ«jums.

Ignite Service Grid ā€” atsāknÄ“Å”ana

Lietotājs var arÄ« norādÄ«t pakalpojumu gadÄ«jumu skaitu visā klasterÄ« un definēt predikātu piemērotu mezglu filtrÄ“Å”anai. Å ajā scenārijā Service Grid pats aprēķinās optimālo pakalpojumu izvietoÅ”anas sadalÄ«jumu.

Turklāt ir tāda funkcija kā Affinity Service. Afinitāte ir funkcija, kas nosaka atslēgu attiecÄ«bas ar nodalÄ«jumiem un puÅ”u attiecÄ«bas ar topoloÄ£ijas mezgliem. Izmantojot atslēgu, varat noteikt primāro mezglu, kurā dati tiek glabāti. Tādā veidā jÅ«s varat saistÄ«t savu pakalpojumu ar atslēgu un radniecÄ«bas funkciju keÅ”atmiņu. Ja afinitātes funkcija mainās, notiks automātiska pārizvietoÅ”ana. Tādā veidā pakalpojums vienmēr atradÄ«sies tuvu datiem, ar kuriem tam nepiecieÅ”ams manipulēt, un attiecÄ«gi samazināsies informācijas piekļuves izmaksas. Å o shēmu var saukt par sava veida kolokēto skaitļoÅ”anu.

Tagad, kad esam sapratuÅ”i, kas ir Service Grid skaistums, parunāsim par tā attÄ«stÄ«bas vēsturi.

Kas notika iepriekÅ”

IepriekŔējā Service Grid ievieÅ”ana balstÄ«jās uz Ignite transakciju replicēto sistēmas keÅ”atmiņu. Vārds "keÅ”atmiņa" programmā Ignite attiecas uz krātuvi. Tas ir, tas nav kaut kas Ä«slaicÄ«gs, kā jÅ«s varētu domāt. Neskatoties uz to, ka keÅ”atmiņa tiek replicēta un katrs mezgls satur visu datu kopu, keÅ”atmiņā tai ir sadalÄ«ts attēlojums. Tas ir saistÄ«ts ar krātuves optimizāciju.

Ignite Service Grid ā€” atsāknÄ“Å”ana

Kas notika, kad lietotājs vēlējās izvietot pakalpojumu?

  • Visi klastera mezgli abonēja datu atjaunināŔanu krātuvē, izmantojot iebÅ«vēto nepārtrauktās vaicājuma mehānismu.
  • Sākotnējais mezgls lasÄ«Å”anas transakcijā datu bāzē izveidoja ierakstu, kurā bija pakalpojuma konfigurācija, tostarp sērijveida instance.
  • Kad tika paziņots par jaunu ierakstu, koordinators aprēķināja sadalÄ«jumu, pamatojoties uz konfigurāciju. IegÅ«tais objekts tika ierakstÄ«ts atpakaļ datu bāzē.
  • Ja mezgls bija daļa no izplatÄ«Å”anas, koordinatoram tas bija jāizvieto.

Kas mums nederēja

Kādā brīdī mēs nonācām pie secinājuma: tas nav veids, kā strādāt ar pakalpojumiem. Bija vairāki iemesli.

Ja izvietoÅ”anas laikā radās kāda kļūda, tad to varēja uzzināt tikai no tā mezgla žurnāliem, kur viss notika. Bija tikai asinhrona izvietoÅ”ana, tāpēc pēc kontroles atgrieÅ”anas lietotājam no izvietoÅ”anas metodes, pakalpojuma palaiÅ”anai bija nepiecieÅ”ams papildu laiks - un Å”ajā laikā lietotājs neko nevarēja kontrolēt. Lai tālāk attÄ«stÄ«tu Service Grid, radÄ«tu jaunas iespējas, piesaistÄ«tu jaunus lietotājus un atvieglotu ikviena dzÄ«vi, kaut kas ir jāmaina.

Izstrādājot jauno Service Grid, mēs, pirmkārt, vēlējāmies nodroÅ”ināt sinhronas izvietoÅ”anas garantiju: tiklÄ«dz lietotājs atgrieza kontroli no API, viņŔ varēja nekavējoties izmantot pakalpojumus. Es arÄ« gribēju dot iniciatoram iespēju rÄ«koties ar izvietoÅ”anas kļūdām.

Turklāt es gribēju vienkārÅ”ot ievieÅ”anu, proti, atbrÄ«voties no darÄ«jumiem un lÄ«dzsvaroÅ”anas. Neskatoties uz to, ka keÅ”atmiņa tiek replicēta un nav lÄ«dzsvaroÅ”anas, problēmas radās lielas izvietoÅ”anas laikā ar daudziem mezgliem. Kad topoloÄ£ija mainās, mezgliem ir jāapmainās ar informāciju, un ar lielu izvietoÅ”anu Å”ie dati var svērt daudz.

Kad topoloģija bija nestabila, koordinatoram bija jāpārrēķina pakalpojumu sadalījums. Un vispār, ja jums ir jāstrādā ar darījumiem ar nestabilu topoloģiju, tas var izraisīt grūti paredzamas kļūdas.

Problēmas

Kas ir globālas pārmaiņas bez pavadoŔām problēmām? Pirmā no tām bija topoloÄ£ijas maiņa. Jums jāsaprot, ka jebkurā brÄ«dÄ«, pat pakalpojuma izvietoÅ”anas brÄ«dÄ«, mezgls var ienākt klasterÄ« vai iziet no tā. Turklāt, ja izvietoÅ”anas laikā mezgls pievienojas klasterim, visa informācija par pakalpojumiem bÅ«s konsekventi jāpārsÅ«ta uz jauno mezglu. Un mēs runājam ne tikai par to, kas jau ir izvietots, bet arÄ« par paÅ”reizējo un turpmāko izvietoÅ”anu.

Å Ä« ir tikai viena no problēmām, ko var apkopot atseviŔķā sarakstā:

  • Kā mezgla startÄ“Å”anas laikā izvietot statiski konfigurētus pakalpojumus?
  • Mezgla atstāŔana no klastera ā€” ko darÄ«t, ja mezglā tiek mitināti pakalpojumi?
  • Ko darÄ«t, ja ir mainÄ«jies koordinators?
  • Ko darÄ«t, ja klients atkārtoti izveido savienojumu ar klasteru?
  • Vai un kā ir jāapstrādā aktivizÄ“Å”anas/deaktivizÄ“Å”anas pieprasÄ«jumi?
  • Kā bÅ«tu, ja viņi aicinātu iznÄ«cināt keÅ”atmiņu, un mums ir ar to saistÄ«ti radniecÄ«bas pakalpojumi?

Un tas vēl nav viss.

Å Ä·Ä«dums

Kā mērÄ·i mēs izvēlējāmies uz notikumu balstÄ«tu pieeju ar procesa komunikācijas ievieÅ”anu, izmantojot ziņojumus. Ignite jau ievieÅ” divus komponentus, kas ļauj mezgliem pārsÅ«tÄ«t ziņojumus savā starpā - communication-spi un discovery-spi.

Ignite Service Grid ā€” atsāknÄ“Å”ana

Communication-spi ļauj mezgliem tieÅ”i sazināties un pārsÅ«tÄ«t ziņojumus. Tas ir labi piemērots liela datu apjoma nosÅ«tÄ«Å”anai. Discovery-spi ļauj nosÅ«tÄ«t ziņojumu visiem klastera mezgliem. Standarta ievieÅ”anā tas tiek darÄ«ts, izmantojot gredzena topoloÄ£iju. Ir arÄ« integrācija ar Zookeeper, Å”ajā gadÄ«jumā tiek izmantota zvaigžņu topoloÄ£ija. Vēl viens svarÄ«gs punkts, ko vērts atzÄ«mēt, ir tas, ka discovery-spi nodroÅ”ina garantijas, ka ziņojums noteikti tiks piegādāts pareizajā secÄ«bā uz visiem mezgliem.

Apskatīsim izvietoŔanas protokolu. Visi lietotāju pieprasījumi izvietoŔanai un atcelŔanai tiek nosūtīti, izmantojot discovery-spi. Tas dod sekojoŔo garantija:

  • PieprasÄ«jumu saņems visi klastera mezgli. Tas ļaus turpināt pieprasÄ«juma apstrādi, kad mainās koordinators. Tas arÄ« nozÄ«mē, ka vienā ziņojumā katram mezglam bÅ«s visi nepiecieÅ”amie metadati, piemēram, pakalpojuma konfigurācija un tā seriālā instance.
  • Stingra ziņojumu piegādes secÄ«ba palÄ«dz atrisināt konfigurācijas konfliktus un konkurējoÅ”us pieprasÄ«jumus.
  • Tā kā mezgla iekļūŔana topoloÄ£ijā tiek apstrādāta arÄ« caur discovery-spi, jaunais mezgls saņems visus darbam ar pakalpojumiem nepiecieÅ”amos datus.

Kad pieprasÄ«jums tiek saņemts, klastera mezgli to apstiprina un izveido apstrādes uzdevumus. Å os uzdevumus ievieto rindā un pēc tam atseviŔķs darbinieks apstrādā citā pavedienā. Tas tiek Ä«stenots Ŕādā veidā, jo izvietoÅ”ana var aizņemt ievērojamu laiku un nepanesami aizkavēt dārgo atklājumu plÅ«smu.

Visus pieprasÄ«jumus no rindas apstrādā izvietoÅ”anas pārvaldnieks. Tam ir Ä«paÅ”s darbinieks, kas izvelk uzdevumu no Ŕīs rindas un inicializē to, lai sāktu izvietoÅ”anu. Pēc tam tiek veiktas Ŕādas darbÄ«bas:

  1. Katrs mezgls neatkarÄ«gi aprēķina sadalÄ«jumu, pateicoties jaunai deterministiskajai pieŔķirÅ”anas funkcijai.
  2. Mezgli Ä£enerē ziņojumu ar izvietoÅ”anas rezultātiem un nosÅ«ta to koordinatoram.
  3. Koordinators apkopo visus ziņojumus un Ä£enerē visa izvietoÅ”anas procesa rezultātu, kas tiek nosÅ«tÄ«ts, izmantojot discovery-spi, visiem klastera mezgliem.
  4. Kad rezultāts tiek saņemts, izvietoÅ”anas process beidzas, pēc kura uzdevums tiek noņemts no rindas.

Ignite Service Grid ā€” atsāknÄ“Å”ana
Jauns uz notikumu orientēts dizains: org.apache.ignite.internal.processors.service.IgniteServiceProcessor.java

Ja izvietoÅ”anas laikā rodas kļūda, mezgls nekavējoties iekļauj Å”o kļūdu ziņojumā, ko tas nosÅ«ta koordinatoram. Pēc ziņojumu apkopoÅ”anas koordinatoram bÅ«s informācija par visām izvietoÅ”anas laikā pieļautajām kļūdām un viņŔ nosÅ«tÄ«s Å”o ziņojumu, izmantojot discovery-spi. Informācija par kļūdām bÅ«s pieejama jebkurā klastera mezglā.

Visi svarÄ«gie notikumi Service Grid tiek apstrādāti, izmantojot Å”o darbÄ«bas algoritmu. Piemēram, topoloÄ£ijas maiņa ir arÄ« ziņojums, izmantojot discovery-spi. Un kopumā, salÄ«dzinot ar to, kas bija iepriekÅ”, protokols izrādÄ«jās diezgan viegls un uzticams. Pietiekami, lai tiktu galā ar jebkuru situāciju izvietoÅ”anas laikā.

Kas notiks tālāk

Tagad par plāniem. Jebkuras bÅ«tiskas izmaiņas Ignite projektā tiek pabeigtas kā Ignite uzlaboÅ”anas iniciatÄ«va, ko sauc par IEP. Service Grid pārprojektÄ“Å”anai ir arÄ« IEP - IEP #17 ar izsmejoÅ”u nosaukumu ā€œEļļas maiņa servisa tÄ«klāā€. Bet patiesÄ«bā mēs nemainÄ«jām motoreļļu, bet gan visu dzinēju.

Mēs IEP uzdevumus sadalÄ«jām 2 fāzēs. Pirmais ir galvenais posms, kas sastāv no izvietoÅ”anas protokola pārstrādāŔanas. Tas jau ir iekļauts galvenajā, varat izmēģināt jauno Service Grid, kas parādÄ«sies 2.8 versijā. Otrajā posmā ietilpst daudzi citi uzdevumi:

  • Karstā pārizvietoÅ”ana
  • Pakalpojuma versiju noteikÅ”ana
  • Paaugstināta kļūdu tolerance
  • Plāns klients
  • RÄ«ki dažādu metriku uzraudzÄ«bai un aprēķināŔanai

Visbeidzot, mēs varam sniegt padomus par Service Grid, lai izveidotu defektizturÄ«gas augstas pieejamÄ«bas sistēmas. Aicinām arÄ« jÅ«s apmeklēt mÅ«s plkst izstrādātāju saraksts Šø lietotāju saraksts dalieties pieredzē. JÅ«su pieredze ir ļoti svarÄ«ga sabiedrÄ«bai, tā palÄ«dzēs saprast, kur virzÄ«ties tālāk, kā attÄ«stÄ«t komponentu nākotnē.

Avots: www.habr.com

Pievieno komentāru