Матрица производительности реактивных API с WebFulx и Redis
Реактивные системы предназначены для решения проблем, связанных с современными программными системами — проблем, связанных с большим количеством пользователей и высокой пропускной способностью. Ожидается, что реактивные системы будут очень отзывчивыми, эластичными, гибкими и управляемыми сообщениями.
В этой статье мы будем:
- Создайте набор полностью неблокирующих REST API с использованием SpringBoot 2.0, WebFlux и Reactive Redis.
- Тест производительности вышеупомянутых Реактивных API против традиционных нереактивных API
Код, используемый в этом примере, можно загрузить с GitHub.
Шаг первый: создание скелетного реактивного проекта WebFlux SpringBoot
Создайте проект SpringBoot maven, используя — https://start.spring.io
Добавьте следующие зависимости:
-
spring-boot-starter-web
-
spring-boot-starter-data-redis
-
spring-webflux
-
spring-boot-starter-data-redis-reactive
Обратитесь к зависимостям в pom.xml
Вам также может понравиться:
Все о Spring Boot [Учебники и статьи] .
Шаг второй: создание доменных объектов
В демонстрационном проекте используются доменные объекты Customer и Account. Клиент может иметь несколько учетных записей.
Шаг третий: создание неблокирующих реактивных REST API с использованием WebFlux
Создайте REST-контроллер CustomerControllerRx с целью обслуживания следующих реактивных API без блокировки.
- Добавить / обновить клиента
- findById клиент
Фрагмент кода использует Mono, который является реализацией интерфейса Reactive streams Publisher и ReactiveRedisTemplate и ReactiveValueOperations для взаимодействия с Redis неблокирующим способом.
ReactiveRedisTemplate настраивается в RedisConfigRx
Шаг четвертый: создание синхронного (блокирующего) REST API
Создайте REST-контроллер CustomerController с целью обслуживания API нереактивной блокировки. Мы используем CustomerRepository, который расширяет CurdRepository для взаимодействия с базой данных Redis.
Шаг пятый: подключение к Redis с помощью Docker
- Redis официально не поддерживает Windows. Однако самый простой способ запустить Redis для UNIX или Windows — использовать Docker.
- Выполните следующие действия, чтобы извлечь образ redis из док-концентратора и запустить порт 6379 в автономном режиме.
Джава
xxxxxxxxxx
1
$ docker pull redis $ docker run -d -p 6379:6379 --name redis1 redis $ docker ps -a // make sure redis is up and running.
Обратитесь к application.yml для свойств подключения Redis.
Шаг шестой: Настройте JMeter для тестирования
- Установите Apache JMeter https://jmeter.apache.org/
- Установите следующие графические плагины с сайта загрузки плагинов https://jmeter-plugins.org/
- Основные графики
- Дополнительные графики
Вышеуказанные плагины являются zip-файлами и могут быть извлечены в папку lib установочной папки JMeter. Как только плагины установлены, JMeter может быть запущен из папки bin.
Следующим шагом является создание планов тестирования для API-интерфейсов, которые необходимо сравнить. У меня есть следующие планы тестирования для API.
GetCustomers.jmx |
|
SaveCustomers.jmx |
|
GetCustomersRx.jmx |
|
SaveCustomersRx.jmx |
|
Вышеупомянутые планы тестирования можно открыть в JMeter и настроить для другого числа одновременно работающих пользователей — например, 5, 50, 100, 400, 500 и т. Д. Теперь тестовые примеры JMeter могут выполняться в режиме без пользовательского интерфейса, как показано ниже.
Оболочка
xxxxxxxxxx
1
jmeter -n -t <TestPLan.jmx> -l <TestPlan.jtl> -e -o <output folder>
Где:
-n работать в режиме без графического интерфейса
-t предоставить имя тестового файла
-l имя выходного файла отчета
-e jMeter для последующей постобработки, указанной в файле jmx.
папка на панели инструментов.
Шаг седьмой: сравнительный анализ реактивных REST API и блокировка REST API
Начало SpringRedisReactiveApplication
- Убедитесь, что приложение запускается без ошибок, подключившись к Redis DB в Docker.
- Укажите количество пользователей (потоков) и циклов (итераций) для планов тестирования.
Откройте TestPlan с помощью пользовательского интерфейса JMeter, измените количество пользователей (потоков) и установите количество циклов. Сохраните план тестирования. Выход из пользовательского интерфейса JMeter.
- Выполнить планы испытаний
Перейдите в папку JMeter \ bin и выполните:
Оболочка
xxxxxxxxxx
1
jmeter -n -t <path>\SaveCustomers.jmx -l <path>\SaveCustomers.jtl -e -o <path>\SaveCustomersOutput-5Users
Приведенная выше команда запустит SaveCustomers.jmx TestCases создает папку отчетов с именем SaveCustomersOutput-5Users
- Повторите шаги 6 (b) и 6 (c) для других планов тестирования, каждый раз меняя имя выходной папки.
- SaveCustomersRx.jmx
- GetCustomers.jmx
- SaveCustomersRx
- Повторите шаги 6 (b), (c) и (d) для 10, 50, 100, 200 и 400 пользователей.
Показатели эффективности
Небольшое количество одновременных пользователей |
|
Большое количество одновременных пользователей |
|