Arkitektúr og getu Tarantool Data Grid

Arkitektúr og getu Tarantool Data Grid

Árið 2017 unnum við samkeppni um þróun viðskiptakjarna í fjárfestingarstarfsemi Alfa-Bank og hófum störf (á HighLoad++ 2018 með skýrslu um kjarna fjárfestingarstarfseminnar talaði Vladimir Drynkin, yfirmaður viðskiptakjarna fjárfestingarviðskipta Alfa banka). Þetta kerfi átti að safna saman viðskiptagögnum frá mismunandi aðilum á ýmsum sniðum, koma gögnunum í sameinað form, geyma þau og veita aðgang að þeim.

Í þróunarferlinu þróaðist kerfið og öðlaðist virkni og á einhverjum tímapunkti áttuðum við okkur á því að við vorum að kristalla eitthvað miklu meira en bara forritahugbúnað sem var búinn til til að leysa strangt afmarkað verkefnasvið: okkur tókst það. kerfi til að byggja dreifð forrit með viðvarandi geymslu. Reynslan sem við fengum var grundvöllur nýrrar vöru - Tarantool Data Grid (TDG).

Mig langar að tala um TDG arkitektúrinn og þær lausnir sem við komum að í þróunarferlinu, kynna ykkur helstu virknina og sýna hvernig varan okkar getur orðið grunnurinn að því að byggja heildarlausnir.

Byggingarfræðilega skiptum við kerfinu í aðskilda hlutverkum, sem hver um sig ber ábyrgð á að leysa ákveðin vandamál. Eitt forritatilvik í gangi útfærir eina eða fleiri hlutverkagerðir. Það geta verið mörg hlutverk af sömu gerð í þyrping:

Arkitektúr og getu Tarantool Data Grid

tengi

Connector ber ábyrgð á samskiptum við umheiminn; verkefni þess er að samþykkja beiðnina, flokka hana og ef það tekst, senda síðan gögnin til vinnslu til inntaksvinnsluaðilans. Við styðjum HTTP, SOAP, Kafka, FIX snið. Arkitektúrinn gerir þér kleift að bæta við stuðningi við ný snið, með stuðningi við IBM MQ á næstunni. Ef þáttun beiðninnar mistókst mun tengilinn skila villu; annars mun það svara því að beiðnin hafi verið afgreidd með góðum árangri, jafnvel þótt villa hafi komið upp við frekari vinnslu hennar. Þetta var sérstaklega gert til að vinna með kerfi sem kunna ekki að endurtaka beiðnir - eða þvert á móti gera það of þrálátlega. Til að tapa ekki gögnum er viðgerðarröð notuð: hluturinn kemst fyrst inn í hana og aðeins eftir árangursríka vinnslu er fjarlægður úr honum. Kerfisstjórinn getur fengið tilkynningar um hluti sem eru eftir í viðgerðarröðinni og eftir að hafa útrýmt hugbúnaðarvillu eða vélbúnaðarbilun skaltu reyna aftur.

Inntaks örgjörvi

Inntaksörgjörvi flokkar móttekin gögn eftir einkennandi eiginleikum og kallar til viðeigandi örgjörva. Handlerar eru Lua kóða sem keyrir í sandkassa, svo þeir geta ekki haft áhrif á virkni kerfisins. Á þessu stigi er hægt að minnka gögnin í tilskilið form og, ef nauðsyn krefur, er hægt að ræsa handahófskenndan fjölda verkefna sem geta innleitt nauðsynlega rökfræði. Til dæmis, í MDM (Master Data Management) vörunni sem er byggð á Tarantool Data Grid, þegar nýr notandi er bætt við, til að hægja ekki á vinnslu beiðninnar, ræsum við stofnun gullna skráar sem sérstakt verkefni. Sandkassinn styður beiðnir um að lesa, breyta og bæta við gögnum, gerir þér kleift að framkvæma einhverja aðgerð á öllum hlutverkum geymslutegundarinnar og samansöfnun niðurstöðunnar (korta/minnka).

Hægt er að lýsa meðhöndlum í skrám:

sum.lua

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

Og svo, lýst yfir í uppsetningunni:

functions:
  sum: { __file: sum.lua }

Af hverju Lua? Lua er mjög einfalt tungumál. Byggt á reynslu okkar, nokkrum klukkustundum eftir að hafa kynnst því, byrjar fólk að skrifa kóða sem leysir vandamál þeirra. Og þetta eru ekki aðeins fagmenn, heldur til dæmis sérfræðingar. Að auki, þökk sé jit þýðandanum, keyrir Lua mjög hratt.

Geymsla

Geymsla geymir viðvarandi gögn. Áður en þau eru vistuð eru gögn staðfest gegn gagnaskemanu. Til að lýsa hringrásinni notum við útvíkkað snið Apache Avro. Dæmi:

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

Byggt á þessari lýsingu er DDL (Data Definition Language) sjálfkrafa búið til fyrir Tarantula DBMS og GraphQL skema fyrir gagnaaðgang.

Ósamstilltur gagnaafritun er studd (það eru áform um að bæta við samstilltri afritun).

Úttaks örgjörvi

Stundum er nauðsynlegt að tilkynna utanaðkomandi neytendum um komu nýrra gagna; í því skyni er það hlutverk framleiðsluvinnsluaðila. Eftir að gögnin hafa verið vistuð er hægt að senda þau til samsvarandi meðhöndlunar (til dæmis til að koma þeim í það form sem neytandinn krefst) - og síðan send til tengisins til sendingar. Viðgerðarröð er einnig notuð hér: ef enginn samþykkti hlutinn getur stjórnandinn reynt aftur síðar.

Skala

Hlutverkin tengi, inntaksörgjörva og úttaksörgjörva eru ríkisfangslaus, sem gerir okkur kleift að skala kerfið lárétt með því einfaldlega að bæta við nýjum forritatilvikum með viðeigandi hlutverkagerð virka. Geymsla er notuð fyrir lárétta mælingu nálgun að skipuleggja klasa með sýndarfötum. Eftir að nýjum miðlara hefur verið bætt við eru sumir fötu frá gömlu netþjónunum færðir á nýja netþjóninn í bakgrunni; þetta gerist gagnsætt fyrir notendur og hefur ekki áhrif á rekstur alls kerfisins.

Gagnaeiginleikar

Hlutir geta verið mjög stórir og innihaldið aðra hluti. Við tryggjum atómvirkni við að bæta við og uppfæra gögn með því að geyma hlut með öllum ósjálfstæðum í einni sýndarfötu. Þetta kemur í veg fyrir að hluturinn sé „dreifður“ yfir nokkra líkamlega netþjóna.

Útgáfuútgáfa er studd: hver uppfærsla á hlut skapar nýja útgáfu og við getum alltaf tekið tíma og séð hvernig heimurinn leit út þá. Fyrir gögn sem þurfa ekki langa sögu, getum við takmarkað fjölda útgáfur eða jafnvel geymt eina - þá nýjustu - það er í raun og veru slökkt á útgáfu fyrir ákveðna tegund. Þú getur líka takmarkað ferilinn eftir tíma: til dæmis, eyða öllum hlutum af ákveðinni gerð eldri en 1 árs. Skjalavistun er einnig studd: við getum losað hluti sem eru eldri en tilgreindur tími og losað um pláss í þyrpingunni.

verkefni

Meðal áhugaverðra eiginleika er þess virði að taka fram hæfileikann til að ræsa verkefni á áætlun, að beiðni notandans eða forritunarlega úr sandkassanum:

Arkitektúr og getu Tarantool Data Grid

Hér sjáum við annað hlutverk - hlaupari. Þetta hlutverk er ríkisfangslaust og hægt er að bæta fleiri forritstilvikum með þessu hlutverki við þyrpinguna eftir þörfum. Ábyrgð hlauparans er að klára verkefni. Eins og fram hefur komið er hægt að búa til ný verkefni úr sandkassanum; þær eru vistaðar í biðröð á geymslu og síðan keyrðar á hlauparann. Þessi tegund af verkefnum er kölluð Job. Við erum líka með verkefnategund sem heitir Task - þetta eru notendaskilgreind verkefni sem keyra samkvæmt áætlun (með því að nota cron setningafræði) eða eftir beiðni. Til að ræsa og fylgjast með slíkum verkefnum höfum við þægilegan verkefnastjóra. Til þess að þessi virkni sé tiltæk verður þú að virkja tímaáætlunarhlutverkið; þetta hlutverk hefur ástand, svo það mælist ekki, sem þó er ekki krafist; á sama tíma, eins og öll önnur hlutverk, getur það haft eftirmynd sem byrjar að virka ef húsbóndinn neitar skyndilega.

Skógarhöggsmaður

Annað hlutverk er kallað skógarhöggsmaður. Það safnar annálum frá öllum meðlimum klasans og býður upp á viðmót til að hlaða upp og skoða þær í gegnum vefviðmótið.

Þjónusta

Þess má geta að kerfið gerir það auðvelt að búa til þjónustu. Í stillingarskránni er hægt að tilgreina hvaða beiðnir eru sendar til notendaskrifaðs meðhöndlunar sem keyrir í sandkassanum. Í þessum meðhöndlun geturðu til dæmis keyrt einhvers konar greiningarfyrirspurn og skilað niðurstöðunni.

Þjónustunni er lýst í stillingarskránni:

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

GraphQL API er búið til sjálfkrafa og þjónustan verður tiltæk til að hringja í:

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

Þetta mun kalla á stjórnandann sumsem mun skila niðurstöðunni:

3

Fyrirspurnarsnið og mæligildi

Til að skilja virkni kerfisins og prófílbeiðnir innleiddum við stuðning við OpenTracing samskiptareglur. Kerfið getur sent upplýsingar eftir beiðni til verkfæra sem styðja þessa samskiptareglu, eins og Zipkin, sem gerir þér kleift að skilja hvernig beiðnin var framkvæmd:

Arkitektúr og getu Tarantool Data Grid

Auðvitað veitir kerfið innri mælikvarða sem hægt er að safna með Prometheus og sjá með Grafana.

Dreifa

Tarantool Data Grid er hægt að dreifa úr RPM pakka eða skjalasafni, með því að nota tól frá dreifingunni eða Ansible, það er líka stuðningur fyrir Kubernetes (Tarantool Kubernetes rekstraraðili).

Forritið sem útfærir viðskiptarökfræðina (stillingar, meðhöndlarar) er hlaðið inn í uppsetta Tarantool Data Grid þyrpinguna í formi skjalasafns í gegnum notendaviðmótið eða með því að nota handrit í gegnum API sem okkur er veitt.

Dæmi um umsóknir

Hvaða forrit er hægt að búa til með Tarantool Data Grid? Reyndar eru flest viðskiptaverkefni á einhvern hátt tengd vinnslu, geymslu og aðgangi að gagnaflæði. Þess vegna, ef þú ert með stóra strauma af gögnum sem þarf að geyma og nálgast á öruggan hátt, þá getur varan okkar sparað þér mikinn þróunartíma og einbeitt þér að rökfræði fyrirtækisins.

Við viljum til dæmis safna upplýsingum um fasteignamarkaðinn þannig að í framtíðinni munum við til dæmis hafa upplýsingar um bestu tilboðin. Í þessu tilviki munum við leggja áherslu á eftirfarandi verkefni:

  1. Vélmenni sem safna upplýsingum frá opnum heimildum verða gagnagjafar okkar. Þú getur leyst þetta vandamál með því að nota tilbúnar lausnir eða skrifa kóða á hvaða tungumáli sem er.
  2. Næst mun Tarantool Data Grid samþykkja og vista gögnin. Ef gagnasniðið frá mismunandi aðilum er öðruvísi, þá geturðu skrifað kóða í Lua sem mun framkvæma umbreytinguna í eitt snið. Á forvinnslustigi muntu einnig geta, til dæmis, síað tvítekin tilboð eða uppfært að auki upplýsingar um umboðsmenn sem starfa á markaðnum í gagnagrunninum.
  3. Nú ertu nú þegar með skalanlega lausn í klasa sem hægt er að fylla með gögnum og gera gagnaval. Síðan geturðu innleitt nýja virkni, til dæmis skrifað þjónustu sem gerir beiðni um gögn og gefur hagstæðasta tilboðið á dag - til þess þarf nokkrar línur í stillingarskránni og smá Lua kóða.

Hvað er næst?

Forgangsverkefni okkar er að bæta auðvelda þróun með því að nota Tarantool Data Grid. Til dæmis er þetta IDE með stuðningi fyrir prófílgreiningar- og villuleit sem keyra í sandkassa.

Við leggjum einnig mikla áherslu á öryggismál. Núna erum við að gangast undir vottun frá FSTEC í Rússlandi til að staðfesta hátt öryggisstig og uppfylla kröfur um vottun hugbúnaðarvara sem notuð eru í persónuupplýsingakerfum og upplýsingakerfum stjórnvalda.

Heimild: www.habr.com

Bæta við athugasemd