Skip to content
This repository was archived by the owner on Jul 2, 2024. It is now read-only.

Commit eb6edd3

Browse files
Add microservices
1 parent 5579d15 commit eb6edd3

File tree

1 file changed

+113
-1
lines changed

1 file changed

+113
-1
lines changed

lesson49.md

Lines changed: 113 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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+
![](https://say-hi.me/wp-content/uploads/2014/09/sagrada_familia_4_modifie1.jpg)
851854

855+
И нет мы будем говорить не про здания и урбанистику.
852856

857+
Под архитектурой в данном контексте я подразумеваю архитектуру построения технического решения.
858+
859+
![](https://media.proglib.io/posts/2019/09/19/4fde07b37f99708975add2813082c098.webp)
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+
![](https://media.proglib.io/posts/2019/09/18/379a434eb170516211ee253dfc607075.png)
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

Comments
 (0)