OpenResty 从入门到实战
温铭
OpenResty 软件基金会第一任主席,Apache APISIX 项目 VP
20903 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 52 讲
结束语 (1讲)
OpenResty 从入门到实战
15
15
1.0x
00:00/00:00
登录|注册

30 | 答疑(三)如何搭建测试的网络结构?

使用prove命令
git clone最新的test::nginx
使用cpanm安装
Coordinated Omission问题
方法二:用专门的路由器搭建局域网
方法一:本地部署wrk和服务端程序
更新换代的必要性
不足之处
DSL在OpenResty中的应用
领域专用语言
安装问题
测试ssl相关功能
性能测试工具的注意事项
搭建测试的网络结构
选择正确的测试工具
ab测试工具
DSL
test::nginx
性能测试网络结构搭建

该思维导图由 AI 生成,仅供参考

你好,我是温铭。
专栏更新到现在,OpenResty 第三版块 OpenResty 测试篇,我们就已经学完了。恭喜你没有掉队,仍然在积极学习和实践操作,并且热情地留下了你的思考。
很多留言提出的问题很有价值,大部分我都已经在 App 里回复过,一些手机上不方便回复的或者比较典型、有趣的问题,我专门摘了出来,作为今天的答疑内容,集中回复。另一方面,也是为了保证所有人都不漏掉任何一个重点。
下面我们来看今天的这 5 个问题。

问题一:如何搭建测试的网络结构?

Q:跑 wrk 的客户端,是应该放在外网上的机器上,还是和服务端同一局域网内的机器上呢?这两者,哪个更有性能测试意义?
A:其实,对于测试 web 相关的服务来说,选择正确的测试工具,只能算得上是一个好的开端,如何搭建测试的网络结构,也是后续的重要一环。
一般来说,我们肯定希望排除所有网络的干扰,单独测试出服务的性能极限来。出于这个目的,我们可以有两种搭建网络的方法来做压测。
第一种方法,把 wrk 和服务端程序都部署在同一台性能比较好的机器上。比如, 我们在 Nginx 中开启 8 个 worker,剩下的几个 CPU 资源分给 wrk。这样一来,就只有本地的网络通信,可以把网络的影响降到最低。
第二种方法,用专门的路由器搭建一个局域网,把 wrk 所在的机器和服务端所在的机器连在一起。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文主要围绕OpenResty测试篇展开,作者回答了读者提出的五个问题。首先,作者解释了如何搭建测试的网络结构,建议在性能测试时排除网络干扰,可以选择将wrk和服务端程序部署在同一台性能较好的机器上,或者用专门的路由器搭建一个局域网。其次,作者指出`test::nginx`可以测试ssl相关功能,并提供了测试案例文件。然后,作者解释了DSL(领域专用语言)的概念及其在OpenResty中的应用。接着,作者分享了安装`test::nginx`的方法,并建议按照travis CI中构建的方法来使用和测试OpenResty。最后,作者提到ab测试工具并非最佳性能测试工具,而是根据HTTP协议版本选择使用ab或者weighttp作为压力测试工具。文章内容涵盖了网络结构搭建、SSL功能测试、DSL概念、`test::nginx`安装方法以及性能测试工具选择等方面,为读者提供了OpenResty测试相关的实用知识。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《OpenResty 从入门到实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • helloworld
    local table_nkeys = require "table.nkeys" foo = {1, 2, 3, "bar"} item_count = #foo item_count_ = table_nkeys(foo) 老师,这两种获取table元素个数的方法,哪个效率更高

    作者回复: 对于这种请求,我更喜欢 # 操作符,table_nkeys里面还是有不少判断逻辑的。性能我没有测试,应该是#更好一些。

    2019-08-02
    1
  • Geek_41dcba
    感谢老师,让我对openresty有了比较全面的认识。但目前在写测试用例跑CI时,还是有一些无从下 1. 某一个用例对系统环境有要求,比喻依赖时间,我想要模拟在一天中某段时间执行代码其他时间不执行,或者响应内容中表示时间字段的内容精度要求很高,如何去验证这个精度(我现在都做法是like方式去正则匹配,这个字段的内容是根据当前时间生成,猜测一个大概的时间) 2. 如何模拟一个用户请求,出现多级的upstream(模拟多级缓存不存在是服务端发起uostream的场景)

    作者回复: 第一个问题,你的做法是正确的,在 OpenResty 中也是用正则来判断时间的。你可以看下 lua-nginx-module 中 012-now.t 这个测试案例的做法; 第二个,上游都是可以在测试案例中模拟出来的,比如:https://github.com/iresty/apisix/blob/master/t/APISix.pm#L79

    2019-08-02
    1
  • helloworld
    ngx.say(type(ngx))输出table ngx.say(cjson.encode(ngx))为什么无法序列化ngx,报错提示不能对函数做序列化。 老师,这个是什么原因呢

    作者回复: 你是指为什么一个类型是 table,一个报错时候的类型是function? 首先 ngx 确实是一个 table,其次 cjson 里面报错的源码在这里 https://github.com/mpx/lua-cjson/blob/master/lua_cjson.c#L457: luaL_error(l, "Cannot serialise %s: %s", lua_typename(l, lua_type(l, lindex)), reason); 它是用 lua_typename(l, lua_type(l, lindex)) 来判断数据类型的。我估计 lua_type 判断 ngx 的时候出错了。但我并没有跟到代码中去确认,你可以看下具体的判断代码。

    2019-08-04
  • 猪小擎
    更好不是更换一项技术的理由,好得多才是,如果没有50%左右的提升,那么就没必要更换。
    2022-04-06
    1
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部