Tarantool Data Grid-ийн архитектур ба боломжууд

Tarantool Data Grid-ийн архитектур ба боломжууд

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

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

Би TDG-ийн архитектур болон хөгжүүлэлтийн явцад олж авсан шийдлүүдийн талаар ярилцаж, үндсэн функцуудыг танилцуулж, манай бүтээгдэхүүн хэрхэн бүрэн шийдлийг бий болгох үндэс суурь болж болохыг харуулахыг хүсч байна.

Архитектурын хувьд бид системийг тусад нь хуваасан дүрүүд, тус бүр нь тодорхой хэмжээний асуудлыг шийдвэрлэх үүрэгтэй. Нэг ажиллаж байгаа програмын жишээ нь нэг буюу хэд хэдэн үүргийн төрлийг хэрэгжүүлдэг. Кластерт ижил төрлийн хэд хэдэн үүрэг байж болно:

Tarantool Data Grid-ийн архитектур ба боломжууд

холбогч

Холбогч нь гадаад ертөнцтэй харилцах үүрэгтэй; Түүний даалгавар бол хүсэлтийг хүлээн авч, задлан шинжилж, хэрэв амжилттай болбол өгөгдлийг оролтын процессор руу боловсруулахад илгээнэ. Бид 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 }

Яагаад Луа гэж? Луа бол маш энгийн хэл юм. Бидний туршлагаас харахад хүмүүс үүнийг мэдсэнээс хойш хоёр цагийн дараа асуудлаа шийдэх код бичиж эхэлдэг. Эдгээр нь зөвхөн мэргэжлийн хөгжүүлэгчид төдийгүй, жишээлбэл, шинжээчид юм. Үүнээс гадна, jit хөрвүүлэгчийн ачаар Луа маш хурдан ажилладаг.

Хадгалалт

Хадгалалт нь байнгын өгөгдлийг хадгалдаг. Хадгалахын өмнө өгөгдлийг өгөгдлийн схемийн дагуу баталгаажуулна. Хэлхээг дүрслэхийн тулд бид өргөтгөсөн форматыг ашигладаг Апачи АвроБайна. Жишээ нь:

{
    "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-ийн архитектур ба боломжууд

Энд бид өөр дүрийг харж байна - гүйгч. Энэ үүрэг нь харьяалалгүй бөгөөд шаардлагатай бол кластерт энэ үүрэг бүхий нэмэлт програмын тохиолдлуудыг нэмж болно. Гүйгчийн үүрэг бол даалгавраа биелүүлэх явдал юм. Дээр дурдсанчлан, хамгаалагдсан хязгаарлагдмал орчинд шинэ даалгавар үүсгэх боломжтой; тэдгээр нь хадгалалтын дараалалд хадгалагдаж, дараа нь гүйгч дээр гүйцэтгэгддэг. Энэ төрлийн ажлыг Job гэж нэрлэдэг. Бидэнд бас даалгавар гэж нэрлэгддэг ажлын төрөл байдаг - эдгээр нь хуваарийн дагуу (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 оператор).

Бизнесийн логикийг (тохиргоо, зохицуулагч) хэрэгжүүлдэг программыг UI-ээр дамжуулан архив хэлбэрээр эсвэл бидний өгсөн API-ээр дамжуулан скрипт ашиглан байршуулсан Tarantool Data Grid кластерт ачаалдаг.

Програмын жишээ

Tarantool Data Grid ашиглан ямар программ үүсгэж болох вэ? Үнэн хэрэгтээ ихэнх бизнесийн даалгавар нь мэдээллийн урсгалыг боловсруулах, хадгалах, хандахтай холбоотой байдаг. Тиймээс, хэрэв танд найдвартай хадгалагдах, хандах шаардлагатай их хэмжээний мэдээллийн урсгал байгаа бол манай бүтээгдэхүүн танд хөгжүүлэлтийн маш их цагийг хэмнэж, таны бизнесийн логик дээр анхаарлаа төвлөрүүлж чадна.

Жишээлбэл, бид үл хөдлөх хөрөнгийн зах зээлийн талаархи мэдээллийг цуглуулахыг хүсч байна, ингэснээр ирээдүйд, жишээлбэл, бид хамгийн сайн саналуудын талаар мэдээлэлтэй болно. Энэ тохиолдолд бид дараахь ажлуудыг онцлон тэмдэглэх болно.

  1. Нээлттэй эх сурвалжаас мэдээлэл цуглуулдаг роботууд бидний мэдээллийн эх сурвалж болно. Та энэ асуудлыг аль ч хэл дээр бэлэн шийдэл эсвэл код бичих замаар шийдэж болно.
  2. Дараа нь Tarantool Data Grid өгөгдлийг хүлээн авч хадгална. Хэрэв өөр өөр эх сурвалжаас авсан өгөгдлийн формат өөр бол та нэг формат руу хөрвүүлэх кодыг Луа хэл дээр бичиж болно. Урьдчилсан боловсруулалтын үе шатанд та жишээлбэл, давхардсан саналыг шүүж, зах зээлд ажиллаж буй агентуудын талаарх мэдээллийг мэдээллийн санд нэмж шинэчлэх боломжтой болно.
  3. Одоо та өгөгдлөөр дүүргэж, өгөгдлийн сонголт хийх боломжтой кластерт өргөтгөх боломжтой шийдэлтэй болсон. Дараа нь та шинэ функцийг хэрэгжүүлж болно, жишээлбэл, өгөгдөлд хүсэлт гаргах үйлчилгээг бичиж, өдөрт хамгийн ашигтай саналыг өгөх болно - энэ нь тохиргооны файлд цөөн хэдэн мөр, бага зэрэг Луа код шаарддаг.

Дараа нь юу юм бэ?

Бидний тэргүүлэх чиглэл бол ашиглахад хялбар байдлыг сайжруулах явдал юм Tarantool мэдээллийн сүлжээ. Жишээлбэл, энэ нь хамгаалагдсан хязгаарлагдмал орчинд ажиллаж буй профайл болон дибаг хийх зохицуулагчийг дэмждэг IDE юм.

Мөн аюулгүй байдлын асуудалд ихээхэн анхаарал хандуулдаг. Яг одоо бид хувийн мэдээллийн систем, төрийн мэдээллийн системд ашиглагдаж буй програм хангамжийн бүтээгдэхүүний баталгаажуулалтын шаардлагыг хангаж, аюулгүй байдлын өндөр түвшинг баталгаажуулах зорилгоор ОХУ-ын FSTEC-ээс баталгаажуулалт хийлгэж байна.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх