Usanifu na uwezo wa Gridi ya Takwimu ya Tarantool

Usanifu na uwezo wa Gridi ya Takwimu ya Tarantool

Mnamo 2017, tulishinda shindano la kukuza msingi wa shughuli za biashara ya uwekezaji ya Alfa-Bank na tukaanza kazi (katika HighLoad++ 2018 na ripoti kuhusu msingi wa biashara ya uwekezaji. kutumbuiza Vladimir Drynkin, mkuu wa msingi wa shughuli za biashara ya uwekezaji wa Benki ya Alfa). Mfumo huu ulipaswa kujumlisha data ya muamala kutoka vyanzo tofauti katika miundo mbalimbali, kuleta data katika fomu iliyounganishwa, kuihifadhi na kutoa ufikiaji wake.

Wakati wa mchakato wa usanidi, mfumo ulibadilika na kupata utendakazi, na wakati fulani tukagundua kuwa tulikuwa tukiangaza kitu zaidi ya programu tumizi iliyoundwa ili kutatua anuwai ya kazi zilizobainishwa: tulifaulu. mfumo wa kujenga programu zilizosambazwa na uhifadhi unaoendelea. Uzoefu tuliopata uliunda msingi wa bidhaa mpya - Gridi ya data ya Tarantool (TDG).

Ninataka kuzungumza juu ya usanifu wa TDG na masuluhisho tuliyokuja wakati wa mchakato wa maendeleo, kukujulisha utendaji kuu na kuonyesha jinsi bidhaa zetu zinaweza kuwa msingi wa kujenga ufumbuzi kamili.

Kwa usanifu, tuligawanya mfumo kuwa tofauti majukumu, ambayo kila mmoja ni wajibu wa kutatua aina fulani ya matatizo. Mfano mmoja wa programu inayoendesha hutekeleza aina moja au zaidi za jukumu. Kunaweza kuwa na majukumu kadhaa ya aina moja kwenye nguzo:

Usanifu na uwezo wa Gridi ya Takwimu ya Tarantool

Connector

Kiunganishi kinawajibika kwa mawasiliano na ulimwengu wa nje; kazi yake ni kukubali ombi, kuchanganua, na ikiwa hii itafanikiwa, basi tuma data kwa usindikaji kwa processor ya pembejeo. Tunatumia miundo ya HTTP, SOAP, Kafka, FIX. Usanifu hukuruhusu kuongeza tu usaidizi wa fomati mpya, na usaidizi wa IBM MQ unakuja hivi karibuni. Ikiwa kuchanganua ombi kumeshindwa, kiunganishi kitarudisha hitilafu; vinginevyo, itajibu kwamba ombi lilichakatwa kwa ufanisi, hata kama hitilafu ilitokea wakati wa usindikaji wake zaidi. Hii ilifanyika hasa ili kufanya kazi na mifumo ambayo haijui jinsi ya kurudia maombi - au, kinyume chake, fanya hivyo kwa kuendelea. Ili si kupoteza data, foleni ya kutengeneza hutumiwa: kitu kwanza huingia ndani yake na tu baada ya usindikaji wa mafanikio kuondolewa kutoka humo. Msimamizi anaweza kupokea arifu kuhusu vitu vilivyobaki kwenye foleni ya ukarabati, na baada ya kuondoa hitilafu ya programu au kushindwa kwa vifaa, jaribu tena.

Kichakataji cha kuingiza

Kichakataji cha Ingizo huainisha data iliyopokelewa kulingana na vipengele bainifu na kuita vichakataji vinavyofaa. Vishikizi ni msimbo wa Lua unaofanya kazi kwenye kisanduku cha mchanga, kwa hivyo haviwezi kuathiri utendakazi wa mfumo. Katika hatua hii, data inaweza kupunguzwa kwa fomu inayotakiwa, na, ikiwa ni lazima, idadi ya kiholela ya kazi inaweza kuzinduliwa ambayo inaweza kutekeleza mantiki muhimu. Kwa mfano, katika bidhaa ya MDM (Usimamizi Mkuu wa Data) iliyojengwa kwenye Gridi ya Data ya Tarantool, wakati wa kuongeza mtumiaji mpya, ili si kupunguza kasi ya usindikaji wa ombi, tunazindua uundaji wa rekodi ya dhahabu kama kazi tofauti. Sanduku la mchanga linaauni maombi ya kusoma, kubadilisha na kuongeza data, hukuruhusu kufanya kazi fulani kwenye majukumu yote ya aina ya uhifadhi na ujumlishaji wa matokeo (ramani/punguza).

Vidhibiti vinaweza kuelezewa katika faili:

sum.lua

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

Na kisha, ilitangazwa katika usanidi:

functions:
  sum: { __file: sum.lua }

