Pull to refresh

Свой оркестратор, или как я докатился до такой идеи

Level of difficultyEasy

Всем привет, меня зовут Евгений, я занимаюсь разработкой уже 24 года. Начинал свой профессиональный путь как адепт низкоуровневого программирования на ассемблере для микроконтроллеров, до эксперта разработчика в сфере финтех (да, эксперт – это так в трудовой записано 😊). Пройдя этот долгий путь, я понимаю, что работа с микроконтроллерами и всем, что с этим связано, была лучшим временем, и вспоминаю об этом с ностальгией. Это чистое творчество, где твой код соприкасается с реальным физическим миром, ты оживляешь железо, ну прям как Франкенштейн, а не вот это ваше всё - сплошные абстракции, фреймворки, виртуальные машины и всё в таком духе.

В спектр моих обязанностей входит весь жизненный цикл разработки ПО: аналитика, дизайн бэкенда (API, базы данных, интеграции, архитектурные решения), тестирование, техподдержка, и многое другое. И всё это, конечно, заправлено литрами кофе.☕

Оглядываясь с своей колокольни, могу сказать, что любая распределенная система по мере роста, неизбежно деградирует в плане понимания и управления. Взаимодействия между компонентами теряет ясность, а поддержка и оптимизация превращаются в настоящий пытку. Вечно изменяемы бизнес требования, текучка кадров, а тут ещё где-то маячит закон Конвея, который гласит, что система всегда отражает структуру коммуникаций в команд, ну а поскольку приходят новые люди, это новые коммуникации, как итог, неизбежные изменения в архитектуре. Получается как в жизни, твоя распределенная система проходит через все этапы жизни: молодость, зрелость, старение. И естественно хотелось бы найти какое-то чудо лекарство, чтоб замедлить старение.

Самой распространённой проблемой, с которой я сталкиваюсь, — это как согласовать сложный workflow между десятками микросервисов, какой способ взаимодействия лучше применить, может синхронный REST API или асинхронный, через брокер сообщений (Kafka, RabbitMQ, ArtemisMQ и т. д.), как организовать согласованность данных, перечислять можно долго. Ну и эти мучительные архитектурные встречи, где обязательно найдётся эксперт-разработчик 😉который, предложит «применить паттерн SAGA», «воткнуть Transactional Outbox» или «материализовать состояние из сущностных событий в событийной модели». И, конечно, подкрепит свою идею цитатами из умных книжек, чтоб показать, какой же умный дяденька. В итоге получается настоящий зоопарк технологий, принципов, правил.

И так я пришёл к идее, а не прикрутить ли нам оркестратор, выбор пал на Temporal. Спросите почему он, да случайно прочитал в комментариях где-то в статье на Хабре. Temporal подкупил меня возможностью объединить все эти принципы, правила, в одно коробочное решение, с возможностью оркестрации на уровне кода, что даёт поистине неисчерпаемую гибкость построении управления процессами микросервисов. Ну и конечно же весь набор опций, отказоустойчивость, масштабирование, мониторинг и т.д.

Но моей идее суждено было разбиться об суровую реальность: Temporal написан на Go, а наш бэкэнд практически полностью зиждется на экосистеме Java. Вписать его безболезненно оказалось сложно, да и не всем хотелось вникать в суть работы оркестратора и как его интегрировать в нашу архитектуру. И так, идея внедрить Temporal была отнесена к категории, давай к этому вопросу вернёмся позже, что, как мы все знаем “никогда”. Во общем с тех пор я потерял покой, сон и отрастил бороду, думая, ну не ужели всё это было зря.

Вот тогда-то и зародилась идея создать свой оркестратор. Мне захотелось понять, как он устроен, смогу ли я сделать нечто похожее, а может лучше. Плюс, на фоне бурного развития ИИ, где пророчат персонализированных агентов, выполняющих свои задачи и управляемых оркестраторами, меня это ещё больше подстегнуло двигаться в этом направлении. Но об этом чуть позже.

Кто-то наверно подумает, вся эта затея пустая трата времени, ты изобретаешь велосипед, но для меня это в первую очередь повод получить опыт. Сейчас моя цель, не создать некий продукт, чтобы пытаться кому-то продать. Я не знаю, к чему это приведёт, на данном этапе важны те знания, которые я приобретаю.

Нут вот и всё, наконец то оформил свои мыли в текстовом виде, не ругайте сильно за косноязычность, это всё же моя первая статься. В следующей изложу свой план, как буду реализовывать этот проект.

Всем спасибо, кто дочитал до этих строк, вы молодцы, помните, дорогу осилит идущий.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.