Архитектура ва имкониятҳои Tarantool Data Grid

Архитектура ва имкониятҳои Tarantool Data Grid

Дар соли 2017 мо дар озмун оид ба рушди асосии транзаксионии тиҷорати сармоягузории Алфа-Бонк ғолиб омадем ва ба кор шурӯъ кардем (дар HighLoad++ 2018 бо гузориш дар бораи асосии тиҷорати сармоягузорӣ сухан ронд Владимир Дринкин, роҳбари асосии транзаксионии тиҷорати сармоягузории Алфа Банк). Ин система мебоист маълумоти муомилотро аз манбаъҳои гуногун дар форматҳои гуногун ҷамъоварӣ намуда, маълумотро ба шакли ягона оварда, нигоҳ доштани он ва дастрасиро ба он таъмин мекард.

Дар ҷараёни таҳия, система таҳаввул кард ва функсияҳоро ба даст овард ва дар баъзе лаҳзаҳо мо фаҳмидем, ки мо чизеро на танҳо нармафзори барномавӣ, ки барои ҳалли як қатор вазифаҳои ба таври қатъӣ муайяншуда сохта шудааст, кристаллизатсия мекунем: мо муваффақ шудем. системаи сохтани замимаҳои тақсимшуда бо нигаҳдории доимӣ. Таҷрибае, ки мо андӯхтаем, асоси маҳсулоти навро ташкил дод - Шабакаи маълумотҳои Tarantool (ТДГ).

Ман мехоҳам дар бораи меъмории TDG ва қарорҳое, ки мо дар ҷараёни таҳия ба даст овардаем, сӯҳбат кунам, шуморо бо функсияҳои асосӣ шинос кунам ва нишон диҳам, ки чӣ гуна маҳсулоти мо метавонад барои сохтани қарорҳои мукаммал асос гардад.

Аз ҷиҳати меъморӣ мо системаро ба алоҳида тақсим кардем нақшҳо, ки хар кадоми онхо барои халли як катор проблемахо масъуланд. Як мисоли як барномаи иҷрошаванда як ё якчанд намуди нақшҳоро амалӣ мекунад. Дар кластер метавонад якчанд нақшҳои якхела мавҷуд бошанд:

Архитектура ва имкониятҳои Tarantool Data Grid

пайвасткунаки

Пайвасткунак барои иртибот бо ҷаҳони беруна масъул аст; Вазифаи он қабули дархост, таҳлили он ва агар ин муваффақ шавад, пас маълумотро барои коркард ба протсессори вуруд фиристед. Мо форматҳои HTTP, SOAP, Kafka, FIX -ро дастгирӣ мекунем. Меъморӣ ба шумо имкон медиҳад, ки танҳо дастгирӣ барои форматҳои нав илова кунед, бо дастгирии IBM MQ ба наздикӣ. Агар таҳлили дархост ноком шавад, пайвасткунанда хатогиро бармегардонад; дар акси ҳол, он ҷавоб медиҳад, ки дархост бомуваффақият коркард шудааст, ҳатто агар ҳангоми коркарди минбаъдаи он хатогӣ рух дода бошад. Ин махсусан барои кор кардан бо системаҳое анҷом дода шудааст, ки чӣ тавр такрор кардани дархостҳоро намедонанд - ё, баръакс, онро аз ҳад зиёд устуворона иҷро мекунанд. Барои аз даст надодани маълумот, навбати таъмир истифода мешавад: объект аввал ба он дохил мешавад ва танҳо пас аз коркарди бомуваффақият аз он хориҷ карда мешавад. Администратор метавонад огоҳиҳоро дар бораи объектҳое, ки дар навбати таъмир боқӣ мондаанд, қабул кунад ва пас аз бартараф кардани хатогии нармафзор ё нокомии сахтафзор, дубора кӯшиш кунед.

Протсессори вуруд