Kwa nini Lua? Lua ni lugha rahisi sana. Kulingana na uzoefu wetu, saa chache baada ya kuifahamu, watu huanza kuandika msimbo unaotatua tatizo lao. Na hawa sio tu watengenezaji wa kitaaluma, lakini, kwa mfano, wachambuzi. Kwa kuongeza, shukrani kwa mkusanyaji wa jit, Lua inaendesha haraka sana.

kuhifadhi

Hifadhi huhifadhi data inayoendelea. Kabla ya kuhifadhi, data inathibitishwa dhidi ya schema ya data. Ili kuelezea mzunguko tunatumia muundo uliopanuliwa Apache Avro. Mfano:

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

Kulingana na maelezo haya, DDL (Lugha ya Ufafanuzi wa Data) inatolewa kiotomatiki kwa Tarantula DBMS na GraphQL schema ya ufikiaji wa data.

Urudiaji wa data wa Asynchronous unaungwa mkono (kuna mipango ya kuongeza moja iliyosawazishwa).

Kichakataji cha pato

Wakati mwingine ni muhimu kuwajulisha watumiaji wa nje kuhusu kuwasili kwa data mpya; kwa kusudi hili, kuna jukumu la kichakataji cha Pato. Baada ya kuhifadhi data, inaweza kupitishwa kwa mpigaji sahihi (kwa mfano, kuleta kwa fomu inayotakiwa na mtumiaji) - na kisha kupitishwa kwa kontakt kwa kutuma. Foleni ya kurekebisha pia inatumika hapa: ikiwa hakuna mtu aliyekubali kitu, msimamizi anaweza kujaribu tena baadaye.

Kuongeza

Kiunganishi, kichakataji ingizo, na majukumu ya kichakataji cha pato hazina uraia, na hivyo kuturuhusu kuongeza mfumo kwa mlalo kwa kuongeza tu matukio mapya ya programu tukiwa na aina ya jukumu tunalotaka. Hifadhi hutumiwa kwa kuongeza usawa mbinu kupanga kikundi kwa kutumia ndoo pepe. Baada ya kuongeza seva mpya, baadhi ya ndoo kutoka kwa seva za zamani huhamishwa hadi seva mpya nyuma; hii hutokea kwa uwazi kwa watumiaji na haiathiri uendeshaji wa mfumo mzima.

Sifa za Data

Vitu vinaweza kuwa kubwa sana na vyenye vitu vingine. Tunahakikisha atomiki ya kuongeza na kusasisha data kwa kuhifadhi kitu chenye vitegemezi vyote kwenye ndoo moja pepe. Hii huzuia kipengee "kuenezwa" kwenye seva kadhaa halisi.

Uchapishaji unaauniwa: kila sasisho la kitu huunda toleo jipya, na tunaweza kuchukua kipande cha muda na kuona jinsi ulimwengu ulivyokuwa wakati huo. Kwa data ambayo haihitaji historia ndefu, tunaweza kuweka kikomo idadi ya matoleo au hata kuhifadhi toleo moja pekee - la hivi punde - yaani, kuzima matoleo ya aina fulani. Unaweza pia kupunguza historia kwa wakati: kwa mfano, futa vitu vyote vya aina fulani vya zaidi ya mwaka 1. Uhifadhi wa kumbukumbu pia unaauniwa: tunaweza kupakua vipengee vya zamani zaidi ya muda uliobainishwa, tukifungua nafasi kwenye nguzo.

kazi

Kati ya vipengee vya kupendeza, inafaa kuzingatia uwezo wa kuzindua kazi kwa ratiba, kwa ombi la mtumiaji, au kwa utaratibu kutoka kwa sanduku la mchanga:

Usanifu na uwezo wa Gridi ya Takwimu ya Tarantool

Hapa tunaona jukumu lingine - mkimbiaji. Jukumu hili halina uraia, na hali za ziada za utumizi zilizo na jukumu hili zinaweza kuongezwa kwenye nguzo inapohitajika. Wajibu wa mkimbiaji ni kukamilisha kazi. Kama ilivyotajwa, inawezekana kutoa kazi mpya kutoka kwa sanduku la mchanga; wao ni kuokolewa katika foleni juu ya kuhifadhi na kisha kunyongwa juu ya mkimbiaji. Aina hii ya kazi inaitwa Ayubu. Pia tunayo aina ya kazi inayoitwa Task - hizi ni kazi zilizoainishwa na mtumiaji ambazo huendeshwa kwa ratiba (kwa kutumia syntax ya cron) au inapohitajika. Ili kuzindua na kufuatilia kazi kama hizo, tuna meneja wa kazi anayefaa. Ili utendakazi huu upatikane, lazima uwashe jukumu la mratibu; jukumu hili lina hali, kwa hiyo haina kiwango, ambacho hakihitajiki; wakati huo huo, kama majukumu mengine yote, inaweza kuwa na replica ambayo huanza kufanya kazi ikiwa bwana anakataa ghafla.

Logger

Jukumu lingine linaitwa logger. Inakusanya kumbukumbu kutoka kwa washiriki wote wa nguzo na hutoa kiolesura cha kuzipakia na kuzitazama kupitia kiolesura cha wavuti.

Huduma

Ni muhimu kutaja kwamba mfumo hufanya iwe rahisi kuunda huduma. Katika faili ya usanidi, unaweza kubainisha ni maombi gani yanatumwa kwa kidhibiti kilichoandikwa na mtumiaji ambacho kinaendeshwa kwenye kisanduku cha mchanga. Katika kidhibiti hiki, unaweza, kwa mfano, kukimbia aina fulani ya swali la uchambuzi na kurudisha matokeo.

Huduma imeelezewa katika faili ya usanidi:

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

GraphQL API inatolewa kiotomatiki na huduma inapatikana kwa kupiga simu:

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

Hii itaita kishughulikiaji sumambayo itarudisha matokeo:

3

Uchambuzi wa Hoja na Vipimo

Ili kuelewa utendakazi wa mfumo na maombi ya wasifu, tulitekeleza usaidizi wa itifaki ya OpenTracing. Mfumo unaweza kutuma taarifa kuhusu mahitaji kwa zana zinazotumia itifaki hii, kama vile Zipkin, ambayo itakuruhusu kuelewa jinsi ombi lilitekelezwa:

Usanifu na uwezo wa Gridi ya Takwimu ya Tarantool

Kwa kawaida, mfumo hutoa metrics ya ndani ambayo inaweza kukusanywa kwa kutumia Prometheus na taswira kwa kutumia Grafana.

Weka

Gridi ya Data ya Tarantool inaweza kutumwa kutoka kwa vifurushi vya RPM au kumbukumbu, kwa kutumia matumizi kutoka kwa usambazaji au Ansible, pia kuna msaada kwa Kubernetes (Tarantool Kubernetes Opereta).

Programu inayotekeleza mantiki ya biashara (usanidi, vidhibiti) hupakiwa kwenye nguzo ya Gridi ya Data ya Tarantool iliyotumika katika mfumo wa kumbukumbu kupitia UI au kwa kutumia hati kupitia API iliyotolewa nasi.

Sampuli za Maombi

Ni programu gani zinaweza kuundwa kwa kutumia Gridi ya Data ya Tarantool? Kwa kweli, kazi nyingi za biashara zinahusiana kwa namna fulani na usindikaji, kuhifadhi na kufikia mtiririko wa data. Kwa hivyo, ikiwa una mitiririko mikubwa ya data ambayo inahitaji kuhifadhiwa na kufikiwa kwa njia salama, basi bidhaa yetu inaweza kuokoa muda mwingi wa maendeleo na kuzingatia mantiki ya biashara yako.

Kwa mfano, tunataka kukusanya taarifa kuhusu soko la mali isiyohamishika, ili katika siku zijazo, kwa mfano, tutakuwa na taarifa kuhusu matoleo bora. Katika kesi hii, tutaangazia kazi zifuatazo:

  1. Roboti zinazokusanya taarifa kutoka kwa vyanzo huria zitakuwa vyanzo vyetu vya data. Unaweza kutatua tatizo hili kwa kutumia ufumbuzi tayari au kuandika msimbo katika lugha yoyote.
  2. Ifuatayo, Gridi ya Data ya Tarantool itakubali na kuhifadhi data. Ikiwa umbizo la data kutoka kwa vyanzo tofauti ni tofauti, basi unaweza kuandika msimbo katika Lua ambao utafanya ubadilishaji kuwa umbizo moja. Katika hatua ya awali ya kuchakata, utaweza pia, kwa mfano, kuchuja matoleo yanayorudiwa au kusasisha maelezo kuhusu mawakala wanaofanya kazi sokoni kwenye hifadhidata.
  3. Sasa tayari unayo suluhu inayoweza kusambazwa katika kundi ambalo linaweza kujazwa na data na kufanya uteuzi wa data. Kisha unaweza kutekeleza utendaji mpya, kwa mfano, kuandika huduma ambayo itafanya ombi la data na kutoa toleo la faida zaidi kwa siku - hii itahitaji mistari michache katika faili ya usanidi na msimbo mdogo wa Lua.

Nini hapo?

Kipaumbele chetu ni kuboresha urahisi wa maendeleo kutumia Gridi ya data ya Tarantool. Kwa mfano, hii ni IDE yenye usaidizi wa kuhariri na kurekebisha vidhibiti vinavyoendeshwa kwenye kisanduku cha mchanga.

Pia tunazingatia sana masuala ya usalama. Hivi sasa tunapitia uthibitisho na FSTEC ya Urusi ili kuthibitisha kiwango cha juu cha usalama na kukidhi mahitaji ya uidhinishaji wa bidhaa za programu zinazotumiwa katika mifumo ya taarifa za data ya kibinafsi na mifumo ya taarifa ya serikali.

Chanzo: mapenzi.com

Kuongeza maoni