2021-08-18 09:43:26
До текущего места работы встречался/читал только про следующие архитектуры (относительно бэкенда):
Монолит — всё влазит на один сервер и пока хватает, масштабировать пока приходится только БД.
12factor — группа независимых фронтендов, нагрузка на которые балансируется, они могут ходить в другие сервисы, плюс это всё приятно деплоится и конфигурируется.
Кворумы — назову так сервисы, которые формируются из группы серверов, которые занимаются одним типом задачи, но перекладывают работу друг другу. Обычно это базы/очереди всякие.
Микросервисы — когда типов задач становится много и их выполнение разделяют по разным сервисам, ну а они ходят друг к другу сами/через очереди.
Копролит — был хороший такой монолит, но стало сильно дорого в сервер добавлять процессоры и оперативку, часть монолита вынесли в другой монолит и на самом деле просто вызов кода стал асинхронным.
Ну и вот сейчас познакомился с, как написали в комментариях на хабре, «гибрид Service Mesh и API Gateway».
Чуть больше почитать можно тут — https://habr.com/ru/company/yandex/blog/520134/ . А я кратенько расскажу, в чём суть и почему лично мне это нравится.
Все запросы извне после первого уровня балансировщиков приходят в этот аппхост
У аппхоста есть конфиг всей структуры сервиса и какие сервисы к каким ходят. И маппинги, какие запросы по какому пути должны идти.
Аппхост ходит в нужные сервисы, получает данные и пытается реализовать указанный граф запросов между сервисами, который описан конфигом.
Если вдруг какому-то сервису самому нужно куда-то сходить, т.к. ему нужны данные, аргументы для запроса которых получились посередине вычислений, то он идёт туда через аппхост, ассоциируя с этим походом идентификатор всего запроса.
Всё. Т.е. аппхост — это по сути очень умный балансировщик, который заодно уважает политики failover'а и делает магию логирования.
Чем это выглядит приятным для меня?
У запроса есть уникальный идентификатор, который можно глянуть в заголовках ответа. С ним можно сходить в trace'илку, оно покажет все запросы которые делались для выполнения этого запроса и одним взглядом можно понять, какой сервис виноват.
Когда тебе возвращаются какие-то левые данные от финального сервиса и ты не понимаешь, это он косячит, или оригинальные данные кривые, можно добавить запросу магический параметр что добавит в ответ телеметрию, где будут все запросы и все ответы между сервисами, которые были совершены для обработки этого запроса. Крааайне удобно иметь возможность глянуть на сырые данные.
Разрабатывать любую из частей сервиса очень удобно, один раз даже попробовал. Разворачиваешь кусок системы на дев-машине, а затем просто идёшь на обычный тестовый стенд и в запрос добавляешь магический параметр который говорит «подмени вершину графа такого типа вон той машинкой». В итоге сервисы начнут ходить к тебе (точнее аппхост, когда один из сервисов попросится по этому типу) и не нужно поднимать весь остальной зоопарк.
Можно смотреть в одну точку сбора ошибок, чтобы увидеть, что каким-то сервисам явно нехорошо.
Основной минус — неравномерное потребление сети. Но это больше теоретическая проблема, на практике аппхост это небольшая машинка, которая практически всё что делает это перекладывает данные, их можно и много запустить.
И минусы явно сильно компенсируются удобством разработки/отладки.
119 viewsedited 06:43