@@ -434,7 +434,7 @@ CI/CD - Continuous Integration / Continuous Deployment
434434
435435Смержили пул реквест, CD за вас автоматически всё задеплоит и перезапустит.
436436
437- Это описание только одной из конфигураций, на самом деле из может быть огромное кол-во в зависимости от нужд проекта.
437+ Это описание только одной из конфигураций, на самом деле их может быть огромное кол-во в зависимости от нужд проекта.
438438
439439### Термины
440440
@@ -846,8 +846,120 @@ jobs:
846846
847847Но в небольших компаниях вся эта настройка тоже на вас :)
848848
849+ # # Монолиты и микросервисы
849850
851+ Настало время поговорить про архитектуру.
850852
853+ 
851854
855+ И нет мы будем говорить не про здания и урбанистику.
852856
857+ Под архитектурой в данном контексте я подразумеваю архитектуру построения технического решения.
858+
859+ 
860+
861+ Под монолитом обычно подразумевается техническое решение, собранное на одном стеке технологий и разворачиваемое целиком,
862+ одним большим пакетом.
863+
864+ Когда вы разрабатывали django приложение, вы разрабатывали монолит, сами о том не догадываясь.
865+
866+ А как бывает еще?
867+
868+ Как можно догадаться из заголовка еще бывают микросервисы. Что же это такое?
869+
870+ Это когда у нас любые минимальные действия разбиты на маленькие сервисы, и они между собой не зависимы друг от друга.
871+
872+ Возьмем в качестве примера обычный интернет магазин. Предположим мы уже купили базу данных у амазона, а редис сервис у
873+ гугла.
874+
875+ Как разбить задачу на микросервисы? Например, у нас может быть отдельный сервис (приложение) которое отвечает за логин.
876+ Отдельное приложение, которое возвращает список товаров. Отдельное приложение, которое позволяет взаимодействовать с
877+ личным кабинетом. Отдельный сервис отвечающий за рассылку рекламы и новостей, и отдельный сервис который обрабатывает
878+ платежи.
879+
880+ Зачем такое делать и какой в этом смысл? Допустим вы собрали монолит с таким же функционалом. И вдруг выясняется, что
881+ посмотреть на товары заходят сотни тысяч людей, а остальным функционалом почти никто не пользуется. Что бы выдержать
882+ нагрузку необходимо расширять весь монолит, что может быть очень дорого, и гораздо дешевле для одного отдельного
883+ сервиса. Это лишь один из примеров, давайте пройдёмся по всем плюсам и минусам таких архитектур.
884+
885+ 
886+
887+ # ## Плюсы микросервисов
888+
889+ У такой архитектуры достаточно много плюсов
890+
891+ # ### Масштабируемость
892+
893+ Как я уже описывал в примере раньше, при таком подходе мы легко можем увеличить ресурсы для одного сервиса и убрать для
894+ другого, но это еще не всё.
895+
896+ Так как микросервисы могут вообще быть не связанны технологиями, у нас может быть один модуль написан на питоне, второй
897+ на го, а третий на джаве.
898+
899+ А это значит, что можно распределять разработчиков в зависимости от необходимости конкретного сервиса (Нанять два
900+ джависта, и уволить питониста)
901+
902+ # ### Легковесность
903+
904+ Каждый микросервис при разработке всегда будет меньше размером чем монолит, а значит, что будет деплоится быстрее,
905+ прогонять тесты быстрее итд. Что позволяет значительно ускорить операционные вопросы.
906+
907+ # ### Обновляемость и независимость
908+
909+ Если у нас есть устаревший монолит и мы хотим обновить его на новую версию языка или технологию, обычно это невыносимый,
910+ мучительный процесс.
911+
912+ В микросервисном подходе в этом нет проблемы, логин может быть написан на устаревшей джаве, а платёжная система на самом
913+ новом питоне, допустим на FastAPI.
914+
915+ Если мы хотим, что-то обновить или переписать на другой язык, нам достаточно исправить только один модуль, и никак не
916+ трогать другие.
917+
918+ Еще одним плюсом является не связанность между собой этих модулей, не может получиться такой ситуации, когда поправили
919+ одну строчку кода, а задели 5 приложений. А значит не надо писать кучу новых тестов, что экономит время.
920+
921+ # ### Изолированость
922+
923+ Если по какой-то причине у нас отпадёт сервис который рассылает рекламу, от этого весь проект работать не перестанет,
924+ при монолитном подходе это не так.
925+
926+ # ### Читаемость и онбординг
927+
928+ Гораздо проще разобраться в сервисе который занимается одним процессом, чем изучать огромное скопление кода, хоть при
929+ переходе в другую команду, хоть приходя с улицы.
930+
931+ Да и в целом монолит очень часто со временем перерастает в не читаемое "месиво".
932+
933+ # ## Минусы микросервисов
934+
935+ Минусов тоже хватает :)
936+
937+ # ### E2E Тесты
938+
939+ Когда нам нужно провести End-2-End тестирование, какой-то фичи это может быть проблемным из-за того, что одна бизнес
940+ задача может решаться через большое кол-во сервисов
941+
942+ # ### Транзакции
943+
944+ Очень сложно контролировать транзакции когда процесс проходит сразу во многих микросервисах, особенно когда несколько их
945+ них работают надо одними и теми же данными.
946+
947+ # ### Обновление
948+
949+ Если нужно внести какие-то глобальные обновления, очень высок шанс, что необходимо будет координировать несколько
950+ команд, а это часто бывает большой проблемой.
951+
952+ # ### Много DevOps
953+
954+ Для поддержки таких процесов часто нужен большой штат из девопсов, что бы они отвечали за отдельные развёртывания
955+ отдельных процессов.
956+
957+ # ## Вывод
958+
959+ Правильного ответа какую архитектуру использовать обычно не существует, есть свои плюсы и минусы. В современном мире
960+ чаще всё-таки встречаются микросервисы, но это не машает, например, инстаграму, работать как монолит. В идеале оставьте
961+ вопрос архитекруты, для архитекторов, если есть такая возможность
962+
963+
964+ # # Docker
853965
0 commit comments