Артём Шумейко
@artemshumeiko
О моем печальном опыте работы с микросервисами
Те, кто давно следит за каналом, знают, что я смотрю на код с двух сторон: со стороны разработчика, и со стороны бизнеса. И во мне конфликтуют две идеи: об идеальном отлаженном протестированном коде и об идеальном бизнесе с огромной прибылью и "пофиг как" работающим продуктом. Чаще конечно побеждает разработчик-перфекционист ??, но я тренирую себя трезво оценивать ситуацию.
Со времен запуска Солвит у нас была авторизация через Google и GitHub по OAuth2, а несколько месяцев назад мы прикрутили авторизацию через Телеграм, и для этого нужно было написать и поднять телеграм бота, который бы авторизовывал юзеров и записывал их в базу данных.
Мне очень хотелось, чтобы продукт был крут не только в плане визуала и контента, но и в техническом плане. Яж программист все-таки! И было принято решение создать под телеграм бота отдельный репозиторий и сделать первый шаг на пути к микросервисам...
Вот недостатки этого решения, о которых я жалею:
— Из-за микросервисной архитектуры пришлось тащить в проект брокера — мы взяли RabbitMQ. Можно было взять Kafka или NATS, но я взял то, с чем уже работал. Брокера нужно мониторить, для него нужны новые мощности, и нужно написать обвязки для работы с ним в основном монолите и в телеграм боте.
— Из-за удлинения маршрута, который проходят данные ("бэк -> брокер -> бот -> брокер -> бэк -> бд"), пришлось фиксить много неожиданных багов, причем замечали мы их конечно же не сразу. Как итог — потрачено лишнее время команды разработки. Маршрут данных мог вполне спокойно выглядеть так: "бэк -> бот -> бд".
— Пришлось продублировать интерфейсы для входных и выходных данных в обоих проектах. И самое неудобное, что если формат данных меняется, приходится менять его в обоих репозиториях.
— Под бота нужно писать собственный CI/CD пайплайн. Это делается недолго, но тоже минус)
— Время ответа бэкенда увеличилось. Движение данных через брокера добавляет небольшой latency. В итоге пользователь дольше ждет ответа.
Ну и го*но эти ваши микросервисы, да?
Конечно же нет! Есть и плюсы:
— Можно деплоить бота отдельно от основного бэка.
Всё... К сожалению, на этом плюсы реально заканчиваются. Для проекта моего масштаба тащить микросервисы было ошибочной идеей. Монолит прекрасно бы справлялся с нагрузкой, и команда могла бы тратить время на более важные для стартапа темы — создание ценности для пользователя и тестирование новых гипотез.
Такая поучительная история. При чтении статей в интернете никогда не получится прочувствовать все минусы той или иной архитектуры. На своей шкуре чувствуется в десятки раз сильнее
Те, кто давно следит за каналом, знают, что я смотрю на код с двух сторон: со стороны разработчика, и со стороны бизнеса. И во мне конфликтуют две идеи: об идеальном отлаженном протестированном коде и об идеальном бизнесе с огромной прибылью и "пофиг как" работающим продуктом. Чаще конечно побеждает разработчик-перфекционист ??, но я тренирую себя трезво оценивать ситуацию.
Со времен запуска Солвит у нас была авторизация через Google и GitHub по OAuth2, а несколько месяцев назад мы прикрутили авторизацию через Телеграм, и для этого нужно было написать и поднять телеграм бота, который бы авторизовывал юзеров и записывал их в базу данных.
Мне очень хотелось, чтобы продукт был крут не только в плане визуала и контента, но и в техническом плане. Яж программист все-таки! И было принято решение создать под телеграм бота отдельный репозиторий и сделать первый шаг на пути к микросервисам...
Вот недостатки этого решения, о которых я жалею:
— Из-за микросервисной архитектуры пришлось тащить в проект брокера — мы взяли RabbitMQ. Можно было взять Kafka или NATS, но я взял то, с чем уже работал. Брокера нужно мониторить, для него нужны новые мощности, и нужно написать обвязки для работы с ним в основном монолите и в телеграм боте.
— Из-за удлинения маршрута, который проходят данные ("бэк -> брокер -> бот -> брокер -> бэк -> бд"), пришлось фиксить много неожиданных багов, причем замечали мы их конечно же не сразу. Как итог — потрачено лишнее время команды разработки. Маршрут данных мог вполне спокойно выглядеть так: "бэк -> бот -> бд".
— Пришлось продублировать интерфейсы для входных и выходных данных в обоих проектах. И самое неудобное, что если формат данных меняется, приходится менять его в обоих репозиториях.
— Под бота нужно писать собственный CI/CD пайплайн. Это делается недолго, но тоже минус)
— Время ответа бэкенда увеличилось. Движение данных через брокера добавляет небольшой latency. В итоге пользователь дольше ждет ответа.
Ну и го*но эти ваши микросервисы, да?
Конечно же нет! Есть и плюсы:
— Можно деплоить бота отдельно от основного бэка.
Всё... К сожалению, на этом плюсы реально заканчиваются. Для проекта моего масштаба тащить микросервисы было ошибочной идеей. Монолит прекрасно бы справлялся с нагрузкой, и команда могла бы тратить время на более важные для стартапа темы — создание ценности для пользователя и тестирование новых гипотез.
Такая поучительная история. При чтении статей в интернете никогда не получится прочувствовать все минусы той или иной архитектуры. На своей шкуре чувствуется в десятки раз сильнее
? 110
48
? 30
? 15
? 4
? 4
52 63 11.7K
Обсуждение 52
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram