Arsitéktur sarta kamampuhan Tarantool Data Grid

Arsitéktur sarta kamampuhan Tarantool Data Grid

Dina 2017, urang meunang kompetisi pikeun ngembangkeun inti transactional tina bisnis investasi Alfa-Bank sarta mimiti digawé (dina HighLoad ++ 2018 kalawan laporan ngeunaan inti bisnis investasi. dipigawé Vladimir Drynkin, kapala inti transactional tina bisnis investasi Alfa Bank). Sistim ieu sakuduna dituju pikeun ngumpulkeun data transaksi tina sumber béda dina sagala rupa format, mawa data kana formulir ngahiji, nyimpen eta sarta nyadiakeun aksés ka dinya.

Salila prosés pamekaran, sistem mekar sareng ngagaduhan fungsionalitas, sareng dina sababaraha waktos urang sadar yén kami ngakristalkeun hal anu langkung seueur tibatan parangkat lunak aplikasi anu diciptakeun pikeun ngabéréskeun sajumlah tugas anu didefinisikeun sacara ketat: kami suksés. Sistem pikeun ngawangun aplikasi anu disebarkeun kalayan panyimpenan anu tetep. Pangalaman anu urang kéngingkeun janten dasar pikeun produk énggal - Tarantool Data Grid (TDG).

Abdi hoyong ngobrol ngeunaan arsitéktur TDG sareng solusi anu kami sumping nalika prosés pangwangunan, ngenalkeun anjeun kana fungsionalitas utama sareng nunjukkeun kumaha produk urang tiasa janten dasar pikeun ngawangun solusi anu lengkep.

Sacara arsitéktur, urang ngabagi sistem kana misah kalungguhan, anu masing-masing tanggung jawab pikeun ngarengsekeun sababaraha masalah. Hiji conto aplikasi ngajalankeun tunggal nerapkeun hiji atawa leuwih tipe peran. Aya sababaraha kalungguhan tina jinis anu sami dina klaster:

Arsitéktur sarta kamampuhan Tarantool Data Grid

panyambung

Konektor tanggung jawab pikeun komunikasi sareng dunya luar; tugas na pikeun nampa pamundut nu, parse eta, sarta lamun ieu hasil, lajeng ngirimkeun data pikeun ngolah kana processor input. Kami ngadukung format HTTP, SOAP, Kafka, FIX. Arsitéktur ngidinan Anjeun pikeun saukur nambahkeun rojongan pikeun format anyar, kalawan rojongan pikeun IBM MQ datang pas. Lamun parsing pamundut gagal, konektor bakal balik kasalahan; Upami teu kitu, eta bakal ngabales yén pamundut ieu diolah hasil, sanajan kasalahan lumangsung salila processing salajengna. Hal ieu dilakukeun sacara khusus pikeun damel sareng sistem anu henteu terang kumaha carana ngulang pamundut - atanapi, sabalikna, lakukeun ogé terus-terusan. Pikeun henteu kaleungitan data, antrian perbaikan dianggo: obyék mimiti asup kana éta sareng ngan ukur saatos pamrosésan anu suksés dipiceun tina éta. Administrator tiasa nampi panggeuing ngeunaan objék anu aya dina antrian perbaikan, sareng saatos ngaleungitkeun kasalahan parangkat lunak atanapi gagalna hardware, cobian deui.

prosésor input

Prosesor Input ngagolongkeun data anu ditampi dumasar kana fitur karakteristik sareng nyauran prosesor anu cocog. Handlers mangrupakeun kode Lua nu dijalankeun dina sandbox a, ngarah teu bisa mangaruhan fungsi sistem. Dina tahap ieu, data bisa diréduksi jadi formulir diperlukeun, sarta, upami diperlukeun, hiji angka sawenang tugas bisa dibuka nu bisa nerapkeun logika diperlukeun. Contona, dina produk MDM (Master Data Management) diwangun dina Tarantool Data Grid, nalika nambahkeun pamaké anyar, dina urutan teu ngalambatkeun turun ngolah pamundut, urang ngajalankeun kreasi rékaman emas salaku tugas misah. Sandbox ngarojong requests pikeun bacaan, ngarobah jeung nambahkeun data, ngidinan Anjeun pikeun ngalakukeun sababaraha fungsi dina sagala kalungguhan tina tipe gudang sarta aggregation hasil (peta / ngurangan).

Panangan tiasa dijelaskeun dina file:

sum.lua

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

Lajeng, dinyatakeun dina konfigurasi:

functions:
  sum: { __file: sum.lua }

Naha Lua? Lua nyaéta basa anu basajan pisan. Dumasar pangalaman urang, sababaraha jam sanggeus dibere nyaho eta, jalma mimiti nulis kode nu solves masalah maranéhanana. Sareng ieu sanés ngan ukur pamekar profésional, tapi, contona, analis. Salaku tambahan, hatur nuhun kana kompiler jit, Lua ngajalankeun gancang pisan.

panyimpenan

Panyimpen nyimpen data pengkuh. Sateuacan nyimpen, data disahkeun kana skéma data. Pikeun ngajelaskeun sirkuit kami nganggo format anu diperpanjang Apache Avro... Conto:

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

Dumasar kana pedaran ieu, DDL (Data Definition Language) sacara otomatis dihasilkeun pikeun Tarantula DBMS sareng GraphQL skéma pikeun aksés data.

Réplikasi data Asynchronous dirojong (aya rencana pikeun nambahkeun hiji sinkron).

processor kaluaran

Kadang-kadang perlu ngabéjaan konsumén éksternal ngeunaan datangna data anyar; pikeun tujuan ieu, aya peran processor Kaluaran. Saatos ngahemat data, éta tiasa dikirimkeun ka pawang anu saluyu (contona, pikeun mawa kana bentuk anu diperyogikeun ku konsumen) - teras dikirimkeun ka konektor pikeun ngirim. Antrian perbaikan ogé dipaké di dieu: lamun euweuh hiji narima obyék, administrator bisa coba deui engké.

Skala

Konektor, prosésor input, sareng peran prosésor kaluaran henteu aya kaayaan, ngamungkinkeun urang pikeun skala sistem sacara horisontal ku ngan saukur nambihan instansi aplikasi anyar sareng jinis peran anu dipikahoyong diaktipkeun. Panyimpenan dianggo pikeun skala horizontal ngadeukeutan pikeun ngatur klaster ngagunakeun ember virtual. Saatos nambahkeun server anyar, sababaraha ember ti server heubeul dipindahkeun ka server anyar di tukang; ieu lumangsung transparan pikeun pamaké sarta henteu mangaruhan operasi sakabéh sistem.

Pasipatan Data

Objék tiasa ageung pisan sareng ngandung objék sanés. Urang mastikeun atomicity tina nambahkeun jeung ngamutahirkeun data ku nyimpen hiji obyék kalayan sagala kagumantungan dina hiji ember virtual. Ieu nyegah obyék "nyebarkeun" ka sababaraha server fisik.

Versioning dirojong: unggal update hiji obyék nyieun versi anyar, sarta kami salawasna bisa nyandak hiji waktu keureutan tur tingal kumaha dunya kasampak lajeng. Pikeun data anu henteu peryogi sajarah anu panjang, urang tiasa ngabatesan jumlah vérsi atanapi ngan ukur nyimpen hiji - anu pangahirna - nyaéta, dasarna nganonaktipkeun versi pikeun jinis anu tangtu. Anjeun ogé tiasa ngawates sajarah dumasar kana waktos: contona, mupus sadaya objék tina jinis anu tangtu langkung lami ti 1 taun. Arsip ogé dirojong: urang tiasa ngabongkar obyék anu langkung lami tibatan waktos anu ditangtukeun, ngabebaskeun rohangan dina kluster.

pancén

Di antara fitur anu pikaresepeun, perhatoskeun kamampuan pikeun ngaluncurkeun tugas dina jadwal, dina pamundut pangguna, atanapi sacara program tina kotak pasir:

Arsitéktur sarta kamampuhan Tarantool Data Grid

Di dieu urang ningali peran sejen - runner. Peran ieu stateless, sarta instansi aplikasi tambahan kalayan peran ieu bisa ditambahkeun kana klaster sakumaha diperlukeun. Tanggung jawab runner nyaéta pikeun ngarengsekeun tugas. Sakumaha didadarkeun di, kasebut nyaéta dimungkinkeun pikeun ngahasilkeun tugas anyar ti sandbox nu; aranjeunna disimpen dina antrian on gudang lajeng dieksekusi on runner nu. Jenis tugas ieu disebut Job. Urang ogé ngagaduhan jinis tugas anu disebut Tugas - ieu mangrupikeun tugas anu ditetepkeun ku pangguna anu dijalankeun dina jadwal (ngagunakeun sintaksis cron) atanapi upami diperyogikeun. Pikeun ngaluncurkeun sareng ngalacak tugas sapertos kitu, kami gaduh manajer tugas anu merenah. Supados pungsi ieu sadia, Anjeun kudu ngaktipkeun peran scheduler; peran ieu boga kaayaan, jadi teu skala, nu kitu, teu diperlukeun; dina waktos anu sareng, kawas sakabeh peran sejen, eta bisa boga replica nu dimimitian gawé lamun master dumadakan nampik.

Logger

peran sejen disebut logger. Éta ngumpulkeun log ti sadaya anggota kluster sareng nyayogikeun antarbeungeut pikeun unggah sareng ningali aranjeunna ngalangkungan antarmuka wéb.

Jasa

Perlu disebatkeun yén sistem ngagampangkeun nyiptakeun jasa. Dina file konfigurasi, Anjeun bisa nangtukeun requests nu dikirim ka Handler ditulis pamaké nu dijalankeun dina sandbox nu. Dina pawang ieu, anjeun tiasa, contona, ngajalankeun sababaraha jinis query analitik sareng ngabalikeun hasilna.

Ladenan dijelaskeun dina file konfigurasi:

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

The GraphQL API dihasilkeun sacara otomatis tur jasa jadi sadia pikeun nelepon:

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

Ieu bakal nelepon pawang sumnu bakal balik hasilna:

3

Query Profiling jeung métrik

Pikeun ngartos operasi sistem sareng pamundut profil, kami ngalaksanakeun dukungan pikeun protokol OpenTracing. Sistim nu bisa ngirim informasi on pamundut ka alat nu ngarojong protokol ieu, kayaning Zipkin, nu bakal ngidinan Anjeun pikeun ngarti kumaha pamundut ieu dieksekusi:

Arsitéktur sarta kamampuhan Tarantool Data Grid

Alami, sistemna nyayogikeun métrik internal anu tiasa dikumpulkeun nganggo Prometheus sareng ditingali nganggo Grafana.

Nyebarkeun

Tarantool Data Grid tiasa disebarkeun tina bungkusan RPM atanapi arsip, nganggo utilitas tina distribusi atanapi Ansible, aya ogé dukungan pikeun Kubernetes (Tarantool Kubernetes Operator).

Aplikasi nu implements logika bisnis (konfigurasi, pawang) dimuat kana deployed Tarantool Data Grid klaster dina bentuk arsip ngaliwatan UI atawa ngagunakeun Aksara ngaliwatan API disadiakeun ku urang.

Conto aplikasi

Aplikasi naon anu tiasa didamel nganggo Tarantool Data Grid? Nyatana, seueur tugas bisnis kumaha waé aya hubunganana sareng ngolah, nyimpen sareng ngaksés aliran data. Kukituna, upami anjeun gaduh aliran data anu ageung anu kedah disimpen sareng diaksés sacara aman, maka produk kami tiasa ngahémat waktos pangembangan anjeun sareng fokus kana logika bisnis anjeun.

Contona, urang rék ngumpulkeun informasi ngeunaan pasar real estate, ku kituna dina mangsa nu bakal datang, contona, urang bakal boga informasi ngeunaan nawaran pangalusna. Dina hal ieu, urang bakal nyorot tugas di handap ieu:

  1. Robot anu ngumpulkeun inpormasi tina sumber terbuka bakal janten sumber data urang. Anjeun tiasa ngabéréskeun masalah ieu nganggo solusi anu siap-siap atanapi nyerat kode dina basa naon waé.
  2. Salajengna, Tarantool Data Grid bakal nampi sareng nyimpen data. Upami format data tina sumber anu béda-béda béda, anjeun tiasa nyerat kode dina Lua anu bakal ngalakukeun konvérsi kana hiji format. Dina tahap pra-processing, anjeun ogé bakal tiasa, contona, pikeun nyaring duplikat nawaran atawa tambahan ngamutahirkeun informasi ngeunaan agén digawé di pasar dina database.
  3. Ayeuna anjeun parantos gaduh solusi anu tiasa skala dina klaster anu tiasa dieusi ku data sareng ngadamel pilihan data. Teras anjeun tiasa nerapkeun fungsionalitas anyar, contona, nyerat jasa anu bakal nyuhunkeun data sareng masihan tawaran anu paling nguntungkeun per dinten - ieu peryogi sababaraha garis dina file konfigurasi sareng kode Lua sakedik.

Naon saterusna?

Prioritas kami pikeun ngaronjatkeun betah ngembangkeun ngagunakeun Tarantool Data Grid. Contona, ieu IDE kalawan rojongan pikeun profil na debugging pawang ngajalankeun dina sandbox a.

Urang ogé nengetan hébat kana masalah kaamanan. Ayeuna kami nuju ngalaman sertifikasi ku FSTEC Rusia pikeun mastikeun tingkat kaamanan anu luhur sareng nyumponan sarat pikeun sertifikasi produk parangkat lunak anu dianggo dina sistem inpormasi data pribadi sareng sistem inpormasi pamaréntah.

sumber: www.habr.com

Tambahkeun komentar