apisix 高性能实践
2020-03-01 726浏览
- 1.APISIX ⾼高性能实践 --by Yuansheng
- 2.王院⽣生 2014 ⼊入职 360 初识 OpenResty,空闲时间写了了 《OpenResty 最佳实践》聚 集国内开发者 2017 作为技术合伙⼈人加⼊入 OpenResty Inc. 2019 年年⼯工作重⼼心放到开源⼯工 作,并开始 APISIX 征程
- 3.我理理想公司的宗旨 “依托开源社区,致⼒力力于微服务 API 相关技术的创新和实现”
- 4.什什么是 API ⽹网关
- 5.微服务 API ⽹网关 动态更更新 • 更更低延迟 • ⽤用户⾃自定义插件 • 更更集中的管理理 API •
- 6.微服务 API ⽹网关 • • • • • 通过社区聚焦 简洁的 core 可扩展 顶级性能 低延迟
- 7.APISIX 架构 admin API apisix admin json schema ETCD libr3
- 8.APISIX 已有功能 • Cloud-Native • Limit-count • Dynamic Load Balancing • Limit-concurrency • Hash-based Load Balancing • CLI • SSL • REST API • Monitoring • Clustering • Forward Proxy • Scalability • Authentications • High performance • Limit-rate • Custom plugins
- 9.⼊入驻 CNCF 家族
- 10.APISIX 状态 • ⽬目前最新版本 0.5,架构:ETCD + libr3 + rapidjson。 • 超 70% 的代码覆盖率。 • 核⼼心代码覆盖率超过 90%。 • 有可能是性能最⾼高的 API ⽹网关。 • 下版本将⾃自带管理理界⾯面,降低⼊入⻔门⻔门槛。
- 11.APISIX 的性能 vs 性能只下降 15% 单 worker:23-24k 的 QPS 4 worker:68k 的 QPS 平台:alicloud ecs.ic5.3xlarge
- 12.奇技淫巧
- 13.OpenResty 编程哲学 • • • ⼤大事化⼩小,⼩小事化了了 尽可能少的少创建临时对象 对速度有要求,还是 C/C++
- 14.奇技淫巧 • delay_json • 前缀树 vs HASH vs 遍历 • uri dispatch vs host dispatch • ngx.log 是个 NYI • gc for cdata • gc for lua table
- 15.奇技淫巧 • • • • 如何保护好⽣生命周期很⻓长的 cdata 对象 ngx.var.* 是⽐比较慢的 减少每请求的垃圾对象 lrucache 的使⽤用技巧
- 16.delay_json core.log.info(core.json.delay_encode(api_ctx.matched_route))
- 17.前缀树 vs HASH vs 遍历 • • • 前缀树: 借助 libr3 完成前缀等⾼高级 匹配,⽐比如:uri,host HASH:完成静态字符串串匹配 遍历:永远都是糟糕的
- 18.ngx.log 是 NYI
- 19.gc for cdata and table 场景:worker 进程退出或放⼊入 lrucache 的对 象,可能是 cdata 对象,⽐比如要调⽤用 free 才 能真正释放。
- 20.如何保护常驻内存的 cdata 对象 table lua string A lua string B r3 lua string C 不不会增加计数引⽤用 running
- 21.ngx.var.* 是⽐比较慢的 原因:C 不不⽀支持动态,必须通过⼀一次 hash 查找 解决办法:github.com/iresty/lua-var-nginx-module
- 22.减少每请求的垃圾对象 • • 减少不不必要的字符串串拼接 table 缓存
- 23.减少每请求的垃圾对象
- 24.lrucache 的使⽤用技巧 • • • • lrucache 的⼆二次封装 key 要尽量量短、简单 version 可降低垃圾缓存 重⽤用 stale 状态的缓存数据
- 25.lrucache 的使⽤用技巧
- 26.lrucache 的使⽤用技巧
- 27.其他 • github.com/iresty/apisix • 更更多技巧:lua/apisix/core • QQ 交流群:552030619 • 欢迎⼤大家参与并使⽤用 • 提供⼀一对⼀一的服务