Протсессори воридотӣ маълумоти гирифташударо аз рӯи хусусиятҳои хос гурӯҳбандӣ мекунад ва протсессори мувофиқро даъват мекунад. Корфармоҳо рамзи Lua мебошанд, ки дар қуттии қум кор мекунанд, бинобар ин онҳо наметавонанд ба кори система таъсир расонанд. Дар ин марҳила маълумотро ба шакли зарурӣ кам кардан мумкин аст ва дар ҳолати зарурӣ шумораи худсарона вазифаҳоро оғоз кардан мумкин аст, ки мантиқи заруриро амалӣ карда метавонанд. Масалан, дар маҳсулоти MDM (Master Data Management), ки дар Tarantool Data Grid сохта шудааст, ҳангоми илова кардани корбари нав, бо мақсади суст накардани коркарди дархост, мо эҷоди сабти тиллоиро ҳамчун вазифаи алоҳида оғоз мекунем. Қум қуттии дархостҳоро барои хондан, тағир додан ва илова кардани маълумот дастгирӣ мекунад, ба шумо имкон медиҳад, ки баъзе вазифаҳоро дар ҳама нақшҳои намуди нигоҳдорӣ ва ҷамъбасти натиҷа иҷро кунед (харита/камкунӣ).

Корфармоҳоро дар файлҳо тавсиф кардан мумкин аст:

sum.lua

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

Ва он гоҳ, ки дар конфигуратсия эълон карда шудааст:

functions:
  sum: { __file: sum.lua }

Чаро Луа? Луа забони хеле содда аст. Бар асоси таҷрибаи мо, пас аз чанд соати шиносоӣ, одамон ба навиштани коде шурӯъ мекунанд, ки мушкилоти онҳоро ҳал мекунад. Ва инҳо на танҳо таҳиягарони касбӣ, балки, масалан, таҳлилгарон мебошанд. Илова бар ин, ба шарофати compiler jit, Луа хеле зуд кор мекунад.

гардероб

Нигоҳдорӣ маълумоти доимиро нигоҳ медорад. Пеш аз захира кардан, маълумот дар муқоиса бо схемаи додаҳо тасдиқ карда мешавад. Барои тавсифи схема мо формати васеъро истифода мебарем 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 (Забони муайянкунии маълумот) ба таври худкор барои DBMS Tarantula тавлид мешавад ва GraphQL схема барои дастрасии маълумот.

Репликатсияи асинхронии додаҳо дастгирӣ карда мешавад (нақшаи илова кардани синхронӣ вуҷуд дорад).

Протсессори баромад

Баъзан лозим меояд, ки истеъмолкунандагони беруна дар бораи ворид шудани маълумоти нав огоҳ карда шаванд; бо ин мақсад нақши протсессори Натиҷа вуҷуд дорад. Пас аз захира кардани маълумот, онро метавон ба коркардкунандаи мувофиқ интиқол дод (масалан, онро ба шакли талабкардаи истеъмолкунанда овардан) - ва сипас барои ирсол ба пайвасткунак интиқол дода мешавад. Дар ин ҷо навбати таъмир низ истифода мешавад: агар касе объектро қабул накунад, маъмур метавонад дертар дубора кӯшиш кунад.

Миқёскунӣ

Нақшҳои пайвасткунак, протсессори вуруд ва протсессори баромад бидуни шаҳрвандӣ мебошанд ва ба мо имкон медиҳанд, ки системаро ба таври уфуқӣ тавассути илова кардани мисолҳои нави барнома бо навъи нақши дилхоҳ фаъол созем. Нигоҳдорӣ барои миқёси уфуқӣ истифода мешавад равиши барои ташкили кластер бо истифода аз сатилҳои виртуалӣ. Пас аз илова кардани сервери нав, баъзе сатилҳо аз серверҳои кӯҳна ба сервери нав дар замина интиқол дода мешаванд; ин ба таври шаффоф ба истифодабарандагон рӯй медиҳад ва ба кори тамоми система таъсир намерасонад.

Хусусиятҳои додаҳо

Объектҳо метавонанд хеле калон бошанд ва объектҳои дигарро дар бар гиранд. Мо атомии илова ва навсозии маълумотро тавассути нигоҳ доштани объект бо ҳама вобастагӣ дар як сатили виртуалӣ таъмин мекунем. Ин имкон намедиҳад, ки объект дар якчанд серверҳои физикӣ паҳн шавад.

Версиясозӣ дастгирӣ мешавад: ҳар як навсозии объект версияи нав эҷод мекунад ва мо ҳамеша метавонем як буридаи вақтро бигирем ва бубинем, ки он вақт ҷаҳон чӣ гуна буд. Барои маълумоте, ки ба таърихи тӯлонӣ ниёз надоранд, мо метавонем шумораи версияҳоро маҳдуд кунем ё ҳатто танҳо як версияи охиринро нигоҳ дорем, яъне версияи як навъи муайянро аслан ғайрифаъол созем. Шумо инчунин метавонед таърихро бо вақт маҳдуд кунед: масалан, ҳама объектҳои навъи муайяни аз 1 сол калонтарро нест кунед. Архивкунӣ низ дастгирӣ мешавад: мо метавонем объектҳои аз вақти муқарраршуда калонтарро холӣ карда, дар кластер ҷой холӣ кунем.

вазифаҳо

Дар байни хусусиятҳои ҷолиб, қобили зикр аст, ки қобилияти оғоз кардани вазифаҳо аз рӯи ҷадвал, бо дархости корбар ё барномавӣ аз қуттии қум:

Архитектура ва имкониятҳои Tarantool Data Grid

Дар ин ҷо мо нақши дигар - давандаро мебинем. Ин нақш бидуни шаҳрвандӣ аст ва дар ҳолати зарурӣ мисолҳои иловагии барномаро бо ин нақш метавон ба кластер илова кард. Масъулияти даванда иҷрои вазифаҳост. Тавре зикр гардид, аз қуттии қум вазифаҳои нав тавлид кардан мумкин аст; онҳо дар як навбат дар нигаҳдорӣ захира карда мешаванд ва сипас дар даванда иҷро карда мешаванд. Ин намуди вазифа Айюб номида мешавад. Мо инчунин як намуди вазифа дорем, ки Вазифа ном дорад - инҳо вазифаҳои аз ҷониби корбар муайяншуда мебошанд, ки аз рӯи ҷадвал (бо истифода аз синтаксиси cron) ё мувофиқи дархост иҷро мешаванд. Барои оғоз ва пайгирии чунин вазифаҳо, мо мудири вазифаҳои мувофиқ дорем. Барои он ки ин функсия дастрас бошад, шумо бояд нақши нақшасозро фаъол созед; ин нақш дорои давлат аст, бинобар ин миқёс надорад, аммо он талаб карда намешавад; дар айни замон, мисли тамоми нақшҳои дигар, он метавонад нусхабардорӣ дошта бошад, ки дар сурати ногаҳон рад кардани устод ба кор шурӯъ мекунад.

Журналист

Нақши дигарро logger меноманд. Он гузоришҳоро аз ҳамаи аъзоёни кластер ҷамъоварӣ мекунад ва интерфейсро барои боргузорӣ ва дидани онҳо тавассути интерфейси веб таъмин мекунад.

Хизматрасониҳо

Қобили зикр аст, ки система эҷоди хидматҳоро осон мекунад. Дар файли конфигуратсия шумо метавонед муайян кунед, ки кадом дархостҳо ба коркарди аз ҷониби корбар навишташуда, ки дар қуттии рег кор мекунад, фиристода мешаванд. Дар ин коркардкунанда, шумо метавонед, масалан, як навъ дархости таҳлилиро иҷро кунед ва натиҷаро баргардонед.

Хидмат дар файли конфигуратсия тавсиф шудааст:

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

API GraphQL ба таври худкор тавлид мешавад ва хидмат барои занг дастрас мешавад:

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

Ин коркардкунандаро даъват мекунад sumки натиҷаро бармегардонад:

3

Профили дархост ва ченакҳо

Барои фаҳмидани кори система ва дархостҳои профилсозӣ, мо протоколи OpenTracing-ро дастгирӣ кардем. Система метавонад маълумотро тибқи дархост ба асбобҳое, ки ин протоколро дастгирӣ мекунанд, ба монанди Zipkin фиристад, ки ба шумо имкон медиҳад фаҳмед, ки чӣ гуна дархост иҷро шудааст:

Архитектура ва имкониятҳои Tarantool Data Grid

Табиист, ки система ченакҳои дохилиро пешниҳод мекунад, ки онҳоро бо истифода аз Prometheus ҷамъоварӣ кардан ва бо истифода аз Grafana дидан мумкин аст.

Ҷойгир кардан

Tarantool Data Grid-ро аз бастаҳои RPM ё бойгонӣ бо истифода аз утилитаи тақсимот ё Ansible ҷойгир кардан мумкин аст, инчунин дастгирии Kubernetes мавҷуд аст (Оператори Tarantool Kubernetes).

Барномае, ки мантиқи тиҷоратро (конфигуратсия, коркардкунандагон) амалӣ мекунад, ба кластери ҷойгиршудаи Tarantool Data Grid дар шакли бойгонӣ тавассути UI ё бо истифода аз скрипт тавассути API пешниҳодкардаи мо бор карда мешавад.

Барномаҳои намунавӣ

Бо истифода аз Tarantool Data Grid кадом барномаҳоро сохтан мумкин аст? Дар асл, аксари вазифаҳои тиҷоратӣ ба гунае бо коркард, нигоҳдорӣ ва дастрасӣ ба ҷараёни додаҳо алоқаманданд. Аз ин рӯ, агар шумо ҷараёнҳои зиёди маълумот дошта бошед, ки бояд ба таври бехатар нигоҳ дошта шаванд ва дастрас карда шаванд, пас маҳсулоти мо метавонад ба шумо вақти зиёди таҳияро сарфа кунад ва ба мантиқи тиҷорати шумо тамаркуз кунад.

Масалан, мо мехоҳем дар бораи бозори амволи ғайриманқул маълумот ҷамъ кунем, то дар оянда, масалан, мо дар бораи пешниҳодҳои беҳтарин маълумот дошта бошем. Дар ин ҳолат, мо вазифаҳои зеринро қайд мекунем:

  1. Роботҳое, ки маълумотро аз манбаъҳои кушод ҷамъ мекунанд, манбаи маълумоти мо хоҳанд буд. Шумо метавонед ин мушкилотро бо истифода аз ҳалли тайёр ё навиштани код бо дилхоҳ забон ҳал кунед.
  2. Минбаъд, Tarantool Data Grid маълумотро қабул ва захира мекунад. Агар формати маълумот аз сарчашмаҳои гуногун гуногун бошад, шумо метавонед дар Луа код нависед, ки табдилро ба формати ягона иҷро мекунад. Дар марҳилаи коркарди пешакӣ, шумо инчунин метавонед, масалан, пешниҳодҳои такрориро филтр кунед ё маълумотро дар бораи агентҳое, ки дар бозор кор мекунанд, дар пойгоҳи додаҳо навсозӣ кунед.
  3. Ҳоло шумо аллакай дар як кластер як ҳалли миқёспазир доред, ки онро бо маълумот пур кардан ва интихоби додаҳо кардан мумкин аст. Он гоҳ шумо метавонед функсияҳои навро татбиқ кунед, масалан, хидмате нависед, ки барои маълумот дархост кунад ва дар як рӯз пешниҳоди муфидтаринро пешниҳод кунад - ин чанд сатр дар файли конфигуратсия ва рамзи каме Луа талаб мекунад.

Чӣ оянда аст?

Афзалияти мо беҳтар кардани осонии рушд аст Шабакаи маълумотҳои Tarantool. Масалан, ин IDE бо дастгирии профилсозӣ ва ислоҳи коркардкунандагони дар қуттии қум кор мекунад.

Мо ба масъалахои бехатарй низ диккати калон медихем. Айни замон мо аз сертификатсияи FSTEC-и Русия барои тасдиқи сатҳи баланди амният ва қонеъ гардонидани талаботи сертификатсияи маҳсулоти нармафзоре, ки дар системаҳои иттилоотии маълумоти шахсӣ ва системаҳои иттилоотии давлатӣ истифода мешаванд, мегузарем.

Манбаъ: will.com

Илова Эзоҳ