// личный канал‑лог
gavrilovlog
← все записи

Гениальное архитектурное решение 1891 года, которое используется сейчас в микро…

👁 6854
Вот вы знали, что первые телефонные станции работали через живых людей? До 1891 года, чтобы позвонить кому-то, снимали трубку и говорили оператору: "Соедините меня с Распутиным". Оператор физически втыкал штекер в нужное гнездо. Он знал всех абонентов, помнил кто где живет, иногда даже передавал сообщения. Оператор был и маршрутизатором, и базой данных, и бизнес-логикой. Благо тогда абонентов было не так много. Но потом их стало больше. Один оператор перестал справляться, поэтому наняли еще и еще. Станция росла, но каждый оператор все также выполнял одни и те же функции. А в 1891 году появилась автоматическая телефонная станция, в которой была всего одна главная функция - соединять абонентов. Конечно же создатель этой станции тогда еще ничего не знал про ТРИЗ(Теорию Решения Изобретательских Задач), но тем не менее воспользовался методом "Вынесения". Когда от объекта отделяют все лишнее, оставляя только нужное свойство. Точно такую же эволюцию я наблюдал в одном из прошлых рабочих проектов. Был огромный бекенд на NodeJS, с которым работало мобильное приложение. NodeJS имел кучу внешних интеграций и делал по сути абсолютно все: маршрутизация, бизнес-логика, база данных, вычисления. Потом появились задачи, с которыми Node не справлялся. Это были тяжелые вычисления и мы решили вынести их в отдельный микросервис на GoLang. Получилось так, что NodeJS вызывал по gRPC-методам этот GoLang сервис и получал ответ, который уже возвращал пользователю. Далее началась череда постепенного вынесения логики из этого сервиса на микросервисы и даже на serverless. В итоге в какой-то момент Backend перестал даже работать с базой данных, в нем не осталось какой-то логики, кроме как маршрутизация пользовательских запросов на другие микросервисы. Последним организационным решением стало то, что этот сервис полностью перешел в управление Frontend-команде и стал называть себя BFF (Backend For Frontend). Эволюция: Монолит -> API Gateway -> BFF. Каждый шаг - это "Вынесение". Отделяем от объекта то, что можно отделить. Пока не останется только его главная функция. Telegram | YouTube | Запретграм
1343