Search
Write a publication
Pull to refresh

Comments 22

Больше всего замедляет разработку вакханалия наращивания функционала, практически не нужного. Тут в соседней статье утверждали про 15000 серверов на Авито. Сразу вопрос: зачем.

 Представьте себе приложение Яндекс.Еда, в котором восемьсот магазинов и служб доставки. Как сделать так, чтобы это работало как единое целое?» — продолжает Сахаров. «Я просто не могу представить, как пятьсот команд должны работать в распределенном режиме с такой нагрузкой, которую испытывают большие банки, Яндекс, Ozon и другие крупные компании. Как это решить в монолите с тестированием обратной совместимости, с тестированием всего регрессионного функционала, с отсутствием конфликтов между командами, с единым интерфейсом, с единым пользовательским опытом и еще с отсутствием падений при обновлении какого-то маленького кусочка?

Ну давайте вместе подумаем.

Утверждающий не умеет в нормальный, правильный монолит.

Яндекс.Еда — это не 800 независимых сервисов, а скорее модульная система с четким разделением ответственности. На практике там:

1. API Gateway для партнёров (рестораны/доставка) — стандартизированный протокол, не 800 разных

2. Core-домены (заказы, платежи, логистика) — их немного, они стабильны

3. Адаптеры для интеграций — изолированы от ядра

В Сбере сотни команд работают над единой платформой через:

- Контракты между модулями (не микросервисами!)

- Feature toggles для постепенного выката

- Библиотеки shared-компонентов для UI консистентности

- Blue-green деплой целиком, а не по кускам

Реальная проблема не "монолит vs микросервисы", а организация команд. Amazon решает это через "two-pizza teams" с четкими API между ними — неважно, монолит это или сервисы.

Модульный монолит (на Java, c#) с хорошими границами проще масштабировать организационно (до определенного предела, которого я на практике не встречал), чем распределённую систему с неявными зависимостями. См. про "модулиты".

ИТ руководители Авито, Озон задрали планку сложности выше нужного чтобы показать свою значимость и дуют в уши бизнесу о своей незаменимости

Практика копирования опыта у старших товарищей типа Гугл приводит к усложнению и карго культу. Хотя, без опыта, наверное, страшно идти, создавать своё. Проще копировать, сохраняя ненужную сложность

Проблема в том, что видят решение, а не путь к нему. Amazon пришёл к микросервисам после 10 лет монолита, когда уперлись в конкретные проблемы. А не "начали сразу правильно".

Вот и Авито создал свой Амазон, такой же сложный, только без его денег

ну и разумеется если просто поднять флаг мы типа тут все делаем на MSA и значит нас ждет успех - это прямой путь в никуда. MSA требовательна гораздо серьезнее чем монолит. Мы это хлебнули в полный рост и именно поэтому сделали платформу и кучу архетипов и типовых библиотек для решения огромного количества рутинных задач для того чтобы не утонуть в океане создаваемых микросервисов

Тут сложно не согласиться. Конечно же ситуация гораздо более сложная, чем просто монолит или микросервис. Разумеется много слоев всего и правильная организация команд и правильный devops и правильный sdlc в целом. Разумеется грамотные люди могут организовать эффективную работу в любой архитектуре

Точно!

Грамотные люди могут разрулить любой факап руководства

это точно - проблема в том что грамотные люди не всегда рядом=)

Критерий выбора предельно прост и прагматичен.

«Если очень нужен микросервис на Node.js, тогда мы его используем. Это как последняя опция. Это когда мы все остальное перепробовали, и у нас получается, что микросервис — это все еще лучшее решение из возможных. Вот тогда мы его делаем», — говорит он. «Когда все остальное хуже, тогда делаем микросервис», — резюмирует Евсеев.

Вот интересно а что это все остальное что перепробовали? 15 вариантов монолитов построили? Монолиты так быстро строятся? Так критерий-то в чем? Что было хуже и чем, из того что попробовали? Как оценить что хуже, а что лучше?

По моему это просто критерий выбора названия того что получилось при разработке. Типа: "Как назовем эту заплатку? Какие у нас варианты: микросервис ..долгая пауза.. а все остальное хуже! Ну точно, пусть называется микросервис!"

Для примера, вот что можно делать вместо микросервисов:

  • Подключить готовую библиотеку

  • Написать свою библиотеку

  • Написать свой фреймворк -- тоже библиотека, но особенная

  • Решить проблему на стороне фронтенда

  • Уже на старте разработки монолита декомпозировать его на подсистемы

  • Реализовать фичу на стороне другого продукта

Вариантов не так уж и мало. Есть из чего выбирать.

ну наш ответ простой - если люди просто говорят "микросервис", то они скорее всего не понимают , что говорят. MSA тянет за собой и devops и инфобез и производительность и оркестрацию и кучу еще всего, что должно решаться на базе какой-то платформы

По данным на 2024 год, среднесписочная численность сотрудников ООО «Диасофт» — 1735 человек

Если вычесть непроизводственный персонал (HR, бухгалтерия, продажи, админы) - остаётся ~1200-1300 в разработке, человек 800 разработчиков, остальные девопс, аналитики, тестировщики. При 200 командах получается 4 человека на команду.

Возможные объяснения:

"Команда" = проект для конкретного банка. Тогда одни и те же люди в нескольких "командах"

Считают подкоманды (backend, frontend, QA отдельно)

Two-pizza teams по Безосу - намеренно дробят для автономности

И независимых продуктов, видимо, несколько. 4-5 монолитов или продуктов с числом отдельных доменов до 20 на продукт.

Вывод:

Вы опять создаёте себе трудности на ровном месте

мы всего лишь делимся опытом и практикой и обсуждаем ее с коллегами. Разговоры показывают что "трудности на ровном месте" возникают у всех и имеет смысл их обсуждать совместно, чтобы не наступать на грабли. у нас 2500 человек и примерно 6-7 человек на команду, команды полнофункциональные работают в методологии Fusion teams от Gartner на основе концепции "цельной упакованной бизнес функциональности" (PBC). Переход на работу в этом режиме позволило нам в несколько раз повысить эффективность работы по сравнению с тем режимом когда мы работали в монолите. Навреное можно было бы этого добиться и в монолите, но опыт крупных компаний показывает, что на практике это мало у кого получается, потому что такие крупные заказчики как Альфа, ВТБ, Сбер, ПСБ, ТБанк, Уралсиб и другие перешли на эти же подходы

6-7 человек на команду

Это только разработчики или включая аналитиков, тестировщиков? В любом случае, команды небольшие или совсем небольшие.

Как меряли повышение эффективности? Стало меньше разработчиков, но больше девопсов это не повышение эффективности

Подождите, а стек то какой?

Если PHP/Go то понятно. Языкам с коротким жизненным циклом нужен внешний супервайзер и микросервисы как решение именно этого, а вовсе не вопросов масштабирования или организационной сложности.

Lifecycle-Driven Architecture:

  • Не чиним баги. Быстрее умираем

  • Не управляем ресурсами (почти). Ограничиваем память. Рестартуем по расписанию

PHP: Умру через 30ms, память почищу

// 1 сервис = 1 endpoint = 1 файл

Go: Умру через 100MB RAM, можно не параноить за ресурсами и дедлоками

// 1 сервис = 3-5 endpoints = 1 redeploy unit

Зачем искать дедлоки если можно просто умереть и рестартить зависшее быстрее, чем пользователь заметит?

Грамотные люди, объясните как называется архитектура САПа в системе координат монолит-микросервис?

Модульный монолит с элементами SOA.

Ключевые признаки:
- Общая БД (всё в одной Oracle/HANA)
- Модули (FI, CO, MM, SD) деплоятся вместе
- Транзакционная целостность через общее ядро
- Но модули относительно изолированы через ABAP interfaces

они не вместе деплоятся. то есть с дистрибутива вместе разворачиваются, но в принципе можно любую кнопочку деплоить независимо. Можно одну букву в коде поменять, завернуть в перенос и деплоить независимо. Фактически каждый функциональный модуль - это отдельный наносервис, который можно развернуть независимо. При этом да, все работают на одной БД.

Ну тогда service based architecture, хотя устойчивый термин не сложился

Хотя... Можно и по кусочкам, но на практике, думаю, деплоят всё вместе

На практике большинство бизнес-задач решается в рамках одного модуля.

Если задача требует одновременно ковырнуть SD и FI (наиболее частая пара на моей практике), то ролл-аут общий идёт. Вернее, одновременный. Разными пакетами

Примерный список по РФ, где масштаб/организация обычно оправдывают микросервисы (по публичным докладам, вакансиям, кейсам):

  • Экосистемы/мультипродукт: Яндекс, VK, Сбер

  • Маркетплейсы/ритейл (сомнительно): Ozon, Wildberries, X5 Tech (Пятёрочка/Перекрёсток), Магнит Tech

  • Банки/платежи: Тинькофф, Альфа-Банк, ВТБ, НСПК (МИР/СБП), другие банки топ-10

  • Телеком/инфраструктура: МТС, Мегафон, Билайн, Теле2, Ростелеком (в т.ч. РТ Лабс/Госуслуги)

  • Классифайды/HR (сомнительно): Авито, HeadHunter (hh.ru)

  • Карты/навигация: 2ГИС

  • Облака/платформы: Selectel, Cloud.ru (экс SberCloud)

  • Медиа/стриминг: Okko

    (?)Газпром/Газпром нефть:

  • Платформы сбора телеметрии с месторождений, предиктивная аналитика оборудования, цифровые двойники

    (?)РЖД:

  • Пассажирские сервисы: билеты, личный кабинет, мобильные приложения, уведомления, лояльность

Вы нашлись в этом списке?

В ряде из поиведённых Вами компаний (а также и в не приведённых) действует принцип "фронт на сервисах, учёт в монолите". Это работает

Везде и всегда надо работать головой и исходить из практической целесообразности.

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

А вот когда размер превысит определенный порог, то у вас начнется органическое деление на микросервисы. но 90% проектов до этого просто не дойдут - хватит монолита за глаза для решения задач бизнеса.

это действительно так. Но на практике бывают ситуации, когда на самых ранних стадиях нет достаточно грамотных людей в команде, поскольку все грамотные предпочитают работать на стабильных позициях в крупных компаниях, а в стартапы и новые направления идут молодые и смелые, за что им почет и уважение!=)

Sign up to leave a comment.

Articles