Эй Хабр!
жөнүндө китептен кийинки экенин эскертебиз биз китепкана женунде бирдей кызыктуу эмгекти басып чыгардык .

Азырынча коомчулук бул күчтүү куралдын чегин үйрөнүүдө. Ошентип, жакында эле макала жарык көрдү, анын котормосу менен тааныштырмакчыбыз. Өзүнүн тажрыйбасынан автор Кафка агымдарын бөлүштүрүлгөн маалымат сактагычка кантип айландыруу керектигин айтат. Окуудан ырахат алыңыз!
Apache китепканасы дүйнө жүзү боюнча Apache Kafka үстүнө бөлүштүрүлгөн агым иштетүү үчүн ишканаларда колдонулат. Бул алкактын бааланбаган аспектилеринин бири - бул жипти кайра иштетүүнүн негизинде өндүрүлгөн жергиликтүү мамлекетти сактоого мүмкүндүк берет.
Бул макалада мен булут тиркемесинин коопсуздугу үчүн продуктуну иштеп чыгууда биздин компания бул мүмкүнчүлүктү кантип пайдалуу колдоно алганын айтып берем. Кафка агымдарын колдонуу менен биз жалпы мамлекеттик микросервистерди түздүк, алардын ар бири каталарга чыдамдуу жана системадагы объекттердин абалы жөнүндө ишенимдүү маалыматтын жогорку жеткиликтүү булагы катары кызмат кылат. Биз үчүн бул ишенимдүүлүк жагынан да, колдоонун жеңилдиги жагынан да алдыга кадам.
Эгерде сизди объектилериңиздин формалдуу абалын колдоо үчүн бирдиктүү борбордук маалымат базасын колдонууга мүмкүндүк берген альтернативалуу ыкма кызыкдар болсо, анда аны окуп чыгыңыз, бул кызыктуу болот...
Эмне үчүн биз жалпы мамлекет менен иштөө ыкмасын өзгөртүүгө убакыт келди деп ойлодук
Биз агенттин отчетторунун негизинде ар кандай объекттердин абалын сактап турушубуз керек болчу (мисалы: сайт чабуулга кабылганбы)? Kafka Streams'ке өтүүдөн мурун, биз көбүнчө мамлекеттик башкаруу үчүн бирдиктүү борбордук маалымат базасына (+ кызмат API) таянчубуз. Бул ыкма өзүнүн кемчиликтери бар: ырааттуулукту жана синхрондоштурууну сактоо чыныгы кыйынчылыкка айланат. Маалыматтар базасы тоскоолдукка айланып же бүтүшү мүмкүн жана күтүүсүздөн жапа чегишет.

1-сүрөт: Типтүү сплит-мамлекеттик сценарийге өтүүгө чейин көрүлгөн
Кафка жана Кафка агымдары: агенттер өз көз караштарын API аркылуу кабарлашат, жаңыланган абал борбордук маалымат базасы аркылуу эсептелет
Кафка агымдары менен таанышыңыз, бул жалпы мамлекеттик микросервистерди түзүүнү жеңилдетет
Болжол менен бир жыл мурун биз бул маселелерди чечүү үчүн жалпы мамлекеттик сценарийлерибизди карап чыгууну чечтик. Биз дароо эле Kafka Streams сынап көрүүнү чечтик – биз анын канчалык масштабдуу, жеткиликтүү жана каталарга чыдамдуу экенин, кандай бай агымдык функционалдуулукка ээ экенин билебиз (трансформациялар, анын ичинде абалы боюнча). Кафкада кабарлашуу системасы канчалык жетилген жана ишенимдүү болуп калганын айтпаганда да, бизге керектүү нерсе.
Биз түзгөн мамлекеттик микросервистердин ар бири кыйла жөнөкөй топологиясы бар Kafka Streams инстанциясынын үстүнө курулган. Ал 1) булактан 2) туруктуу ачкыч-баа кампасы бар процессордон 3) раковинадан турган:

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

3-сүрөт: Бөлүшүлгөн микросервистери бар сценарий үчүн тапшырма агымынын жаңы үлгүсү: 1) агент Кафка булагы темасына келген билдирүүнү жаратат; 2) жалпы абалы менен микросервис (Кафка агымдарын колдонуу менен) аны иштетет жана эсептелген абалды акыркы Кафка темасына жазат; андан кийин 3) керектөөчүлөр жаңы абалды кабыл алышат
Эй, бул камтылган ачкыч-наркы дүкөнү чындыгында абдан пайдалуу!
Жогоруда айтылгандай, биздин жалпы мамлекеттик топология ачкыч-нарк дүкөнүн камтыйт. Биз аны колдонуунун бир нече варианттарын таптык жана алардын экөөсү төмөндө сүрөттөлөт.
Вариант №1: Эсептөөлөр үчүн ачкыч-нарк дүкөнүн колдонуңуз
Биздин биринчи ачкыч баалуулуктар дүкөнүбүздө эсептөөлөр үчүн зарыл болгон жардамчы маалыматтар камтылган. Мисалы, кээ бир учурларда үлүштүк мамлекет «көпчүлүк добуш» принциби менен аныкталган. Репозиторийде кандайдыр бир объекттин абалы боюнча агенттин акыркы отчеттору сакталышы мүмкүн. Андан кийин, биз тигил же бул агенттен жаңы отчет алганыбызда, биз аны сактап, ошол эле объекттин абалы жөнүндө бардык башка агенттерден отчетторду сактоодон алып, эсептөөнү кайталап алдык.
Төмөндөгү 4-сүрөт биз ачкыч/нарк сактагычты процессордун иштетүү ыкмасына кантип ачып бергенибизди көрсөтөт, ошондо жаңы билдирүү кайра иштетилет.

Иллюстрация 4: Биз процессордун иштетүү ыкмасы үчүн ачкыч-маанилер дүкөнүнө кирүү мүмкүнчүлүгүн ачабыз (андан кийин жалпы абал менен иштеген ар бир скрипт методду ишке ашырууга тийиш doProcess)
Вариант №2: Кафка агымдарынын үстүндө CRUD API түзүү
Негизги тапшырмалар агымын түзүп, биз жалпы мамлекеттик микросервистерибиз үчүн RESTful CRUD API жазууга аракет кыла баштадык. Биз кээ бир же бардык объекттердин абалын калыбына келтирүүнү, ошондой эле объекттин абалын орнотууну же алып салууну кааладык (backend колдоо үчүн пайдалуу).
Бардык Get State API'лерин колдоо үчүн, кайра иштетүү учурунда абалды кайра эсептөө керек болгондо, биз аны көп убакытка камтылган ачкыч-нарк дүкөнүндө сактап турчубуз. Бул учурда, төмөндөгү тизмеде көрсөтүлгөндөй, Kafka Streams бир эле инстанциясын колдонуу менен мындай APIди ишке ашыруу абдан жөнөкөй болуп калат:

5-сүрөт: Объекттин алдын ала эсептелген абалын алуу үчүн камтылган ачкыч-маанилер дүкөнүн колдонуу
API аркылуу объекттин абалын жаңыртуу да оңой. Негизи, сизге Кафка продюсерин түзүү жана аны жаңы абалды камтыган жазууну колдонуу керек. Бул API аркылуу түзүлгөн бардык билдирүүлөр башка өндүрүүчүлөрдөн (мисалы, агенттерден) алынгандай эле иштетилерин камсыздайт.

Сүрөт 6: Кафка продюсеринин жардамы менен объекттин абалын орното аласыз
Кичинекей татаалдашуу: Кафка көптөгөн бөлүктөргө ээ
Андан кийин, биз сценарий боюнча жалпы мамлекеттик микросервистердин кластерин камсыз кылуу менен иштетүү жүгүн бөлүштүрүүнү жана жеткиликтүүлүктү жакшыртууну кааладык. Орнотуу оңой эле: биз бардык инстанцияларды бир эле колдонмо ID (жана ошол эле жүктөө серверлери) астында иштөө үчүн конфигурациялагандан кийин, калганынын дээрлик бардыгы автоматтык түрдө аткарылды. Биз ошондой эле ар бир булак темасы бир нече бөлүмдөн тураарын белгиледик, андыктан ар бир инстанцияга мындай бөлүмдөрдүн бир бөлүгү дайындалышы мүмкүн.
Мен ошондой эле мамлекеттик дүкөндүн резервдик көчүрмөсүн жасоо кеңири таралган практика экенин белгилей кетейин, мисалы, катадан кийин калыбына келтирилген учурда, бул көчүрмөнү башка инстанцияга өткөрүп берүү. Кафка агымдарынын ар бир мамлекеттик дүкөнү үчүн өзгөртүү журналы менен кайталанган тема түзүлөт (жергиликтүү жаңыртууларга көз салат). Ошентип, Кафка мамлекеттик дүкөндү дайыма камдап турат. Ошондуктан, тигил же бул Kafka Streams инстанциялары иштебей калса, мамлекеттик дүкөн тиешелүү бөлүмдөр бара турган башка инстанцияда тез калыбына келтирилиши мүмкүн. Биздин сыноолор дүкөндө миллиондогон жазуулар болсо да, бул бир нече секунданын ичинде жасалаарын көрсөттү.
Бөлүштүрүлгөн абалы менен бирдиктүү микросервистен микросервистердин кластерине өтүү менен Get State APIди ишке ашыруу анча маанилүү эмес болуп калат. Жаңы кырдаалда ар бир микросервистин мамлекеттик дүкөнү жалпы сүрөттүн бир бөлүгүн гана камтыйт (ачкычтары белгилүү бир бөлүмгө түшүрүлгөн объекттер). Бизге керектүү объекттин абалы кайсы инстанцияда бар экенин аныкташыбыз керек болчу жана биз муну төмөндө көрсөтүлгөндөй жип метаберилиштеринин негизинде жасадык:

7-сүрөт: Агымдын метаберилиштерин колдонуу менен биз каалаган объекттин абалын кайсы инстанциядан сураш керек экенин аныктайбыз; окшош ыкма GET ALL API менен колдонулган
негизги
Кафка агымындагы мамлекеттик дүкөндөр де-факто бөлүштүрүлгөн маалымат базасы катары кызмат кыла алат,
- Кафкада тынымсыз кайталанган
- Мындай системанын үстүнө CRUD API оңой эле курулса болот
- Бир нече бөлүктөр менен иштөө бир аз татаалыраак
- Ошондой эле көмөкчү маалыматтарды сактоо үчүн агымдык топологияга бир же бир нече мамлекеттик дүкөндөрдү кошууга болот. Бул параметр төмөнкү үчүн колдонулушу мүмкүн:
- Агымды иштетүү учурунда эсептөөлөр үчүн зарыл болгон маалыматтарды узак мөөнөттүү сактоо
- Кийинки жолу агымдык инстанция камсыздалганда пайдалуу болушу мүмкүн болгон маалыматтарды узак мөөнөттүү сактоо
- дагы көп...
Ушул жана башка артыкчылыктар Кафка агымдарын биздикине окшогон бөлүштүрүлгөн системада глобалдык абалды сактоого ылайыктуу кылат. Kafka Streams өндүрүштө абдан ишенимдүү экендигин далилдеди (аны жайылткандан бери бизде билдирүүлөр дээрлик жоголгон жок) жана анын мүмкүнчүлүктөрү ушуну менен эле токтоп калбайт деп ишенебиз!
Source: www.habr.com
