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.
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 -
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:
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
{
"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
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
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:
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 sum
nu 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:
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 (
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:
- 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é.
- 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.
- 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
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