Как перейти от монолитной архитектуре к микросервисной при помощи Yandex API Gateway и Yandex Cloud Functions
Структура проекта:
.
├── demo # Демонстарция работы
│ ├── migrate.sh # Фиксация канареечного релиза
│ ├── rollback.sh # Откат канареечного релиза
│ └── shoot.sh # 100 последовательных обращений к ресурсу
├── deploy # Развертывание инфраструктуры
│ ├── microservices # Развертывание 2х микросервисов: Posts и Users
│ │ └── ...
│ ├── monolith # Развертывание инраструктуры монолита
│ │ └── ...
│ └── registry # Развертывание Container registry и публикация образа монолита
│ └── ...
├── microservices
│ ├── post # Микросервис Posts
│ │ └── ...
│ └── user # Микросервис Users (отвечат 502 на любой запрос)
│ └── ...
├── monolith # Монолитное приложение с 2 сервисами: Posts и Users
│ └── ...
└── README.md
Установите и настройте следующие инструменты: YC CLI, Terraform, Docker
Проинициализируйте terraform:
cd deploy/registry/ ; ./init.sh
Создайте Container registry:
cd deploy/registry/ ; ./tf.sh apply
Сконфигурируйте Docker:
cd deploy/registry/ ; ./docker_configure.sh apply
Соберите образ и загрузите его в созданный реестр:
cd deploy/registry/ ; ./push_image.sh apply
Проинициализируйте terraform:
cd deploy/monolith/ ; ./init.sh
Разверните инфраструктуру:
cd deploy/monolith/ ; ./tf.sh apply
Проверьте результат, обратитесь к балансировщику:
cd demo/ ; ./shoot.sh
Запакуйте исходный код микросервисов в архив:
cd deploy/microservices/resources/ ; ./build.sh
Проинициализируйте terraform:
cd deploy/microservices/ ; ./init.sh
Разверните инфраструктуру:
cd deploy/microservices/ ; ./tf.sh apply
Проверьте результат, обратитесь к ресурсу /api/posts
API Gateway:
cd demo/ ; ./shoot.sh
Зафиксируйте канареечный релиз:
cd demo/ ; ./migrate.sh
Для этого замените API Gateway в спецификации на закомментирвоанный шлюз. Примените изменения:
cd deploy/microservices/ ; ./tf.sh apply
Убедитесь, что новый сервис возвращает код 502, обратившись к /api/users?id=1
API Gateway:
cd demo/ ; ./shoot.sh
Откатите канареечный релиз:
cd demo/ ; ./rollback.sh