Architettura è capacità di Tarantool Data Grid

Architettura è capacità di Tarantool Data Grid

In u 2017, avemu vintu un cuncorsu per sviluppà u core transazionale di l'affari d'investimentu di Alfa-Bank è hà cuminciatu à travaglià (in HighLoad++ 2018 cun un rapportu nantu à u core di l'affari d'investimentu). parlava Vladimir Drynkin, capu di u core transazionale di l'affari d'investimentu di Alfa Bank). Stu sistema duverebbe aggregate e dati di transazzione da diverse fonti in diversi formati, portanu e dati in una forma unificata, almacenà è furnisce l'accessu.

Duranti u prucessu di sviluppu, u sistema hà evolutu è hà acquistatu funziunalità, è à un certu puntu avemu capitu chì cristallizzavamu qualcosa assai più cà solu software di applicazione creatu per risolve una gamma di attività strettamente definita: avemu riesciutu. sistema per custruisce applicazioni distribuite cù almacenamiento persistente. L'esperienza chì avemu acquistatu hà furmatu a basa di un novu pruduttu - Tarantool Data Grid (TDG).

Vogliu parlà di l'architettura TDG è di e suluzioni chì avemu ghjuntu durante u prucessu di sviluppu, intruduce à e funziunalità principali è dimustrà cumu u nostru pruduttu pò diventà a basa per custruisce suluzioni cumplette.

Architecturally, avemu divisu u sistema in separati roli, chì ognunu hè rispunsevuli di risolve una certa gamma di prublemi. Una sola istanza di applicazione in esecuzione implementa unu o più tipi di rolu. Ci ponu esse parechji roli di u listessu tipu in un cluster:

Architettura è capacità di Tarantool Data Grid

lînia

Connector hè rispunsevule per a cumunicazione cù u mondu esternu; u so compitu hè di accettà a dumanda, analizà, è s'ellu hè successu, dopu mandà i dati per u processu à u processatore di input. Supportemu i formati HTTP, SOAP, Kafka, FIX. L'architettura permette solu di aghjunghje supportu per novi formati, cù supportu per IBM MQ prestu prestu. Se l'analisi di a dumanda falluta, u connettore restituverà un errore; altrimenti, risponderà chì a dumanda hè stata trattata bè, ancu s'ellu hè accadutu un errore durante u so prucessu ulteriore. Questu hè statu fattu specificamente per travaglià cù sistemi chì ùn sanu micca cumu ripetiri e dumande - o, à u cuntrariu, fate troppu persistente. Per ùn perde micca e dati, una fila di riparazione hè aduprata: l'ughjettu entra prima in questu è solu dopu à u prucessu successu hè eliminatu da ellu. L'amministratore pò riceve alerti nantu à l'uggetti chì restanu in a fila di riparazione, è dopu avè eliminatu un errore di software o fallimentu hardware, pruvate di novu.

Processore di input

U processatore Input classifica i dati ricevuti secondu e caratteristiche caratteristiche è chjama i processori appropritati. Handlers sò codice Lua chì corre in un sandbox, tantu ch'elli ùn pò affettanu u funziunamentu di u sistema. In questu stadiu, i dati ponu esse ridotti à a forma necessaria, è, se ne necessariu, un numeru arbitrariu di travaglii pò esse lanciatu chì ponu implementà a logica necessaria. Per esempiu, in u pruduttu MDM (Master Data Management) custruitu nantu à Tarantool Data Grid, quandu aghjunghje un novu utilizatore, per ùn rallentà u processu di a dumanda, lanciamu a creazione di un record d'oru cum'è un compitu separatu. U sandbox supporta e dumande per leghje, cambià è aghjunghje dati, vi permette di fà qualchì funzione nantu à tutti i roli di u tipu d'almacenamiento è l'aggregazione di u risultatu (mappa / riduzzione).

I gestori ponu esse descritti in i schedari:

sum.lua

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

È dopu, dichjaratu in a cunfigurazione:

functions:
  sum: { __file: sum.lua }

Perchè Lua? Lua hè una lingua assai simplice. Basatu nantu à a nostra sperienza, un coppiu d'ore dopu avè cunnisciutu, a ghjente principia à scrive codice chì risolve u so prublema. È questi ùn sò micca solu sviluppatori prufessiunali, ma, per esempiu, analisti. Inoltre, grazia à u compilatore jit, Lua corre assai rapidamente.

Storage

L'almacenamiento conserva dati persistenti. Prima di salvà, i dati sò cunvalidati contru à u schema di dati. Per discrìviri u circuitu usemu un furmatu allargatu Apache Avro. Un esempiu:

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

Basatu nantu à sta descrizzione, DDL (Data Definition Language) hè generatu automaticamente per u DBMS Tarantula è GraphQL schema per l'accessu à i dati.

A replicazione di dati asincrona hè supportata (ci sò piani per aghjunghje una sincrona).

Processore di output

Calchì volta hè nicissariu à notificà i cunsumatori esterni circa l 'arrivu di novi dati per stu scopu, ci hè u rolu di prucissuri Output; Dopu avè salvatu i dati, pò esse passatu à u gestore currispundente (per esempiu, per purtalla à a forma dumandata da u cunsumadore) - è poi passate à u connector per mandà. Una fila di riparazione hè ancu usata quì: se nimu hà accettatu l'ughjettu, l'amministratore pò pruvà più tardi.

Scaling

I roli di u connettore, u processatore di input è u processatore di output sò senza statu, chì ci permettenu di scalà u sistema orizzontalmente semplicemente aghjunghjendu novi istanze di l'applicazione cù u tipu di rolu desideratu attivatu. L'almacenamiento hè utilizatu per a scala horizontale l'approcciu per urganizà un cluster cù buckets virtuali. Dopu aghjunghje un novu servitore, alcuni di i buckets da i vechji servitori sò spustati à u novu servitore in u fondu; questu succede in modu trasparente à l'utilizatori è ùn affetta micca u funziunamentu di tuttu u sistema.

Pruprietà di dati

L'uggetti ponu esse assai grande è cuntenenu altri oggetti. Asseguremu l'atomicità di aghjunghje è aghjurnà e dati almacenendu un ughjettu cù tutte e dipendenze in un bucket virtuale. Questu impedisce chì l'ughjettu "sparghje" in parechji servitori fisichi.

A versione hè supportata: ogni aghjurnamentu di un ughjettu crea una nova versione, è pudemu sempre piglià un pezzu di tempu è vede cumu u mondu pareva allora. Per i dati chì ùn anu micca bisognu di una longa storia, pudemu limità u numeru di versioni o ancu almacenà una sola - l'ultima - vale à dì, essenzialmente disattivà a versione per un certu tipu. Pudete ancu limità a storia per u tempu: per esempiu, sguassate tutti l'uggetti di un certu tipu di più di 1 annu. L'archiviazione hè ancu supportata: pudemu scaricà l'uggetti più vechji di u tempu specificatu, liberendu spaziu in u cluster.

fatti

Trà e caratteristiche interessanti, vale a pena nutà a capacità di lanciari compiti nantu à un calendariu, à a dumanda di l'utilizatori, o programaticamente da u sandbox:

Architettura è capacità di Tarantool Data Grid

Quì vedemu un altru rolu - runner. Stu rolu hè senza statu, è istanze di l'applicazione supplementari cù stu rolu pò esse aghjuntu à u cluster quantu necessariu. A rispunsabilità di u corridore hè di compie i travaglii. Comu diciatu, hè pussibule di generà novi travaglii da u sandbox; sò salvati in una fila nantu à u almacenamentu è dopu eseguite nantu à u corridore. Stu tipu di compitu hè chjamatu Job. Avemu ancu un tipu di compitu chjamatu Task - questi sò compiti definiti da l'utilizatori chì eseguite nantu à un schedariu (usendu sintassi cron) o nantu à dumanda. Per lancià è seguità tali compiti, avemu un gestore di compiti convenientu. Per chì sta funziunalità sia dispunibule, deve attivà u rolu di pianificatore; stu rolu hà un statu, perchè ùn scala micca, chì, però, ùn hè micca necessariu; à u listessu tempu, cum'è tutti l'altri roli, pò avè una replica chì principia à travaglià se u maestru ricusa di colpu.

Logger

Un altru rolu hè chjamatu logger. Raccoglie logs da tutti i membri di u cluster è furnisce una interfaccia per a carica è a visualizazione attraversu l'interfaccia web.

Servizi

Hè da nutà chì u sistema facilita a creazione di servizii. In u schedariu di cunfigurazione, pudete specificà quali richieste sò mandate à un gestore scrittu da l'utilizatori chì corre in u sandbox. In questu handler, pudete, per esempiu, eseguisce qualchì tipu di quistione analitica è rinvià u risultatu.

U serviziu hè descrittu in u schedariu di cunfigurazione:

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

L'API GraphQL hè generata automaticamente è u serviziu diventa dispunibule per chjamà:

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

Questu chjamarà u gestore sumchì restituverà u risultatu:

3

Query Profiling and Metrics

Per capisce u funziunamentu di u sistema è e dumande di prufilu, avemu implementatu supportu per u protocolu OpenTracing. U sistema pò mandà l'infurmazioni nantu à a dumanda à e strumenti chì supportanu stu protokollu, cum'è Zipkin, chì vi permetterà di capisce cumu a dumanda hè stata eseguita:

Architettura è capacità di Tarantool Data Grid

Naturalmente, u sistema furnisce metriche internu chì ponu esse raccolti cù Prometheus è visualizati cù Grafana.

Impulsà

Tarantool Data Grid pò esse implementatu da pacchetti RPM o un archiviu, utilizendu una utilità da a distribuzione o Ansible, ci hè ancu supportu per Kubernetes (Operatore di Tarantool Kubernetes).

L'applicazione chì implementa a logica cummerciale (configurazione, gestori) hè caricata in u cluster Tarantool Data Grid implementatu in forma di un archiviu attraversu l'UI o utilizendu un script attraversu l'API furnita da noi.

Applicazioni di mostra

Chì applicazioni ponu esse create usendu Tarantool Data Grid? In fatti, a maiò parte di i travaglii di l'affari sò in qualchì modu ligati à u processu, u almacenamentu è l'accessu à u flussu di dati. Dunque, sè vo avete grandi flussi di dati chì anu da esse guardatu in modu sicuru è accessu, allora u nostru pruduttu pò salvà assai tempu di sviluppu è fucalizza nantu à a vostra logica cummerciale.

Per esempiu, vulemu cullà infurmazione nantu à u mercatu immubiliare, cusì chì in u futuru, per esempiu, averemu infurmazione nantu à e migliori offerte. In questu casu, metteremu in risaltu i seguenti compiti:

  1. I robots chì recullanu infurmazioni da e fonti aperti seranu i nostri fonti di dati. Pudete risolve stu prublema cù suluzioni pronti o scrivite codice in ogni lingua.
  2. Dopu, Tarantool Data Grid accettà è salvà i dati. Sè u furmatu di dati da fonti differente hè differente, allura vi ponu scrive codice in Lua chì hà da fà a cunversione à una sola forma. À a fase di pre-processamentu, puderete ancu, per esempiu, filtrà offerte duplicate o aghjurnà ancu l'infurmazioni nantu à l'agenti chì travaglianu in u mercatu in a basa di dati.
  3. Avà avete digià una suluzione scalabile in un cluster chì pò esse pienu di dati è fà selezzione di dati. Allora pudete implementà una nova funziunalità, per esempiu, scrivite un serviziu chì farà una dumanda di dati è dà l'offerta più vantaghju per ghjornu - questu serà bisognu di uni pochi di linii in u schedariu di cunfigurazione è un pocu codice Lua.

Chi c'è vicinu?

A nostra priorità hè di migliurà a facilità di sviluppu cù l'usu Tarantool Data Grid. Per esempiu, questu hè un IDE cù supportu per i gestori di profiling è debugging in esecuzione in un sandbox.

Prestemu ancu una grande attenzione à i prublemi di sicurità. Avà, simu sottumessi a certificazione da FSTEC di Russia per cunfirmà l'altu livellu di sicurità è risponde à i requisiti per a certificazione di i prudutti di software utilizati in sistemi d'infurmazione di dati persunali è sistemi d'infurmazione di u guvernu.

Source: www.habr.com

Add a comment