Баъдан, каме бозгӯи ҳуҷҷатҳо, барои онҳое, ки бо Кафка ошно нестанд (расм низ аз ҳуҷҷатҳост)
AMQP навбатҳо дорад: мо ба навбат барои истеъмолкунанда паёмҳо менависем. Одатан, як навбат аз ҷониби як система бо як мантиқи тиҷорат коркард карда мешавад. Агар ба шумо лозим ояд, ки якчанд системаҳоро огоҳ кунед, шумо метавонед ба барнома омӯзед, ки ба якчанд навбат нависед ё мубодиларо бо механизми фанут, ки худи онҳоро клон мекунад, танзим кунед.
Кафка низ чунин абстраксия дорад мавзӯъ, ки дар он шумо паём менависед, аммо пас аз хондан онҳо нопадид намешаванд. Бо нобаёнӣ, вақте ки шумо ба Кафка пайваст мешавед, шумо ҳама паёмҳоро қабул мекунед ва имкон доред, ки дар ҷои таваққуф нигоҳ дошта бошед. Яъне шумо пайдарпай мехонед, шумо метавонед паёмро ҳамчун хондашуда қайд накунед, аммо ID-ро захира кунед, ки аз он шумо метавонед хонданро идома диҳед. Id, ки шумо дар он қарор гирифтед, офсет номида мешавад ва механизм ҷуброн карда мешавад.
Мувофиқи он, мантиқи гуногунро амалӣ кардан мумкин аст. Масалан, мо дар 4 маврид барои кишварҳои гуногун BOB дорем - Ламода дар Русия, Қазоқистон, Украина, Беларус аст. Азбаски онҳо алоҳида ҷойгир карда шудаанд, онҳо конфигуратсияҳои каме гуногун ва мантиқи тиҷорати худро доранд. Мо дар паём нишон медиҳем, ки он ба кадом кишвар ишора мекунад. Ҳар як истеъмолкунандаи BOB дар ҳар як кишвар бо гурӯҳи ID-и гуногун мехонад ва агар паём ба онҳо дахл накунад, онҳо онро мегузаранд, яъне. фавран +1 ҷуброн мекунад. Агар ҳамон як мавзӯъро Хадамоти пардохти мо мехонад, он гоҳ ин корро бо гурӯҳи алоҳида анҷом медиҳад ва аз ин рӯ офсетҳо бурида намешаванд.
Талабот барои чорабинӣ:
Мукаммалии маълумот. Ман мехоҳам, ки чорабинӣ маълумоти кофӣ дошта бошад, то он коркард шавад.
Беайбӣ. Мо ба Events-bus тасдиқ мекунем, ки ин чорабинӣ мувофиқ аст ва он метавонад онро коркард кунад.
Тартиб муҳим аст. Дар сурати бозгашт мо маҷбурем бо таърих кор кунем. Бо огоҳиҳо, фармоиш муҳим нест, агар онҳо огоҳиномаҳои якхела бошанд, почтаи электронӣ новобаста аз он ки кадом фармоиш аввал расидааст, ҳамон хоҳад буд. Дар сурати баргардонидани маблағ, раванди возеҳ вуҷуд дорад; агар мо фармоишро тағир диҳем, истисноҳо ба вуҷуд меоянд, баргардонидани маблағ эҷод ё коркард карда намешавад - мо ба ҳолати дигар дучор мешавем.
Мутобиқати. Мо мағоза дорем ва ҳоло мо ба ҷои API рӯйдодҳо эҷод мекунем. Мо ба роҳи зуд ва арзон интиқол додани маълумот дар бораи рӯйдодҳои нав ва тағиротҳои мавҷуда ба хидматҳои мо ниёз дорем. Ин тавассути мушаххасоти умумӣ дар анбори алоҳидаи git ва генераторҳои код ба даст оварда мешавад. Аз ин рӯ, мизоҷон ва серверҳо дар хидматҳои гуногун ҳамоҳанг карда мешаванд.
Кафка дар Ламода
Мо се насби Кафка дорем:
Сабтҳо;
R&D;
Ҳодисаҳо - автобус.
Имруз мо факат дар бораи нуктаи охирин сухан меронем. Дар чорабиниҳо-автобус, мо насби хеле калон надорем - 3 брокер (сервер) ва ҳамагӣ 27 мавзӯъ. Чун қоида, як мавзӯъ як раванд аст. Аммо ин нуктаи нозук аст ва мо хозир ба он дахл мекунем.
Дар боло графики rps аст. Раванди баргардонидани маблағ бо хати фирӯзӣ ишора шудааст (бале, дар меҳвари X) ва хати гулобӣ раванди навсозии мундариҷа мебошад.
Каталоги Lamoda миллионҳо маҳсулотро дар бар мегирад ва маълумот ҳама вақт нав карда мешавад. Баъзе коллексияҳо аз мӯд берун мешаванд, барои иваз кардани онҳо коллексияҳои нав бароварда мешаванд ва дар каталог мунтазам моделҳои нав пайдо мешаванд. Мо мекӯшем пешгӯӣ кунем, ки фардо барои муштариёни мо чӣ ҷолиб хоҳад буд, аз ин рӯ мо пайваста чизҳои нав мехарем, онҳоро аксбардорӣ мекунем ва дисплейро навсозӣ мекунем.
Қуллаҳои гулобӣ навсозиҳои маҳсулот, яъне тағирот дар маҳсулот мебошанд. Дидан мумкин аст, ки бачаҳо сурат гирифтанд, сурат гирифтанд ва баъд боз! — як бастаи чорабиниҳоро бор кард.
Ҳоло қисми ҷолибтар дар бораи зарбаҳои калон ва кашфиётҳои ҷолибе, ки дар шаш моҳи охир ба амал омадаанд.
Проблемаҳои тарҳрезӣ
Фарз мекунем, ки мо мехоҳем як чизи нав кунем - масалан, тамоми раванди интиқолро ба Кафка интиқол диҳед. Ҳоло як қисми ин раванд дар коркарди фармоиш дар BOB амалӣ карда мешавад. Дар паси интиқоли фармоиш ба хидматрасонӣ, ҳаракат ба анбори мобайнӣ ва ғайра модели статус мавҷуд аст. Як монолити пурра, ҳатто ду ва инчунин як қатор APIҳо барои таҳвил бахшида шудаанд. Онҳо дар бораи интиқол бештар медонанд.
Чунин ба назар мерасад, ки ин соҳаҳо ба ҳам монанданд, аммо коркарди фармоиш дар BOB ва системаи интиқоли онҳо мақоми гуногун доранд. Масалан, баъзе хизматрасониҳои курьерӣ на мақоми фосилавӣ, балки танҳо охиринро мефиристанд: "супоридашуда" ё "гумшуда". Дигарон, баръакс, дар бораи харакати мол муфассал хабар медиханд. Ҳар як шахс қоидаҳои тасдиқи худро дорад: барои баъзеҳо, почтаи электронӣ эътибор дорад, яъне он коркард мешавад; барои дигарон ин эътибор надорад, аммо фармоиш то ҳол коркард мешавад, зеро рақами телефон барои тамос вуҷуд дорад ва касе мегӯяд, ки чунин фармоиш умуман коркард намешавад.
Мушкилоти дигар ин васвасаи рушди афзоянда мебошад. Ба мо мегуянд, ки ба ин чорабинй чизе илова кардан лозим аст ва шояд, агар фикр кунем, бояд як вокеаи алохида бошад. Аммо дар схемаи мо вокеаи алохида мавзуи алохида аст. Мавзӯи алоҳида тамоми равандест, ки ман дар боло тавсиф кардам. Таҳиягар васвасаи он аст, ки танҳо майдони дигарро ба схемаи JSON илова кунад ва онро дубора тавлид кунад.
Дар сурати баргардонидани маблағ, мо дар давоми ним сол ба рӯйдодҳо расидем. Мо як мета-чорабинӣ доштем, ки навсозии баргардонида номида мешавад, ки дар он майдони намуд мавҷуд буд, ки дар асл чӣ будани ин навсозиро тавсиф мекунад. Аз ин рӯ, мо гузаргоҳҳои "аҷоиб" бо валидаторҳо доштем, ки ба мо гуфтанд, ки чӣ гуна ин ҳодисаро бо ин намуд тасдиқ кунем.
Версияи рӯйдодҳо
Барои тасдиқи паёмҳо дар Кафка шумо метавонед истифода баред Avro, вале зарур буд, ки фавран ба он фидо ва истифода Confluent. Дар ҳолати мо, мо бояд бо версия эҳтиёткор бошем. На ҳама вақт дубора хондани паёмҳо аз сабти такрорӣ имконпазир хоҳад буд, зеро модел "чап" кардааст. Асосан, он рӯй медиҳад, ки версияҳо сохта шаванд, то модел ба ақиб мувофиқ бошад: масалан, майдонро муваққатан ихтиёрӣ созед. Агар фарқиятҳо хеле қавӣ бошанд, мо дар мавзӯи нав навиштанро оғоз мекунем ва муштариёнро ҳангоми хондани мавзӯи кӯҳна интиқол медиҳем.
Тартиби хондани қисмҳо кафолат дода мешавад
Мавзӯъҳо дар дохили Кафка ба қисмҳо тақсим мешаванд. Ҳангоми тарҳрезии субъектҳо ва биржаҳо, ин чандон муҳим нест, аммо ҳангоми тасмимгирӣ дар бораи истеъмол ва миқёси он муҳим аст.
Дар сурати маъмулӣ шумо як мавзӯъро дар Кафка менависед. Бо нобаёнӣ, як қисм истифода мешавад ва ҳама паёмҳои ин мавзӯъ ба он мераванд. Ва истеъмолкунанда дар натиҷа ин паёмҳоро пайдарпай мехонад. Биёед бигӯем, ки ҳоло мо бояд системаро васеъ кунем, то паёмҳоро ду истеъмолкунандаи гуногун хонанд. Агар, масалан, шумо SMS мефиристед, пас шумо метавонед ба Кафка бигӯед, ки қисмати иловагӣ созад ва Кафка ба тақсим кардани паёмҳо ба ду қисм оғоз мекунад - нисфи ин ҷо, нисфи ин ҷо.
Кафка онҳоро чӣ гуна тақсим мекунад? Ҳар як паём дорои маҷмӯа (дар он мо JSON нигоҳ дошта мешавад) ва калид дорад. Шумо метавонед ба ин калид функсияи hash замима кунед, ки он муайян мекунад, ки паём ба кадом қисмат ворид мешавад.
Дар ҳолати мо бо баргардонидани маблағ, ин муҳим аст, агар мо ду қисмро гирем, пас имкон дорад, ки истеъмолкунандаи мувозӣ ҳодисаи дуюмро пеш аз аввал коркард кунад ва мушкилот ба вуҷуд ояд. Функсияи hash кафолат медиҳад, ки паёмҳои дорои як калид дар як қисм хотима меёбанд.
Ҳодисаҳо ва фармонҳо
Ин боз як мушкилиест, ки мо дучор шудем. Ҳодиса як ҳодисаи муайян аст: мо мегӯем, ки чизе дар ҷое рух додааст (чизе_рӯй дод), масалан, ашё бекор карда шуд ё баргардонида шуд. Агар касе ба ин рӯйдодҳо гӯш диҳад, мувофиқи "маълумоти бекоршуда", субъекти баргардонида мешавад ва дар ҷое дар танзимот "баргардонида шуд" навишта мешавад.
Аммо одатан, вақте ки шумо рӯйдодҳоро тарҳрезӣ мекунед, шумо онҳоро беҳуда навиштан намехоҳед - шумо ба он боварӣ доред, ки касе онҳоро мехонад. Васвасаи зиёд вуҷуд дорад, ки на чизеро_рӯй дод (беэътибор_шуда, баргардонидашуда), балки чизе_бояд иҷро шавад. Масалан, ашё барои баргардонидан омода аст.
Аз як тараф, он пешниҳод мекунад, ки ин чорабинӣ чӣ гуна истифода мешавад. Аз тарафи дигар, он ба номи муқаррарии ҳодиса камтар монанд аст. Ғайр аз ин, он аз ин ҷо ба фармони do_something дур нест. Аммо шумо кафолат надоред, ки касе ин воқеаро мехонад; ва агар шумо онро хонед, пас онро бомуваффақият хонед; ва агар шумо онро бомуваффақият хонед, пас шумо чизе кардед ва он чизе муваффақ буд. Лаҳзае, ки рӯйдод ба коре табдил меёбад, фикру мулоҳиза зарур мешавад ва ин мушкилот аст.