Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
На одной машине оно не взлетит, да и вообще глупо. В итоге довольно сложная инфраструктура.
Собрать проект и запустить у себя локально могут пара человек в комманде, да и то пройдя огромный путь по конфигурированию всех сервисов
Лично мое субъективное впечатление: сервис-ориентировання архитектура усложняет рефакторинг и как следствие делает систему менее гибкой. Выделять сервис на каждый чих — плохо. Это все равно, что на несколько лет вперед придумать каким-то чудом все интерфейсы, а потом несколько лет писать их реализацию. Я утрирую, конечно, но идея такая.
Требуются специалисты более высокого класса. К примеру если что-то тупит, но не понятно что, то нужно реально сидеть и анализировать тучу логов — просто вязять и профилировать, как в случае с монолитным приложением, нельзя.
проектируем каждый интерфейс как подходящий для (а) сетевого общения, т.е., remote facade…лишаем себя…производительности
(б) кроссплатформенный…лишаем себя…возможностей платформы.
Сервисы масштабируемы только в том случае, если каждый из них написан масштабируемо.
Собрать проект и запустить у себя локально могут пара человек в комманде, да и то пройдя огромный путь по конфигурированию всех сервисов…Идея CD в том, что все необходимое окружение должно выкатываться максимально автоматически. В идеале — «нажал кнопку, получил среду».
Там было очень хорошо видно, чего стоит вынос вызова из локального контекста в удаленный. … (грубо говоря, если увеличение латентности за счет выноса в отдельное звено больше, чем уменьшение времени обработки запроса, то мы не выигрываем, а проигрываем) … Вот у вас выше есть пример, когда в отдельный проект (сервис) вынесена генерация уникального id по запросу. Как мы все понимаем, сама по себе эта задача не очень требовательна к ресурсам, и, скорее всего, высокопроизводительна. Очень может быть, что в ее случае накладные расходы на ее функционирование в качестве сервиса (с учетом поддержания кроссплатформенности и возможности легко вынести в другое звено) превышают расходы на собственно ее работу. Это, как можно догадаться, не есть рациональное распределение ресурсов.
Короче говоря, no silver bullet there, too. Для многих (в том числе — высоконагруженных) систем подобная архитектура будет не к месту. Именно за счет оверхеда (как в разработке, так и в реальной работе).
Теперь попробуйте “схлопнуть» этот пример обратно — то есть, обеспечить сопоставимую производительность на маленьком потоке данных с использованием пропорционально меньшего оборудования. Удалось?
Разница в подходе. Должны устанавливаться запуском одной.
В любой адекватно написанной системе добавление новой изолированной фичи не приводит к падению старых (а если она не изолированная, вы не сможете вынести ее в отдельный сервис).
Ситуация банальна: есть локальный интерфейс доступа к данным, построенный с использованием linq (т.е., по сути, проприетарного диалекта AST)…обращение к СУБД напрямую (через ДАЛ в том же процессе) и через самый простой boundary, который может быть (DAL в соседнем процессе)
Потому что на хорошей базе скорость выборки большого запроса может оказаться сопоставимой со скоростью чтения диска, а та, понятное дело, заведомо больше скорости сетевого интерфейса.
А ненормальность этой ситуации только в том, что мы хотели сохранить на стороне BL удобный (объектно-ориентированный) интерфейс доступа к данным. У SOA, кстати, вообще тяжело с адекватной объектно-ориентированной моделью между сервисами.
Взаимодействие звеньев и их изоляция. Часть 2