Tarantool Data Grid arhitektūra un iespējas

Tarantool Data Grid arhitektūra un iespējas

2017. gadā mēs uzvarējām Alfa-Bank investÄ«ciju biznesa darÄ«jumu kodola attÄ«stÄ«Å”anas konkursā un sākām darbu (HighLoad++ 2018 ar ziņojumu par investÄ«ciju biznesa pamatu runāja Vladimirs Drinkins, Alfa Bank investÄ«ciju biznesa darÄ«jumu pamata vadÄ«tājs). Å ai sistēmai bija paredzēts apkopot darÄ«jumu datus no dažādiem avotiem dažādos formātos, apkopot datus vienotā formā, uzglabāt un nodroÅ”ināt piekļuvi tiem.

Izstrādes procesā sistēma attÄ«stÄ«jās un ieguva funkcionalitāti, un kādā brÄ«dÄ« mēs sapratām, ka izkristalizējam kaut ko daudz vairāk nekā tikai lietojumprogrammatÅ«ru, kas izveidota, lai atrisinātu stingri noteiktu uzdevumu loku: mums tas izdevās. sistēma izplatÄ«tu lietojumprogrammu veidoÅ”anai ar pastāvÄ«gu krātuvi. MÅ«su iegÅ«tā pieredze veidoja pamatu jaunam produktam - Tarantool datu režģis (TDG).

Vēlos runāt par TDG arhitektÅ«ru un risinājumiem, pie kādiem nonācām izstrādes procesā, iepazÄ«stināt ar galvenajām funkcionalitātēm un parādÄ«t, kā mÅ«su produkts var kļūt par pamatu komplekso risinājumu veidoÅ”anai.

Arhitektoniski mēs sadalÄ«jām sistēmu atseviŔķās daļās lomas, no kuriem katrs ir atbildÄ«gs par noteikta problēmu loka risināŔanu. Viena darbojas lietojumprogrammas instance ievieÅ” vienu vai vairākus lomu veidus. KlasterÄ« var bÅ«t vairākas viena veida lomas:

Tarantool Data Grid arhitektūra un iespējas

Connector

Connector ir atbildÄ«gs par saziņu ar ārpasauli; tā uzdevums ir pieņemt pieprasÄ«jumu, parsēt to un, ja tas izdodas, tad nosÅ«tÄ«t datus apstrādei ievades apstrādātājam. Mēs atbalstām HTTP, SOAP, Kafka, FIX formātus. ArhitektÅ«ra ļauj vienkārÅ”i pievienot atbalstu jauniem formātiem, drÄ«zumā bÅ«s pieejams atbalsts IBM MQ. Ja pieprasÄ«juma parsÄ“Å”ana neizdevās, savienotājs atgriezÄ«s kļūdu; pretējā gadÄ«jumā tas atbildēs, ka pieprasÄ«jums ir veiksmÄ«gi apstrādāts, pat ja tā turpmākās apstrādes laikā radās kļūda. Tas tika darÄ«ts Ä«paÅ”i, lai strādātu ar sistēmām, kuras nezina, kā atkārtot pieprasÄ«jumus - vai, gluži pretēji, dara to pārāk neatlaidÄ«gi. Lai nezaudētu datus, tiek izmantota remonta rinda: objekts vispirms nokļūst tajā un tikai pēc veiksmÄ«gas apstrādes tiek noņemts no tā. Administrators var saņemt brÄ«dinājumus par objektiem, kas palikuÅ”i remonta rindā, un pēc programmatÅ«ras kļūdas vai aparatÅ«ras kļūmes novērÅ”anas mēģiniet vēlreiz.

Ievades procesors

Ievades procesors klasificē saņemtos datus pēc raksturÄ«gajām pazÄ«mēm un izsauc atbilstoÅ”us procesorus. Apdarinātāji ir Lua kods, kas darbojas smilÅ”u kastē, tāpēc tie nevar ietekmēt sistēmas darbÄ«bu. Å ajā posmā datus var samazināt lÄ«dz vajadzÄ«gajai formai, un, ja nepiecieÅ”ams, var palaist patvaļīgu skaitu uzdevumu, kas var Ä«stenot nepiecieÅ”amo loÄ£iku. Piemēram, MDM (Master Data Management) produktā, kas veidots uz Tarantool Data Grid, pievienojot jaunu lietotāju, lai nepalēninātu pieprasÄ«juma apstrādi, kā atseviŔķu uzdevumu uzsākam zelta rekorda izveidi. SmilÅ”kaste atbalsta pieprasÄ«jumus lasÄ«t, mainÄ«t un pievienot datus, ļauj veikt kādu funkciju visās krātuves veida lomās un rezultātu apkopoÅ”anā (karte/samazināt).

Apdarinātājus var aprakstīt failos:

sum.lua

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

Un pēc tam konfigurācijā deklarēts:

functions:
  sum: { __file: sum.lua }

Kāpēc Lua? Lua valoda ir ļoti vienkārÅ”a. Balstoties uz mÅ«su pieredzi, pāris stundas pēc iepazÄ«Å”anās ar to cilvēki sāk rakstÄ«t kodu, kas atrisina viņu problēmu. Un tie ir ne tikai profesionāli izstrādātāji, bet, piemēram, analÄ«tiÄ·i. Turklāt, pateicoties jit kompilatoram, Lua darbojas ļoti ātri.

glabāŔana

Krātuvē tiek glabāti pastāvÄ«gi dati. Pirms saglabāŔanas dati tiek pārbaudÄ«ti attiecÄ«bā pret datu shēmu. Lai aprakstÄ«tu ķēdi, mēs izmantojam paplaÅ”inātu formātu Apache Avro. Piemērs:

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

Pamatojoties uz Å”o aprakstu, DDL (datu definÄ«cijas valoda) tiek automātiski Ä£enerēta Tarantula DBVS un GraphQL datu piekļuves shēma.

Tiek atbalstīta asinhronā datu replikācija (ir plānots pievienot sinhrono).

Izvades procesors

Dažkārt ir nepiecieÅ”ams informēt ārējos patērētājus par jaunu datu ieraÅ”anos, Å”im nolÅ«kam ir izvades apstrādātāja loma. Pēc datu saglabāŔanas tos var nodot attiecÄ«gajam apstrādātājam (piemēram, lai tos nogādātu patērētāja pieprasÄ«tajā formā) un pēc tam nosÅ«tÄ«tu savienotājam nosÅ«tÄ«Å”anai. Å eit tiek izmantota arÄ« remonta rinda: ja neviens objektu nepieņēma, administrators vēlāk var mēģināt vēlreiz.

MērogoÅ”ana

Savienotāja, ievades procesora un izvades procesora lomas ir bezvalsts, ļaujot mums mērogot sistēmu horizontāli, vienkārÅ”i pievienojot jaunus lietojumprogrammu gadÄ«jumus ar iespējotu vēlamo lomu veidu. UzglabāŔana tiek izmantota horizontālai mērogoÅ”anai pieeja klastera organizÄ“Å”anai, izmantojot virtuālos spaiņus. Pēc jauna servera pievienoÅ”anas daļa no veco serveru paketēm tiek pārvietota uz jauno serveri fonā; tas notiek lietotājiem pārskatāmi un neietekmē visas sistēmas darbÄ«bu.

Datu rekvizīti

Objekti var bÅ«t ļoti lieli un saturēt citus objektus. Mēs nodroÅ”inām datu pievienoÅ”anas un atjaunināŔanas atomitāti, glabājot objektu ar visām atkarÄ«bām vienā virtuālajā spainÄ«. Tas novērÅ” objekta ā€œizplatÄ«Å”anuā€ vairākos fiziskos serveros.

VersionÄ“Å”ana tiek atbalstÄ«ta: katrs objekta atjauninājums rada jaunu versiju, un mēs vienmēr varam paņemt laika griezumu un redzēt, kā pasaule toreiz izskatÄ«jās. Datiem, kuriem nav nepiecieÅ”ama ilga vēsture, mēs varam ierobežot versiju skaitu vai pat saglabāt tikai vienu ā€” jaunāko ā€”, tas ir, bÅ«tÄ«bā atspējot versijas noteiktam tipam. Varat arÄ« ierobežot vēsturi pēc laika: piemēram, dzēst visus noteikta veida objektus, kas vecāki par 1 gadu. Tiek atbalstÄ«ta arÄ« arhivÄ“Å”ana: varam izlādēt objektus, kas vecāki par norādÄ«to laiku, atbrÄ«vojot vietu klasterÄ«.

uzdevumi

Starp interesantajām funkcijām ir vērts atzÄ«mēt iespēju palaist uzdevumus pēc grafika, pēc lietotāja pieprasÄ«juma vai programmatiski no smilÅ”kastes:

Tarantool Data Grid arhitektūra un iespējas

Å eit mēs redzam citu lomu ā€“ skrējēju. Å Ä« loma ir bezvalsts, un papildu lietojumprogrammu gadÄ«jumus ar Å”o lomu var pievienot klasterim pēc vajadzÄ«bas. Skrējēja pienākums ir izpildÄ«t uzdevumus. Kā jau minēts, no smilÅ”kastes ir iespējams Ä£enerēt jaunus uzdevumus; tie tiek saglabāti rindā uz krātuves un pēc tam izpildÄ«ti skrējienā. Šāda veida uzdevumus sauc par darbu. Mums ir arÄ« uzdevuma veids, ko sauc par uzdevumu ā€” tie ir lietotāja definēti uzdevumi, kas tiek izpildÄ«ti pēc grafika (izmantojot cron sintaksi) vai pēc pieprasÄ«juma. Lai palaistu un izsekotu Ŕādus uzdevumus, mums ir ērts uzdevumu pārvaldnieks. Lai Ŕī funkcionalitāte bÅ«tu pieejama, ir jāiespējo plānotāja loma; Å”ai lomai ir stāvoklis, tāpēc tā nemargojas, kas tomēr nav nepiecieÅ”ama; tajā paŔā laikā, tāpat kā visām pārējām lomām, tai var bÅ«t kopija, kas sāk darboties, ja meistars pēkŔņi atsakās.

Mežizstrādātājs

Vēl viena loma tiek saukta par mežizstrādātāju. Tas apkopo žurnālus no visiem klastera dalÄ«bniekiem un nodroÅ”ina saskarni to augÅ”upielādei un apskatei, izmantojot tÄ«mekļa saskarni.

Pakalpojumi

Ir vērts pieminēt, ka sistēma atvieglo pakalpojumu izveidi. Konfigurācijas failā varat norādÄ«t, kuri pieprasÄ«jumi tiek nosÅ«tÄ«ti lietotāja rakstÄ«tam apstrādātājam, kas darbojas smilÅ”kastē. Å ajā apdarinātājā varat, piemēram, palaist kāda veida analÄ«tisko vaicājumu un atgriezt rezultātu.

Pakalpojums ir aprakstīts konfigurācijas failā:

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

GraphQL API tiek Ä£enerēts automātiski, un pakalpojums kļūst pieejams zvanÄ«Å”anai:

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

Tas piezvanīs apstrādātājam sumkas atgriezīs rezultātu:

3

Vaicājumu profilÄ“Å”ana un metrika

Lai izprastu sistēmas darbÄ«bu un profilÄ“Å”anas pieprasÄ«jumus, mēs ieviesām atbalstu OpenTracing protokolam. Sistēma var nosÅ«tÄ«t informāciju pēc pieprasÄ«juma rÄ«kiem, kas atbalsta Å”o protokolu, piemēram, Zipkin, kas ļaus jums saprast, kā pieprasÄ«jums tika izpildÄ«ts:

