Tarantool Data Grid-in arxitekturası və imkanları

Tarantool Data Grid-in arxitekturası və imkanları

2017-ci ildə biz Alfa-Bank-ın investisiya biznesinin tranzaksiya əsasını inkişaf etdirmək üçün müsabiqədə qalib gəldik və işə başladıq (HighLoad++ 2018-də investisiya biznesinin əsası haqqında hesabatla) həyata keçirdi Vladimir Drynkin, Alfa Bankın investisiya biznesinin əməliyyat əsasının rəhbəri). Bu sistem müxtəlif mənbələrdən alınan əməliyyat məlumatlarını müxtəlif formatlarda toplamalı, məlumatları vahid formaya gətirməli, saxlamalı və onlara çıxışı təmin etməli idi.

İnkişaf prosesi zamanı sistem təkamül etdi və funksionallıq əldə etdi və bir anda biz başa düşdük ki, biz ciddi şəkildə müəyyən edilmiş vəzifələrin həlli üçün yaradılan proqram təminatından daha çox şeyi kristallaşdırırıq: biz uğur qazandıq. davamlı yaddaşa malik paylanmış proqramların yaradılması sistemi. Qazandığımız təcrübə yeni məhsulun əsasını təşkil etdi - Tarantool Data Grid (TDG).

Mən TDG arxitekturası və inkişaf prosesi zamanı əldə etdiyimiz həllər haqqında danışmaq, sizi əsas funksionallıqla tanış etmək və məhsulumuzun tam həllər yaratmaq üçün necə əsas ola biləcəyini göstərmək istəyirəm.

Memarlıq baxımından sistemi ayrı-ayrı hissələrə ayırdıq rolları, hər biri müəyyən bir sıra problemlərin həllinə cavabdehdir. Tək işləyən proqram nümunəsi bir və ya daha çox rol növünü həyata keçirir. Bir klasterdə eyni tipli bir neçə rol ola bilər:

Tarantool Data Grid-in arxitekturası və imkanları

Connector

Bağlayıcı xarici dünya ilə əlaqə üçün cavabdehdir; onun vəzifəsi sorğunu qəbul etmək, onu təhlil etmək və bu uğurlu olarsa, məlumatları emal üçün giriş prosessoruna göndərməkdir. Biz HTTP, SOAP, Kafka, FIX formatlarını dəstəkləyirik. Arxitektura sizə sadəcə olaraq yeni formatlar üçün dəstək əlavə etməyə imkan verir, tezliklə IBM MQ dəstəyi ilə. Sorğunun təhlili uğursuz olarsa, konnektor xəta qaytaracaq; əks halda, sorğunun sonrakı işlənməsi zamanı xəta baş versə belə, onun uğurla emal edildiyini cavablandıracaq. Bu, sorğuları necə təkrarlamağı bilməyən sistemlərlə işləmək üçün xüsusi olaraq edildi - və ya əksinə, bunu çox israrla edin. Məlumatı itirməmək üçün təmir növbəsi istifadə olunur: obyekt əvvəlcə ona daxil olur və yalnız uğurlu emal ondan çıxarıldıqdan sonra. Administrator təmir növbəsində qalan obyektlər haqqında xəbərdarlıqlar ala bilər və proqram xətası və ya aparat nasazlığını aradan qaldırdıqdan sonra yenidən cəhd edin.

Giriş prosessoru

Daxiletmə prosessoru alınan məlumatları xarakterik xüsusiyyətlərə görə təsnif edir və müvafiq prosessorları çağırır. İşləyicilər qum qutusunda işləyən Lua kodudur, buna görə də sistemin işinə təsir göstərə bilməzlər. Bu mərhələdə məlumatlar lazımi formaya endirilə bilər və lazım olduqda, lazımi məntiqi həyata keçirə bilən ixtiyari sayda tapşırıqlar işə salına bilər. Məsələn, Tarantool Data Grid üzərində qurulmuş MDM (Master Data Management) məhsulunda yeni istifadəçi əlavə edərkən sorğunun işlənməsini ləngitməmək üçün qızıl rekordun yaradılmasını ayrıca vəzifə kimi işə salırıq. Qum qutusu məlumatların oxunması, dəyişdirilməsi və əlavə edilməsi üçün sorğuları dəstəkləyir, yaddaş növünün bütün rolları və nəticənin toplanması (xəritə/azaltma) üzrə bəzi funksiyaları yerinə yetirməyə imkan verir.

İşləyicilər fayllarda təsvir edilə bilər:

sum.lua

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

Və sonra, konfiqurasiyada elan edildi:

functions:
  sum: { __file: sum.lua }

Niyə Lua? Lua çox sadə bir dildir. Təcrübəmizə əsasən, insanlar onunla tanış olduqdan bir neçə saat sonra problemlərini həll edən kod yazmağa başlayırlar. Və bunlar təkcə peşəkar tərtibatçılar deyil, məsələn, analitiklərdir. Bundan əlavə, jit kompilyatoru sayəsində Lua çox sürətli işləyir.

saxlama

Saxlama davamlı məlumatları saxlayır. Saxlamadan əvvəl məlumatlar məlumat sxeminə uyğun olaraq təsdiqlənir. Dövrəni təsvir etmək üçün genişləndirilmiş formatdan istifadə edirik Apache Avro. Nümunə:

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

Bu təsvirə əsasən, DDL (Data Definition Language) Tarantula DBMS üçün avtomatik olaraq yaradılır və QrafikQL məlumat əldə etmək üçün sxem.

Asinxron məlumatların təkrarlanması dəstəklənir (sinxron əlavə etmək planları var).

Çıxış prosessoru

Bəzən xarici istehlakçılara yeni məlumatların gəlməsi barədə məlumat vermək lazımdır, bunun üçün Çıxış prosessoru rolu var. Məlumatları saxladıqdan sonra onu müvafiq işləyiciyə ötürmək olar (məsələn, istehlakçının tələb etdiyi formaya gətirmək üçün) - və sonra göndərmək üçün birləşdiriciyə ötürülə bilər. Burada təmir növbəsindən də istifadə olunur: əgər heç kim obyekti qəbul etməyibsə, administrator daha sonra yenidən cəhd edə bilər.

Ölçəkləmə

Konnektor, giriş prosessoru və çıxış prosessoru rolları vətəndaşsızdır, bu bizə sadəcə olaraq istədiyiniz rol növü aktivləşdirilmiş yeni tətbiq nümunələri əlavə etməklə sistemi üfüqi olaraq miqyaslandırmağa imkan verir. Saxlama üfüqi miqyaslama üçün istifadə olunur yanaşma virtual vedrələrdən istifadə edərək klaster təşkil etmək. Yeni server əlavə edildikdən sonra köhnə serverlərdən bəzi vedrələr arxa planda yeni serverə köçürülür; bu, istifadəçilər üçün şəffaf şəkildə baş verir və bütün sistemin işinə təsir göstərmir.

Data xassələri

Obyektlər çox böyük ola bilər və digər obyektləri ehtiva edə bilər. Bütün asılılıqları olan bir obyekti bir virtual kovada saxlamaqla məlumatların əlavə edilməsi və yenilənməsinin atomikliyini təmin edirik. Bu, obyektin bir neçə fiziki server arasında “yayılmasının” qarşısını alır.

Versiyalaşdırma dəstəklənir: obyektin hər yenilənməsi yeni versiya yaradır və biz həmişə vaxt dilimini götürüb dünyanın o zaman necə göründüyünü görə bilərik. Uzun tarixə ehtiyacı olmayan məlumatlar üçün biz versiyaların sayını məhdudlaşdıra və ya hətta yalnız birini - ən sonuncunu saxlaya bilərik, yəni müəyyən bir növ üçün versiyanı mahiyyətcə söndürə bilərik. Tarixi vaxta görə də məhdudlaşdıra bilərsiniz: məsələn, 1 ildən çox olan müəyyən bir növün bütün obyektlərini silin. Arxivləşdirmə də dəstəklənir: biz klasterdə yer boşaldaraq, göstərilən vaxtdan köhnə obyektləri boşalta bilərik.

vəzifələri

Maraqlı xüsusiyyətlər arasında, tapşırıqları cədvəl üzrə, istifadəçinin istəyi ilə və ya proqramlı olaraq sandboxdan başlamaq qabiliyyətini qeyd etmək lazımdır:

Tarantool Data Grid-in arxitekturası və imkanları

Burada başqa bir rolu görürük - qaçışçı. Bu rol vətəndaşsızdır və bu rolu olan əlavə tətbiq nümunələri lazım olduqda klasterə əlavə edilə bilər. Qaçışçının məsuliyyəti tapşırıqları yerinə yetirməkdir. Qeyd edildiyi kimi, qum qutusundan yeni tapşırıqlar yaratmaq mümkündür; onlar saxlama növbəsində saxlanılır və sonra qaçışçıda icra olunur. Bu iş növü İş adlanır. Bizdə Tapşırıq adlı tapşırıq növü də var - bunlar qrafik üzrə (cron sintaksisindən istifadə etməklə) və ya tələb əsasında işləyən istifadəçi tərəfindən müəyyən edilmiş tapşırıqlardır. Bu cür tapşırıqları işə salmaq və izləmək üçün rahat tapşırıq menecerimiz var. Bu funksiyanın mövcud olması üçün siz planlaşdırıcı rolunu aktivləşdirməlisiniz; bu rolun bir dövləti var, buna görə də miqyaslı deyil, lakin bu tələb olunmur; eyni zamanda, bütün digər rollar kimi, usta birdən imtina edərsə, işə başlayan bir replikaya sahib ola bilər.

Çıxarış

Başqa bir rol logger adlanır. O, klasterin bütün üzvlərindən qeydləri toplayır və veb interfeysi vasitəsilə onları yükləmək və baxmaq üçün interfeys təqdim edir.

Xidmətlər

Qeyd etmək lazımdır ki, sistem xidmətlərin yaradılmasını asanlaşdırır. Konfiqurasiya faylında siz sandboxda işləyən istifadəçi tərəfindən yazılmış işləyiciyə hansı sorğuların göndəriləcəyini təyin edə bilərsiniz. Bu işləyicidə siz, məsələn, bir növ analitik sorğu işlədə və nəticəni qaytara bilərsiniz.

Xidmət konfiqurasiya faylında təsvir edilmişdir:

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

GraphQL API avtomatik olaraq yaradılır və xidmət zəng etmək üçün əlçatan olur:

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

Bu işləyicini çağıracaq sumnəticəni qaytaracaq:

3

Sorğu Profili və Metriklər

Sistemin işini və profil sorğularını başa düşmək üçün biz OpenTracing protokoluna dəstək tətbiq etdik. Sistem sorğunun necə yerinə yetirildiyini başa düşməyə imkan verən Zipkin kimi bu protokolu dəstəkləyən alətlərə tələb üzrə məlumat göndərə bilər:

Tarantool Data Grid-in arxitekturası və imkanları

Təbii ki, sistem Prometheus istifadə edərək toplana bilən və Grafana ilə vizuallaşdırıla bilən daxili ölçüləri təmin edir.

Yerləşdirmək

Tarantool Data Grid, paylama və ya Ansible-dan bir yardım proqramından istifadə edərək RPM paketlərindən və ya arxivdən yerləşdirilə bilər, Kubernetes üçün də dəstək var (Tarantool Kubernetes Operatoru).

Biznes məntiqini (konfiqurasiya, işləyicilər) həyata keçirən proqram UI vasitəsilə arxiv şəklində və ya bizim təqdim etdiyimiz API vasitəsilə skriptdən istifadə etməklə yerləşdirilən Tarantool Data Grid klasterinə yüklənir.

Tətbiq nümunələri

Tarantool Data Grid istifadə edərək hansı proqramlar yaradıla bilər? Əslində, əksər biznes tapşırıqları bir şəkildə məlumat axınının işlənməsi, saxlanması və əldə edilməsi ilə bağlıdır. Buna görə də, təhlükəsiz saxlanmalı və əldə edilməli olan böyük məlumat axınınız varsa, məhsulumuz sizə çoxlu inkişaf vaxtına qənaət edə və diqqətinizi biznes məntiqinizə yönəldə bilər.

Məsələn, biz daşınmaz əmlak bazarı haqqında məlumat toplamaq istəyirik ki, gələcəkdə, məsələn, ən yaxşı təkliflər haqqında məlumatımız olsun. Bu vəziyyətdə aşağıdakı vəzifələri vurğulayacağıq:

  1. Açıq mənbələrdən məlumat toplayan robotlar bizim məlumat mənbələrimiz olacaq. Hazır həllərdən istifadə etməklə və ya istənilən dildə kod yazmaqla bu problemi həll edə bilərsiniz.
  2. Sonra, Tarantool Data Grid məlumatları qəbul edəcək və saxlayacaq. Fərqli mənbələrdən alınan məlumat formatı fərqlidirsə, o zaman Lua-da vahid formata çevrilməni həyata keçirəcək kod yaza bilərsiniz. İlkin emal mərhələsində siz həmçinin, məsələn, dublikat təklifləri süzgəcdən keçirə və ya verilənlər bazasında bazarda işləyən agentlər haqqında məlumatları əlavə olaraq yeniləyə biləcəksiniz.
  3. İndi siz artıq verilənlərlə doldurula və məlumat seçimləri edə bilən klasterdə genişlənə bilən həlliniz var. Sonra yeni funksionallıq tətbiq edə bilərsiniz, məsələn, məlumat üçün sorğu verəcək və gündə ən sərfəli təklifi verəcək bir xidmət yaza bilərsiniz - bunun üçün konfiqurasiya faylında bir neçə sətir və bir az Lua kodu tələb olunur.

Növbəti nədir?

Bizim prioritetimiz istifadə asanlığını artırmaqdır Tarantool Data Grid. Məsələn, bu, sandboxda işləyən işləyicilərin profillənməsi və sazlanması üçün dəstəyi olan IDE-dir.

Biz təhlükəsizlik məsələlərinə də böyük diqqət yetiririk. Hazırda biz yüksək təhlükəsizlik səviyyəsini təsdiqləmək və fərdi məlumatların informasiya sistemlərində və dövlət informasiya sistemlərində istifadə olunan proqram məhsullarının sertifikatlaşdırılması tələblərinə cavab vermək üçün Rusiyanın FSTEC tərəfindən sertifikatlaşdırmadan keçirik.

Mənbə: www.habr.com

Добавить комментарий