Tarantool Data Grid-en arkitektura eta gaitasunak

Tarantool Data Grid-en arkitektura eta gaitasunak

2017an, Alfa-Banken inbertsio-negozioaren transakzio-muina garatzeko lehiaketa irabazi genuen eta lanean hasi ginen (HighLoad++ 2018-n inbertsio-negozioaren muinari buruzko txosten batekin antzeztua Vladimir Drynkin, Alfa Bankuko inbertsio negozioaren muin transakzionalaren burua). Sistema honek iturri ezberdinetako transakzio-datuak hainbat formatutan bildu behar zituen, datuak forma bateratu batera eraman, gorde eta sarbidea eman behar zuen.

Garapen-prozesuan zehar, sistemak eboluzionatu eta funtzionaltasuna lortu zuen, eta noizbait konturatu ginen zorrozki definitutako zeregin sorta bat konpontzeko sortutako aplikazio-softwarea baino zerbait gehiago kristalizatzen ari ginela: lortu genuen. biltegiratze iraunkorreko aplikazio banatuak eraikitzeko sistema. Lortutako esperientzia produktu berri baten oinarria izan zen - Tarantool Datuen Sarea (TDG).

TDG arkitekturaz eta garapen prozesuan lortu ditugun soluzioei buruz hitz egin nahi dut, funtzionalitate nagusia aurkeztu eta gure produktua soluzio osoak eraikitzeko oinarri bihur daitekeen erakutsi.

Arkitektura aldetik, sistema bereizietan banatu dugu rolak, horietako bakoitza arazo sorta jakin bat ebazteaz arduratzen dena. Exekutatzen den aplikazio instantzia bakar batek rol mota bat edo gehiago inplementatzen ditu. Mota bereko hainbat rol egon daitezke kluster batean:

Tarantool Data Grid-en arkitektura eta gaitasunak

Connector

Connector kanpoko munduarekiko komunikazioaz arduratzen da; bere zeregina eskaera onartzea da, analizatzea eta honek arrakasta izanez gero, datuak prozesatzeko sarrerako prozesadoreari bidaltzea. HTTP, SOAP, Kafka, FIX formatuak onartzen ditugu. Arkitekturak formatu berrietarako euskarria gehitzeko aukera ematen du, IBM MQrako laguntza laster izango baita. Eskaera analizatzeak huts egin badu, konektoreak errore bat itzuliko du; bestela, eskaera behar bezala prozesatu dela erantzungo du, prozesatzean akatsen bat gertatu bada ere. Eskaerak errepikatzen ez dakiten sistemekin lan egiteko –edo, aitzitik, iraunkorregia– lan egiteko egin zen hori. Datuak ez galtzeko, konponketa-ilara bat erabiltzen da: objektua lehenik bertan sartzen da eta prozesaketa arrakastatsua kendu ondoren bakarrik. Administratzaileak konponketa-ilaran geratzen diren objektuei buruzko alertak jaso ditzake, eta software-akats bat edo hardware-akats bat kendu ondoren, saiatu berriro.

Sarrerako prozesadorea

Sarrera-prozesadoreak jasotako datuak ezaugarrien arabera sailkatzen ditu eta prozesadore egokiak deitzen ditu. Kudeatzaileak sandbox batean exekutatzen diren Lua kodea dira, beraz, ezin dute sistemaren funtzionamenduan eragin. Fase honetan, datuak behar den formara murriztu daitezke, eta, behar izanez gero, beharrezko logika ezar dezaketen ataza kopuru arbitrarioa abiarazi daiteke. Adibidez, Tarantool Data Grid-en eraikitako MDM (Master Data Management) produktuan, erabiltzaile berri bat gehitzean, eskaeraren prozesamendua ez moteltzeko, urrezko disko bat sortzea abiarazten dugu aparteko zeregin gisa. Sandbox-ek datuak irakurtzeko, aldatzeko eta gehitzeko eskaerak onartzen ditu, biltegiratze motako rol guztietan eta emaitzaren agregazioan (mapatu/murriztu) funtzio batzuk egiteko aukera ematen du.

Kudeatzaileak fitxategietan deskriba daitezke:

sum.lua

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

Eta gero, konfigurazioan deklaratua:

functions:
  sum: { __file: sum.lua }

Zergatik Lua? Lua hizkuntza oso sinplea da. Gure esperientzian oinarrituta, hura ezagutu eta ordu pare batera, jendea bere arazoa konpontzen duen kodea idazten hasten da. Eta hauek ez dira garatzaile profesionalak bakarrik, baizik eta, adibidez, analistak. Gainera, jit konpilatzaileari esker, Lua oso azkar exekutatzen da.

Biltegiratzea

Biltegiratzeak datu iraunkorrak gordetzen ditu. Gorde aurretik, datuak datu-eskemaren arabera balioztatzen dira. Zirkuitua deskribatzeko formatu hedatua erabiltzen dugu Apache Avro... Adibidea:

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

Deskribapen honetan oinarrituta, DDL (Data Definition Language) automatikoki sortzen da Tarantula DBMSrako eta GraphQL datuak sartzeko eskema.

Datuen erreplikazio asinkronoa onartzen da (sinkronoa gehitzeko planak daude).

Irteerako prozesadorea

Batzuetan beharrezkoa da kanpoko kontsumitzaileei datu berrien etorreraren berri ematea; horretarako, Irteera prozesadorearen rola dago. Datuak gorde ondoren, dagokion kudeatzailera pasa daitezke (adibidez, kontsumitzaileak eskatzen duen formulariora ekartzeko) eta gero konektorera pasa daitezke bidaltzeko. Konponketa-ilara bat ere erabiltzen da hemen: inork ez badu objektua onartzen, administratzaileak berriro saia daiteke geroago.

Eskalatzea

Konektorea, sarrera-prozesadorea eta irteera-prozesadorearen rolak estaturik gabekoak dira, eta sistema horizontalki eskalatzeko aukera ematen digu, nahi den rol mota gaituta duten aplikazio-instantzia berriak gehituz. Biltegiratzea eskala horizontalerako erabiltzen da planteamendu kubo birtualak erabiliz kluster bat antolatzeko. Zerbitzari berri bat gehitu ondoren, zerbitzari zaharretako kubo batzuk atzeko planoko zerbitzari berrira mugitzen dira; hori gardentasunez gertatzen zaie erabiltzaileei eta ez die eragiten sistema osoaren funtzionamenduari.

Datuen propietateak

Objektuak oso handiak izan daitezke eta beste objektu batzuk eduki ditzakete. Datuak gehitzeko eta eguneratzeko atomotasuna bermatzen dugu mendekotasun guztiak dituen objektu bat ontzi birtual batean gordez. Horrek objektua hainbat zerbitzari fisikotan "zabaltzea" saihesten du.

Bertsioa onartzen da: objektu baten eguneratze bakoitzak bertsio berri bat sortzen du, eta beti hartu dezakegu denbora zati bat eta ikusi nola zegoen orduan mundua. Historia luzea behar ez duten datuetarako, bertsio-kopurua mugatu edo bakarra gorde dezakegu -azkena-, hau da, funtsean, mota jakin baterako bertsioa desgaitu. Historia denboraren arabera ere muga dezakezu: adibidez, ezabatu urtebete baino zaharragoak diren mota jakin bateko objektu guztiak. Artxibatzea ere onartzen da: zehaztutako denbora baino zaharragoak diren objektuak deskargatu ditzakegu, klusterrean lekua askatuz.

zereginak

Ezaugarri interesgarrien artean, azpimarratzekoa da zereginak ordutegi batean abiarazteko gaitasuna, erabiltzaileak eskatuta edo programatikoki sandbox-etik:

Tarantool Data Grid-en arkitektura eta gaitasunak

Hemen beste rol bat ikusten dugu - korrikalaria. Rol hau estaturik gabekoa da, eta rol hori duten aplikazio-instantzia gehigarriak gehi daitezke behar izanez gero klusterrean. Lasterkariaren ardura zereginak burutzea da. Esan bezala, posible da sandboxetik zeregin berriak sortzea; biltegian ilara batean gordetzen dira eta gero korrikalarian exekutatzen dira. Zeregin mota honi Job deitzen zaio. Task izeneko zeregin mota bat ere badugu - erabiltzaileak zehaztutako zereginak dira programazio batean (cron sintaxia erabiliz) edo eskaeraren arabera exekutatzen direnak. Horrelako zereginak abiarazteko eta jarraipena egiteko, zereginen kudeatzaile erosoa dugu. Funtzionalitate hau erabilgarri egon dadin, programatzaile rola gaitu behar duzu; rol horrek egoera bat du, beraz, ez du eskalatzen, eta hori, ordea, ez da beharrezkoa; aldi berean, gainerako rol guztiek bezala, maisuak bat-batean uko egiten badu funtzionatzen hasten den erreplika izan dezake.

erregistroaren

