最近想针对服务端进行压测,有几个点想请教一下。
如何真实模拟线上环境?如果把线上数据整个拷贝过来的话,成本其实挺高的,比如硬件成本以及数据同步成本。假如不走数据拷贝的话,那该如何更真实的模拟用户环境呢?是否可以在测试环境等比例缩放线上环境的数据,同时相应减少机器的配置呢?但是性能问题似乎不是等比例的,而是指数级的,所以还是受困于如何模拟真实环境的问题。
不知道各位大哥都咋搞压测的。
1
bingoup886 2022-04-20 22:24:24 +08:00 via iPhone 1
分享下我搞的,不过存在你说的成本问题。
1 Nginx 接收到流量后把请求包装,包括 param,body 等信息,发送 kafka 消息。 2 消费者收到消息后插入 hive, 这个具体对待,es 啥的也可以。 3 压测是根据接口配置查询 hive, 把要压测的请求 url 最后拼装成特定格式的 txt, 即流量录制。 4 施压程序读取流量,重新请求。如果涉及但写场景,需要把 userId 做偏移,这点的前提是服务要能适配,做好基础数据或者反偏移。 大概流程就这样,如果自己搞把上面这些流程系统化就行。 |
2
shanghai1943 OP @bingoup886 #1 听起来像是在线上环境进行压测,然后通过 userId 的偏移来确保数据安全性是吧。偏移后的 userId 应该是能在业务数据库里找到真实数据的吧。
|
3
bingoup886 2022-04-21 10:10:43 +08:00 via iPhone
@shanghai1943 对,直接压线上,userId 可以插入正式表 or 插入影子表 or 程序支持反偏移
|
4
shanghai1943 OP @bingoup886 #3 另外还想请教一下,就是压测的时候是所有请求类型都压测么,比如 POST DELETE 这些。这些压测的 userId 应该都是自己建立出来的数据吧,是不是还得往这些 userId 里插入足够多的数据,才能模拟出部分数据量大的真实用户的场景?谢谢。
|
5
bingoup886 2022-04-21 13:56:54 +08:00
@shanghai1943 你所说的就是写场景啊,要么使用模拟用户,要么录制真实用户请求后做偏移。模拟用户那就越多越好,如果是录制的话,把录制的周期拉长点就好了。把一天的流量用 5 分钟来回放,那 qps 应该会挺高了啊。
|
6
shanghai1943 OP @bingoup886 #5 嗯嗯好的。谢谢
|