Hi Habr!
Tha sinn gad chuimhneachadh gun lean thu an leabhar mu dheidhinn
Airson a-nis, tha a’ choimhearsnachd dìreach ag ionnsachadh crìochan an inneil chumhachdaich seo. Mar sin, chaidh artaigil fhoillseachadh o chionn ghoirid, agus bu mhath leinn an eadar-theangachadh a thoirt dhut. Bhon eòlas aige fhèin, tha an t-ùghdar ag innse mar a thionndaidheas e Kafka Streams gu bhith na stòradh dàta sgaoilte. Faigh tlachd bho leughadh!
Leabharlann apache
San artaigil seo, innsidh mi dhut mar a chaidh aig a ’chompanaidh againn air an cothrom seo a chleachdadh gu prothaideach nuair a bha iad a’ leasachadh toradh airson tèarainteachd tagradh sgòthan. A’ cleachdadh Kafka Streams, chruthaich sinn meanbh-sheirbheisean stàite co-roinnte, agus tha gach fear dhiubh na stòr fiosrachaidh earbsach a tha fulangach dha lochdan agus a tha ri fhaotainn gu mòr mu staid nithean san t-siostam. Dhuinne, is e ceum air adhart a tha seo an dà chuid a thaobh earbsachd agus furasta taic.
Ma tha ùidh agad ann an dòigh-obrach eile a leigeas leat aon stòr-dàta meadhanach a chleachdadh gus taic a thoirt do staid fhoirmeil nan nithean agad, leugh e, bidh e inntinneach ...
Carson a bha sinn den bheachd gu robh an t-àm ann an dòigh sa bheil sinn ag obair le stàite co-roinnte atharrachadh
Dh'fheumadh sinn staid diofar nithean a chumail suas stèidhichte air aithisgean àidseant (mar eisimpleir: an robh an làrach fo ionnsaigh)? Mus do rinn sinn imrich gu Kafka Streams, bha sinn gu tric an urra ri aon stòr-dàta meadhanach (+ API seirbheis) airson riaghladh stàite. Tha eas-bhuannachdan aig an dòigh-obrach seo:
Figear 1: Suidheachadh stàite roinnte àbhaisteach a chithear ron ghluasad gu
Sruthan Kafka agus Kafka: bidh riochdairean a’ conaltradh am beachdan tro API, tha staid ùraichte air a thomhas tro stòr-dàta meadhanach
Coinnich ri Kafka Streams, ga dhèanamh furasta meanbh-sheirbheisean stàite co-roinnte a chruthachadh
O chionn timcheall air bliadhna, chuir sinn romhainn sùil chruaidh a thoirt air na suidheachaidhean stàite co-roinnte againn gus dèiligeadh ris na cùisean sin. Cho-dhùin sinn sa bhad feuchainn air Kafka Streams - tha fios againn cho scalable, ri fhaighinn gu mòr agus a’ fulang le lochdan, agus cho beairteach sa tha a ghnìomhachd sruthadh (atharraichean, a ’toirt a-steach feadhainn stàiteil). Dìreach na bha a dhìth oirnn, gun luaidh air cho aibidh agus cho earbsach sa tha an siostam teachdaireachdan air fàs ann an Kafka.
Chaidh gach aon de na meanbh-sheirbheisean stàiteil a chruthaich sinn a thogail a bharrachd air eisimpleir Kafka Streams le topology gu math sìmplidh. Bha e air a dhèanamh suas de 1) stòr 2) pròiseasar le stòr luach-iuchrach leantainneach 3) sinc:
Figear 2: Topology bunaiteach nan suidheachaidhean sruthadh againn airson meanbh-sheirbheisean stàiteil. Thoir an aire gu bheil stòr-dàta an seo cuideachd anns a bheil meata-dàta dealbhaidh.
Anns an dòigh-obrach ùr seo, bidh riochdairean a’ sgrìobhadh teachdaireachdan a tha air am biathadh a-steach don chuspair stòr, agus bidh luchd-cleachdaidh - can, seirbheis fios puist - a’ faighinn an staid co-roinnte àireamhaichte tron sinc (cuspair toraidh).
Figear 3: Eisimpleir ùr de shruth gnìomh airson suidheachadh le microservices co-roinnte: 1) bidh an neach-ionaid a’ gineadh teachdaireachd a ruigeas cuspair stòr Kafka; 2) bidh microservice le stàite co-roinnte (a 'cleachdadh Kafka Streams) ga phròiseas agus a' sgrìobhadh an stàit àireamhaichte gu cuspair deireannach Kafka; às deidh sin 3) bidh luchd-cleachdaidh a’ gabhail ris an stàit ùr
Hey, tha an stòr iuchair / luach togte seo glè fheumail!
Mar a chaidh ainmeachadh gu h-àrd, tha stòr prìomh luach anns an topology stàite co-roinnte againn. Lorg sinn grunn roghainnean airson a chleachdadh, agus tha dhà dhiubh air am mìneachadh gu h-ìosal.
Roghainn #1: Cleachd stòr luach-iuchrach airson àireamhachadh
Anns a’ chiad stòr prìomh luach againn bha an dàta taiceil a bha a dhìth oirnn airson àireamhachadh. Mar eisimpleir, ann an cuid de chùisean bha an stàit cho-roinnte air a dhearbhadh leis a’ phrionnsapal de “mhòr-chuid de bhòtaichean”. Dh’ fhaodadh an stòr na h-aithisgean àidseant as ùire a chumail mu inbhe nì air choreigin. An uairsin, nuair a fhuair sinn aithisg ùr bho aon àidseant no fear eile, b’ urrainn dhuinn a shàbhaladh, aithisgean fhaighinn bho gach neach-ionaid eile mu staid an aon rud bho stòradh, agus an àireamhachadh a-rithist.
Tha Figear 4 gu h-ìosal a’ sealltainn mar a nochd sinn stòr na h-iuchrach/luach gu modh giollachd a’ phròiseasar gus an gabhadh an teachdaireachd ùr a phròiseasadh an uairsin.
Dealbh 4: Bidh sinn a’ fosgladh ruigsinneachd don stòr luach iuchrach airson modh giollachd a’ phròiseasar (às deidh seo, feumaidh a h-uile sgriobt a bhios ag obair le stàite co-roinnte am modh a chuir an gnìomh doProcess
)
Roghainn #2: A’ cruthachadh API CRUD a bharrachd air Kafka Streams
Às deidh dhuinn ar sruth-obrach bunaiteach a stèidheachadh, thòisich sinn a’ feuchainn ri API RESTful CRUD a sgrìobhadh airson ar meanbh-sheirbheisean stàite co-roinnte. Bha sinn airson a bhith comasach air staid cuid no a h-uile nì fhaighinn air ais, a bharrachd air staid nì a shuidheachadh no a thoirt air falbh (feumail airson taic backend).
Gus taic a thoirt do gach API Get State, nuair a dh’ fheumadh sinn an stàit ath-àireamhachadh aig àm giullachd, bha sinn ga stòradh ann an stòr luach-iuchrach togte airson ùine mhòr. Anns a ’chùis seo, bidh e gu math sìmplidh a leithid de API a chuir an gnìomh a’ cleachdadh aon eisimpleir de Kafka Streams, mar a chithear san liostadh gu h-ìosal:
Figear 5: A’ cleachdadh a’ bhùth luach-iuchrach togte gus staid ro-choimpiutaichte nì fhaighinn
Tha e furasta cuideachd staid nì ùrachadh tron API. Gu bunaiteach, chan eil agad ach riochdaire Kafka a chruthachadh agus a chleachdadh gus clàr a dhèanamh anns a bheil an stàit ùr. Bidh seo a’ dèanamh cinnteach gun tèid a h-uile teachdaireachd a thig bhon API a phròiseasadh san aon dòigh ris an fheadhainn a gheibhear bho riochdairean eile (me riochdairean).
Figear 6: Faodaidh tu suidheachadh nì a shuidheachadh a’ cleachdadh an riochdaire Kafka
Duilgheadas beag: tha mòran phàirtean aig Kafka
An uairsin, bha sinn airson an luchd giollachd a sgaoileadh agus ruigsinneachd adhartachadh le bhith a’ toirt seachad cruinneachadh de mhicro-sheirbheisean stàite co-roinnte gach suidheachadh. Bha an suidheachadh na ghaoith: aon uair ‘s gun do shuidhich sinn a h-uile suidheachadh gus ruith fon aon ID tagraidh (agus na h-aon frithealaichean bootstrap), chaidh cha mhòr a h-uile càil eile a dhèanamh gu fèin-ghluasadach. Shònraich sinn cuideachd gum biodh grunn phàirtean anns gach cuspair stòr, gus an gabhadh fo-sheata de na pàirtean sin a thoirt do gach suidheachadh.
Bheir mi iomradh cuideachd gu bheil e na chleachdadh cumanta leth-bhreac cùl-taic a dhèanamh de stòr na stàite gus, mar eisimpleir, air eagal faighinn seachad air às deidh fàilligeadh, an leth-bhreac seo a ghluasad gu eisimpleir eile. Airson gach stòr stàite ann an Kafka Streams, thèid cuspair ath-aithris a chruthachadh le log atharrachaidh (a bhios a’ cumail sùil air ùrachaidhean ionadail). Mar sin, bidh Kafka an-còmhnaidh a’ toirt taic do stòr na stàite. Mar sin, ma dh ’fhàillig aon eisimpleir Kafka Streams no fear eile, faodar stòr na stàite ath-nuadhachadh gu sgiobalta air eisimpleir eile, far an tèid na pàirtean co-fhreagarrach. Tha na deuchainnean againn air sealltainn gu bheil seo air a dhèanamh ann an diog no dhà, eadhon ged a tha milleanan de chlàran anns a’ bhùth.
A’ gluasad bho aon mhicro-sheirbheis le stàite co-roinnte gu cruinneachadh de mhicro-sheirbheisean, chan eil e cho duilich an API Get State a chuir an gnìomh. Anns an t-suidheachadh ùr, chan eil ann an stòr stàite gach microservice ach pàirt den dealbh iomlan (na nithean sin aig an deach na h-iuchraichean aca a mhapadh gu sgaradh sònraichte). Bha againn ri faighinn a-mach dè an suidheachadh anns an robh staid an nì a bha a dhìth oirnn, agus rinn sinn seo stèidhichte air meata-dàta an t-snàthainn, mar a chithear gu h-ìosal:
Figear 7: A’ cleachdadh meata-dàta srutha, bidh sinn a’ dearbhadh dè an suidheachadh a bhitheas a’ ceasnachadh staid an nì a tha thu ag iarraidh; chaidh dòigh-obrach coltach ris a chleachdadh leis an GET ALL API
Prìomh Thoraidhean
Faodaidh stòran stàite ann an Kafka Streams a bhith na stòr-dàta sgaoilte de facto,
- an-còmhnaidh air ath-aithris ann an Kafka
- Faodar API CRUD a thogail gu furasta air mullach siostam mar sin
- Tha làimhseachadh ioma-phàirteachaidhean beagan nas iom-fhillte
- Tha e comasach cuideachd aon stòr stàite no barrachd a chur ris an topology sruthadh gus dàta taice a stòradh. Faodar an roghainn seo a chleachdadh airson:
- Stòradh fad-ùine de dhàta a tha a dhìth airson àireamhachadh rè obrachadh sruth
- Stòradh dàta fad-ùine a dh’ fhaodadh a bhith feumail an ath thuras a thèid an t-eisimpleir sruthadh a thoirt seachad
- tòrr a bharrachd...
Tha iad sin agus buannachdan eile a’ fàgail Kafka Streams gu math freagarrach airson staid chruinneil a chumail ann an siostam sgaoilte mar an fheadhainn againne. Tha Kafka Streams air a bhith gu math earbsach ann an cinneasachadh (cha mhòr nach do chaill sinn teachdaireachd bho chaidh a chuir a-steach), agus tha sinn misneachail nach stad na comasan aige an sin!
Source: www.habr.com