高性能路由实现 for openresty - opentalk-blog.b0 ... · 2014 初识 openresty 2015 写 ......

23
性能由实现 for OpenResty --by Yuansheng

Upload: others

Post on 03-Jun-2020

11 views

Category:

Documents


0 download

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