Рубрики
Без рубрики

Концепции микросервисов – Java

Концепции микросервисов (с использованием технологий Java) В микросервисах у нас может быть несколько… Помеченный микросервисами, java.

Концепции микросервисов (с использованием технологий Java)

В микросервисах у нас может быть запущено несколько служб, и каждая служба также может иметь несколько экземпляров.

Служба продуктов: просмотр продуктов с помощью rest api Служба заказов: размещает заказ Служба инвентаризации: проверяет, доступен ли продукт в службе уведомлений об инвентаризации:

Служба обнаружения

  • У каждой службы может быть запущено несколько экземпляров, и они должны обнаруживать друг друга.
  • Поскольку мы не можем конкретно указать службу, поскольку они являются несколькими экземплярами, ссылки на разные службы должны быть общими.
  • Ссылка на одну услугу означает ссылку на доступные услуги.
  • В java мы можем использовать spring cloud netflix эврика

Централизованная конфигурация

  • Если мы изменим переменную конфигурации в коде, нам нужно внести изменения в код, скомпилировать и повторно развернуть его.
  • Если у нас есть несколько экземпляров одной и той же службы, то это становится затруднительным, так как нам также необходимо отключить эти службы.
  • Решение: Используйте централизованный сервер конфигурации
  • Храните все переменные конфигурации различных служб в разных файлах в репозитории git или локальном хранилище.
  • Всякий раз, когда в этих файлах происходят изменения, сервер конфигурации будет иметь новые переменные конфигурации.
  • Теперь, чтобы обновить все переменные конфигурации во время выполнения, вам нужно вызвать какой-либо api-интерфейс, который обновит переменные конфигурации в этой службе и во всех ее экземплярах.
  • В Java Центральный конфигурационный сервер с автоматическим обновлением

Хранение секретов в хранилище

  • имена пользователей, пароли, ссылки на базы данных и т.д. Должны быть скрыты от конфигурации
  • Мы должны установить хранилище в нашей системе или через докер, запуск хранилища также запустит сервер.
  • Сохраните все секреты в хранилище.
  • В Java мы можем использовать конфигурацию хранилища Spring starter для использования секретов в нашем коде.
  • Достаточно просто подключиться к серверу хранилища, и все секреты станут доступны сервису.

Посредник сообщений

  • Одна служба может зависеть от другой службы, изменение переменной конфигурации одной службы может повлиять на другую.
  • Мы можем использовать брокер сообщений, такой как RabbitMQ, который сообщает о некоторых изменениях в конфигурации другим службам, которые подписаны на эту службу, в которой произошли изменения.
  • RabbitMQ должен быть установлен в хост-системе и работать на каком-либо хосте и порту.
  • RabbitMQ в инфре?

Шлюз API

  • В нашем приложении могут быть разные сервисы.
  • Каждая служба может обрабатывать разные конечные точки.
  • Шлюз API, получает запрос uri от клиентов.
  • Он перенаправляет клиента на правильный сервис.
  • Он действует как распределенная центральная конечная точка.
  • Мы также можем подключить балансировщики нагрузки к каждой службе.
  • Здесь также можно позаботиться об аутентификации, мониторинге и ограничении скорости.
  • Шлюз API также является сервисом и должен присутствовать в службе обнаружения.
  • В Java, spring cloud gateway

Защита сервера с помощью аутентификации и авторизации

  • Запустите keycloak на хост-машине, он запустится на каком-нибудь порту
  • ретрансляция токенов:
    • Если аутентификация выполняется с помощью токена, используя keycloak, поскольку мы будем авторизовываться на шлюзе api, нам также необходимо отправить этот токен на соответствующий шлюз.
  • В Java используйте Keycloak

Упругость

  • Служба заказов асинхронно взаимодействует со службой инвентаризации
  • Служба инвентаризации может выйти из строя, поэтому нам нужно сделать ее устойчивой
  • Интерпретатор запроса:
    • Когда одна служба разговаривает с другой, маркер аутентификации не отправляется. Потому что это не механизм передачи токенов.
    • Для передачи токена авторизации нам нужно получить токен и добавить его на предъявителя авторизации в заголовке запроса, а затем отправить запрос в службу.
  • Определение: следите за перебоями в обслуживании и задержками в сети и временно останавливайте службу до тех пор, пока она снова не начнет нормально функционировать.
  • В Java, Resilience или hystrix (netflix – сейчас не поддерживается)

Архитектура микросервисов, управляемых событиями

  • Когда заказ размещен, служба заказов отправляет сообщение в службу уведомлений через RabbitMQ.
  • Используйте привязки RabbitMQ для прослушивания событий
    • выходные связующие: для отправки уведомлений
    • привязки ввода: для получения уведомлений

Распределенная трассировка

  • шаблон микросервисов позволяет нам отслеживать запросы от одного микросервиса к другому.
  • Мы предоставляем уникальный идентификатор по ходу запроса
  • каждый запрос имеет один и тот же идентификатор трассировки на протяжении всего пути
  • но когда между ними есть автоматический выключатель, идентификатор трассировки изменяется, поскольку автоматический выключатель порождает новый поток. Но есть обходной путь, позволяющий сохранить наш идентификатор трассировки неизменным (отслеживаемая служба исполнителей на Java).
  • В java мы используем spring cloud sleuth и zipkin

Централизованное ведение журнала

  • журналы находятся во всех разных службах
  • размещайте все журналы централизованно
  • Сначала нам нужно использовать некоторую библиотеку ведения журнала в каждой службе, например log4J или logback
  • остерегайтесь проблем с безопасностью при входе в систему
  • В java (популярен стек ELK -> эластичный поиск, лог-кэш и кибана)
    • logstash: службы приложений отправляют журналы в logstash по протоколу tcp. затем эти журналы отправляются из хранилища журналов в elasticsearch.
      • этапы: (настройка в файле logstash.conf)
        • ввод: из служб, использующих tcp или ftp или RabbitMQ
        • фильтр: журналы фильтрации
        • вывод: отправить в elasticsearch
    • Эластичный поиск (реализация поисковой системы на java): Используется для хранения журналов
      • Каждый сервис имеет свой собственный индекс в эластичном поиске
    • Kibana: Визуализация, запрос и фильтрация данных эластичного поиска

Конец

  • Не используйте микросервисную архитектуру, если в этом нет необходимости. В большинстве случаев лучше всего подходят монолиты.

Посетите мой личный блог здесь: https://rahilrehan.github.io/

Оригинал: “https://dev.to/rahil_rehan/microservices-concepts-java-1a5a”