Nid yn unig prosesu: Sut y gwnaethom ni gronfa ddata ddosbarthedig o Kafka Streams, a beth ddaeth ohoni

Hei Habr!

Rydym yn eich atgoffa bod dilyn y llyfr am Kafka rydym wedi cyhoeddi gwaith yr un mor ddiddorol am y llyfrgell Kafka Streams API.

Nid yn unig prosesu: Sut y gwnaethom ni gronfa ddata ddosbarthedig o Kafka Streams, a beth ddaeth ohoni

Am y tro, mae'r gymuned yn dysgu terfynau'r offeryn pwerus hwn. Felly, cyhoeddwyd erthygl yn ddiweddar, a hoffem gyflwyno cyfieithiad ohoni. O'i brofiad ei hun, mae'r awdur yn dweud sut i droi Kafka Streams yn storfa ddata ddosbarthedig. Mwynhewch ddarllen!

Llyfrgell Apache Nentydd Kafka a ddefnyddir ledled y byd mewn mentrau ar gyfer prosesu ffrwd ddosbarthedig ar ben Apache Kafka. Un o agweddau underappreciated y fframwaith hwn yw ei fod yn caniatáu i chi storio cyflwr lleol a gynhyrchir yn seiliedig ar brosesu edau.

Yn yr erthygl hon, dywedaf wrthych sut y llwyddodd ein cwmni i ddefnyddio'r cyfle hwn yn broffidiol wrth ddatblygu cynnyrch ar gyfer diogelwch cymwysiadau cwmwl. Gan ddefnyddio Kafka Streams, fe wnaethom greu microwasanaethau gwladwriaethol a rennir, y mae pob un ohonynt yn gweithredu fel ffynhonnell o wybodaeth ddibynadwy sy'n gallu goddef diffygion ac sydd ar gael yn fawr am gyflwr gwrthrychau yn y system. I ni, mae hwn yn gam ymlaen o ran dibynadwyedd a rhwyddineb cymorth.

Os oes gennych ddiddordeb mewn dull amgen sy'n eich galluogi i ddefnyddio un gronfa ddata ganolog i gefnogi cyflwr ffurfiol eich gwrthrychau, darllenwch hi, bydd yn ddiddorol...

Pam roeddem yn meddwl ei bod yn bryd newid y ffordd yr ydym yn gweithio gyda chyflwr a rennir

Roedd angen i ni gynnal cyflwr gwrthrychau amrywiol yn seiliedig ar adroddiadau asiant (er enghraifft: a oedd y safle dan ymosodiad)? Cyn mudo i Kafka Streams, roeddem yn aml yn dibynnu ar un gronfa ddata ganolog (+ API gwasanaeth) ar gyfer rheoli'r wladwriaeth. Mae gan y dull hwn ei anfanteision: sefyllfaoedd dwys o ran dyddiad mae cynnal cysondeb a chydamseru yn dod yn her wirioneddol. Gall y gronfa ddata ddod yn dagfa neu ddod i mewn cyflwr hil ac yn dioddef o anrhagweladwy.

Nid yn unig prosesu: Sut y gwnaethom ni gronfa ddata ddosbarthedig o Kafka Streams, a beth ddaeth ohoni

Ffigur 1: Senario cyflwr rhanedig nodweddiadol a welwyd cyn y newid i
Nentydd Kafka a Kafka: mae asiantau'n cyfleu eu barn trwy API, mae cyflwr wedi'i ddiweddaru yn cael ei gyfrifo trwy gronfa ddata ganolog

Dewch i gwrdd â Kafka Streams, gan ei gwneud hi'n hawdd creu microwasanaethau gwladwriaeth a rennir

Tua blwyddyn yn ôl, fe wnaethom benderfynu edrych yn fanwl ar ein senarios cyflwr a rennir i fynd i'r afael â'r materion hyn. Fe wnaethon ni benderfynu ar unwaith i roi cynnig ar Kafka Streams - rydyn ni'n gwybod pa mor raddadwy, sydd ar gael yn fawr ac yn oddefgar o ddiffygion, a pha mor gyfoethog yw ei ymarferoldeb ffrydio (trawsnewidiadau, gan gynnwys rhai urddasol). Yr hyn yr oedd ei angen arnom, heb sôn am ba mor aeddfed a dibynadwy y mae'r system negeseuon wedi dod yn Kafka.

Adeiladwyd pob un o'r meicrowasanaethau urddasol a grëwyd gennym ar ben enghraifft Kafka Streams gyda thopoleg eithaf syml. Roedd yn cynnwys 1) ffynhonnell 2) prosesydd gyda storfa gwerth allwedd barhaus 3) sinc:

Nid yn unig prosesu: Sut y gwnaethom ni gronfa ddata ddosbarthedig o Kafka Streams, a beth ddaeth ohoni

Ffigur 2: Topoleg ddiofyn ein hachosion ffrydio ar gyfer microwasanaethau urddasol. Sylwch fod yna hefyd ystorfa yma sy'n cynnwys metadata cynllunio.

Yn y dull newydd hwn, mae asiantau yn cyfansoddi negeseuon sy'n cael eu bwydo i'r pwnc ffynhonnell, ac mae defnyddwyr - dyweder, gwasanaeth hysbysu trwy'r post - yn derbyn y cyflwr a rennir cyfrifiadurol trwy'r sinc (pwnc allbwn).

Nid yn unig prosesu: Sut y gwnaethom ni gronfa ddata ddosbarthedig o Kafka Streams, a beth ddaeth ohoni

Ffigur 3: Llif tasg enghreifftiol newydd ar gyfer senario gyda microwasanaethau a rennir: 1) mae'r asiant yn cynhyrchu neges sy'n cyrraedd pwnc ffynhonnell Kafka; 2) mae microwasanaeth gyda chyflwr a rennir (gan ddefnyddio Kafka Streams) yn ei brosesu ac yn ysgrifennu'r cyflwr cyfrifedig i'r pwnc Kafka terfynol; ar ôl hynny 3) defnyddwyr yn derbyn y wladwriaeth newydd

Hei, mae'r storfa gwerth allweddol adeiledig hon yn ddefnyddiol iawn mewn gwirionedd!

Fel y soniwyd uchod, mae topoleg ein gwladwriaeth a rennir yn cynnwys storfa gwerth allweddol. Gwelsom sawl opsiwn ar gyfer ei ddefnyddio, a disgrifir dau ohonynt isod.

Opsiwn #1: Defnyddio storfa gwerth bysell ar gyfer cyfrifiadau

Roedd ein storfa gwerth allweddol gyntaf yn cynnwys y data ategol yr oedd ei angen arnom ar gyfer cyfrifiadau. Er enghraifft, mewn rhai achosion pennwyd y wladwriaeth a rennir gan yr egwyddor o "bleidleisiau mwyafrif". Gallai'r gadwrfa ddal yr holl adroddiadau asiant diweddaraf ar statws rhyw wrthrych. Yna, pan gawsom adroddiad newydd gan un asiant neu'r llall, gallem ei arbed, adalw adroddiadau gan bob asiant arall am gyflwr yr un gwrthrych o'i storio, ac ailadrodd y cyfrifiad.
Mae Ffigur 4 isod yn dangos sut y gwnaethom amlygu'r storfa allwedd/gwerth i ddull prosesu'r prosesydd fel y gellid prosesu'r neges newydd wedyn.

Nid yn unig prosesu: Sut y gwnaethom ni gronfa ddata ddosbarthedig o Kafka Streams, a beth ddaeth ohoni

Darlun 4: Rydym yn agor mynediad i'r storfa gwerth allwedd ar gyfer dull prosesu'r prosesydd (ar ôl hyn, rhaid i bob sgript sy'n gweithio gyda chyflwr a rennir weithredu'r dull doProcess)

Opsiwn #2: Creu API CRUD ar ben Kafka Streams

Ar ôl sefydlu ein llif tasg sylfaenol, fe ddechreuon ni geisio ysgrifennu API CRUD RESTful ar gyfer ein microwasanaethau gwladwriaeth a rennir. Roedden ni eisiau gallu adfer cyflwr rhai neu bob gwrthrych, yn ogystal â gosod neu ddileu cyflwr gwrthrych (defnyddiol ar gyfer cefnogaeth backend).

Er mwyn cefnogi holl APIs Get State, pryd bynnag yr oedd angen i ni ailgyfrifo'r cyflwr wrth brosesu, fe wnaethom ei storio mewn storfa gwerth allweddol adeiledig am amser hir. Yn yr achos hwn, mae'n dod yn eithaf syml gweithredu API o'r fath gan ddefnyddio un enghraifft o Kafka Streams, fel y dangosir yn y rhestriad isod:

Nid yn unig prosesu: Sut y gwnaethom ni gronfa ddata ddosbarthedig o Kafka Streams, a beth ddaeth ohoni

Ffigur 5: Defnyddio'r storfa gwerth bysell adeiledig i gael cyflwr rhag-gyfrifiadurol gwrthrych

