Тек өңдеу ғана емес: біз Kafka Streams-тен таратылған дерекқорды қалай жасадық және одан не пайда болды

Эй Хабр!

туралы кітаптан кейін жүретінін еске саламыз Кафка біз кітапхана туралы бірдей қызықты еңбек шығардық Kafka Streams API.

Тек өңдеу ғана емес: біз Kafka Streams-тен таратылған дерекқорды қалай жасадық және одан не пайда болды

Әзірге қауымдастық осы қуатты құралдың шегін енді ғана үйреніп жатыр. Сонымен, жақында мақала жарық көрді, оның аудармасымен сіздерді таныстырғымыз келеді. Өз тәжірибесінен автор Кафка ағындарын таратылған деректер қоймасына қалай айналдыру керектігін айтады. Оқудан ләззат алыңыз!

Apache кітапханасы Кафка ағындары Apache Kafka үстінен таратылған ағынды өңдеу үшін бүкіл әлем бойынша кәсіпорындарда қолданылады. Бұл құрылымның бағаланбаған аспектілерінің бірі - ол жіптерді өңдеу негізінде өндірілген жергілікті күйді сақтауға мүмкіндік береді.

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

Егер сізді нысандарыңыздың формальды күйін қолдау үшін бірыңғай орталық дерекқорды пайдалануға мүмкіндік беретін балама тәсіл қызықтырса, оны оқып шығыңыз, бұл қызықты болады...

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

Бізге агент есептеріне негізделген әртүрлі нысандардың күйін сақтау керек болды (мысалы: сайт шабуылға ұшырады ма)? Kafka Streams жүйесіне көшірмес бұрын, біз көбінесе мемлекетті басқару үшін бірыңғай орталық дерекқорға (+ API қызметі) сүйенетінбіз. Бұл тәсілдің кемшіліктері бар: күні қарқынды жағдайлар бірізділік пен үндестіруді сақтау нағыз қиындыққа айналады. Деректер базасы тығырыққа айналуы немесе аяқталуы мүмкін жарыс жағдайы және күтпеген жерден зардап шегеді.

Тек өңдеу ғана емес: біз Kafka Streams-тен таратылған дерекқорды қалай жасадық және одан не пайда болды

1-сурет: ауысу алдында көрінетін әдеттегі бөлінген күй сценарийі
Кафка және Кафка ағындары: агенттер өз көзқарастарын API арқылы жеткізеді, жаңартылған күй орталық дерекқор арқылы есептеледі

Ортақ күйдегі микросервистерді жасауды жеңілдететін Кафка ағындарымен танысыңыз

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

Біз жасаған әрбір мемлекеттік микросервис қарапайым топологиясы бар Kafka Streams данасының үстіне салынған. Ол 1) көзден 2) тұрақты кілт-мән қоймасы бар процессордан 3) раковинадан тұрады:

Тек өңдеу ғана емес: біз Kafka Streams-тен таратылған дерекқорды қалай жасадық және одан не пайда болды

2-сурет: күйі бар микросервистерге арналған ағынды даналардың әдепкі топологиясы. Мұнда жоспарлау метадеректерін қамтитын репозиторий де бар екенін ескеріңіз.

Бұл жаңа тәсілде агенттер бастапқы тақырыпқа берілетін хабарларды құрастырады және тұтынушылар (мысалы, пошта хабарландыру қызметі) есептелген ортақ күйді раковина (шығару тақырыбы) арқылы алады.

Тек өңдеу ғана емес: біз Kafka Streams-тен таратылған дерекқорды қалай жасадық және одан не пайда болды

3-сурет: Ортақ микросервистері бар сценарийге арналған жаңа мысал тапсырмалар ағыны: 1) агент Кафканың бастапқы тақырыбына келетін хабарды жасайды; 2) ортақ күйі бар микросервис (Kafka Streams көмегімен) оны өңдейді және есептелген күйді соңғы Кафка тақырыбына жазады; одан кейін 3) тұтынушылар жаңа күйді қабылдайды

Эй, бұл кірістірілген кілттер дүкені шын мәнінде өте пайдалы!

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

№1 опция: есептеулер үшін кілт-мән қоймасын пайдаланыңыз

Біздің алғашқы кілт-мән қоймасында есептеулер үшін қажетті көмекші деректер болды. Мысалы, кейбір жағдайларда ортақ мемлекет «көпшілік дауыс» принципімен анықталды. Репозиторий кейбір нысанның күйі туралы барлық соңғы агент есептерін сақтай алады. Содан кейін бір агенттен жаңа есеп алған кезде, біз оны сақтай аламыз, сол нысанның күйі туралы барлық басқа агенттерден есептерді сақтаудан шығарып, есептеуді қайталай аламыз.
Төмендегі 4-суретте жаңа хабарлама өңделуі үшін процессордың өңдеу әдісіне кілт/мән қоймасын қалай бергеніміз көрсетілген.

Тек өңдеу ғана емес: біз Kafka Streams-тен таратылған дерекқорды қалай жасадық және одан не пайда болды

4-сурет: Біз процессордың өңдеу әдісі үшін кілт-мән қоймасына қолжетімділікті ашамыз (одан кейін ортақ күймен жұмыс істейтін әрбір сценарий әдісті орындауы керек. doProcess)

№2 опция: Кафка ағындарының үстіне CRUD API жасау

Негізгі тапсырмалар ағынын орнатқаннан кейін біз ортақ мемлекеттік микросервистерге RESTful CRUD API жазуға тырыстық. Біз кейбір немесе барлық нысандардың күйін шығарып алу, сондай-ақ нысанның күйін орнату немесе жою мүмкіндігін алғымыз келді (бағдарламаны қолдау үшін пайдалы).

Барлық Get State API интерфейстерін қолдау үшін өңдеу кезінде күйді қайта есептеу қажет болғанда, біз оны ұзақ уақыт бойы кірістірілген кілт-мән қоймасында сақтадық. Бұл жағдайда, төмендегі тізімде көрсетілгендей, Kafka Streams бір данасын пайдаланып, мұндай API енгізу өте оңай болады:

Тек өңдеу ғана емес: біз Kafka Streams-тен таратылған дерекқорды қалай жасадық және одан не пайда болды

5-сурет: Нысанның алдын ала есептелген күйін алу үшін кірістірілген кілт-мән қоймасын пайдалану

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

Тек өңдеу ғана емес: біз Kafka Streams-тен таратылған дерекқорды қалай жасадық және одан не пайда болды

6-сурет: Кафка продюсері арқылы нысанның күйін орнатуға болады

Кішігірім күрделілік: Кафкада көптеген бөлімдер бар

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

Сондай-ақ, мысалы, сәтсіздіктен кейін қалпына келтірілген жағдайда, бұл көшірмені басқа данаға көшіру үшін, мемлекеттік дүкеннің сақтық көшірмесін жасау әдеттегі тәжірибе екенін айтамын. Kafka Streams бағдарламасындағы әрбір мемлекеттік дүкен үшін өзгерту журналымен (жергілікті жаңартуларды бақылайтын) қайталанатын тақырып жасалады. Осылайша, Кафка үнемі мемлекеттік дүкеннің сақтық көшірмесін жасайды. Сондықтан, бір немесе басқа Kafka Streams данасы істен шыққан жағдайда, мемлекеттік қойманы тиісті бөлімдер өтетін басқа данада жылдам қалпына келтіруге болады. Біздің сынақтар дүкенде миллиондаған жазбалар болса да, бұл бірнеше секундта жасалатынын көрсетті.

Ортақ күйі бар жалғыз микросервистен микросервистердің кластеріне көшу, Get State API іске асырудың тривиальдылығы азырақ болады. Жаңа жағдайда әрбір микросервистің күй қоймасы жалпы суреттің бір бөлігін ғана қамтиды (кілттері белгілі бір бөліммен салыстырылған нысандар). Бізге қажетті нысанның күйі қай данада бар екенін анықтау керек болды және біз мұны төменде көрсетілгендей ағын метадеректеріне негізделіп жасадық:

Тек өңдеу ғана емес: біз Kafka Streams-тен таратылған дерекқорды қалай жасадық және одан не пайда болды

7-сурет: Ағындық метадеректерді пайдалана отырып, қажетті нысанның күйін қай данаға сұрау керектігін анықтаймыз; ұқсас тәсіл GET ALL API интерфейсімен қолданылған

Негізгі нәтижелер

Кафка ағынындағы мемлекеттік дүкендер іс жүзінде таратылған дерекқор ретінде қызмет ете алады,

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

Осы және басқа да артықшылықтар Кафка ағындарын біздікі сияқты бөлінген жүйеде жаһандық күйді сақтау үшін өте қолайлы етеді. Kafka Streams өндірісте өте сенімді екенін дәлелдеді (оны орнатқаннан бері хабарды жоғалтқан жоқпыз) және оның мүмкіндіктері мұнымен тоқтап қалмайтынына сенімдіміз!

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

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