Для запуска необходим кластер kubernetes с ingress.
В папке scripts лежат полезные скрипты:
- deploy.sh - создает все необходимые для запуска системы ресурсы kubernetes (внутри namespace market)
- undeploy.sh - удаляет все ресурсы
- restart.sh - удаляет все ресурсы и создает заново
Все сервисы используют переменную среды CONFIG_PATH, в которой прописывается путь до файла с конфигурацией.
Для тестирования локально можно использовать minikube:
minikube start && minikube addons enable ingress
В этом случае получить доступ к GraphQL можно с помощью команды:
minikube service graphql-service -n market
- Продукты
- API (REST)
- GET /api/product/{id}. Получить информацию о продукте
- GET /api/product?limit=&offset=. Получить список продуктов (постраничный вывод)
- POST /api/product. Создать продукт
- PUT /api/product. Обновить информацию о продукте
- DELETE /api/product/{id}. Удалить продукт
- Связи
- Используется Postgres (таблица products)
- Используется Redis (кэш, хранит доступности продуктов, т.е. есть ли определенный продукт наличии)
- Соединен с сервисом склада по gRPC (проверяется наличие продукта)
- API (REST)
- Заказы
- API (REST)
- GET /api/order/{id}. Получить информацию о заказе
- GET /api/order?user=. Получить все заказы пользователя
- POST /api/order. Создать заказ
- DELETE /api/order/{id}. Удалить заказ
- Связи
- Используется MongoDB (коллекция orders)
- Соединен с сервисом склада по gRPC (резервирует продукты)
- Отправляет сообщения о создания заказа в Kafka
- API (REST)
- Склад
- API (gRPC)
- CheckAvaliable. Проверить остались ли заданные товары на складе
- Reserve. Зарезервировать продукты. Используются SQL транзакции, чтобы гарантировать достаточное количество всех товаров из списка на складе
- CancelReserve. Отменить резерв
- Связи
- Используется Postgres (таблица inventory)
- API (gRPC)
- Уведомления
- Связи
- Kafka. Читает новые сообщения (созданные после запуска сервиса)
- Почтовый сервер. Прочитанные сообщения отправляет по электронной почте
- Связи
- GraphQL связывает сервис продуктов и заказов в единую схему (4 запроса, 5 мутаций)
- Примеры запросов лежат в graphql/examples.txt