Mae diweddaru cyflwr gwrthrych trwy'r API hefyd yn hawdd ei weithredu. Yn y bôn, y cyfan sydd angen i chi ei wneud yw creu cynhyrchydd Kafka a'i ddefnyddio i wneud cofnod sy'n cynnwys y wladwriaeth newydd. Mae hyn yn sicrhau y bydd yr holl negeseuon a gynhyrchir trwy'r API yn cael eu prosesu yn yr un modd â'r rhai a dderbynnir gan gynhyrchwyr eraill (ee asiantau).

Nid yn unig prosesu: Sut y gwnaethom ni gronfa ddata ddosbarthedig o Kafka Streams, a beth ddaeth ohoni

Ffigur 6: Gallwch chi osod cyflwr gwrthrych gan ddefnyddio'r cynhyrchydd Kafka

Cymhlethdod bach: Mae gan Kafka lawer o raniadau

Nesaf, roeddem am ddosbarthu'r llwyth prosesu a gwella argaeledd trwy ddarparu clwstwr o ficrowasanaethau a rennir fesul senario. Roedd y gosodiad yn awel: unwaith i ni ffurfweddu pob achos i redeg o dan yr un ID cymhwysiad (a'r un gweinyddwyr bootstrap), gwnaed bron popeth arall yn awtomatig. Fe wnaethom hefyd nodi y byddai pob pwnc ffynhonnell yn cynnwys sawl rhaniad, fel y gellid neilltuo is-set o raniadau o'r fath i bob achos.

Soniaf hefyd ei bod yn arfer cyffredin gwneud copi wrth gefn o storfa'r wladwriaeth fel, er enghraifft, rhag ofn y bydd adferiad ar ôl methiant, trosglwyddo'r copi hwn i enghraifft arall. Ar gyfer pob siop wladwriaeth yn Kafka Streams, mae pwnc wedi'i ailadrodd yn cael ei greu gyda log newid (sy'n olrhain diweddariadau lleol). Felly, mae Kafka yn cefnogi storfa'r wladwriaeth yn gyson. Felly, os bydd un neu achos arall o Kafka Streams yn methu, gellir adfer storfa'r wladwriaeth yn gyflym mewn achos arall, lle bydd y rhaniadau cyfatebol yn mynd. Mae ein profion wedi dangos bod hyn yn cael ei wneud mewn ychydig eiliadau, hyd yn oed os oes miliynau o gofnodion yn y siop.

Gan symud o un microwasanaeth gyda chyflwr a rennir i glwstwr o ficrowasanaethau, mae'n dod yn llai dibwys gweithredu'r API Get State. Yn y sefyllfa newydd, dim ond rhan o'r darlun cyffredinol y mae storfa gyflwr pob microwasanaeth yn ei gynnwys (y gwrthrychau hynny y cafodd eu allweddi eu mapio i raniad penodol). Roedd yn rhaid i ni benderfynu pa enghraifft oedd yn cynnwys cyflwr y gwrthrych yr oedd ei angen arnom, a gwnaethom hyn yn seiliedig ar y metadata edefyn, fel y dangosir isod:

Nid yn unig prosesu: Sut y gwnaethom ni gronfa ddata ddosbarthedig o Kafka Streams, a beth ddaeth ohoni

Ffigur 7: Gan ddefnyddio metadata ffrwd, rydym yn pennu o ba achos i gwestiynu cyflwr y gwrthrych a ddymunir; defnyddiwyd dull tebyg gyda'r API GET ALL

Canfyddiadau Allweddol

Gall siopau gwladwriaethol yn Kafka Streams wasanaethu fel cronfa ddata ddosbarthedig de facto,

  • yn cael ei ailadrodd yn gyson yn Kafka
  • Mae'n hawdd adeiladu API CRUD ar ben system o'r fath
  • Mae trin rhaniadau lluosog ychydig yn fwy cymhleth
  • Mae hefyd yn bosibl ychwanegu un neu fwy o siopau gwladwriaethol i'r topoleg ffrydio i storio data ategol. Gellir defnyddio'r opsiwn hwn ar gyfer:
  • Storio data yn y tymor hir sydd ei angen ar gyfer cyfrifiadau yn ystod prosesu ffrydiau
  • Storio data yn y tymor hir a allai fod yn ddefnyddiol y tro nesaf y darperir yr enghraifft ffrydio
  • llawer mwy...

Mae'r rhain a manteision eraill yn gwneud Kafka Streams yn addas iawn ar gyfer cynnal cyflwr byd-eang mewn system ddosbarthedig fel ein un ni. Mae Kafka Streams wedi profi i fod yn ddibynadwy iawn o ran cynhyrchu (nid ydym wedi colli fawr ddim neges ers ei ddefnyddio), ac rydym yn hyderus na fydd ei alluoedd yn dod i ben yno!

Ffynhonnell: hab.com

Ychwanegu sylw