Проект магазина товаров, предназначенный для изучения различных технологий Java.
Сервис Store возвращает цену товара в разной валюте. Для этого нам потребуется 15 микросервисов.
-
Store - реализует API для внешних клиентов. Доступ через сервис Gateway. Хранит товары, их свойства и цену в рублях. В зависимости от локали пользователя (определяет по заголовку Accept-Language) возвращает товар в рублях или, используя сервис Rates, в другой валюте.
При этом Resilience4j реализует защиту от медленной работы сервиса Rates (
@CircuitBreaker
), а также следующие средства повышения стабильности работы и защиты:@Bulkhead, @RateLimiter, @Retry
.Для доступа к сервису Store необходим
JWT
, который можно запросить у сервиса Keycloak. При этом Store делает запросы к Rates через Gateway.Store ретранслирует заголовки
JWT
иrequest-id
во все свои подзапросы. В дальнейшем поrequest-id
можно отследить все дочерние запросы сервисов, тем самым связав их к конкретному запросу клиента приложения.Полученные курсы валют кешируется в Redis. Для инвалидации кеша у Rates есть соответствующий endpoint, при поступлении запроса на который, Rates постит сообщение в Kafka. Соответствующий топик прослушивается Store, который инвалидирует кеш при получении сообщения.
Сбор логов осуществляется в централизованное хранилище через ELK-стек.
-
Rates - сервис курса вылют. Доступ реализован по
JWT
(который также можно получить у Keycloak). -
Config-server - хранит конфигурации всех сервисов (Spring Cloud Config Server). 4.Eureka-server - discovery service.
-
Gateway - проксирует все запросы к сервисам (используя Eureka-server для получения конечного адреса нужного сервиса). Добавляет в заголовок запроса уникальный request-id (если запрос поступил без него). Все запросы от клиентов приложения и между сервисами проходят через Gateway.
-
Keycloak - менеджер прав пользователей. Хранит пользователей их роли. Генерирует и производит валидацию
JWT
. -
Mysql - база данных товаров.
-
Keycloak Mysql - база данных пользователей Keycloak.
-
Redis - кеширует курсы валют, полученные от Rates.
-
Kafka - брокер сообщений. При изменении курса валют Rates постит сообщение об этом для Store. При наступлении этого события, Store очищает кеш, хранимый в Redis. Реализация на Spring Cloud Stream.
-
Zookeeper - зависимость Kafka. Активно используется Kafka для организации своей распределенной системы.
-
Logstash - для централизованной сборки логов у сервисов.
-
Elasticsearch - для хранения логов.
-
Kibana - для визуализации логов.
-
Zipkin - для трассировки распределенных запросов (визуализации длительности их выполнения)
JPA (Hibernate), Spring Actuator, Hibernate Validation, Spring Web, Spring Cloud Config, Spring Cloud Stream, Slf4j, Lombok, Spring Cloud Load Balancer, Netflix Eureka, Eureka Discovery Client, Load Balanced Spring REST template, Resilience4j, Spring Gateway, Keycloak, JWT, Redis, Kafka, Logstash, Elasticsearch, Kibana, Zipkin.
docker-compose -f docker/docker-compose.yml up -d
- В
C:\Windows\System32\drivers\etc\hosts
добавить:
127.0.0.1 keycloak
127.0.0.1 kafka
127.0.0.1 redis
127.0.0.1 logstash
127.0.0.1 kibana
127.0.0.1 elasticsearch
127.0.0.1 zipkin
- Запустить другие сервисы в IDE.