Giter Club home page Giter Club logo

microservice-store's Introduction

Общее описание

Проект магазина товаров, предназначенный для изучения различных технологий Java.

Сервис Store возвращает цену товара в разной валюте. Для этого нам потребуется 15 микросервисов.

Список сервисов

  1. 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-стек.

  2. Rates - сервис курса вылют. Доступ реализован по JWT (который также можно получить у Keycloak).

  3. Config-server - хранит конфигурации всех сервисов (Spring Cloud Config Server). 4.Eureka-server - discovery service.

  4. Gateway - проксирует все запросы к сервисам (используя Eureka-server для получения конечного адреса нужного сервиса). Добавляет в заголовок запроса уникальный request-id (если запрос поступил без него). Все запросы от клиентов приложения и между сервисами проходят через Gateway.

  5. Keycloak - менеджер прав пользователей. Хранит пользователей их роли. Генерирует и производит валидацию JWT.

  6. Mysql - база данных товаров.

  7. Keycloak Mysql - база данных пользователей Keycloak.

  8. Redis - кеширует курсы валют, полученные от Rates.

  9. Kafka - брокер сообщений. При изменении курса валют Rates постит сообщение об этом для Store. При наступлении этого события, Store очищает кеш, хранимый в Redis. Реализация на Spring Cloud Stream.

  10. Zookeeper - зависимость Kafka. Активно используется Kafka для организации своей распределенной системы.

  11. Logstash - для централизованной сборки логов у сервисов.

  12. Elasticsearch - для хранения логов.

  13. Kibana - для визуализации логов.

  14. 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.

Установка

  1. docker-compose -f docker/docker-compose.yml up -d
  2. В 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
  1. Запустить другие сервисы в IDE.

microservice-store's People

Contributors

mironovmike avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.