О микросервисах
От: BlackEric http://black-eric.lj.ru
Дата: 21.11.21 21:14
Оценка: 3 (1) +2
На хабре есть перевод довольно интересной статьи: Распутывание микросервисов или балансировка сложности в распределенных системах.

Где наконец-то говорится, что микросервисы это не так уж хорошо и не всегда применимо. В конце статьи очень интересный список ссылок.

Расцвет микросервисов закончился. Uber преобразовывает тысячи микросервисов в более управляемое решение [1]; Келси Хайтауэр предсказывает, что будущее за монолитами [2]; и даже Сэм Ньюман заявляет, что микросервисы никогда не должны быть выбором по умолчанию, а скорее крайним средством [3].

Что происходит? Почему так много проектов стало невозможно поддерживать, несмотря на обещание микросервисов простоты и гибкости? Или все-таки монолиты лучше?


Я вот сам трушных микросервисов ни разу не встречал. Так что бы 1 сервис — 1 бд. Обычно делали 1 ил 2 бд к которым подключались несколько сервисов.
Либо же вообще за работу с каждой бд отвечал свой сервис, а остальные уже подключались к нему.
А вся эта куча сервисов как правило была доступна фронту через какой-либо api gateway типа ocelot.

Несколько бд было только в том случае, если одна реляционная, а другая — нет.

Кто как делает?

Я тоже считаю, что плодить множество действительно микросервисов с кучей баз данных повышает трудоемкость разработки и поддержки проектов. В первую очередь — это необходимость согласовывать изменения между сервисами. И невозможность вытащить данные из одной бд sql запросом.
https://github.com/BlackEric001
Re: О микросервисах
От: vaa  
Дата: 22.11.21 06:44
Оценка: :)))
Здравствуйте, BlackEric, Вы писали:
BE>Кто как делает?
не имел дел. но где-то у Александреску читал, что основная причина появления таких архитектур, что ЯП типа джава потребляет слишком много ресурсов.
в отличии от нативных ЯП. Я и сам удивлялся сколько гласфишу нужно памяти для пары крохотных веб-приложений.
сишарп кушает поменьше но тоже нехило. плюс эта вечная отмазка про компиляцию первого вызова. пробовал ngen но прикола так и не понял.
а всякие джанго и питоны еще и медленные.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re: О микросервисах
От: rosencrantz США  
Дата: 22.11.21 07:08
Оценка: +3 -1
Здравствуйте, BlackEric, Вы писали:

BE>Я тоже считаю, что плодить множество действительно микросервисов с кучей баз данных повышает трудоемкость разработки и поддержки проектов. В первую очередь — это необходимость согласовывать изменения между сервисами. И невозможность вытащить данные из одной бд sql запросом.


Оверхед на микросервисность (и ценность микросервисности) зависит от размера организации — чем больше организация, тем меньше оверхед, и тем больше ценность. Микросервисность — это в первую очередь про изоляцию команд друг от друга. Если речь идёт про 100 команд по 10 человек, вопрос изоляции/автономности есть и он важен. Когда одна команда из 5 человек начинает себе микросервисы делать, это конечно глупость.
Re[2]: О микросервисах
От: gyraboo  
Дата: 22.11.21 07:38
Оценка: :)
Здравствуйте, vaa, Вы писали:

vaa>не имел дел. но где-то у Александреску читал, что основная причина появления таких архитектур, что ЯП типа джава потребляет слишком много ресурсов.


А разве не возможность делать изи горизонтальное масштабирование?
Re: О микросервисах
От: vsb Казахстан  
Дата: 22.11.21 07:42
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>Я вот сам трушных микросервисов ни разу не встречал. Так что бы 1 сервис — 1 бд. Обычно делали 1 ил 2 бд к которым подключались несколько сервисов.

BE>Либо же вообще за работу с каждой бд отвечал свой сервис, а остальные уже подключались к нему.
BE>А вся эта куча сервисов как правило была доступна фронту через какой-либо api gateway типа ocelot.

BE>Несколько бд было только в том случае, если одна реляционная, а другая — нет.


BE>Кто как делает?


На новой работе сделали несколько сервисов. Каждый сервис с отдельной БД. Не сказал бы, что они микро. Мне не нравится. Любители копипаста. Нужен новый схожий проект — создают новый репозиторий в гитлабе, склонированный из старого, копируют базу и поехали менять. Надеюсь всё это выбросить и переделать в один универсальный сервис с единой БД. Хотя не факт, что дадут.

BE>Я тоже считаю, что плодить множество действительно микросервисов с кучей баз данных повышает трудоемкость разработки и поддержки проектов. В первую очередь — это необходимость согласовывать изменения между сервисами. И невозможность вытащить данные из одной бд sql запросом.


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

Вот, кстати, "идея для стартапа" — надёжная и быстрая синхронизация некоторого подмножества БД между разными базами.
Re[2]: О микросервисах
От: vsb Казахстан  
Дата: 22.11.21 07:47
Оценка:
Здравствуйте, vaa, Вы писали:

BE>>Кто как делает?

vaa>не имел дел. но где-то у Александреску читал, что основная причина появления таких архитектур, что ЯП типа джава потребляет слишком много ресурсов.
vaa>в отличии от нативных ЯП. Я и сам удивлялся сколько гласфишу нужно памяти для пары крохотных веб-приложений.

Тут можно схитрить и не запускать отдельный сервер приложений для каждого микросервиса. Тогда накладные расходы на каждый микросервис будут небольшими. Правда там свои проблемы появляются, но в целом решаемые. Хотя это старые и не модные технологии нынче. Поэтому да, по факту жава жрёт память дико, если жалко гигабайта на каждый микросервис, лучше от жавы сразу отказываться в пользу го, ноды или пайтона.
Отредактировано 22.11.2021 7:47 vsb . Предыдущая версия . Еще …
Отредактировано 22.11.2021 7:47 vsb . Предыдущая версия .
Re[2]: О микросервисах
От: BlackEric http://black-eric.lj.ru
Дата: 22.11.21 08:05
Оценка: +1
Здравствуйте, rosencrantz, Вы писали:

R>Здравствуйте, BlackEric, Вы писали:


BE>>Я тоже считаю, что плодить множество действительно микросервисов с кучей баз данных повышает трудоемкость разработки и поддержки проектов. В первую очередь — это необходимость согласовывать изменения между сервисами. И невозможность вытащить данные из одной бд sql запросом.


R>Оверхед на микросервисность (и ценность микросервисности) зависит от размера организации — чем больше организация, тем меньше оверхед, и тем больше ценность. Микросервисность — это в первую очередь про изоляцию команд друг от друга. Если речь идёт про 100 команд по 10 человек, вопрос изоляции/автономности есть и он важен. Когда одна команда из 5 человек начинает себе микросервисы делать, это конечно глупость.


Команда в 10 человек — это уже толпа. И она вполне способна сделать большой проект.
А на практике команды в 4-5 человек начинают плодить сервисы с кубернетисом, кучей нод и потом думаю как же все это поддерживать.
https://github.com/BlackEric001
Re[2]: О микросервисах
От: BlackEric http://black-eric.lj.ru
Дата: 22.11.21 08:07
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>На новой работе сделали несколько сервисов. Каждый сервис с отдельной БД. Не сказал бы, что они микро. Мне не нравится. Любители копипаста. Нужен новый схожий проект — создают новый репозиторий в гитлабе, склонированный из старого, копируют базу и поехали менять. Надеюсь всё это выбросить и переделать в один универсальный сервис с единой БД. Хотя не факт, что дадут.


Ну вот и мы при начале проектов обычно приходили к тому же выводу, что будет много накладных расходов на синхронизацию баз или запросов между базами и решали использовать одну бд на несколько веб-сервисов.
https://github.com/BlackEric001
Re[3]: О микросервисах
От: BlackEric http://black-eric.lj.ru
Дата: 22.11.21 08:09
Оценка: -1
Здравствуйте, vsb, Вы писали:

vsb>Здравствуйте, vaa, Вы писали:


BE>>>Кто как делает?

vaa>>не имел дел. но где-то у Александреску читал, что основная причина появления таких архитектур, что ЯП типа джава потребляет слишком много ресурсов.
vaa>>в отличии от нативных ЯП. Я и сам удивлялся сколько гласфишу нужно памяти для пары крохотных веб-приложений.

vsb>Тут можно схитрить и не запускать отдельный сервер приложений для каждого микросервиса. Тогда накладные расходы на каждый микросервис будут небольшими. Правда там свои проблемы появляются, но в целом решаемые. Хотя это старые и не модные технологии нынче. Поэтому да, по факту жава жрёт память дико, если жалко гигабайта на каждый микросервис, лучше от жавы сразу отказываться в пользу го, ноды или пайтона.


Один сервис — один докер контейнер или ВМ. Иначе смысла нет. Даже перезапуск веб-сервера перезапускает все сервисы сразу. Ничем не будет отличаться от монолита.
https://github.com/BlackEric001
Re[4]: О микросервисах
От: vsb Казахстан  
Дата: 22.11.21 08:17
Оценка: +1
Здравствуйте, BlackEric, Вы писали:

BE>Один сервис — один докер контейнер или ВМ. Иначе смысла нет.


Почему?

BE>Даже перезапуск веб-сервера перезапускает все сервисы сразу.


Перезагрузка компьютера тоже перезапускает все сервисы сразу, докер там или не докер.

BE>Ничем не будет отличаться от монолита.


Почему? Для меня отличие монолита от микросервиса в "толщине" границ. А что там используется для запуска — докер, процесс ОС или сервер приложений — это уже детали реализации.
Re[3]: О микросервисах
От: vaa  
Дата: 22.11.21 08:26
Оценка:
Здравствуйте, gyraboo, Вы писали:


G>А разве не возможность делать изи горизонтальное масштабирование?

ну да. и вообще тут вопрос выбора должен определятся тем действительно ли будет перегружено приложение? или в итоге все усилия будут потрачены впустую.
опять вспомнил доклад рича хикки от 2012 "значение значений".
там он предлагает уходит от "программирования на месте" к иммутабельному ФП аргументируя это тем что уже 5-10 лет железо не проблема. хватит мол экономить на байтах.
странно конечно слышать такое от сишника.
вот александреску так не считает. нам все еще нужны быстрые программы с малым потреблением ресурсов.
у раста в этом смысле есть будущее. если учесть что он на достаточно медленном llvm работает дебианбенчмарки впечатляют.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: О микросервисах
От: gyraboo  
Дата: 22.11.21 08:41
Оценка: :)
Здравствуйте, BlackEric, Вы писали:

vsb>>Тут можно схитрить и не запускать отдельный сервер приложений для каждого микросервиса. Тогда накладные расходы на каждый микросервис будут небольшими. Правда там свои проблемы появляются, но в целом решаемые. Хотя это старые и не модные технологии нынче. Поэтому да, по факту жава жрёт память дико, если жалко гигабайта на каждый микросервис, лучше от жавы сразу отказываться в пользу го, ноды или пайтона.


BE>Один сервис — один докер контейнер или ВМ. Иначе смысла нет. Даже перезапуск веб-сервера перезапускает все сервисы сразу. Ничем не будет отличаться от монолита.


Ну так сейчас уже поверх докеров и куберов накручивают опеншифт, очень удобная штука, решает ряд головняков. Так что микросервисная парадигма эволюционирует и развивается. Я считаю, что монолит — это прошлый век и ретроградство, тупиковая ветвь развития. Микросервисы лучше по многим показателям, пусть ещё пока имеют слабые стороны и нерешенные проблемы, их решение — вопрос времени.
Re[2]: О микросервисах
От: gyraboo  
Дата: 22.11.21 08:49
Оценка: +4
Здравствуйте, rosencrantz, Вы писали:

BE>>Я тоже считаю, что плодить множество действительно микросервисов с кучей баз данных повышает трудоемкость разработки и поддержки проектов. В первую очередь — это необходимость согласовывать изменения между сервисами. И невозможность вытащить данные из одной бд sql запросом.


R>Оверхед на микросервисность (и ценность микросервисности) зависит от размера организации — чем больше организация, тем меньше оверхед, и тем больше ценность. Микросервисность — это в первую очередь про изоляцию команд друг от друга. Если речь идёт про 100 команд по 10 человек, вопрос изоляции/автономности есть и он важен. Когда одна команда из 5 человек начинает себе микросервисы делать, это конечно глупость.


Кроме изоляции команд, вторым мотивом является возможность дешевого горизонтального масштабирования. Если про это забыть, то даже у маленьких команд в 5 человек, реализующих по-старинке монолит, может настать момент когда они попадут со своим монолитом в ловушку масштабирования. У нас так один раз случилось, делали небольшой командой монолит, начали выводить на рынок, рынок захотел сразу много всяких новых фич, начали эти фичи прикручивать, уперлись в том, что монолит просто физически не справляется с задачами, диктуемыми рынком. Начали как говориться "распиливать монолит", потому что иначе невозможно распределить нагрузку. А если бы в начале подумали о масштабировании и изначально бы делали микросервисы, то проблемы бы не было.
Отредактировано 22.11.2021 8:52 gyraboo . Предыдущая версия . Еще …
Отредактировано 22.11.2021 8:50 gyraboo . Предыдущая версия .
Re[4]: О микросервисах
От: vsb Казахстан  
Дата: 22.11.21 08:55
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>там он предлагает уходит от "программирования на месте" к иммутабельному ФП аргументируя это тем что уже 5-10 лет железо не проблема. хватит мол экономить на байтах.


Я в этом не эксперт. Но моё понимание такое: иммубательное ФП хорошо для процессоров с огромным числом ядер. Там работает модель с акторами, передачей сообщений. Чтобы было минимум синхронизаций через общую память. В идеале общей памяти вообще не должно быть. В 2012 году вероятно было представление, что число ядер будет расти. Правда расти оно начало лишь спустя 8 лет. В общем, имхо, когда у нас в ноутбуках будут тысячеядерные процессоры, в этом будет смысл.

vaa>вот александреску так не считает. нам все еще нужны быстрые программы с малым потреблением ресурсов.

vaa>у раста в этом смысле есть будущее. если учесть что он на достаточно медленном llvm работает дебианбенчмарки впечатляют.

А ещё в последние годы всё актуальней встаёт вопрос безопасности со всех сторон.
Re[3]: О микросервисах
От: vsb Казахстан  
Дата: 22.11.21 08:57
Оценка:
Здравствуйте, gyraboo, Вы писали:

BE>>>Я тоже считаю, что плодить множество действительно микросервисов с кучей баз данных повышает трудоемкость разработки и поддержки проектов. В первую очередь — это необходимость согласовывать изменения между сервисами. И невозможность вытащить данные из одной бд sql запросом.


R>>Оверхед на микросервисность (и ценность микросервисности) зависит от размера организации — чем больше организация, тем меньше оверхед, и тем больше ценность. Микросервисность — это в первую очередь про изоляцию команд друг от друга. Если речь идёт про 100 команд по 10 человек, вопрос изоляции/автономности есть и он важен. Когда одна команда из 5 человек начинает себе микросервисы делать, это конечно глупость.


G>Кроме изоляции команд, вторым мотивом является возможность дешевого горизонтального масштабирования. Если про это забыть, то даже у маленьких команд в 5 человек, реализующих по-старинке монолит, может настать момент когда они попадут со своим монолитом в ловушку масштабирования. У нас так один раз случилось, делали небольшой командой монолит, начали выводить на рынок, рынок захотел сразу много всяких новых фич, начали эти фичи прикручивать, уперлись в том, что монолит просто физически не справляется с задачами, диктуемыми рынком. Начали как говориться "распиливать монолит", потому что иначе невозможно распределить нагрузку. А если бы в начале подумали о масштабировании и изначально бы делали микросервисы, то проблемы бы не было.


Ничего не мешает монолиту быть масштабируемым.
Re[4]: О микросервисах
От: gyraboo  
Дата: 22.11.21 08:59
Оценка:
Здравствуйте, vsb, Вы писали:

G>>Кроме изоляции команд, вторым мотивом является возможность дешевого горизонтального масштабирования. Если про это забыть, то даже у маленьких команд в 5 человек, реализующих по-старинке монолит, может настать момент когда они попадут со своим монолитом в ловушку масштабирования. У нас так один раз случилось, делали небольшой командой монолит, начали выводить на рынок, рынок захотел сразу много всяких новых фич, начали эти фичи прикручивать, уперлись в том, что монолит просто физически не справляется с задачами, диктуемыми рынком. Начали как говориться "распиливать монолит", потому что иначе невозможно распределить нагрузку. А если бы в начале подумали о масштабировании и изначально бы делали микросервисы, то проблемы бы не было.


vsb>Ничего не мешает монолиту быть масштабируемым.


Если ты про горизонтальное масштабирование монолита, то да, но все равно придется реализовывать распределенные функции (иначе монолиты начнут перезатирать бд друг у друга и прочие косяки, связанные с неумением в распределнное взаимодействие), и тогда сама "монолитность" становится избыточным свойством такой системы, и переход на микросервисы становится неизбежным.
Отредактировано 22.11.2021 9:01 gyraboo . Предыдущая версия .
Re: О микросервисах
От: Cyberax Марс  
Дата: 22.11.21 09:12
Оценка: 4 (1) +1
Здравствуйте, BlackEric, Вы писали:

BE>На хабре есть перевод довольно интересной статьи: Распутывание микросервисов или балансировка сложности в распределенных системах.


Расцвет микросервисов закончился. Uber преобразовывает тысячи микросервисов в более управляемое решение [1]; Келси Хайтауэр предсказывает, что будущее за монолитами [2]; и даже Сэм Ньюман заявляет, что микросервисы никогда не должны быть выбором по умолчанию, а скорее крайним средством [3].


То что сервисы (микросервисов не бывает) должны быть крайним средством — это факт. Но вот монолиты тоже не вариант, так как их сложно поддерживать.

BE>Я вот сам трушных микросервисов ни разу не встречал. Так что бы 1 сервис — 1 бд. Обычно делали 1 ил 2 бд к которым подключались несколько сервисов.

Я встречал. В Амазоне это сделано наиболее правильно из всего, что я видел. Границы сервисов — это границы команд. И публичный интерфейс сервисов — это то, о чём договорились на берегу.

BE>Я тоже считаю, что плодить множество действительно микросервисов с кучей баз данных повышает трудоемкость разработки и поддержки проектов. В первую очередь — это необходимость согласовывать изменения между сервисами. И невозможность вытащить данные из одной бд sql запросом.

При масштабах, на которых нужны сервисы, обычно данные одним запросом вытащить уже вообще нельзя.
Sapienti sat!
Re[2]: О микросервисах
От: gyraboo  
Дата: 22.11.21 09:15
Оценка:
Здравствуйте, Cyberax, Вы писали:

BE>>На хабре есть перевод довольно интересной статьи: Распутывание микросервисов или балансировка сложности в распределенных системах.


C>

Расцвет микросервисов закончился. Uber преобразовывает тысячи микросервисов в более управляемое решение [1]; Келси Хайтауэр предсказывает, что будущее за монолитами [2]; и даже Сэм Ньюман заявляет, что микросервисы никогда не должны быть выбором по умолчанию, а скорее крайним средством [3].


C>То что сервисы (микросервисов не бывает) должны быть крайним средством — это факт. Но вот монолиты тоже не вариант, так как их сложно поддерживать.


BE>>Я вот сам трушных микросервисов ни разу не встречал. Так что бы 1 сервис — 1 бд. Обычно делали 1 ил 2 бд к которым подключались несколько сервисов.

C>Я встречал. В Амазоне это сделано наиболее правильно из всего, что я видел. Границы сервисов — это границы команд. И публичный интерфейс сервисов — это то, о чём договорились на берегу.

BE>>Я тоже считаю, что плодить множество действительно микросервисов с кучей баз данных повышает трудоемкость разработки и поддержки проектов. В первую очередь — это необходимость согласовывать изменения между сервисами. И невозможность вытащить данные из одной бд sql запросом.

C>При масштабах, на которых нужны сервисы, обычно данные одним запросом вытащить уже вообще нельзя.

Будущее за в меру упитанными и воспитанными микросервисами.
Re[5]: О микросервисах
От: vsb Казахстан  
Дата: 22.11.21 09:19
Оценка: +3
Здравствуйте, gyraboo, Вы писали:

G>Если ты про горизонтальное масштабирование монолита, то да, но все равно придется реализовывать распределенные функции (иначе монолиты начнут перезатирать бд друг у друга и прочие косяки, связанные с неумением в распределнное взаимодействие), и тогда сама "монолитность" становится избыточным свойством такой системы, и переход на микросервисы становится неизбежным.


Просто запускаешь монолит на N-серверах и роутишь запросы к нему. Про перезатирать бд друг у друга — я не понял. БД одна обычно и для БД разницы нет, идут к ней 10 коннектов от одного сервера или от 10 разных. Единственное, про что нужно думать, это про распределённый кеш, но решений для этого хватает и ничего изобретать не нужно. Почему переход на микросервисы становится неизбежным — я не понимаю.

Если упрёшься в БД, то масштабирование БД это отдельная тема, опять же никак не зависящая от монолитов или микросервисов.
Отредактировано 22.11.2021 9:21 vsb . Предыдущая версия .
Re[6]: О микросервисах
От: gyraboo  
Дата: 22.11.21 09:34
Оценка: +1
Здравствуйте, vsb, Вы писали:

G>>Если ты про горизонтальное масштабирование монолита, то да, но все равно придется реализовывать распределенные функции (иначе монолиты начнут перезатирать бд друг у друга и прочие косяки, связанные с неумением в распределнное взаимодействие), и тогда сама "монолитность" становится избыточным свойством такой системы, и переход на микросервисы становится неизбежным.


vsb>Просто запускаешь монолит на N-серверах и роутишь запросы к нему. Про перезатирать бд друг у друга — я не понял. БД одна обычно и для БД разницы нет, идут к ней 10 коннектов от одного сервера или от 10 разных. Единственное, про что нужно думать, это про распределённый кеш, но решений для этого хватает и ничего изобретать не нужно. Почему переход на микросервисы становится неизбежным — я не понимаю.


vsb>Если упрёшься в БД, то масштабирование БД это отдельная тема, опять же никак не зависящая от монолитов или микросервисов.


Под перезатиранием БД я имею ввиду, что монолиты часто проектируются так, как будто бы у 1 экземпляра монолита 1 БД в эксклюзивном доступе, без оглядки на то, что одой БД могут пользоваться несколько копий монолита. Например, какие-нибудь таблицы с информацией о настройках — юзер меняет через UI глобальные настройку, и все монолиты подцепят эту настройку, чего бы не хотелось. Или таблицы с текущей информацией по каким-то идущим процессам на текущем инстансе (его "подцепят" и другие инстансы, чего бы не хотелось). И получается, что дял того, чтобы несколько монолитов работали с одной БД и не мешали друг другу, не перезатирали части данных или не подцепляли данные от другой копии, нужно проектировать монолит так чтобы он работал распределенно, а это уже первый шаг к микросервисам.
Отредактировано 22.11.2021 9:40 gyraboo . Предыдущая версия . Еще …
Отредактировано 22.11.2021 9:37 gyraboo . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.