前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python实现高性能mock服务

python实现高性能mock服务

作者头像
用户5521279
发布2020-08-21 16:48:26
1.5K0
发布2020-08-21 16:48:26
举报
文章被收录于专栏:搜狗测试搜狗测试

前言

昨天的文章详细的介绍了mock,今天补充一个mock服务的实际使用场景——高并发性能测试时的依赖服务mock;

背景

最近在做一个项目的全链路压测,目的是验证服务有LB层、虚拟化层再到服务本身的性能情况,目标QPS是50w;这就带来一个问题,由于待测服务A有n个后端服务,且客户端请求数:后端服务请求数是1:n的,也就是说预期的50w的qps,对应后端的qps和就是n倍的50w;当然,测试过程不能使用线上服务,所以需要一个性能非常好的mock服务;

过程

  1. 之前分享过使用nginx cache来实现mock server,当然nginx cache也能完成这个任务,32核64G的linux,nginx的cache性能可以达到单机20w。 但使用nginx cache作为mock server有几个问题: 1、需要先cache真实的后端服务的response; 2、如果有多个接口需要mock的话,需要频繁的修改nginx配置; 3、如果有接口返回内容需要更新,需要删掉本地cache文件; 4、单机20w的qps,相比一般的网络框架,已经很高了,但是n×50w的qps,还是需要很多台nginx,才能完成;
  2. 为了解决上述几个问题,考虑用golang写一个mock服务,写了个架子测试了一下,查map的qps只能到6w多,还不如nginx,放弃;
  3. google了一下高性能框架,发现一个叫japronto的python的网络框架,号称单机100w+的qps,写了个demo试了一下,确实没问题;详见github地址:https://github.com/squeaky-pl/japronto 引用一张性能对比: 

自定义mock服务

  1. 需求1:单机100w的qps——使用japronto服务可实
  2. 需求2:自定义mock接口path——服务启动时读取DB内配置作为path
  3. 需求3:更新接口返回内容方便——前端页面支持增加&修改DB接口path配置
  4. 需求4:支持json结果&protobuf二进制结果——预置proto,自定义接口返回类型,服务初始化时做不同处理;

mock服务实现

服务启动 -> initData -> 根据type做不同处理,默认返回类型json,proto的话做二进制序列化; DB字段:

 实现简单前端页面完成接口内容修改:

 用wrk验证一下测试服务性能:(抛开带宽限制)

 32核机器,20个进程,qps可达98w,tp99<2ms;

实际使用

实际使用时,只需要同时部署5台20核虚机,或打包成镜像附属到测试集群,使用内网域名负载均衡到这五台机器(k8s集群的话使用域名映射),将被测服务的依赖服务地址改写成mock域名:端口/自定义path;

代码地址

https://github.com/lidedede/fastMock

  • 整个工程100行左右代码,比较简陋,前端页面在另一个内部工程中完成,不好贴出来,大家可以自己实现,或者直接通过mysql客户端修改DB内容;
  • 目前mock服务只支持单一接口对应单一mock结果,后续可以自定义多个value,在服务内随机返回;

使用场景

超高并发的中转服务测试场景,依赖服务数据稳定,被测服务无缓存(或测试过程中去掉缓存)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 背景
      • 过程
        • 自定义mock服务
          • mock服务实现
            • 实际使用
              • 代码地址
                • 使用场景
                相关产品与服务
                负载均衡
                负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档