Tarantool Data Grid архитектурасы жана мүмкүнчүлүктөрү

Tarantool Data Grid архитектурасы жана мүмкүнчүлүктөрү

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

Иштеп чыгуу процессинин жүрүшүндө система эволюцияланып, функцияга ээ болду жана кайсы бир учурда биз милдеттердин так аныкталган спектрин чечүү үчүн түзүлгөн колдонмо программалык камсыздоодон алда канча көп нерсени кристаллдаштырып жатканыбызды түшүндүк: биз ийгиликтүү болдук. туруктуу сактоо менен бөлүштүрүлгөн тиркемелерди куруу системасы. Биз топтогон тажрыйба жаңы продуктунун негизин түздү - Tarantool Data Grid (TDG).

Мен TDG архитектурасы жана иштеп чыгуу процессинде биз келген чечимдер жөнүндө айтып, негизги функциялар менен тааныштыргым келет жана биздин продукт кантип толук чечимдерди куруу үчүн негиз боло аларын көрсөткүм келет.

Архитектуралык жактан системаны өзүнчө бөлдүк роль, алардын ар бири көйгөйлөрдүн белгилүү бир спектрин чечүү үчүн жооптуу. Жалгыз иштеп жаткан колдонмо инстанциясы бир же бир нече рол түрлөрүн ишке ашырат. Кластерде бир түрдөгү бир нече ролдор болушу мүмкүн:

Tarantool Data Grid архитектурасы жана мүмкүнчүлүктөрү

Конектор

Connector тышкы дүйнө менен байланыш үчүн жооптуу болуп саналат; анын милдети суроо-талапты кабыл алуу, аны талдоо жана бул ийгиликтүү болсо, анда киргизүү процессоруна иштетүү үчүн маалыматтарды жөнөтүү болуп саналат. Биз HTTP, SOAP, Kafka, FIX форматтарын колдойбуз. Архитектура жаңы форматтарды колдоону кошууга мүмкүндүк берет, жакында IBM MQ колдоосу менен. Сурам талдоо ишке ашпай калса, туташтыргыч катаны кайтарат; антпесе, суроо-талап ийгиликтүү иштетилди деп жооп берет, атүгүл аны андан ары иштеп чыгуу учурунда ката пайда болгон. Бул суроо-талаптарды кайталоону билбеген системалар менен иштөө үчүн атайын жасалган - же, тескерисинче, өтө өжөрлүк менен. Маалыматтарды жоготпоо үчүн оңдоо кезеги колдонулат: объект алгач ага кирет жана ийгиликтүү иштетүүдөн кийин гана андан чыгарылат. Администратор оңдоо кезегинде калган объекттер жөнүндө эскертүүлөрдү ала алат жана программалык катаны же аппараттык камсыздоонун катасын жойгондон кийин, кайра аракет кылыңыз.

Киргизүү процессору

Киргизүү процессору алынган маалыматтарды мүнөздүү белгилери боюнча классификациялайт жана тиешелүү процессорлорду чакырат. Иштетүүчүлөр - бул кумкоргондо иштеген Lua коду, ошондуктан алар системанын иштешине таасир эте албайт. Бул этапта маалыматтар талап кылынган формага чейин кыскартылышы мүмкүн, ал эми зарыл болсо, керектүү логиканы ишке ашыра ала турган ыктыярдуу сандагы тапшырмалар ишке киргизилиши мүмкүн. Мисалы, Tarantool Data Gridге курулган 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 (Data Definition Language) Tarantula DBMS үчүн автоматтык түрдө түзүлөт жана GraphQL маалыматтарга кирүү схемасы.

Асинхрондук маалыматтардын репликациясы колдоого алынат (синхрондуу кошуу пландары бар).

Чыгуу процессору

Кээде тышкы керектөөчүлөргө жаңы маалыматтардын келиши жөнүндө билдирүү керек, бул үчүн Чыгуу процессорунун ролу бар. Маалыматтарды сактагандан кийин, аны тиешелүү иштеткичке (мисалы, аны керектөөчү талап кылган формага келтирүү үчүн) өткөрүп, андан кийин жөнөтүү үчүн туташтыргычка өткөрүп берсе болот. Бул жерде оңдоо кезеги да колдонулат: объектти эч ким кабыл албаса, администратор кийинчерээк кайра аракет кыла алат.

Масштабдоо

Туташтыргыч, киргизүү процессору жана чыгаруу процессорунун ролдору жарандыгы жок, бул бизге жөн гана жаңы тиркеме инстанцияларын кошуу менен системаны горизонталдык масштабда кеңейтүүгө мүмкүндүк берет, каалаган ролдун түрү иштетилген. Сактоо горизонталдуу масштабдоо үчүн колдонулат жакындоо виртуалдык чакаларды колдонуу менен кластерди уюштуруу. Жаңы серверди кошкондон кийин, эски серверлердин айрым чакалары фондо жаңы серверге жылдырылат; бул колдонуучулар үчүн ачык-айкын болот жана бүт системанын иштешине таасир этпейт.

Маалымат касиеттери

Объекттер өтө чоң жана башка объекттерди камтышы мүмкүн. Биз бир виртуалдык чакада бардык көз карандылыктары бар объектти сактоо менен маалыматтарды кошуу жана жаңыртуу атомдуулугун камсыз кылабыз. Бул объекттин бир нече физикалык серверге “жайылышынын” алдын алат.

Версиялоо колдоого алынат: объекттин ар бир жаңылануусу жаңы версияны жаратат жана биз ар дайым убакыттын бир бөлүгүн алып, ошол кездеги дүйнөнүн кандай болгонун көрө алабыз. Узак тарыхты талап кылбаган маалыматтар үчүн биз версиялардын санын чектей алабыз, жадагалса бир гана - эң акыркысын сактай алабыз, башкача айтканда, белгилүү бир түр үчүн версиялоону иштен чыгарабыз. Ошондой эле тарыхты убакыт боюнча чектей аласыз: мисалы, 1 жылдан ашкан белгилүү бир түрдөгү бардык объекттерди жок кылыңыз. Архивдөө да колдоого алынат: биз кластерде орун бошотуп, белгиленген убакыттан эски объекттерди түшүрө алабыз.

милдеттери

Кызыктуу өзгөчөлүктөрдүн арасында тапшырмаларды график боюнча, колдонуучунун өтүнүчү боюнча же кум кутусунан программалык түрдө ишке киргизүү мүмкүнчүлүгүн белгилей кетүү керек:

Tarantool Data Grid архитектурасы жана мүмкүнчүлүктөрү

Бул жерде биз дагы бир ролду көрөбүз - жөө күлүк. Бул роль жарандыгы жок жана бул ролу бар кошумча колдонмо инстанциялары керек болсо кластерге кошулушу мүмкүн. Жөө күлүктүн милдети – тапшырмаларды аткаруу. Жогоруда айтылгандай, кумкоргондон жаңы тапшырмаларды жаратууга болот; алар сактоо боюнча кезекте сакталып, андан кийин күлүк боюнча аткарылат. Мындай тапшырма Аюб деп аталат. Бизде ошондой эле Тапшырма деп аталган тапшырма түрү бар - бул график боюнча (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 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. Эми сизде кластерде масштабдуу чечим бар, аны маалыматтар менен толтурууга жана маалыматтарды тандоого болот. Андан кийин сиз жаңы функцияларды ишке ашыра аласыз, мисалы, маалыматтарга суроо-талапты жасай турган жана күнүнө эң пайдалуу сунушту бере турган кызматты жазыңыз - бул конфигурация файлында бир нече саптарды жана бир аз Lua кодун талап кылат.

Кийинкиси эмне?

Биздин приоритетибиз колдонуунун жеңилдигин жакшыртуу болуп саналат Tarantool Data Grid. Мисалы, бул кумкоргондо иштеген профилдештирүү жана мүчүлүштүктөрдү оңдоону колдогон IDE.

Биз коопсуздук маселелерине да чоң көңүл бурабыз. Учурда биз коопсуздуктун жогорку деңгээлин тастыктоо жана жеке маалыматтардын маалымат тутумдарында жана мамлекеттик маалымат системаларында колдонулган программалык продуктуларды сертификациялоо талаптарына жооп берүү үчүн Россиянын FSTEC тарабынан сертификациядан өтүп жатабыз.

Source: www.habr.com

Комментарий кошуу