2

MockServer集群化

 2 years ago
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.
neoserver,ios ssh client

MockServer集群化

推荐 原创

wx61ee58d59725e 2022-09-20 10:18:28 博主文章分类:云计算 ©著作权

文章标签 json jar 客户端 文章分类 其它 云计算 yyds干货盘点 阅读数411

MockServer 支持非常高的请求吞吐量,但是如果需要更高的每秒请求速率,则可以将 MockServer 集群化,以便所有节点共享期望。

MockServer集群化_jar

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 上运行,使用以下命令:

java -Xmx500m -Dmockserver.logLevel=WARN -Dmockserver.disableLogging=true -jar ~/.m2/repository/org/mock-server/mockserver-netty/5.14.0/mockserver-netty-5.14.0-shaded.jar -serverPort 1080

下图显示了 p99 如何随着并行客户端数量的增加而增加。

MockServer集群化_jar_02

Apache Bench 性能测试结果

Apache Benchmark 执行如下:

ab -k -n 10000000 -c <parallel clients> http://127.0.0.1:1080/simple

测试结果如下:

MockServer集群化_jar_03

Locust 性能测试结果

locust --loglevel=WARNING --headless --only-summary -u <parallel clients> -r 100 -t 180 --host=http://127.0.0.1:1080

测试结果如下:

MockServer集群化_json_04

使用下面的脚本

import locust.stats
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_WATCH_INITIALIZATION_JSON=true \
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
java \
-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张三丰 

MockServer集群化_json_05

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK