Tarantool деректер торының архитектурасы мен мүмкіндіктері

Tarantool деректер торының архитектурасы мен мүмкіндіктері

2017 жылы біз Альфа-Банктің инвестициялық бизнесінің транзакциялық өзегін дамытуға арналған конкурста жеңіске жеттік және жұмысты бастадық (HighLoad++ 2018-те инвестициялық бизнестің негізі туралы есеппен) сөйледі Владимир Дрынкин, Альфа Банк инвестициялық бизнесінің транзакциялық негізгі бөлімінің басшысы). Бұл жүйе әртүрлі көздерден алынған транзакция деректерін әртүрлі форматта біріктіріп, деректерді біртұтас пішінге келтіріп, сақтауды және оған қол жеткізуді қамтамасыз етуі керек еді.

Әзірлеу барысында жүйе дамып, функционалдылыққа ие болды және белгілі бір уақытта біз тапсырмалардың қатаң анықталған ауқымын шешу үшін жасалған қолданбалы бағдарламалық жасақтамадан әлдеқайда көп нәрсені кристаллизациялағанымызды түсіндік: біз жетістікке жеттік. тұрақты жады бар таратылған қосымшаларды құру жүйесі. Біз жинаған тәжірибе жаңа өнімнің негізін құрады - Tarantool деректер торы (TDG).

Мен TDG архитектурасы және әзірлеу барысында біз келген шешімдер туралы сөйлескім келеді, сізді негізгі функционалдық мүмкіндіктерімен таныстырғым келеді және біздің өнім толық шешімдерді құру үшін негіз бола алатынын көрсеткім келеді.

Архитектуралық тұрғыдан біз жүйені бөлек бөлдік рөлдері, олардың әрқайсысы белгілі бір мәселелер ауқымын шешуге жауапты. Жалғыз іске қосылған қолданба данасы бір немесе бірнеше рөл түрлерін жүзеге асырады. Кластерде бір түрдегі бірнеше рөлдер болуы мүмкін:

Tarantool деректер торының архитектурасы мен мүмкіндіктері

Connector

Коннектор сыртқы әлеммен байланыс үшін жауап береді; оның міндеті - сұрауды қабылдау, оны талдау және егер бұл сәтті болса, деректерді енгізу процессорына өңдеуге жіберу. Біз HTTP, SOAP, Kafka, FIX пішімдерін қолдаймыз. Архитектура жақында IBM MQ қолдауымен жаңа пішімдерге қолдау қосуға мүмкіндік береді. Егер сұрауды талдау сәтсіз болса, қосқыш қатені қайтарады; әйтпесе, ол одан әрі өңдеу кезінде қате орын алса да, сұрау сәтті өңделген деп жауап береді. Бұл сұрауларды қайталауды білмейтін жүйелермен жұмыс істеу үшін арнайы жасалды - немесе, керісінше, оны тым табанды түрде жасайды. Деректерді жоғалтпау үшін жөндеу кезегі қолданылады: нысан алдымен оған кіреді және сәтті өңдеуден кейін ғана одан жойылады. Әкімші жөндеу кезегінде қалған нысандар туралы ескертулер ала алады және бағдарламалық құрал қатесін немесе аппараттық құрал ақауын жойғаннан кейін әрекетті қайталаңыз.

Енгізу процессоры

Енгізу процессоры алынған мәліметтерді сипаттамалық белгілеріне қарай жіктейді және сәйкес процессорларды шақырады. Өңдеушілер – құм жәшігінде жұмыс істейтін Lua коды, сондықтан олар жүйенің жұмысына әсер ете алмайды. Бұл кезеңде деректерді қажетті пішінге дейін азайтуға болады, ал қажет болған жағдайда қажетті логиканы жүзеге асыра алатын тапсырмалардың ерікті санын іске қосуға болады. Мысалы, Tarantool деректер торында құрастырылған MDM (Master Data Management) өнімінде жаңа пайдаланушыны қосқанда сұрауды өңдеуді бәсеңдетпеу үшін біз алтын жазба жасауды бөлек тапсырма ретінде бастаймыз. Құм жәшік деректерді оқуға, өзгертуге және қосуға арналған сұрауларды қолдайды, сақтау түрінің барлық рөлдерінде кейбір функцияларды орындауға және нәтижені біріктіруге мүмкіндік береді (карталау/азайту).

Өңдеушілер файлдарда сипатталуы мүмкін:

sum.lua

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

Содан кейін конфигурацияда жарияланған:

functions:
  sum: { __file: sum.lua }

Неліктен Луа? Луа - өте қарапайым тіл. Біздің тәжірибемізге сүйенсек, онымен танысқаннан кейін бір-екі сағаттан кейін адамдар өз мәселесін шешетін код жаза бастайды. Және бұл тек кәсіби әзірлеушілер ғана емес, мысалы, талдаушылар. Сонымен қатар, джит компиляторының арқасында Луа өте жылдам жұмыс істейді.

сақтау

Сақтау орны тұрақты деректерді сақтайды. Сақтау алдында деректер деректер схемасымен салыстырылады. Схеманы сипаттау үшін кеңейтілген форматты қолданамыз Apache Avro. Мысал:

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

Осы сипаттаманың негізінде DDL (деректерді анықтау тілі) Tarantula ДҚБЖ үшін автоматты түрде жасалады және GraphQL деректерге қол жеткізу схемасы.

Деректердің асинхронды репликациясына қолдау көрсетіледі (синхронды қосу жоспарлары бар).

Шығару процессоры

Кейде жаңа деректердің келуі туралы сыртқы тұтынушыларды хабардар ету қажет, бұл үшін Шығыс процессорының рөлі бар. Деректерді сақтағаннан кейін оны сәйкес өңдеушіге жіберуге болады (мысалы, оны тұтынушы талап ететін пішінге келтіру үшін) - содан кейін жіберу үшін қосқышқа беріледі. Мұнда жөндеу кезегі де қолданылады: егер нысанды ешкім қабылдамаса, әкімші кейінірек әрекетті қайталай алады.

Масштабтау

Қосқыш, кіріс процессоры және шығыс процессор рөлдері штатсыз болып табылады, бұл бізге қажетті рөл түрі қосылған жаңа қолданба даналарын қосу арқылы жүйені көлденеңінен масштабтауға мүмкіндік береді. Сақтау көлденең масштабтау үшін қолданылады тәсіл виртуалды шелектерді пайдаланып кластерді ұйымдастыру. Жаңа серверді қосқаннан кейін ескі серверлердің кейбір шелектері фондық режимде жаңа серверге жылжытылады; бұл пайдаланушылар үшін ашық түрде болады және бүкіл жүйенің жұмысына әсер етпейді.

Деректер сипаттары

Объектілер өте үлкен және басқа объектілерді қамтуы мүмкін. Біз бір виртуалды шелектегі барлық тәуелділіктері бар нысанды сақтау арқылы деректерді қосу және жаңарту атомдылығын қамтамасыз етеміз. Бұл нысанның бірнеше физикалық серверлерге «таралуына» жол бермейді.

Нұсқаларды құруға қолдау көрсетіледі: нысанның әрбір жаңартуы жаңа нұсқаны жасайды және біз әрқашан уақыт бөлігін алып, сол кездегі әлемнің қалай көрінгенін көре аламыз. Ұзақ тарихты қажет етпейтін деректер үшін біз нұсқалардың санын шектей аламыз немесе тіпті біреуін ғана сақтай аламыз - ең соңғысын, яғни белгілі бір түрге арналған нұсқаны ажыратуға болады. Сондай-ақ, тарихты уақыт бойынша шектеуге болады: мысалы, 1 жылдан асқан белгілі бір түрдегі барлық нысандарды жою. Мұрағаттауға да қолдау көрсетіледі: біз кластердегі орынды босатып, көрсетілген уақыттан асқан нысандарды жүктей аламыз.

міндеттері

Қызықты мүмкіндіктердің арасында тапсырмаларды кесте бойынша, пайдаланушының сұрауы бойынша немесе құм жәшігінен бағдарламалық түрде іске қосу мүмкіндігін атап өткен жөн:

Tarantool деректер торының архитектурасы мен мүмкіндіктері

Мұнда біз тағы бір рөлді көреміз - жүгіруші. Бұл рөл азаматтығы жоқ және осы рөлге ие қосымша бағдарлама даналарын қажетінше кластерге қосуға болады. Жүгірушінің міндеті - тапсырмаларды орындау. Жоғарыда айтылғандай, құм жәшігінен жаңа тапсырмаларды жасауға болады; олар сақтау орнында кезекте сақталады, содан кейін жүгірушіде орындалады. Тапсырманың бұл түрі Жұмыс деп аталады. Бізде Тапсырма деп аталатын тапсырма түрі де бар - бұл кесте бойынша (cron синтаксисін пайдалану) немесе сұраныс бойынша орындалатын пайдаланушы анықтайтын тапсырмалар. Мұндай тапсырмаларды іске қосу және қадағалау үшін бізде ыңғайлы тапсырмалар менеджері бар. Бұл функция қолжетімді болуы үшін жоспарлаушы рөлін қосу керек; бұл рөлдің күйі бар, сондықтан ол масштабталмайды, бірақ бұл талап етілмейді; сонымен бірге, барлық басқа рөлдер сияқты, егер шебер кенеттен бас тартса, жұмыс істей бастайтын көшірме болуы мүмкін.

Тіркеуші

Басқа рөл тіркеуші деп аталады. Ол кластердің барлық мүшелерінен журналдарды жинайды және оларды веб-интерфейс арқылы жүктеп салуға және қарауға арналған интерфейсті қамтамасыз етеді.

Қызметтер

Айта кету керек, жүйе қызметтерді құруды жеңілдетеді. Конфигурация файлында сіз құм жәшігінде жұмыс істейтін пайдаланушы жазған өңдеушіге қандай сұраулар жіберілетінін көрсете аласыз. Бұл өңдегіште, мысалы, аналитикалық сұраудың қандай да бір түрін іске қосып, нәтижені қайтаруға болады.

Қызмет конфигурация файлында сипатталған:

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

GraphQL API автоматты түрде жасалады және қызмет қоңырау шалу үшін қолжетімді болады:

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

Бұл өңдеушіні шақырады sumол нәтижені қайтарады:

3

Сұрау профилін жасау және метрика

Жүйенің жұмысын және профильдеу сұрауларын түсіну үшін біз OpenTracing протоколына қолдау көрсеттік. Жүйе сұраныс бойынша ақпаратты осы хаттаманы қолдайтын құралдарға жібере алады, мысалы, Zipkin, бұл сұраудың қалай орындалғанын түсінуге мүмкіндік береді:

Tarantool деректер торының архитектурасы мен мүмкіндіктері

Әрине, жүйе Prometheus көмегімен жиналатын және Grafana көмегімен визуализацияланатын ішкі көрсеткіштерді қамтамасыз етеді.

Орналастыру

Tarantool деректер торын RPM бумаларынан немесе мұрағаттан таратуға немесе Ansible утилитасын пайдалана отырып орналастыруға болады, сонымен қатар Kubernetes қолдауы бар (Tarantool Kubernetes операторы).

Бизнес логикасын жүзеге асыратын қолданба (конфигурация, өңдеушілер) UI арқылы мұрағат түрінде немесе біз ұсынған API арқылы сценарийді пайдалану арқылы орналастырылған Tarantool Data Grid кластеріне жүктеледі.

Философияның бастамалары

Tarantool Data Grid көмегімен қандай қолданбаларды жасауға болады? Іс жүзінде көптеген бизнес тапсырмалары қандай да бір түрде деректер ағынын өңдеуге, сақтауға және қол жеткізуге қатысты. Сондықтан, егер сізде қауіпсіз сақталуы және қолжетімділігі қажет деректердің үлкен ағындары болса, онда біздің өнім сізге көп әзірлеу уақытын үнемдей алады және бизнес логикасына назар аударады.

Мысалы, біз жылжымайтын мүлік нарығы туралы ақпаратты жинағымыз келеді, осылайша, мысалы, болашақта бізде ең жақсы ұсыныстар туралы ақпарат болады. Бұл жағдайда біз келесі міндеттерді атап өтеміз:

  1. Ашық көздерден ақпарат жинайтын роботтар біздің деректер көздеріміз болады. Бұл мәселені дайын шешімдер арқылы немесе кез келген тілде код жазу арқылы шешуге болады.
  2. Содан кейін Tarantool Data Grid деректерді қабылдайды және сақтайды. Егер әртүрлі көздерден алынған деректер пішімі әртүрлі болса, онда сіз бір пішімге түрлендіруді жүзеге асыратын кодты Lua тілінде жаза аласыз. Алдын ала өңдеу кезеңінде сіз, мысалы, қайталанатын ұсыныстарды сүзе аласыз немесе дерекқордағы нарықта жұмыс істейтін агенттер туралы ақпаратты қосымша жаңарта аласыз.
  3. Енді сізде деректермен толтыруға және деректерді таңдауға болатын кластерде масштабталатын шешім бар. Содан кейін сіз жаңа функционалдылықты жүзеге асыра аласыз, мысалы, деректерге сұраныс жасайтын және күніне ең тиімді ұсынысты беретін қызметті жаза аласыз - бұл конфигурация файлында бірнеше жолды және кішкене Lua кодын қажет етеді.

Ары қарай не?

Біздің басымдылығымыз – пайдаланудың қарапайымдылығын арттыру Tarantool деректер торы. Мысалы, бұл құм жәшігінде іске қосылған өңдегіштерді профильдеуге және жөндеуге қолдау көрсететін IDE.

Біз қауіпсіздік мәселелеріне де үлкен көңіл бөлеміз. Дәл қазір біз қауіпсіздіктің жоғары деңгейін растау және жеке деректердің ақпараттық жүйелерінде және мемлекеттік ақпараттық жүйелерде қолданылатын бағдарламалық өнімдерді сертификаттау талаптарын орындау үшін Ресейдің FSTEC сертификаттауынан өтіп жатырмыз.

Ақпарат көзі: www.habr.com

пікір қалдыру