Tarantool Data Grid arhitektūra un iespējas

Protams, sistēma nodroÅ”ina iekŔējos rādÄ«tājus, kurus var savākt, izmantojot Prometheus, un vizualizēt, izmantojot Grafana.

Izvietot

Tarantool Data Grid var izvietot no RPM pakotnēm vai arhÄ«va, izmantojot utilÄ«tu no izplatÄ«Å”anas vai Ansible, ir arÄ« atbalsts Kubernetes (Tarantool Kubernetes operators).

Lietojumprogramma, kas ievieÅ” biznesa loÄ£iku (konfigurācija, apstrādātāji), tiek ielādēta izvietotajā Tarantool Data Grid klasterÄ« arhÄ«va veidā, izmantojot lietotāja interfeisu vai izmantojot skriptu, izmantojot mÅ«su nodroÅ”ināto API.

Filozofijas pamati

Kādas lietojumprogrammas var izveidot, izmantojot Tarantool Data Grid? Faktiski lielākā daļa biznesa uzdevumu ir kaut kādā veidā saistÄ«ti ar datu apstrādi, uzglabāŔanu un piekļuvi datu plÅ«smai. Tāpēc, ja jums ir lielas datu straumes, kas ir droÅ”i jāuzglabā un kurām ir nepiecieÅ”ama piekļuve, mÅ«su produkts var ietaupÄ«t daudz laika izstrādei un koncentrēties uz jÅ«su biznesa loÄ£iku.

Piemēram, mēs vēlamies apkopot informāciju par nekustamā Ä«paÅ”uma tirgu, lai nākotnē, piemēram, bÅ«tu informācija par labākajiem piedāvājumiem. Å ajā gadÄ«jumā mēs izcelsim Ŕādus uzdevumus:

  1. Mūsu datu avoti būs roboti, kas apkopo informāciju no atvērtiem avotiem. Šo problēmu var atrisināt, izmantojot gatavus risinājumus vai rakstot kodu jebkurā valodā.
  2. Pēc tam Tarantool Data Grid pieņems un saglabās datus. Ja datu formāts no dažādiem avotiem atŔķiras, varat rakstÄ«t kodu Lua, kas veiks konvertÄ“Å”anu uz vienu formātu. Pirmsapstrādes posmā varēsiet arÄ«, piemēram, filtrēt dublētos piedāvājumus vai papildus datubāzē atjaunināt informāciju par aÄ£entiem, kas strādā tirgÅ«.
  3. Tagad jums jau ir mērogojams risinājums klasterÄ«, ko var aizpildÄ«t ar datiem un veikt datu atlasi. Pēc tam var ieviest jaunu funkcionalitāti, piemēram, uzrakstÄ«t servisu, kas veiks datu pieprasÄ«jumu un sniegs izdevÄ«gāko piedāvājumu dienā ā€“ tam bÅ«s nepiecieÅ”amas dažas rindiņas konfigurācijas failā un nedaudz Lua koda.

Ko tālāk?

MÅ«su prioritāte ir uzlabot izstrādes lietoÅ”anas vienkārŔību Tarantool datu režģis. Piemēram, Ŕī ir IDE ar atbalstu profilÄ“Å”anas un atkļūdoÅ”anas apstrādātājiem, kas darbojas smilÅ”kastē.

Lielu uzmanÄ«bu pievērÅ”am arÄ« droŔības jautājumiem. Å obrÄ«d mums tiek veikta Krievijas FSTEC sertifikācija, lai apstiprinātu augstu droŔības lÄ«meni un izpildÄ«tu personas datu informācijas sistēmās un valsts informācijas sistēmās izmantoto programmatÅ«ras produktu sertifikācijas prasÄ«bas.

Avots: www.habr.com

Pievieno komentāru