Beste rol bat logger deitzen da. Klusterreko kide guztien erregistroak biltzen ditu eta web interfazearen bidez kargatu eta ikusteko interfaze bat eskaintzen du.

Zerbitzuak

Aipatzekoa da sistemak zerbitzuak sortzea errazten duela. Konfigurazio fitxategian, sandbox-ean exekutatzen den erabiltzaileak idatzitako kudeatzaile bati zein eskaera bidaltzen zaizkion zehaztu dezakezu. Kudeatzaile honetan, adibidez, nolabaiteko kontsulta analitiko bat exekutatu eta emaitza itzul dezakezu.

Zerbitzua konfigurazio fitxategian deskribatzen da:

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

GraphQL APIa automatikoki sortzen da eta zerbitzua deitzeko erabilgarri egongo da:

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

Honek kudeatzaileari deituko dio sumhorrek emaitza itzuliko du:

3

Kontsulten profila eta neurketak

Sistemaren funtzionamendua eta profilak egiteko eskaerak ulertzeko, OpenTracing protokoloaren euskarria ezarri dugu. Sistemak eskaerari buruzko informazioa bidal diezaieke protokolo hau onartzen duten tresnei, hala nola Zipkin, eskaera nola gauzatu den ulertzeko:

Tarantool Data Grid-en arkitektura eta gaitasunak

Jakina, sistemak Prometheus erabiliz bildu eta Grafana erabiliz ikus daitezkeen barne-neurriak eskaintzen ditu.

Zabaldu

Tarantool Data Grid RPM paketeetatik edo artxibo batetik inplementa daiteke, banaketa edo Ansible-ren erabilgarritasun bat erabiliz, Kubernetes-en laguntza ere badago (Tarantool Kubernetes Operadorea).

Negozio-logika inplementatzen duen aplikazioa (konfigurazioa, kudeatzaileak) zabaldutako Tarantool Data Grid klusterean kargatzen da artxibo moduan UI bidez edo guk emandako APIaren bidez script bat erabiliz.

Aplikazio laginak

Zer aplikazio sor daitezke Tarantool Data Grid erabiliz? Izan ere, negozio-zeregin gehienak datu-fluxua prozesatu, biltegiratu eta sartzearekin lotuta daude nolabait. Hori dela eta, segurtasunez gorde eta atzitu behar diren datu-korronte handiak badituzu, gure produktuak garapen-denbora asko aurreztuko dizu eta zure negozio-logikan zentratu.

Esaterako, higiezinen merkatuari buruzko informazioa bildu nahi dugu, etorkizunean, adibidez, eskaintza onenei buruzko informazioa edukitzeko. Kasu honetan, zeregin hauek nabarmenduko ditugu:

  1. Iturburu irekietatik informazioa biltzen duten robotak izango dira gure datu iturriak. Arazo hau prest dauden irtenbideak erabiliz edo edozein hizkuntzatan kodea idatziz konpondu dezakezu.
  2. Ondoren, Tarantool Data Grid-ek datuak onartu eta gordeko ditu. Iturri ezberdinetako datuen formatua desberdina bada, formatu bakarrean bihurtzea egingo duen kodea idatzi dezakezu Lua-n. Aurrez prozesatzeko fasean, adibidez, eskaintza bikoiztuak iragazteko edo merkatuan lan egiten duten agenteei buruzko informazioa datu-basean eguneratzeko aukera ere izango duzu.
  3. Orain jada badaukazu soluzio eskalagarri bat datuz bete eta datu-hautaketak egin daitezkeen kluster batean. Ondoren, funtzionalitate berriak inplementatu ditzakezu, adibidez, datu-eskaera bat egingo duen zerbitzu bat idatzi eta eguneko eskaintzarik onuragarriena emango du - honek konfigurazio fitxategian lerro batzuk eta Lua kode apur bat beharko ditu.

Zer da hurrengoa?

Gure lehentasuna garatzeko erraztasuna hobetzea da Tarantool Datuen Sarea. Adibidez, sandbox batean exekutatzen diren profilak eta arazketa-kudeatzaileak onartzen dituen IDE bat da.

Segurtasun arazoei ere arreta handia jartzen diegu. Oraintxe bertan Errusiako FSTEC-en ziurtagiria egiten ari gara segurtasun maila altua berresteko eta datu pertsonalen informazio sistemetan eta gobernuko informazio sistemetan erabiltzen diren software produktuen ziurtapen baldintzak betetzeko.

Iturria: www.habr.com

Gehitu iruzkin berria