Skip to content

aamadaminov/microservices-testing

Repository files navigation

Microservices testing

Тестирование микросервисов

image

Пояснение к узлам на схеме:

  1. gencoords - генератор координат от текущих даты/времени.
  2. gentemps - генератор температуры/влажности в отсеках корабля от текущих даты/времени.
  3. producercoords - продюсер данных в Kafka от генератора координат.
  4. producertemps - продюсер данных в Kafka от генератора температуры/влажности.
  5. consumersensors - консьюмер данных из Kafka. Сохраняет данные из двух топиков по двум соответствующим таблицам в БД ClickHouse.

Используемые продукты и технологии:

  • Clickhouse (clickhouse/clickhouse-server:25.10.2)
  • Kafka (confluentinc/cp-kafka:7.9.5)
  • Zookeeper (confluentinc/cp-zookeeper:7.9.5)
  • gRPC (обмен данными между генераторами данных и продюсерами), HTTP Query (для изменения скорости запросов от продюсеров к генераторам данных)
  • otlptrace, otel/exporters/prometheus, Sarama (Go-клиент для Apache Kafka)

Порядок развёртывания (без Kubernetes):

  1. В облаке (например, Yandex Cloud) создаём несколько виртуальных машин (ВМ), достаточно будет 2 ядра Zen 4, 1-6 GB RAM, 10-20 GB SSD, и резервируем один белый IP адрес.
  2. Создаем ВМ: proxy, gencoords, gentemps, producercoords, producertemps, consumersensors, kafka01, clickhouse01, otel01.
  3. Настраеваем подключение к остальным ВМ по SSH через proxy. Для этого на proxy в /etc/ssh/sshd_config активируем "AllowTCPForwarding yes". Копируем приватный ключ (scp .ssh/id_ed25519 beta@:~/.ssh/id_ed25519), устанавливаем права (chmod 600 ~/.ssh/id_ed25519).
  4. Настраиваем NAT Virtual Private Cloud для возможности ВМ скачивать необходимые файлы.
  5. Добавляем секреты для GitHub Actions: SSH для подключения к ВМ, PAT (classic) для публикации docker images в ghcr.io, Fine-grained PAT с правами чтения репозитория для компиляции бинарных файлов и адресного скачивания файлов Docker compose, PROXY_IP с адресом proxy.
  6. Запускаем predeploy.yml. Он обновит все зависимости и установит Docker на каждую из ВМ (за исключением proxy).
  7. Запускаем predeploy-otel.yml. Он установит приложения для сбора телеметрии на каждую из ВМ (за исключением proxy).
  8. Запускаем deploy-static.yml. Он установит приложения kafka, clickhouse и OpenTelemetry Collector на ВМ kafka01, clickhouse01 и otel01 соответственно.
  9. Запускаем golangci-lint.yml (срабатывает по триггеру push в main-ветку). Он проверит код всех приложений на предмет ошибок.
  10. В случае успешного завершения golangci-lint.yml автоматически запустится unit-tests.yml. Он выполнит unit-тесты функции сохранения в Clickhouse для consumersensors.
  11. В случае успешного завершения unit-tests.yml автоматически запустится build.yml. Он сформирует новые контейнеры с приложениями и опубликует их в ghcr.io.
  12. В случае успешного завершения build.yml автоматически запустится deploy-apps.yml. Он направит новые образы на ВМ для первичного развёртывания/замены текущих контейнеров.
  13. При изменении кода в репозитории пункты 9-12 повторяются автоматически (при ручной отмене выполнения одного из пунктов - автоматически отменяются и последующие).
  14. При ручном запуске integration-tests.yml можно выполнить интеграционное тестирование сохранения в Clickhouse для consumersensors (разворачивается контейнер clickhouse01-test и проверяется реальное взаимодействие с БД как если это было бы в production-среде).
  15. В корне репозитория расположены файлы тестирования producercoords (под нагрузкой исходящей от proxy). По графикам видно, что спустя некоторое время на узле-источнике нагрузки (proxy) срабатывает защита, и процесс vegeta уничтожается.

About

Тестирование и публикация микросервисов

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors