2017. gadÄ mÄs uzvarÄjÄm Alfa-Bank investÄ«ciju biznesa darÄ«jumu kodola attÄ«stÄ«Å”anas konkursÄ un sÄkÄm darbu (HighLoad++ 2018 ar ziÅojumu par investÄ«ciju biznesa pamatu
IzstrÄdes procesÄ sistÄma attÄ«stÄ«jÄs un ieguva funkcionalitÄti, un kÄdÄ brÄ«dÄ« mÄs sapratÄm, ka izkristalizÄjam kaut ko daudz vairÄk nekÄ tikai lietojumprogrammatÅ«ru, kas izveidota, lai atrisinÄtu stingri noteiktu uzdevumu loku: mums tas izdevÄs. sistÄma izplatÄ«tu lietojumprogrammu veidoÅ”anai ar pastÄvÄ«gu krÄtuvi. MÅ«su iegÅ«tÄ pieredze veidoja pamatu jaunam produktam -
VÄlos runÄt par TDG arhitektÅ«ru un risinÄjumiem, pie kÄdiem nonÄcÄm izstrÄdes procesÄ, iepazÄ«stinÄt ar galvenajÄm funkcionalitÄtÄm un parÄdÄ«t, kÄ mÅ«su produkts var kļūt par pamatu komplekso risinÄjumu veidoÅ”anai.
Arhitektoniski mÄs sadalÄ«jÄm sistÄmu atseviŔķÄs daļÄs lomas, no kuriem katrs ir atbildÄ«gs par noteikta problÄmu loka risinÄÅ”anu. Viena darbojas lietojumprogrammas instance ievieÅ” vienu vai vairÄkus lomu veidus. KlasterÄ« var bÅ«t vairÄkas viena veida lomas:
Connector
Connector ir atbildÄ«gs par saziÅu ar Ärpasauli; tÄ uzdevums ir pieÅemt pieprasÄ«jumu, parsÄt to un, ja tas izdodas, tad nosÅ«tÄ«t datus apstrÄdei ievades apstrÄdÄtÄjam. MÄs atbalstÄm HTTP, SOAP, Kafka, FIX formÄtus. ArhitektÅ«ra ļauj vienkÄrÅ”i pievienot atbalstu jauniem formÄtiem, drÄ«zumÄ bÅ«s pieejams atbalsts IBM MQ. Ja pieprasÄ«juma parsÄÅ”ana neizdevÄs, savienotÄjs atgriezÄ«s kļūdu; pretÄjÄ gadÄ«jumÄ tas atbildÄs, ka pieprasÄ«jums ir veiksmÄ«gi apstrÄdÄts, pat ja tÄ turpmÄkÄs apstrÄdes laikÄ radÄs kļūda. Tas tika darÄ«ts Ä«paÅ”i, lai strÄdÄtu ar sistÄmÄm, kuras nezina, kÄ atkÄrtot pieprasÄ«jumus - vai, gluži pretÄji, dara to pÄrÄk neatlaidÄ«gi. Lai nezaudÄtu datus, tiek izmantota remonta rinda: objekts vispirms nokļūst tajÄ un tikai pÄc veiksmÄ«gas apstrÄdes tiek noÅemts no tÄ. Administrators var saÅemt brÄ«dinÄjumus par objektiem, kas palikuÅ”i remonta rindÄ, un pÄc programmatÅ«ras kļūdas vai aparatÅ«ras kļūmes novÄrÅ”anas mÄÄ£iniet vÄlreiz.
Ievades procesors
Ievades procesors klasificÄ saÅemtos datus pÄc raksturÄ«gajÄm pazÄ«mÄm un izsauc atbilstoÅ”us procesorus. ApdarinÄtÄji ir Lua kods, kas darbojas smilÅ”u kastÄ, tÄpÄc tie nevar ietekmÄt sistÄmas darbÄ«bu. Å ajÄ posmÄ datus var samazinÄt lÄ«dz vajadzÄ«gajai formai, un, ja nepiecieÅ”ams, var palaist patvaļīgu skaitu uzdevumu, kas var Ä«stenot nepiecieÅ”amo loÄ£iku. PiemÄram, MDM (Master Data Management) produktÄ, kas veidots uz Tarantool Data Grid, pievienojot jaunu lietotÄju, lai nepalÄninÄtu pieprasÄ«juma apstrÄdi, kÄ atseviŔķu uzdevumu uzsÄkam zelta rekorda izveidi. SmilÅ”kaste atbalsta pieprasÄ«jumus lasÄ«t, mainÄ«t un pievienot datus, ļauj veikt kÄdu funkciju visÄs krÄtuves veida lomÄs un rezultÄtu apkopoÅ”anÄ (karte/samazinÄt).
ApdarinÄtÄjus var aprakstÄ«t failos:
sum.lua
local x, y = unpack(...)
return x + y
Un pÄc tam konfigurÄcijÄ deklarÄts:
functions:
sum: { __file: sum.lua }
KÄpÄc Lua? Lua valoda ir ļoti vienkÄrÅ”a. Balstoties uz mÅ«su pieredzi, pÄris stundas pÄc iepazÄ«Å”anÄs ar to cilvÄki sÄk rakstÄ«t kodu, kas atrisina viÅu problÄmu. Un tie ir ne tikai profesionÄli izstrÄdÄtÄji, bet, piemÄram, analÄ«tiÄ·i. TurklÄt, pateicoties jit kompilatoram, Lua darbojas ļoti Ätri.
glabÄÅ”ana
KrÄtuvÄ tiek glabÄti pastÄvÄ«gi dati. Pirms saglabÄÅ”anas dati tiek pÄrbaudÄ«ti attiecÄ«bÄ pret datu shÄmu. Lai aprakstÄ«tu Ä·Ädi, mÄs izmantojam paplaÅ”inÄtu formÄtu
{
"name": "User",
"type": "record",
"logicalType": "Aggregate",
"fields": [
{ "name": "id", "type": "string"},
{"name": "first_name", "type": "string"},
{"name": "last_name", "type": "string"}
],
"indexes": ["id"]
}
Pamatojoties uz Å”o aprakstu, DDL (datu definÄ«cijas valoda) tiek automÄtiski Ä£enerÄta Tarantula DBVS un
Tiek atbalstÄ«ta asinhronÄ datu replikÄcija (ir plÄnots pievienot sinhrono).
Izvades procesors
DažkÄrt ir nepiecieÅ”ams informÄt ÄrÄjos patÄrÄtÄjus par jaunu datu ieraÅ”anos, Å”im nolÅ«kam ir izvades apstrÄdÄtÄja loma. PÄc datu saglabÄÅ”anas tos var nodot attiecÄ«gajam apstrÄdÄtÄjam (piemÄram, lai tos nogÄdÄtu patÄrÄtÄja pieprasÄ«tajÄ formÄ) un pÄc tam nosÅ«tÄ«tu savienotÄjam nosÅ«tÄ«Å”anai. Å eit tiek izmantota arÄ« remonta rinda: ja neviens objektu nepieÅÄma, administrators vÄlÄk var mÄÄ£inÄt vÄlreiz.
MÄrogoÅ”ana
SavienotÄja, ievades procesora un izvades procesora lomas ir bezvalsts, ļaujot mums mÄrogot sistÄmu horizontÄli, vienkÄrÅ”i pievienojot jaunus lietojumprogrammu gadÄ«jumus ar iespÄjotu vÄlamo lomu veidu. UzglabÄÅ”ana tiek izmantota horizontÄlai mÄrogoÅ”anai
Datu rekvizīti
Objekti var bÅ«t ļoti lieli un saturÄt citus objektus. MÄs nodroÅ”inÄm datu pievienoÅ”anas un atjauninÄÅ”anas atomitÄti, glabÄjot objektu ar visÄm atkarÄ«bÄm vienÄ virtuÄlajÄ spainÄ«. Tas novÄrÅ” objekta āizplatÄ«Å”anuā vairÄkos fiziskos serveros.
VersionÄÅ”ana tiek atbalstÄ«ta: katrs objekta atjauninÄjums rada jaunu versiju, un mÄs vienmÄr varam paÅemt laika griezumu un redzÄt, kÄ pasaule toreiz izskatÄ«jÄs. Datiem, kuriem nav nepiecieÅ”ama ilga vÄsture, mÄs varam ierobežot versiju skaitu vai pat saglabÄt tikai vienu ā jaunÄko ā, tas ir, bÅ«tÄ«bÄ atspÄjot versijas noteiktam tipam. Varat arÄ« ierobežot vÄsturi pÄc laika: piemÄram, dzÄst visus noteikta veida objektus, kas vecÄki par 1 gadu. Tiek atbalstÄ«ta arÄ« arhivÄÅ”ana: varam izlÄdÄt objektus, kas vecÄki par norÄdÄ«to laiku, atbrÄ«vojot vietu klasterÄ«.
uzdevumi
Starp interesantajÄm funkcijÄm ir vÄrts atzÄ«mÄt iespÄju palaist uzdevumus pÄc grafika, pÄc lietotÄja pieprasÄ«juma vai programmatiski no smilÅ”kastes:
Å eit mÄs redzam citu lomu ā skrÄjÄju. Å Ä« loma ir bezvalsts, un papildu lietojumprogrammu gadÄ«jumus ar Å”o lomu var pievienot klasterim pÄc vajadzÄ«bas. SkrÄjÄja pienÄkums ir izpildÄ«t uzdevumus. KÄ jau minÄts, no smilÅ”kastes ir iespÄjams Ä£enerÄt jaunus uzdevumus; tie tiek saglabÄti rindÄ uz krÄtuves un pÄc tam izpildÄ«ti skrÄjienÄ. Å Äda veida uzdevumus sauc par darbu. Mums ir arÄ« uzdevuma veids, ko sauc par uzdevumu ā tie ir lietotÄja definÄti uzdevumi, kas tiek izpildÄ«ti pÄc grafika (izmantojot cron sintaksi) vai pÄc pieprasÄ«juma. Lai palaistu un izsekotu Å”Ädus uzdevumus, mums ir Ärts uzdevumu pÄrvaldnieks. Lai Ŕī funkcionalitÄte bÅ«tu pieejama, ir jÄiespÄjo plÄnotÄja loma; Å”ai lomai ir stÄvoklis, tÄpÄc tÄ nemargojas, kas tomÄr nav nepiecieÅ”ama; tajÄ paÅ”Ä laikÄ, tÄpat kÄ visÄm pÄrÄjÄm lomÄm, tai var bÅ«t kopija, kas sÄk darboties, ja meistars pÄkÅ”Åi atsakÄs.
MežizstrÄdÄtÄjs
VÄl viena loma tiek saukta par mežizstrÄdÄtÄju. Tas apkopo žurnÄlus no visiem klastera dalÄ«bniekiem un nodroÅ”ina saskarni to augÅ”upielÄdei un apskatei, izmantojot tÄ«mekļa saskarni.
Pakalpojumi
Ir vÄrts pieminÄt, ka sistÄma atvieglo pakalpojumu izveidi. KonfigurÄcijas failÄ varat norÄdÄ«t, kuri pieprasÄ«jumi tiek nosÅ«tÄ«ti lietotÄja rakstÄ«tam apstrÄdÄtÄjam, kas darbojas smilÅ”kastÄ. Å ajÄ apdarinÄtÄjÄ varat, piemÄram, palaist kÄda veida analÄ«tisko vaicÄjumu un atgriezt rezultÄtu.
Pakalpojums ir aprakstÄ«ts konfigurÄcijas failÄ:
services:
sum:
doc: "adds two numbers"
function: sum
return_type: int
args:
x: int
y: int
GraphQL API tiek Ä£enerÄts automÄtiski, un pakalpojums kļūst pieejams zvanÄ«Å”anai:
query {
sum(x: 1, y: 2)
}
Tas piezvanÄ«s apstrÄdÄtÄjam sum
kas atgriezÄ«s rezultÄtu:
3
VaicÄjumu profilÄÅ”ana un metrika
Lai izprastu sistÄmas darbÄ«bu un profilÄÅ”anas pieprasÄ«jumus, mÄs ieviesÄm atbalstu OpenTracing protokolam. SistÄma var nosÅ«tÄ«t informÄciju pÄc pieprasÄ«juma rÄ«kiem, kas atbalsta Å”o protokolu, piemÄram, Zipkin, kas ļaus jums saprast, kÄ pieprasÄ«jums tika izpildÄ«ts:
Protams, sistÄma nodroÅ”ina iekÅ”Äjos rÄdÄ«tÄjus, kurus var savÄkt, izmantojot Prometheus, un vizualizÄt, izmantojot Grafana.
Izvietot
Tarantool Data Grid var izvietot no RPM pakotnÄm vai arhÄ«va, izmantojot utilÄ«tu no izplatÄ«Å”anas vai Ansible, ir arÄ« atbalsts Kubernetes (
Lietojumprogramma, kas ievieÅ” biznesa loÄ£iku (konfigurÄcija, apstrÄdÄtÄji), tiek ielÄdÄta izvietotajÄ Tarantool Data Grid klasterÄ« arhÄ«va veidÄ, izmantojot lietotÄja interfeisu vai izmantojot skriptu, izmantojot mÅ«su nodroÅ”inÄto API.
Filozofijas pamati
KÄdas lietojumprogrammas var izveidot, izmantojot Tarantool Data Grid? Faktiski lielÄkÄ daļa biznesa uzdevumu ir kaut kÄdÄ veidÄ saistÄ«ti ar datu apstrÄdi, uzglabÄÅ”anu un piekļuvi datu plÅ«smai. TÄpÄc, ja jums ir lielas datu straumes, kas ir droÅ”i jÄuzglabÄ un kurÄm ir nepiecieÅ”ama piekļuve, mÅ«su produkts var ietaupÄ«t daudz laika izstrÄdei un koncentrÄties uz jÅ«su biznesa loÄ£iku.
PiemÄram, mÄs vÄlamies apkopot informÄciju par nekustamÄ Ä«paÅ”uma tirgu, lai nÄkotnÄ, piemÄram, bÅ«tu informÄcija par labÄkajiem piedÄvÄjumiem. Å ajÄ gadÄ«jumÄ mÄs izcelsim Å”Ädus uzdevumus:
- MÅ«su datu avoti bÅ«s roboti, kas apkopo informÄciju no atvÄrtiem avotiem. Å o problÄmu var atrisinÄt, izmantojot gatavus risinÄjumus vai rakstot kodu jebkurÄ valodÄ.
- PÄc tam Tarantool Data Grid pieÅems un saglabÄs datus. Ja datu formÄts no dažÄdiem avotiem atŔķiras, varat rakstÄ«t kodu Lua, kas veiks konvertÄÅ”anu uz vienu formÄtu. PirmsapstrÄdes posmÄ varÄsiet arÄ«, piemÄram, filtrÄt dublÄtos piedÄvÄjumus vai papildus datubÄzÄ atjauninÄt informÄciju par aÄ£entiem, kas strÄdÄ tirgÅ«.
- Tagad jums jau ir mÄrogojams risinÄjums klasterÄ«, ko var aizpildÄ«t ar datiem un veikt datu atlasi. PÄc tam var ieviest jaunu funkcionalitÄti, piemÄram, uzrakstÄ«t servisu, kas veiks datu pieprasÄ«jumu un sniegs izdevÄ«gÄko piedÄvÄjumu dienÄ ā tam bÅ«s nepiecieÅ”amas dažas rindiÅas konfigurÄcijas failÄ un nedaudz Lua koda.
Ko tÄlÄk?
MÅ«su prioritÄte ir uzlabot izstrÄdes lietoÅ”anas vienkÄrŔību
Lielu uzmanÄ«bu pievÄrÅ”am arÄ« droŔības jautÄjumiem. Å obrÄ«d mums tiek veikta Krievijas FSTEC sertifikÄcija, lai apstiprinÄtu augstu droŔības lÄ«meni un izpildÄ«tu personas datu informÄcijas sistÄmÄs un valsts informÄcijas sistÄmÄs izmantoto programmatÅ«ras produktu sertifikÄcijas prasÄ«bas.
Avots: www.habr.com