高性能路由实现 for openresty - opentalk-blog.b0 ... · 2014 初识 openresty 2015 写 ......
TRANSCRIPT
-
⾼高性能路路由实现 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