【译】SpringBoot如何构建一个可扩展高性能的响应式微服务?转载
SpringBoot 2.0 WebFulx和Redis的碰撞
搭建这个响应式微服务的目的是为了解决现代软件系统的一大挑战——高用户量和高吞吐量带来的挑战。
所以预期就是高度响应性、弹性、弹性和消息驱动。
在本文中,我们将:
- 使用 SpringBoot 2.0 WebFlux 和 Reactive Redis 构建完全非阻塞的 REST API系统。
- 对上述响应式 API 矩阵进行性能测试,并和传统的非响应式 API 做对比!
本示例中使用的代码可以从 GitHub下载
第一步:创建一个 WebFlux SpringBoot 项目
使用 - https://start.spring.io 创建一个 SpringBoot maven 项目
添加以下依赖项:
-
spring-boot-starter-web
-
spring-boot-starter-data-redis
-
spring-webflux
-
spring-boot-starter-data-redis-reactive
您可能还喜欢: 关于 Spring Boot [教程和文章] 的全部内容。
第二步:创建域对象
演示项目使用域对象 Customer 和 Account。一个客户可以有多个帐户。
创建两个域对象
第三步:使用 WebFlux 创建非阻塞响应式 REST API
创建一个 REST 控制器CustomerControllerRx以提供以下响应式无阻塞 API。
- 添加/更新客户
- findById 一个客户
代码片段使用 Mono,它是 Reactive 流 Publisher 接口的实现,以及 ReactiveRedisTemplate 和 ReactiveValueOperations 以非阻塞方式与 Redis 交互。
反应式 Redis 模板
RedisConfigRx中配置 ReactiveRedisTemplate
第四步:创建同步(阻塞)REST API
创建一个 REST 控制器CustomerController以提供非响应式阻塞 API。我们正在使用CustomerRepository,它扩展了一个 CurdRepository 来与 Redis 数据库交互。
创建 REST 控制器
第五步:使用 Docker 连接到 Redis
- Redis 不正式支持 Windows。但是,在 UNIX 或 Windows 上启动和运行 Redis 的最简单方法是使用 Docker。
- 使用以下步骤从 docker hub 拉取 redis 映像并以分离模式在端口 6379 上启动。
$ docker pull redis $ docker run -d -p 6379:6379 --name redis1 redis $ docker ps -a // make sure redis is up and r
有关 Redis 连接属性,请参阅application.yml 。
第六步:设置 JMeter 进行测试
- 安装 Apache JMeter https://jmeter.apache.org/
- 从插件下载站点https://jmeter-plugins.org/安装以下图形插件
- 基本图
- 附加图表
以上插件为zip文件,可以解压到JMeter安装文件夹的lib文件夹中。安装插件后,可以从 bin 文件夹启动 JMeter。
下一步是为需要进行基准测试的 API 创建测试计划。我有以下API测试计划。
GetCustomers.jmx |
|
SaveCustomers.jmx |
|
GetCustomersRx.jmx |
|
SaveCustomersRx.jmx |
|
上述测试计划可以在 JMeter 中打开并针对不同数量的并发用户进行配置——例如 5、50、100、400、500 等。现在,JMeter 测试用例可以在非 UI 模式下执行,如下所示。
jmeter -n -t <TestPLan.jmx> -l <TestPlan.jtl> -e -o <output folder>
其中:
-n 在非 GUI 模式下运行
-t 提供测试文件的名称
-l 输出报告文件的名称
-e jMeter 遵循 jmx 文件中指定的后处理。
-o 仪表板文件夹。
第七步:对响应式 REST API 与阻塞 REST API 进行基准测试
开始SpringRedisReactiveApplication
- 通过连接到 Docker 上的 Redis DB,确保应用程序启动时没有错误。
- 为测试计划设置用户(线程)和循环(迭代)的数量。
使用 JMeter UI 打开 TestPlan 并更改用户(线程)数并设置循环数。保存测试计划。退出 JMeter 用户界面。
- 执行测试计划
转到 JMeter\bin 文件夹并执行:
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
- 获取客户.jmx
- SaveCustomersRx
- 对 10、50、100、200 和 400 个用户重复步骤 6 (b)、(c) 和 (d)。
性能指标
结果
并发用户数少 |
|
大量并发用户 |
|
原文地址:https://dzone.com/articles/springboot-performance-war
原文作者:Santhosh Krishnan