Upload
others
View
11
Download
0
Embed Size (px)
Citation preview
⾼高性能路路由实现 for OpenResty
--by Yuansheng
王院⽣生
2014 年年初识 OpenResty 2015 年年写了了《OpenResty 最佳实践》聚集了了国内开发者 2017 年年作为技术合伙加⼊入 OpenResty Inc.
OpenResty 基⾦金金会https://shimo.im/sheet/8Mi2SJko4hMBftTH/RIDOC
https://shimo.im/sheet/8Mi2SJko4hMBftTH/RIDOC
为什什么选择做个⾼高性能路路由组件
Web development framework
Model View Controller resty-r3
程序员的⽜牛⽪皮
⼀一天写了了⼏几千⾏行行代码
⼏几万收⼊入
维护公司核⼼心项⽬目
分分钟解决困扰⼤大家已久的问题
做过超⼤大项⽬目,⼏几亿 PV ⼩小意思
单身屌丝,⼿手速谁与争锋
他们不不会的都得问我
程序员的⽜牛⽪皮
都在⽤用我的代码
运⾏行行在更更多计算机上
基础组件 > 业务应⽤用
严谨程度
基础组件开发
● ⼩小⽽而美 ● 需求变化较⼩小
● 稳定性要求⾼高 ● ⼩小需求,可能⼤大改动
● 技术难度⼤大 ● 处理理异常分⽀支
● 关系咬合⽐比较紧密,偶尔重构
● 对于不不兼容,⽼老老⻦鸟通常是改,新⻦鸟喜欢新增 API
基础组件开发
需求 调研
书写代码 测试⽤用例例
项⽬目⽬目标
单元测试
集成测试 ⼯工具测试 发布版本
项⽬目⽬目标
技术⽬目标 暴暴露露 API 最⼩小⽤用例例 与⽤用户确认协调
测试模式
测试⽤用例例框架
Test::Nginx busted语⾔言 more Perl Lua
⽣生存世界 OpenResty 标准 Lua
抽象层次 ⾼高 低
学习难度 ⾼高 低
代码覆盖率 ⽆无 有
功能点覆盖 Test::Nginx > busted
使⽤用场景 OpenResty 及周边 Lua 单元测试
Test::Nginx
• 基于 Test::Base • Perl 语⾔言(上⼿手难) • 语⾔言⽆无关的测试框架 • 很强的扩展性(虽然难) • 可搭配 valgrind • 可搭配 asan
FFI vs FFI
lua
libr3.so
lua
libr3.so
libr3.a
One step Two steps
One step vs Two step
ffi.cdef170 ⾏行行 20 ⾏行行
去掉了了 r3 头⽂文件中结构体的依赖
Only simple code
libr3.so compiled with libr3.a
开源最友好的CI
TRAVIS-CI
TRAVIS-CI
C/C++ library 测试⼯工具
⼯工具名 测试点
ASAN mode (Compiling with Address Sanitizer (ASAN) with clang)
内存泄露露
Valgrind mode 内存泄露露
wrk 协助发请求,压⼒力力测试
⽕火焰图确定性能瓶颈(⽐比如 CPU)
辅助发现问题
创建⾥里里程碑碑
Q & A