Блог

WebHooks жеткізудің сенімді тәсілдері

Юрий Мельников

Алдыңғы жазбамда "вебхуктарды алу оңай емес" деп жазған едім. Бұл жолы мен өз тәжірибемде қолданған құралдар мен олардың шектеулері туралы айтамын.

Мысалы, ngrok сияқты tunnel-сервистер вебхуктарды жергілікті машинаға тез алуға көмектеседі.

Бірақ tunnel — бұл жай ғана tunnel.

Егер ноутбугыңыз 10 минутқа өшірілсе — вебхук жоғалады.
Егер endpoint уақытша қолжетімсіз болса — вебхук жоғалады.
Егер destination 500 қайтарса — бәрі сіздің оны байқағаныңызға байланысты.

Иә, "жақсы сервер орнатыңыз" деуге болады.

Әдетте бәрі солай басталады.

Содан кейін кезек пайда болады.
Содан кейін retries.
Содан кейін логирование.
Содан кейін replay.
Содан кейін бірнеше destinations.
Содан кейін "вебхук кейде неге келмейді" деген сұрақтар.
Содан кейін provider сұраныстарды тұрақсыз жіберетіні анықталады.
Содан кейін retry idempotencyсіз бизнес-логиканы бұзатыны анықталады.
Содан кейін race conditions пайда болады.
Содан кейін — "сұраныстар тарихын да қосайық" деген ойлар.

Кенеттен "қарапайым вебхук қабылдағыш" жеке инфрақұрылымдық жүйеге айналады.

Бұл ерекше мәселе емес.

Мысалы, SMTP — де қарапайым протокол. Бірақ компаниялар бәрібір Postmark, SendGrid және басқа пошта жеткізу сервистерін пайдаланады.

Өйткені "HTTP-сұраныс жіберу" оңай. Бірақ оны production-да сенімді, ашық және болжамды түрде жасау — мүлдем басқа міндет.

Мен "бәрін RabbitMQ-да сақтау" тәсілін де сынап көрдім.

Бірақ кезек өзі бақылау мәселесін шешпейді.

Ол сұрақтарға жауап бермейді:
— не келді;
— қайда жіберілді;
— қанша рет тырысты;
— destination қандай жауап қайтарды;
— нақты жеткізуді қайталауға бола ма;
— неге кейбір destinations вебхук алды, ал кейбіреулері — жоқ.

Содан кейін өз қолымен жазылған кестелер, статустар, retry-саясаттар, retention, cleanup-job’тар және отладкаға арналған UI пайда болады. Яғни, соңында бәрібір жеке сенімділік қабатын құрасыз. Сол кезде мен мәселе "вебхук алу" емес екенін түсіндім. Мәселе — болжамды жеткізуде.

Сұраныс:
— жоғалмауы;
— уақытша мәселелерде жоғалмауы;
— көрінуі;
— қайталануы;
— бірдей және ашық жеткізілуі керек.

Сиқырсыз. Жасырын модификациясыз. AI-"оптимизациясыз". Қара жәшіксіз.

Түсінікті және сенімді вебхук жеткізу жүйесі.

Сондықтан мен Adal жасауды бастадым.

AI жоқ. Күтпеген жағдайлар жоқ. Болжамды вебхук жеткізу.