Mîmarî û kapasîteyên Tarantool Data Grid

Mîmarî û kapasîteyên Tarantool Data Grid

Di sala 2017-an de, me pêşbaziyek qezenc kir ku bingeha danûstendinê ya karsaziya veberhênanê ya Alfa-Bank pêşve bibe û dest bi xebatê kir (li HighLoad ++ 2018 bi raporek li ser bingeha karsaziya veberhênanê axivî Vladimir Drynkin, serokê bingeha danûstendinê ya karsaziya veberhênanê ya Alfa Bank). Diviyabû ku ev pergal daneyên danûstendinê yên ji çavkaniyên cihêreng di formên cûrbecûr de berhev bike, daneyan bike formek yekgirtî, hilîne û gihîştina wê peyda bike.

Di pêvajoya pêşkeftinê de, pergal pêş ket û fonksiyonek bi dest xist, û di demek de me fêhm kir ku em ji nermalava serîlêdanê ya ku ji bo çareserkirina rêzikek diyarkirî ya karan hatî afirandin tiştek pir wêdetir kristal dikin: em bi ser ketin sîstema ji bo avakirina sepanên belavkirî bi hilanînê domdar. Tecrûbeya ku me bi dest xist, bingeha hilberek nû ava kir - Tora Daneyên Tarantool (TDG).

Ez dixwazim li ser mîmariya TDG û çareseriyên ku em di pêvajoya pêşkeftinê de gihîştin biaxivim, fonksiyona sereke bi we bidim nasîn û destnîşan bikim ka hilbera me çawa dikare bibe bingehek ji bo avakirina çareseriyên bêkêmasî.

Ji hêla mîmarî ve, me pergalê li ser hev dabeş kir rolên, ku her yek ji wan ji bo çareserkirina hin pirsgirêkan berpirsiyar e. Nimûneyek serîlêdana yekane ya xebitandinê yek an çend celebên rola bicîh dike. Di komekê de dikare çend rolên heman celebî hebin:

Mîmarî û kapasîteyên Tarantool Data Grid

Connector

Connector ji bo ragihandina bi cîhana derve re berpirsiyar e; peywira wê ev e ku daxwazê ​​qebûl bike, wê pars bike, û heke ev biserkeve, wê hingê daneyan ji bo pêvajoyê bişîne pêvajoya têketinê. Em formatên HTTP, SOAP, Kafka, FIX piştgirî dikin. Mîmarî dihêle hûn bi tenê piştgirî ji bo formatên nû zêde bikin, digel ku piştgirî ji bo IBM MQ di demek nêzîk de tê. Ger parskirina daxwazê ​​têk çû, dê girêdan xeletiyek vegere; Wekî din, ew ê bersivê bide ku daxwaz bi serfirazî hate pêvajo kirin, tevî ku di dema pêvajoyek wê ya din de xeletiyek çêbû. Ev bi taybetî hate kirin da ku bi pergalên ku nizanin ka meriv çawa daxwazan dubare dike - an, berevajî, wê pir bi domdarî bikin. Ji bo ku daneyan winda nekin, rêzek tamîrkirinê tê bikar anîn: yekem tişt dikeve nav wê û tenê piştî ku pêvajoyek serfiraz jê tê derxistin. Rêvebir dikare di derheqê tiştên ku di rêza tamîrê de mane hişyariyan werbigire, û piştî ku xeletiyek nermalavê an têkçûna hardware ji holê rake, dîsa biceribîne.

processor Input

Pêvajoya Input daneyên wergirtî li gorî taybetmendiyên taybetmendiyê dabeş dike û pêvajoyên guncan gazî dike. Handler koda Lua ne ku di sandboxê de dimeşe, ji ber vê yekê ew nikanin bandorê li xebata pergalê bikin. Di vê qonaxê de, dane dikarin di forma hewce de bêne kêm kirin, û, ger hewce be, hejmareke keyfî ya peywiran dikare were destpêkirin ku dikare mantiqa pêwîst bicîh bîne. Mînakî, di hilbera MDM (Rêveberiya Daneyên Master) de ku li ser Tarantool Data Grid hatî çêkirin de, dema ku bikarhênerek nû lê zêde bike, ji bo ku pêvajoya daxwazê ​​hêdî nebe, em çêkirina tomarek zêrîn wekî karek cûda dest pê dikin. Sandbox daxwazên xwendin, guhartin û zêdekirina daneyan piştgirî dike, dihêle hûn li ser hemî rolên celebê hilanînê û berhevkirina encamê (nexşe / kêmkirin) hin fonksiyonan pêk bînin.

Handler dikarin di pelan de bêne diyar kirin:

sum.lua

local x, y = unpack(...)
return x + y

Û paşê, di veavakirinê de ragihand:

functions:
  sum: { __file: sum.lua }

Çima Lua? Lua zimanek pir hêsan e. Li ser bingeha ezmûna me, çend demjimêran piştî naskirina wê, mirov dest bi nivîsandina kodê dikin ku pirsgirêka wan çareser dike. Û ev ne tenê pêşdebirên profesyonel, lê, wek nimûne, analîst in. Wekî din, bi saya berhevkarê jit, Lua pir zû dimeşe.

Embarkirinî

Storage daneyên domdar hilîne. Berî tomarkirinê, dane li dijî şema daneyê tê pejirandin. Ji bo danasîna çerxê em formatek dirêjkirî bikar tînin Apache Avro... Mînak:

{
    "name": "User",
    "type": "record",
    "logicalType": "Aggregate",
    "fields": [ 
        { "name": "id", "type": "string"}, 
        {"name": "first_name", "type": "string"}, 
        {"name": "last_name", "type": "string"} 
    ], 
    "indexes": ["id"] 
}

Li ser bingeha vê ravekirinê, DDL (Zimanê pênaseya daneyê) bixweber ji bo Tarantula DBMS û GraphQL schema ji bo gihîştina daneyê.

Vejandina daneya asynchronous tê piştgirî kirin (plan hene ku yek hevdem zêde bikin).

processor Output

Carinan hewce ye ku meriv xerîdarên derveyî di derbarê hatina daneyên nû de agahdar bike; ji bo vê yekê, rola pêvajoya derketinê heye. Piştî tomarkirina daneyê, ew dikare ji destkêşerê guncan re were derbas kirin (mînak, da ku wê bîne forma ku ji hêla xerîdar ve tê xwestin) - û dûv re ji bo şandinê derbasî girêdanê bibe. Li vir rêzek tamîrkirinê jî tê bikar anîn: heke kesek tiştek qebûl nekir, rêveber dikare paşê dîsa biceribîne.

Scaling

Rolên girêdanê, pêvajoya têketinê, û pêvajoya derketinê bê dewlet in, dihêlin ku em pergalê bi rengek horizontî mezin bikin bi tenê lê zêdekirina mînakên serîlêdanê yên nû yên bi celebê rola xwestî ya çalakkirî. Storage ji bo pîvana horizontal tê bikaranîn nêzîkbûnek ji bo birêxistinkirina komê bi karanîna kepçeyên virtual. Piştî lêzêdekirina serverek nû, hin kelûpelên ji pêşkêşkerên kevin têne veguheztin servera nû ya li paşîn; ev bi zelalî ji bikarhêneran re diqewime û bandorê li xebata tevahiya pergalê nake.

Taybetmendiyên Daneyên

Tişt dikarin pir mezin bin û tiştên din jî tê de bin. Em atomîbûna lêzêdekirin û nûvekirina daneyan bi hilgirtina tiştek bi hemî ve girêdayî di yek kelek virtual de piştrast dikin. Ev rê nade ku tişt li ser çend pêşkêşkerên laşî "belav bibe".

Guhertoyek piştgirî ye: her nûvekirina tiştekê guhertoyek nû diafirîne, û em her gav dikarin perçeyek dem bavêjin û bibînin ka wê hingê dinya çawa xuya bû. Ji bo daneyên ku ne hewceyê dîrokek dirêj e, em dikarin hejmara guhertoyan sînordar bikin an tewra tenê yek hilînin - ya herî paşîn - ango, di bingeh de guhertoya ji bo celebek diyarkirî neçalak bikin. Her weha hûn dikarin dîrokê ji hêla demê ve sînordar bikin: Mînakî, hemî tiştên cûreyek diyarkirî ji 1 salî mezintir jêbirin. Arşîvkirin jî tê piştgirî kirin: em dikarin tiştên ji dema diyarkirî kevntir dakêşin, cîhê di komê de azad bikin.

erkên

Di nav taybetmendiyên balkêş de, hêjayî gotinê ye ku kapasîteya destpêkirina peywiran li ser nexşeyek, li ser daxwaza bikarhêner, an bi bername ji sandboxê:

Mîmarî û kapasîteyên Tarantool Data Grid

Li vir em rolek din dibînin - runner. Ev rol bê dewlet e, û mînakên serîlêdanê yên din ên bi vê rolê re li gorî hewcedariyê dikarin li komê werin zêdekirin. Berpirsiyariya bezê temamkirina karan e. Wekî ku hate gotin, gengaz e ku meriv ji sandboxê karên nû biafirîne; ew di dorê de li ser hilanînê têne hilanîn û dûv re li ser bezê têne darve kirin. Ji vî karî re Kar tê gotin. Di heman demê de celebek peywirê ya me ya bi navê Task jî heye - ev peywirên ku ji hêla bikarhêner ve hatî destnîşan kirin in ku li ser nexşeyek (bi karanîna hevoksaziya cron) an li gorî daxwazê ​​têne xebitandin. Ji bo destpêkirin û şopandina peywirên weha, me rêveberek peywirê hêsan heye. Ji bo ku ev fonksiyon peyda bibe, divê hûn rola plansazker çalak bikin; ev rola xwedan dewletek e, ji ber vê yekê ew pîvan nake, lêbelê, ne hewce ye; di heman demê de, mîna hemî rolên din, ew dikare kopiyek hebe ku heke master ji nişkê ve red bike dest bi xebatê dike.

loggers

