MockServer集群化
source link: https://blog.51cto.com/u_15501087/5691109
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
MockServer集群化
推荐 原创MockServer 支持非常高的请求吞吐量,但是如果需要更高的每秒请求速率,则可以将 MockServer 集群化,以便所有节点共享期望。
MockServer 的构建是为了支持单个实例的大规模:
- Apache Benchmark 测试了多达 6,000 个并行客户端,显示 MockServer 平均为 1.58 毫秒,p99 为 4 毫秒,150 个并行客户端每秒发送 95,228 个请求
- Locust 测试了多达 3,000 个并行客户端,并显示 MockServer 对 150 个并行客户端的 p99 为 4 毫秒
以下框架和技术用于最大化可扩展性:
- Netty 一个异步事件驱动的网络应用框架,最大化 HTTP 和 TLS 的可扩展性
- LMAX Disruptor 是一个高性能的线程间消息传递库,可最大限度地提高记录事件(即状态)和日志记录的可扩展性
- ScheduledThreadPoolExecutor 一个可以调度延迟任务的线程池,用于执行延迟响应,避免阻塞线程
MockServer 已经使用 Apache Benchmark 和 Locust 在以下场景中进行了性能测试:
- 四个基本期望,包括方法、路径和标头
- 基本 GET 请求匹配第三个期望(即每个请求尝试三个匹配)
在测试期间,MockServer 在 Java 13 JVM 上运行,使用以下命令:
下图显示了 p99 如何随着并行客户端数量的增加而增加。
Apache Bench 性能测试结果
Apache Benchmark 执行如下:
测试结果如下:
Locust 性能测试结果
测试结果如下:
使用下面的脚本
from locust import task, between
locust.stats.CONSOLE_STATS_INTERVAL_SEC = 60
from locust.contrib.fasthttp import FastHttpLocust
class UserBehavior(FastHttpUser):
wait_time = between(1, 1)
@task
def request(self):
self.client.get("/simple", verify=False)
尽管期望是集群的,但目前不支持集群 MockServer 日志,因此请求验证仅适用于接收请求的节点。
要创建 MockServer 集群,所有实例都需要:
- 共享一个读写文件系统,即相同的物理/虚拟机、NFS、AWS EFS、Azure 文件等
- 配置相同的期望初始化器和期望持久化
- 绑定到一个空闲端口,即如果在同一物理/虚拟机上,则为单独的端口
每个节点可以配置如下(根据需要调整端口):
MOCKSERVER_INITIALIZATION_JSON_PATH=mockserverInitialization.json \
MOCKSERVER_PERSIST_EXPECTATIONS=true \
MOCKSERVER_PERSISTED_EXPECTATIONS_PATH=mockserverInitialization.json \
java -jar ~/Downloads/mockserver-netty-5.14.0-shaded.jar -serverPort 1080 -logLevel INFO
-Dmockserver.watchInitializatinotallow=true \
-Dmockserver.initializatinotallow=mockserverInitialization.json \
-Dmockserver.persistExpectatinotallow=true \
-Dmockserver.persistedExpectatinotallow=mockserverInitialization.json \
-jar ~/Downloads/mockserver-netty-5.14.0-shaded.jar -serverPort 1080 -logLevel INFO
关注公众号 soft张三丰
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK