Мушкилоти навиштани дугона
Сохтани системаи боэътимод, хеле дастрас ва миқёспазир тақсимшаванда риояи усулҳо, принсипҳо ва намунаҳои мушаххасро талаб мекунад. Тарҳрезии чунин системаҳо ҳалли як қатор мушкилотро дар бар мегирад. Дар байни масъалаҳои маъмултарин ва бунёдӣ мушкилоти навиштани дугона аст.
"Мушкилоти навиштани дугона" мушкилотест, ки дар системаҳои тақсимшуда, асосан ҳангоми кор бо манбаъҳои сершумори додаҳо ё пойгоҳи додаҳо, ки бояд ҳамоҳанг карда шаванд, ба миён меояд. Он ба душвории таъмини пайваста навиштани тағироти додаҳо дар мағозаҳои гуногуни додаҳо, ба монанди пойгоҳи додаҳо ё кэшҳо, бидуни ворид кардани мушкилот, ба монанди номувофиқатии додаҳо, ихтилофҳо ё монеаҳои иҷроиш, ишора мекунад.
Меъмории микросервисҳо ва пойгоҳи додаҳои намунавӣ барои як хидмат ба шумо манфиатҳои зиёд меорад, аз қабили ҷойгиркунӣ ва миқёси мустақил, нокомиҳои ҷудогона ва афзоиши эҳтимолии суръати рушд. Аммо, амалиёт тағиротро дар байни микросервисҳои сершумор талаб мекунад, ки шуморо маҷбур мекунад, ки дар бораи ҳалли боэътимоди ҳалли ин мушкилот фикр кунед.
Қариб як мисоли воқеӣ
Биёед сенарияеро дида бароем, ки дар он домени мо қабули дархостҳои қарзӣ, арзёбии онҳо ва сипас фиристодани огоҳиномаҳо ба муштариёнро дар бар мегирад.
Дар рӯҳияи принсипи ягонаи масъулият, қонуни Конвей ва равиши тарҳрезии ба домен асосёфта, пас аз якчанд ҷаласаҳои ҳамла ба рӯйдодҳо, тамоми домен ба се зердомени бо контекстҳои маҳдуди муайяншуда, ки дорои сарҳадҳои равшан, моделҳои доменӣ ва забони ҳама ҷост, тақсим карда шуд.
Якум вазифадор аст, ки ворид ва тартиб додани дархостҳои нави қарз. Системаи дуюм ин дархостҳоро арзёбӣ мекунад ва дар асоси маълумоти пешниҳодшуда қарор қабул мекунад. Ин раванди арзёбӣ, аз ҷумла KYC/KYB, зидди қаллобӣ ва санҷиши хавфи қарзӣ, метавонад вақти зиёдро талаб кунад ва қобилияти коркарди ҳазорон барномаҳоро дар як вақт талаб кунад. Дар натиҷа, ин функсия ба як хидматрасонии махсус бо пойгоҳи додаи худ дода шудааст, ки барои миқёси мустақил имкон медиҳад.
Ғайр аз он, ин зерсистемаҳоро ду гурӯҳи гуногун идора мекунанд, ки ҳар кадоми онҳо давраҳои озод, созишномаҳои сатҳи хидматрасонӣ (SLA) ва талаботҳои миқёспазирӣ доранд.
Ниҳоят , хидмати махсуси огоҳӣ барои фиристодани огоҳиҳо ба мизоҷон мавҷуд аст.
Дар ин ҷо тавсифи дақиқи ҳолати истифодаи ибтидоии система аст:
- Муштарӣ дархости қарзро пешниҳод мекунад.
- Хадамоти дархост барои қарз аризаи навро бо ҳолати "Интизорӣ" сабт мекунад ва тавассути ирсоли ариза ба Хадамоти арзёбӣ раванди арзёбӣ оғоз мекунад.
- Хадамоти баҳодиҳӣ дархости воридшударо баҳо медиҳад ва баъдан Хадамоти дархости қарзро дар бораи қарор хабар медиҳад.
- Пас аз гирифтани қарор, Хадамоти дархости қарз ҳолати дархости қарзро мувофиқан навсозӣ мекунад ва Хадамоти огоҳиномаро барои огоҳ кардани муштарӣ дар бораи натиҷа водор мекунад.
- Хадамоти огоҳиномаҳо ин дархостро коркард мекунад ва мувофиқи танзимоти муштарӣ огоҳиномаҳоро ба муштарӣ тавассути почтаи электронӣ, SMS ё дигар усулҳои иртиботӣ ирсол мекунад.
Ин дар назари аввал як системаи хеле содда ва ибтидоӣ аст, аммо биёед бубинем, ки чӣ тавр хидмати дархости қарз фармони пешниҳоди дархости қарзро коркард мекунад.
Мо метавонем ду равишро барои ҳамкории хидматрасонӣ баррасӣ кунем:
Аввалан-маҳаллӣ-таҳлил-баъдан-нашр: Дар ин равиш, хадамот махзани маҳаллии худро навсозӣ мекунад (ваъда медиҳад) ва сипас ҳодиса ё паёмро ба хидматҳои дигар нашр мекунад.
Аввалан-нашр кунед-баъдан-маҳаллӣ-таъмин кунед: Баръакс, ин усул пеш аз ворид кардани тағирот ба пойгоҳи додаҳои маҳаллӣ интишори ҳодиса ё паёмро дар бар мегирад.
Ҳарду усул нуқсонҳои худро доранд ва барои иртибот дар системаҳои тақсимшуда танҳо қисман аз нокомӣ бехатаранд.
Ин диаграммаи пайдарпайии татбиқи равиши аввал аст.
Дар ин сенария, Хадамоти Аризаи Қарз равиши Аввалин-Маҳаллӣ-Уҳдадорӣ-Баъд-Интишорро истифода мебарад, ки дар он аввал транзаксияро анҷом медиҳад ва сипас кӯшиш мекунад, ки огоҳиномаро ба системаи дигар фиристад. Аммо, ин раванд ба нокомӣ дучор мешавад, агар масалан, мушкилоти шабакавӣ вуҷуд дошта бошад, Хадамоти Арзёбӣ дастнорас бошад ё Хадамоти Аризаи Қарз бо хатоги аз хотира (OOM) дучор шавад ва садама дучор шавад. Дар чунин мавридҳо, агар чораҳои иловагӣ андешида нашаванд, паём гум шуда, Арзёбиро бидуни огоҳӣ дар бораи дархости қарзи нав мегузорад.
Ва дуюмаш.
Дар сенарияи Аввал-Интишор-Сипас-Маҳаллӣ-Уҳдадорӣ , Хадамоти Аризаи Қарз бо хатарҳои бештаре рӯбарӯ мешавад. Он метавонад ба Хадамоти Арзёбӣ дар бораи замимаи нав хабар диҳад, аммо ин навсозиро аз сабаби мушкилот ба монанди мушкилоти пойгоҳи додаҳо, хатогиҳои хотира ё хатогиҳои код ба таври маҳаллӣ захира карда наметавонад. Ин равиш метавонад ба номувофиқатии назаррас дар додаҳо оварда расонад, ки вобаста аз он, ки Хадамоти баррасии қарзи дархостҳои воридотӣ чӣ гуна коркард мекунад, метавонад мушкилоти ҷиддиро ба бор орад.
Аз ин рӯ, мо бояд як роҳи ҳалли худро муайян кунем, ки механизми боэътимоди интишори рӯйдодҳоро ба истеъмолкунандагони беруна пешниҳод кунад. Аммо, пеш аз омӯхтани ҳалли эҳтимолӣ, мо бояд аввал намудҳои кафолатҳои интиқоли паёмҳоро, ки дар системаҳои тақсимшуда дастрасанд, мушаххас кунем.
Кафолатҳои интиқоли паём
Чор намуди кафолатҳо мавҷуданд, ки мо метавонем ба даст орем.
Ҳеҷ кафолат
Ҳеҷ кафолате нест, ки паём ба ҷои таъиншуда расонида мешавад. Муносибати «Аввал—махаллй—комитет — баъд — нашр» махз ба хамин дахл дорад. Истеъмолкунандагон метавонанд паёмҳоро як маротиба, якчанд маротиба ё ҳеҷ гоҳ қабул кунанд.Дар ҳадди аксар як бор расонидани
Ҳадди ақал як маротиба расонидан маънои онро дорад, ки паём ба ҷои таъиншуда на камтар аз 1 маротиба расонида мешавад. Равиши Аввалан-Маҳаллӣ-Таъмин-Сипас-Интишор кардан мумкин аст бо ин роҳ, инчунин бо сиёсати такрории кӯшишҳо бо арзиши як амалӣ карда шавад.Ҳадди ақал як маротиба интиқол\ Истеъмолкунандагон ҳар як паёмро қабул ва коркард мекунанд, аммо метавонанд як паёмро бештар аз як маротиба қабул кунанд.
Маҳз як бор расонидан\Маҳз як бор расонидан маънои онро дорад, ки истеъмолкунанда паёмро як маротиба самаранок қабул мекунад.
Аз ҷиҳати техникӣ, бо муомилоти Кафка ва амалисозии мушаххаси истеҳсолкунанда ва истеъмолкунанда имконпазир аст.
Дар аксари мавридҳо, “ҳадди ақал як бор” кафолати интиқоли бисёр мушкилотро тавассути таъмини ҳадди аққал як бор расонидани паёмҳо таъмин мекунад, аммо истеъмолкунандагон бояд беэътино бошанд. Бо вуҷуди ин, бо назардошти нокомиҳои ногузири шабака, тамоми мантиқи истеъмолкунандагон бояд новобаста аз кафолатҳои истеҳсолкунанда, барои пешгирӣ кардани коркарди паёмҳои такрорӣ, беэътиноӣ бошанд. Аз ин рӯ, ин талабот на он қадар камбудӣ, балки воқеиятро инъикос мекунад.
Ҳалли
Роҳҳои зиёде барои ҳалли ин мушкилот мавҷуданд, ки афзалиятҳо ва нуқсонҳои худро доранд.
Ухдадории ду марҳила
Тибқи маълумоти Википедиа, ӯҳдадории ду марҳила (2PC) як протоколи тақсимшудаи транзаксия мебошад, ки дар илмҳои компютерӣ ва системаҳои идоракунии пойгоҳи додаҳо барои таъмини мувофиқат ва эътимоднокии транзаксияҳои тақсимшуда истифода мешавад. Он барои ҳолатҳое тарҳрезӣ шудааст, ки захираҳои сершумор (масалан, пойгоҳи додаҳо) бояд дар як транзаксия иштирок кунанд ва он кафолат медиҳад, ки ё ҳамаи онҳо транзаксияро анҷом медиҳанд ё ҳама онро қатъ мекунанд ва ба ин васила мувофиқати маълумотро нигоҳ медоранд. Ин маҳз ҳамон чизест, ки ба мо лозим аст, аммо ӯҳдадории думарҳила як қатор камбудиҳо дорад:
- Агар як манбаи иштирокчӣ ҷавоб надиҳад ё нокомиро аз сар гузаронад, тамоми раванд метавонад то ҳалли мушкилот баста шавад. Ин метавонад ба мушкилоти эҳтимолӣ ва дастрасӣ оварда расонад.
- Ухдадории ду марҳила механизмҳои дарунсохташудаи таҳаммулпазирии хатогиҳоро таъмин намекунад. Он ба механизмҳои беруна ё дахолати дастӣ барои ҳалли нокомиҳо такя мекунад.
- На ҳама пойгоҳи додаҳои муосир ду марҳилаи ӯҳдадориро дастгирӣ мекунанд.
Махзани маълумоти муштарак
Ҳалли равшантарин барои меъмории микросервисҳо истифодаи намуна (ё ҳатто баъзан зидди намуна) - пойгоҳи додаҳои муштарак мебошад. Ин равиш хеле беихтиёрона аст, агар ба шумо мутобиқати транзаксия дар байни ҷадвалҳои сершумор дар пойгоҳи додаҳои гуногун лозим бошад, танҳо як махзани муштаракро барои ин хидматрасониҳои хурд истифода баред.
Камбудиҳои ин равиш аз ҷорӣ намудани як нуқтаи нокомӣ, ҷилавгирӣ аз миқёси мустақили пойгоҳи додаҳо ва маҳдуд кардани қобилияти истифодаи қарорҳои гуногуни пойгоҳи додаҳо, ки барои талаботҳои мушаххас ва ҳолатҳои истифода мувофиқанд, иборатанд. Илова бар ин, барои дастгирии чунин шакли транзаксияи тақсимшуда тағйирот ба пойгоҳи кодҳои хидматрасонии микросервис зарур аст.
Қуттии содиротии транзаксия
" Паёми интиқоли транзаксия " як намунаи тарроҳӣ мебошад, ки дар системаҳои тақсимшуда барои таъмини паҳншавии боэътимоди паёмҳо ҳатто дар баробари системаҳои паёмнависии беэътимод истифода мешавад. Он нигоҳ доштани рӯйдодҳоро дар ҷадвали таъиншудаи "OutboxEvents" дар дохили як транзаксия бо худи амалиёт дар бар мегирад. Ин равиш бо хосиятҳои ACID-и пойгоҳи додаҳои релятсионӣ хуб мувофиқат мекунад. Баръакси ин, бисёре аз пойгоҳи додаҳои No-SQL хосиятҳои ACID-ро пурра дастгирӣ намекунанд ва ба ҷои он принсипҳои теоремаи CAP ва фалсафаи BASE-ро интихоб мекунанд, ки дастрасӣ ва мувофиқати ниҳоиро нисбат ба мувофиқати қатъӣ афзалият медиҳанд.
Қуттии содиротӣ ҳадди аққал як маротиба кафолат медиҳад ва онро бо якчанд равиш амалӣ кардан мумкин аст:
Сабти сабти муомилот
Ношири овоздиҳӣ
Равиши бақайдгирии сабти транзаксияҳо истифодаи ҳалли мушаххаси пойгоҳи додаҳо ба монанди CDC (Change Data Capture) дар назар дорад. Камбудиҳои асосии ин равиш инҳоянд:
Қарорҳои мушаххаси пойгоҳи додаҳо
Зиёд шудани таъхир аз сабаби мушаххасоти татбиқи CDC
Усули дигар ин Publisher Publisher мебошад, ки тавассути пурсиши ҷадвали паёмдони паёмбарӣ боркунии паёмдони хориҷиро осон мекунад. Камбудии асосии ин равиш потенсиали зиёд шудани сарбории пойгоҳи додаҳо мебошад, ки метавонад боиси афзоиши хароҷот гардад. Ғайр аз он, на ҳама пойгоҳи додаҳои No-SQL дархости самаранокро барои сегментҳои мушаххаси ҳуҷҷат дастгирӣ мекунанд. Аз ин рӯ, истихроҷи тамоми ҳуҷҷатҳо метавонад боиси паст шудани кор гардад.
Дар ин ҷо диаграммаи пайдарпайии хурд шарҳ дода мешавад, ки он чӣ гуна кор мекунад.
Худро гӯш кунед
Мушкилоти асосӣ бо намунаи Transactional Outbox дар вобастагии он аз хосиятҳои базаи ACID мебошад. Он метавонад дар пойгоҳи додаҳои маъмулии OLTP оддӣ бошад, аммо дар соҳаи NoSQL мушкилот эҷод мекунад. Барои ҳалли ин масъала, роҳи ҳалли эҳтимолӣ ин истифода бурдани сабти замима (масалан, Кафка) аз оғози коркарди дархост мебошад.
Ба ҷои коркарди мустақими фармони "аризаи қарзӣ" мо онро фавран ба мавзӯи дохилии Кафка мефиристем ва сипас натиҷаи "қабулшударо" ба муштарӣ бармегардонем. Аммо, азбаски эҳтимоли зиёд аст, ки фармон то ҳол коркард карда шавад, мо наметавонем фавран ба муштарӣ дар бораи натиҷа хабар диҳем. Барои идора кардани ин мувофиқати ниҳоӣ, мо метавонем аз усулҳои монанди пурсишҳои тӯлонӣ, пурсиш бо ташаббуси муштарӣ, навсозии оптимистии UI ё истифодаи WebSockets ё Ҳодисаҳои аз сервер фиристодашуда барои огоҳиҳо истифода барем. Аммо, ин як мавзӯи алоҳида аст, пас биёед ба мавзӯи ибтидоии худ баргардем.
Мо паёмро дар мавзӯи дохилии Кафка фиристодем. Сипас Хадамоти дархости қарз ин паёмро истеъмол мекунад - ҳамон фармоне, ки аз муштарӣ гирифта буд - ва коркардро оғоз мекунад. Аввалан, он баъзе мантиқи тиҷоратиро иҷро мекунад; танҳо пас аз бомуваффақият иҷро шудани ин мантиқ ва устувор мондани натиҷаҳо, он паёмҳои навро дар мавзӯи оммавии Кафка нашр мекунад.
Биёед каме рамзи псевдо-кодро дида бароем.
public async Task HandleAsync(SubmitLoanApplicationCommand command, ...) { //First, process business logic var loanApplication = await _loanApplicationService.HandleCommandAsync(command, ...); //Then, send new events to public Kafka topic producer.Send(new LoanApplicationSubmittedEvent(loanApplication.Id)); //Then, commit offset consumer.Commit(); }
Чӣ мешавад, агар коркарди мантиқи тиҷорат ноком шавад? Парво накунед, азбаски ҷубронпулӣ ҳанӯз анҷом дода нашудааст, паём дубора санҷида мешавад.
Чӣ мешавад, агар фиристодани рӯйдодҳои нав ба Кафка ноком шавад? Парво накунед, азбаски мантиқи тиҷорӣ беэътибор аст, он аризаи такрории қарзро эҷод намекунад. Ба ҷои ин, он кӯшиш мекунад, ки паёмҳоро ба мавзӯи оммавии Кафка фиристад.
Чӣ мешавад, агар паёмҳо ба Кафка фиристода шаванд, аммо ӯҳдадории офсет ноком мешавад? Парво накунед, азбаски мантиқи тиҷорӣ беэътибор аст, он аризаи такрории қарзро эҷод намекунад. Ба ҷои ин, он паёмҳоро ба мавзӯи оммавии Кафка мефиристад ва умедвор аст, ки ин дафъа ӯҳдадории офсет муваффақ мешавад.
Камбудиҳои асосии ин равиш мураккабии иловагии марбут ба услуби нави барномасозӣ, мувофиқати ниҳоӣ (зеро мизоҷ дарҳол натиҷаро намедонад) ва талабот ба ҳама мантиқи тиҷоратро дар бар мегирад.
Сарчашмаи рӯйдодҳо
Сарчашмаи ҳодиса чист ва онро дар ин ҷо чӣ гуна метавон татбиқ кард? Сарчашмаи рӯйдодҳо як намунаи меъмории нармафзор аст, ки барои моделсозии ҳолати система тавассути гирифтани ҳама тағирот дар маълумоти он ҳамчун як қатор рӯйдодҳои тағирнопазир истифода мешавад. Ин рӯйдодҳо далелҳо ё гузариши ҳолатиро ифода мекунанд ва ҳамчун манбаи ягонаи ҳақиқат барои ҳолати кунунии система хидмат мекунанд. Ҳамин тавр, аз ҷиҳати техникӣ, тавассути татбиқи системаи сарчашмаи рӯйдодҳо, мо аллакай ҳама рӯйдодҳоро дар EventStore дорем ва ин EventStore метавонад аз ҷониби истеъмолкунандагон ҳамчун манбаи ягонаи ҳақиқат дар бораи ҳодиса истифода шавад. Барои пайгирии ҳама тағирот ё нигарониҳо дар бораи фармоиш ба ҳалли мушаххаси пойгоҳи додаҳо лозим нест, ягона мушкилот дар канори хондан нишастан аст, зеро барои гирифтани ҳолати воқеии субъект барои такрори ҳама рӯйдодҳо лозим аст.
Хулоса
Дар ин мақола мо якчанд равишҳоро барои сохтани паёмнависии боэътимод дар системаҳои тақсимшуда баррасӣ кардем. Якчанд тавсияҳо мавҷуданд, ки мо ҳангоми сохтани системаҳои дорои ин хусусиятҳо дида мебароем
- Ҳамеша истеъмолкунандагонро инкишоф диҳед, зеро нокомии шабака ногузир аст.
- Бодиққат истифода баред Аввал-Маҳаллӣ-Комитсия-Баъд-Интишор бо фаҳмиши дақиқи талаботи кафолат.
- Ҳеҷ гоҳ равиши "Аввал-Интишор-Баъд-Маҳаллӣ-Таҳлил"-ро истифода набаред, зеро он метавонад ба номутобиқатии шадиди додаҳо дар системаи шумо оварда расонад.
- Агар қарори мавҷудаи интихоби пойгоҳи додаҳо эҳтимолан тағир ёбад ё стратегияи техникӣ интихоби беҳтарин роҳи нигаҳдории мушкилотро дар назар дорад - китобхонаҳои муштаракро бо роҳи пайвастшавӣ ба ҳалли пойгоҳи додаҳо ба монанди CDC бунёд накунед.
- Равиши паёмнависии транзаксияро ҳамчун як ҳалли стандартӣ барои ноил шудан ба ҳадди аққал як бор кафолат истифода баред.
- Ҳангоми истифода бурдани пойгоҳи додаҳои No-SQL, истифодаи равиши "Худро гӯш кунед" -ро баррасӣ кунед.
Дафъаи дигар, мо як мисоли амалии амалисозии паёмдони транзаксиониро дида мебароем. Бинед
шумо!