В начале недели подсмотрел баг на проде у коллег. Я был в рассылке и повёлся на кликбейтный заголовок письма. Пошел искать в графану медь, а нашел золото... На микросервисном ландшафте без оркестрации (там подобие хореографии) есть бизнес-транзакция. Если что-то падает во время выполнения, то шлётся сообщение в error handler microservice и он уже делает рассылку каждому микросервису для отката транзакции.
Оказалось, что:
- не обрабатывается состояние, когда сам error handler упал с ошибкой
- нет самодиагностики по проверке состояния текущих процессов (что кому и когда мы послали и на каком этапе находимся). И если моргнёт условный rabbit или k8s, то rollback не произойдёт
- запрос на откат шлётся в одну сторону и нет гарантии отката в принципе
В результате, через годик мы получим n неконсистентных баз или постоянные ручные откаты. Смотря на это системно, делаю вывод, что коллеги не понимают базовые принципы конечных автоматов.
Когда я в 12 лет учился писать на турбо паскале и сях, нас перед кодированием заставляли рисовать блок-схему и таблицу переходов на бумаге. Потом её надо было защитить. Бомбило у меня жутко, ибо иногда я до кода не доходил вообще(!), а занимался два часа черчением. По прошествии лет 10 я понял, что именно это рисование из меня архитектора и сделало. Ибо алгоритм/транзакция/взаимодействие внутри микросервисов должно иметь состояние на входе и выходе. Никаких подвисших веток быть не должно!
В программе нынешних вайтишных курсов про алгоритмы говорят на первом занятии минут 30, потому что это скучно и вообще NPS будет низкий. А без этой базы получаются вот такие пользователи языков, которые всплывают рано или поздно до сениоров....
Post #39
556
- 👍 9