Опис проєкту
ПерекладГоловне тут — надійність, тому більше за все мене хвилює поведінка при збоях підписника. Кожна спроба доставки повинна бути підписана, щоб отримувач міг перевірити, що вона прийшла від нас, нести мітку часу та унікальний ідентифікатор доставки для захисту від повторів, та при помилці повторюватися з експоненціальною затримкою та джитером до налаштовуваної межі, після чого йти у стан dead-letter. Потрібні ліміти паралелізму на кожен ендпоінт, щоб один перевантажений підписник не забирав ресурси в інших, та ключі ідемпотентності, щоб ретрай ніколи не призводив до дублю на стороні отримувача. Щоб не було плутанини щодо обсягу: це не загальна черга повідомлень для внутрішніх завдань та не API-шлюз, проксирує вхідний трафік. Мова саме про надійну вихідну доставку вебхуків третім сторонам, а черга тут лише внутрішній механізм, а не результат роботи.
Мені також потрібні спостережуваність та управління, які я зможу дати підтримці та партнерам. Кожна спроба повинна потрапляти у журнал доставок із запитом, кодом відповіді, затримкою та номером ретрая, із пошуком по події, ендпоінту та статусу. Має бути можливість вручну переотправити невдалу або dead-letter доставку, поставити ендпоінт на паузу та зняти з неї, а також ротувати секрети підпису без простоїв. Прошу ставитися до цього як до бойової інфраструктури — із внятною документацією та тестами, а не як до прототипу.
— Ендпоінт приймання вхідних подій із валідацією та збереженням
— Модель підписок: зіставлення типів подій та ендпоінтів підписників
— Підписані пейлоади з міткою часу, id доставки та захистом від повторів
— Ретраї з експоненціальним backoff, джитером та станом dead-letter
— Ліміти паралелізму на ендпоінт та обробка ідемпотентності
— Журнал доставок із пошуком, ручною переотправкою та паузою ендпоінта
— Ротація секретів, документація та автотести