

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
-
215
最近在做 ElasticSearch 的信息(集群和节点)监控,特此稍微整理下学到的东西。这篇文章主要介绍集群的监控。
-
166
为什么需要监控?为了保证系统的稳定性,可靠性,可运维性。 掌控集群的核心性能指标,了解集群的性...
-
110
【译】集群调度架构的变革 (二) 祝坤荣...
-
164
题记Elasticsearch当清理缓存( echo 3 > /proc/sys...
-
98
【译】集群调度架构的变革 (三) 祝坤荣...
-
127
一、概述WebSocket 应用场景非常广泛,例如社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、实时定位、在线教育、智能家居等,这些场景都与我们的生活息息相关。ANY-IM 2.0 是基于 Spring Boot
-
124
[译]集群调度架构的变革 (四) 祝坤荣...
-
72
Apache Flink 1.4.0:Standalone集群模式实践 Apache Flink是一个开源的流处理框架,提供了分布式的、高性能的、高可用的特性,同时能够为流式应用程序提供多种编程语言的API,更多有关Flin...
-
6
Files Permalink Latest commit message Commit time
-
3
README NAME Test::HTTP::MockSer...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK