Pensaernïaeth a galluoedd Grid Data Tarantool

Pensaernïaeth a galluoedd Grid Data Tarantool

Yn 2017, fe wnaethom ennill cystadleuaeth i ddatblygu craidd trafodaethol busnes buddsoddi Alfa-Bank a dechrau gweithio (yn HighLoad++ 2018 gydag adroddiad ar graidd y busnes buddsoddi perfformio Vladimir Drynkin, pennaeth craidd trafodaethol busnes buddsoddi Alfa Bank). Roedd y system hon i fod i agregu data trafodion o wahanol ffynonellau mewn fformatau amrywiol, dod â'r data i ffurf unedig, ei storio a darparu mynediad iddo.

Yn ystod y broses ddatblygu, esblygodd y system a chaffael ymarferoldeb, ac ar ryw adeg sylweddolom ein bod yn crisialu rhywbeth llawer mwy na meddalwedd cymhwysiad yn unig a grëwyd i ddatrys ystod o dasgau a ddiffiniwyd yn llym: fe wnaethom lwyddo system ar gyfer adeiladu cymwysiadau dosbarthedig gyda storfa barhaus. Roedd y profiad a gawsom yn sail i gynnyrch newydd - Grid Data Tarantool (TDG).

Rwyf am siarad am bensaernïaeth TDG a'r atebion y daethom iddynt yn ystod y broses ddatblygu, eich cyflwyno i'r prif swyddogaeth a dangos sut y gall ein cynnyrch ddod yn sail ar gyfer adeiladu atebion cyflawn.

Yn bensaernïol, rhannwyd y system yn system ar wahân rolau, pob un ohonynt yn gyfrifol am ddatrys ystod benodol o broblemau. Mae un enghraifft o raglen redeg yn gweithredu un neu fwy o fathau o rolau. Gall fod sawl rôl o’r un math mewn clwstwr:

Pensaernïaeth a galluoedd Grid Data Tarantool

connector

Mae Connector yn gyfrifol am gyfathrebu â'r byd y tu allan; ei dasg yw derbyn y cais, ei ddosrannu, ac os bydd hyn yn llwyddo, yna anfon y data i'w brosesu i'r prosesydd mewnbwn. Rydym yn cefnogi fformatau HTTP, SOAP, Kafka, FIX. Mae'r bensaernïaeth yn caniatáu ichi ychwanegu cefnogaeth ar gyfer fformatau newydd yn unig, gyda chefnogaeth i IBM MQ yn dod yn fuan. Os methodd dosrannu'r cais, bydd y cysylltydd yn dychwelyd gwall; fel arall, bydd yn ymateb bod y cais wedi'i brosesu'n llwyddiannus, hyd yn oed os digwyddodd gwall yn ystod ei brosesu pellach. Gwnaethpwyd hyn yn benodol er mwyn gweithio gyda systemau nad ydynt yn gwybod sut i ailadrodd ceisiadau - neu, i'r gwrthwyneb, yn ei wneud yn rhy gyson. Er mwyn peidio â cholli data, defnyddir ciw atgyweirio: mae'r gwrthrych yn mynd i mewn iddo yn gyntaf a dim ond ar ôl i brosesu llwyddiannus gael ei dynnu ohono. Gall y gweinyddwr dderbyn rhybuddion am wrthrychau sy'n weddill yn y ciw atgyweirio, ac ar ôl dileu gwall meddalwedd neu fethiant caledwedd, ceisiwch eto.

Prosesydd mewnbwn

Mae'r prosesydd Mewnbwn yn dosbarthu'r data a dderbyniwyd yn ôl nodweddion nodweddiadol ac yn galw proseswyr priodol. Mae trinwyr yn god Lua sy'n rhedeg mewn blwch tywod, felly ni allant effeithio ar weithrediad y system. Ar yr adeg hon, gellir lleihau'r data i'r ffurf ofynnol, ac, os oes angen, gellir lansio nifer fympwyol o dasgau a all weithredu'r rhesymeg angenrheidiol. Er enghraifft, yn y cynnyrch MDM (Master Data Management) a adeiladwyd ar Tarantool Data Grid, wrth ychwanegu defnyddiwr newydd, er mwyn peidio ag arafu prosesu'r cais, rydym yn lansio creu cofnod euraidd fel tasg ar wahân. Mae'r blwch tywod yn cefnogi ceisiadau am ddarllen, newid ac ychwanegu data, yn caniatáu ichi gyflawni rhywfaint o swyddogaeth ar bob rôl o'r math o storfa a chydgrynhoi'r canlyniad (map / lleihau).

Gellir disgrifio trinwyr mewn ffeiliau:

sum.lua

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

Ac yna, wedi'i ddatgan yn y cyfluniad:

functions:
  sum: { __file: sum.lua }

Pam Lua? Mae Lua yn iaith syml iawn. Yn seiliedig ar ein profiad, ychydig oriau ar ôl dod i'w adnabod, mae pobl yn dechrau ysgrifennu cod sy'n datrys eu problem. Ac nid datblygwyr proffesiynol yn unig yw'r rhain, ond, er enghraifft, dadansoddwyr. Yn ogystal, diolch i'r casglwr jit, mae Lua yn rhedeg yn gyflym iawn.

storio

Mae storio yn storio data parhaus. Cyn cadw, caiff data ei ddilysu yn erbyn y sgema data. I ddisgrifio'r gylched rydym yn defnyddio fformat estynedig Apache Avro. Enghraifft:

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

Yn seiliedig ar y disgrifiad hwn, mae DDL (Iaith Diffinio Data) yn cael ei gynhyrchu'n awtomatig ar gyfer y Tarantula DBMS a GraffQL sgema ar gyfer mynediad at ddata.

Cefnogir atgynhyrchu data asyncronaidd (mae yna gynlluniau i ychwanegu un cydamserol).

Prosesydd allbwn

Weithiau mae angen hysbysu defnyddwyr allanol am ddyfodiad data newydd; at y diben hwn, mae rôl y prosesydd Allbwn. Ar ôl arbed y data, gellir ei drosglwyddo i'r triniwr cyfatebol (er enghraifft, i ddod ag ef i'r ffurflen sy'n ofynnol gan y defnyddiwr) - ac yna ei drosglwyddo i'r cysylltydd i'w anfon. Defnyddir ciw atgyweirio yma hefyd: os na fydd neb yn derbyn y gwrthrych, gall y gweinyddwr roi cynnig arall arni yn nes ymlaen.

Graddio

Mae rolau'r cysylltydd, y prosesydd mewnbwn a'r prosesydd allbwn yn ddi-wladwriaeth, sy'n ein galluogi i raddio'r system yn llorweddol trwy ychwanegu enghreifftiau cais newydd gyda'r math rôl dymunol wedi'i alluogi. Defnyddir storio ar gyfer graddio llorweddol dull gweithredu i drefnu clwstwr gan ddefnyddio bwcedi rhithwir. Ar ôl ychwanegu gweinydd newydd, mae rhai o'r bwcedi o'r hen weinyddion yn cael eu symud i'r gweinydd newydd yn y cefndir; mae hyn yn digwydd yn dryloyw i ddefnyddwyr ac nid yw'n effeithio ar weithrediad y system gyfan.

Priodweddau Data

Gall gwrthrychau fod yn fawr iawn a chynnwys gwrthrychau eraill. Rydym yn sicrhau atomigedd o ychwanegu a diweddaru data trwy storio gwrthrych gyda phob dibyniaeth mewn un bwced rhithwir. Mae hyn yn atal y gwrthrych rhag cael ei “ledaenu” ar draws sawl gweinydd ffisegol.

Cefnogir fersiynau: mae pob diweddariad o wrthrych yn creu fersiwn newydd, a gallwn bob amser gymryd tafell amser a gweld sut roedd y byd yn edrych bryd hynny. Ar gyfer data nad oes angen hanes hir arno, gallwn gyfyngu ar nifer y fersiynau neu hyd yn oed storio un yn unig - yr un diweddaraf - hynny yw, yn y bôn analluogi fersiynau ar gyfer math penodol. Gallwch hefyd gyfyngu'r hanes yn ôl amser: er enghraifft, dileu pob gwrthrych o fath penodol sy'n hŷn na blwyddyn. Cefnogir archifo hefyd: gallwn ddadlwytho gwrthrychau sy'n hŷn na'r amser penodedig, gan ryddhau lle yn y clwstwr.

tasgau

Ymhlith y nodweddion diddorol, mae'n werth nodi'r gallu i lansio tasgau ar amserlen, ar gais y defnyddiwr, neu'n rhaglennol o'r blwch tywod:

Pensaernïaeth a galluoedd Grid Data Tarantool

Yma gwelwn rôl arall - rhedwr. Mae’r rôl hon yn ddi-wladwriaeth, a gellir ychwanegu achosion cais ychwanegol gyda’r rôl hon at y clwstwr yn ôl yr angen. Cyfrifoldeb y rhedwr yw cwblhau tasgau. Fel y crybwyllwyd, mae'n bosibl cynhyrchu tasgau newydd o'r blwch tywod; maent yn cael eu cadw mewn ciw ar storio ac yna gweithredu ar y rhedwr. Gelwir y math hwn o dasg yn Job. Mae gennym hefyd fath o dasg o'r enw Tasg - mae'r rhain yn dasgau a ddiffinnir gan ddefnyddwyr sy'n rhedeg ar amserlen (gan ddefnyddio cystrawen cron) neu ar alw. I lansio ac olrhain tasgau o'r fath, mae gennym reolwr tasgau cyfleus. Er mwyn i'r swyddogaeth hon fod ar gael, rhaid i chi alluogi rôl yr amserlen; mae gan y rôl hon gyflwr, felly nid yw'n graddio, ond nid yw hynny'n ofynnol; ar yr un pryd, fel pob rôl arall, gall fod â replica sy'n dechrau gweithio os bydd y meistr yn gwrthod yn sydyn.

Logger

Gelwir rôl arall yn gofnodwr. Mae'n casglu logiau gan bob aelod o'r clwstwr ac yn darparu rhyngwyneb ar gyfer eu llwytho i fyny a'u gweld trwy'r rhyngwyneb gwe.

Gwasanaethau

Mae'n werth nodi bod y system yn ei gwneud hi'n hawdd creu gwasanaethau. Yn y ffeil ffurfweddu, gallwch chi nodi pa geisiadau sy'n cael eu hanfon at driniwr a ysgrifennwyd gan ddefnyddwyr sy'n rhedeg yn y blwch tywod. Yn y triniwr hwn, gallwch, er enghraifft, redeg rhyw fath o ymholiad dadansoddol a dychwelyd y canlyniad.

Disgrifir y gwasanaeth yn y ffeil ffurfweddu:

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

Mae'r API GraphQL yn cael ei gynhyrchu'n awtomatig a bydd y gwasanaeth ar gael i'w ffonio:

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

Bydd hyn yn galw'r triniwr suma fydd yn dychwelyd y canlyniad:

3

Proffilio Ymholiadau a Metrigau

Er mwyn deall gweithrediad y system a cheisiadau proffilio, fe wnaethom weithredu cefnogaeth ar gyfer protocol OpenTracing. Gall y system anfon gwybodaeth ar alw i offer sy'n cefnogi'r protocol hwn, megis Zipkin, a fydd yn caniatáu ichi ddeall sut y gweithredwyd y cais:

Pensaernïaeth a galluoedd Grid Data Tarantool

Yn naturiol, mae'r system yn darparu metrigau mewnol y gellir eu casglu gan ddefnyddio Prometheus a'u delweddu gan ddefnyddio Grafana.

Defnyddio

Gellir defnyddio Grid Data Tarantool o becynnau RPM neu archif, gan ddefnyddio cyfleustodau o'r dosbarthiad neu Ansible, mae cefnogaeth hefyd i Kubernetes (Gweithredwr Tarantool Kubernetes).

Mae'r cymhwysiad sy'n gweithredu'r rhesymeg busnes (cyfluniad, trinwyr) yn cael ei lwytho i mewn i'r clwstwr Grid Data Tarantool a ddefnyddir ar ffurf archif trwy'r UI neu gan ddefnyddio sgript trwy'r API a ddarperir gennym ni.

Ceisiadau Sampl

Pa gymwysiadau y gellir eu creu gan ddefnyddio Tarantool Data Grid? Mewn gwirionedd, mae'r rhan fwyaf o dasgau busnes rywsut yn ymwneud â phrosesu, storio a chael mynediad at lif data. Felly, os oes gennych chi ffrydiau mawr o ddata y mae angen eu storio a'u cyrchu'n ddiogel, yna gall ein cynnyrch arbed llawer o amser datblygu i chi a chanolbwyntio ar eich rhesymeg busnes.

Er enghraifft, rydym am gasglu gwybodaeth am y farchnad eiddo tiriog, fel y bydd gennym yn y dyfodol, er enghraifft, wybodaeth am y cynigion gorau. Yn yr achos hwn, byddwn yn tynnu sylw at y tasgau canlynol:

  1. Robotiaid sy'n casglu gwybodaeth o ffynonellau agored fydd ein ffynonellau data. Gallwch chi ddatrys y broblem hon gan ddefnyddio datrysiadau parod neu ysgrifennu cod mewn unrhyw iaith.
  2. Nesaf, bydd Tarantool Data Grid yn derbyn ac yn cadw'r data. Os yw'r fformat data o wahanol ffynonellau yn wahanol, yna gallwch chi ysgrifennu cod yn Lua a fydd yn cyflawni'r trosi i un fformat. Yn y cam cyn-brosesu, byddwch hefyd yn gallu, er enghraifft, hidlo cynigion dyblyg neu hefyd ddiweddaru gwybodaeth am asiantau sy'n gweithio yn y farchnad yn y gronfa ddata.
  3. Nawr mae gennych chi ddatrysiad graddadwy eisoes mewn clwstwr y gellir ei lenwi â data a gwneud dewisiadau data. Yna gallwch chi weithredu swyddogaeth newydd, er enghraifft, ysgrifennu gwasanaeth a fydd yn gwneud cais am ddata ac yn rhoi'r cynnig mwyaf manteisiol y dydd - bydd hyn yn gofyn am ychydig o linellau yn y ffeil ffurfweddu ac ychydig o god Lua.

Beth sydd nesaf?

Ein blaenoriaeth yw gwella rhwyddineb defnydd datblygu Grid Data Tarantool. Er enghraifft, mae hwn yn DRhA gyda chefnogaeth ar gyfer proffilio a dadfygio trinwyr sy'n rhedeg mewn blwch tywod.

Rydym hefyd yn talu sylw mawr i faterion diogelwch. Ar hyn o bryd rydym yn cael ardystiad gan FSTEC o Rwsia i gadarnhau'r lefel uchel o ddiogelwch a bodloni'r gofynion ar gyfer ardystio cynhyrchion meddalwedd a ddefnyddir mewn systemau gwybodaeth data personol a systemau gwybodaeth y llywodraeth.

Ffynhonnell: hab.com

Ychwanegu sylw