Rolek din jê re logger tê gotin. Ew têketinên ji hemî endamên komê berhev dike û ji bo barkirin û dîtina wan bi navgîniya tevnvîsê ve navgînek peyda dike.

Xizmet

Hêjayî gotinê ye ku pergal çêkirina karûbaran hêsan dike. Di pelê veavakirinê de, hûn dikarin diyar bikin ka kîjan daxwaz ji destkarek-karhêner-nivîsandî ya ku di sandboxê de dimeşe têne şandin. Di vê rêvekerê de, hûn dikarin, mînakî, cûreyek lêpirsînek analîtîk bimeşînin û encamê vegerînin.

Karûbar di pelê veavakirinê de tête diyar kirin:

services:
   sum:
      doc: "adds two numbers"
      function: sum
      return_type: int
      args:
         x: int
         y: int

GraphQL API bixweber tête çêkirin û karûbar ji bo bangkirinê peyda dibe:

query {
   sum(x: 1, y: 2) 
}

Ev dê bang li handler sumku dê encamê vegerîne:

3

Profîlkirina Pirs û Metrics

Ji bo fêmkirina xebata pergalê û daxwazên profîlkirinê, me piştgirî ji bo protokola OpenTracing bicîh kir. Pergal dikare li ser daxwazê ​​agahdarî bişîne amûrên ku vê protokolê piştgirî dikin, wek Zipkin, ku dê bihêle hûn fêm bikin ka daxwaz çawa hate darve kirin:

Mîmarî û kapasîteyên Tarantool Data Grid

Bi xwezayî, pergal metrîkên hundurîn peyda dike ku dikare bi Prometheus ve were berhev kirin û bi karanîna Grafana ve were xuyang kirin.

Bikaranîn

Tora Daneyên Tarantool dikare ji pakêtên RPM an arşîvek were saz kirin, bi karanîna amûrek ji belavkirinê an Ansible, ji bo Kubernetes jî piştgirî heye (Operatorê Tarantool Kubernetes).

Serlêdana ku mantiqa karsaziyê pêk tîne (veavakirin, hilber) di forma arşîvekê de bi navgîniya UI-yê an jî bi karanîna skrîptek bi navgîniya API-ya ku ji hêla me ve hatî peyda kirin ve di nav koma Tarantool Data Grid-a hatî bicîh kirin de tê barkirin.

Sepanên Nimûne

Çi serîlêdan dikarin bi karanîna Tarantool Data Grid werin afirandin? Bi rastî, pir karên karsaziyê bi rengek bi pêvajoyê, hilanîn û gihîştina herikîna daneyê re têkildar in. Ji ber vê yekê, heke we rêjeyên mezin ên daneyan hene ku hewce ne ku bi ewlehî werin hilanîn û gihîştinê, wê hingê hilbera me dikare ji we re gelek wextê pêşkeftinê xilas bike û balê bikişîne ser mantiqa karsaziya we.

Mînak, em dixwazin di derheqê bazara sîteya rast de agahdarî berhev bikin, da ku di pêşerojê de, mînakî, em ê di derheqê pêşniyarên çêtirîn de bibin xwedî agahdarî. Di vê rewşê de, em ê karên jêrîn ronî bikin:

  1. Robotên ku agahdariya ji çavkaniyên vekirî berhev dikin dê bibin çavkaniyên daneyên me. Hûn dikarin vê pirsgirêkê bi karanîna çareseriyên amade an nivîsandina kodê bi her zimanî çareser bikin.
  2. Dûv re, Tarantool Data Grid dê daneyan qebûl bike û hilîne. Ger formata daneyê ji çavkaniyên cihêreng cûda be, wê hingê hûn dikarin kodê li Lua binivîsin ku dê veguheztinê li yek formatek pêk bîne. Di qonaxa pêş-pêvajoyê de, hûn ê di heman demê de bikarin, mînakî, pêşniyarên dubare fîlter bikin an jî agahdariya li ser ajanên ku li bazarê di databasê de dixebitin nûve bikin.
  3. Naha we di komekê de çareseriyek pîvandî heye ku dikare bi daneyan were dagirtin û hilbijarkên daneyê çêbike. Dûv re hûn dikarin fonksiyonek nû bicîh bikin, mînakî, karûbarek binivîsin ku dê daxwazek daneyê bike û rojane pêşniyara herî bikêr bide - ev ê di pelê veavakirinê de çend rêzan û kodek piçûk Lua hewce bike.

Çi ye?

Pêşîniya me ew e ku em hêsaniya pêşkeftinê bi kar bînin Tora Daneyên Tarantool. Mînakî, ev IDE-yek e ku piştgirî ji bo profîlkirin û rêgezên hilgirên ku di sandboxê de dixebitin heye.

Em girîngiyeke mezin didin mijarên ewlehiyê jî. Naha em ji hêla FSTEC ya Rûsyayê ve ji bo piştrastkirina asta bilind a ewlehiyê û bicîhanîna hewcedariyên ji bo pejirandina hilberên nermalavê yên ku di pergalên agahdariya daneyên kesane û pergalên agahdariya hukûmetê de têne bikar anîn de derbas dibin.

Source: www.habr.com

Add a comment