Apache APISIX 在金山办公的开发和落地实践
Apache APISIX 在金山办公的开发和落地实践 张强 金山办公 01 前情回顾&增补 02 关于 OpenResty 和 Lua 的思考 03 基于 Apache APISIX 破局 04 解决 Nginx 带来的问题 CONTENT W r i t e h e r e S o m e t h i n g a b o u t 前情回顾 & 增补 01 About •金山办公云原生应用组流量网关 o u t 关于 OpenResty 和 Lua 的思考 一个菜鸟的视角 02 关于 OpenResty 和 Lua 的思考 Lua 适合 “ 平均水平 ” 的大团队做大工程吗 •动态类型语言 •网关产品对 runtime error 容忍度比较低 •Lua 开发环境,特别是 OpenResty 相关的比较弱 •难招人,后端开发转 lua 成本高昂 “A programming language applications” Wikipedia - Lua 关于 OpenResty 和 Lua 的思考 Nginx 的设计给 “ 平均水平 ” 终端开发者带来的问题 •多进程模型 + 异步 •线上问题难以调试 •多进程间同步效率低 •以nginx-lua-prometheus为例 (https://github.com/knyar/nginx-lua-prometheus/issues/107)0 码力 | 27 页 | 4.88 MB | 1 年前310-APISIX 与 SkyWalking 的最佳实践-王院生
share dict Nginx + Lua http(s) ⼆次优化实践 ⼆次优化实践 - ⾼性能调优利器,⽕焰图 ⼆次优化实践 - 去掉不必要的共享内存交换 rewrite phase bodyfiler phase log phase init worker phase background timer client Lua table Nginx + Lua http(s) rewrite init worker phase background timer client share dict Nginx + Lua http(s) ⼆次优化实践 ➤ Nginx 性能很⾼,⽽⾼性能的代码有时候是不优雅的 ➤ reuse the temporary Lua table object ➤ use `ngx.var.http_****` to fetch specific header ,后⾯会有更好表现 ➤ PR:https://github.com/apache/skywalking-nginx-lua/pull/49 为什么要参与开源项⽬ “懂王下线,赌王上线” 懂王下线,赌王上线 [bug] SkyWalking-nginx-lua0.3.0 traceid repeat all the time: https://github.com/apa0 码力 | 29 页 | 7.43 MB | 5 月前3API7 ⽹关技术⽩⽪书
规则将请求转发⾄上游服务。 此外,借助API7内置的50多种插件,可实现⾝份验证、安全防护、流量控制、分析监控、请求/响应 转换等常⻅业务需求;若内置插件⽆法满⾜需求,我们也⽀持使⽤Lua、Java、Go、Python语⾔⾃ 定义插件,可作⽤于请求进⼊、上游响应各个阶段。 ManagerAPI 2. ⽤于管理API⽹关,通过访问其暴露的RESTfulAPI接⼝以实现对路由、上游、证书、全局插件、消 board控制⾯板以可视化形式操作⽹关,⽀持监控分析、⽇ 志审计、多租⼾管理、多集群切换、多⼯作分区等能⼒。 1.1技术架构 数据平⾯ 1. 数据平⾯⽤于接收并处理调⽤⽅请求,使⽤Lua与Nginx动态控制请求流量。当请求进⼊时,将根据 预设路由规则进⾏匹配,匹配到的请求将被⽹关转发⾄对应上游服务。在此过程中,⽹关有能⼒根据 预设规则中不同插件的配置,使⽤⼀系列插件对请求 板,可⽅便、清楚地完成相关功能设置; • ⾃定义插件:API7内置了50多种插件,涵盖安全防护、流量控制、⽇志记录等各个分类,可满⾜ 绝⼤多数企业需求。对于特定业务,API7⽬前⽀持Lua、Java、Go、Python编写⾃定义插件, 且插件可以作⽤于流量进出的各个阶段。得益于全动态能⼒,新增、修改插件⽆需停机重启,可实 时⽣效,避免中断业务; • 分析监控:API7内置0 码力 | 19 页 | 1.12 MB | 1 年前3Apache APISIX How to implement plugin orchestration in API Gateway
Native Support: Lua plugins • Few developers are familiar with Lua • Solution:Go plugin Envoy • C++ filter:difficult to get started • Lua filter:Few features, few developers can write Lua • Solution:WASM,not DAG,generate AST(Abstract Syntax Tree) • Generate Lua codes from AST • https://github.com/api7/jsonschema Step 3 • Apache APISIX watch and sync Lua code from etcd(like serverless plugin) More •0 码力 | 28 页 | 1.19 MB | 5 月前3Apache APISIX 微服务⽹关性能架构解析
析、⽐比较 Apache APISIX 技术选型 配置中⼼心 why etcd? • 集群⽀支持 • 历史+事务 • 低于毫秒的变化通知 Apache APISIX 技术选型 开发平台:Lua 或 Golang •OpenResty >= 1.15.8 •Tengine >= 2.3.2 •基于 Nginx •调⽤用动态库:C/C++,Golang 等 Apache APISIX Apache APISIX 技术选型 validator:iresty/jsonschema • 刚需:draft4(可满⾜足 99% 的场景), draft6 和 draft7 是未来 • 经历:lua-rapidjson -> iresty/jsonschema • 后者⽀支持 draft6/draft7,性能提升5 - 10 倍 • 是 xeipuuv/gojsonschema 性能的 单核⼼心每秒百万次匹配 • 相⽐比 libr3 性能提升有⼀一个数量量级 • 允许引⽤用任意 ngx 内置变量量,作为路路由条件 • 可选择索引:only uri 或者 host+uri 路路由:lua-resty-radixtree API ⽹网关基本架构 admin API ����������������� plugins administrator client upstream Configuration0 码力 | 41 页 | 15.62 MB | 1 年前3Apache APISlX from Gateway to Full Traffic Proxy with Istio
may still be learning how to write filters rules for Envoy. #IstioCon Easy to extend ● NGINX + Lua ● multi-language plugins #IstioCon How to implement it #IstioCon Apache APISIX Native Support0 码力 | 15 页 | 1.29 MB | 5 月前0.03金卫-Apache APISIX 借助 Service Mesh 实现统一技术栈的全流量管理
Sidecar 资源占用 按需下发配置 配置本身的精简 资源占用降低了 60% 较低的学习/维护成本 APISIX 丰富的文档,快速上手 抽象出来的网关对象通俗易懂 源码基于 lua 易学易懂 二次开发相比 C++ 要简单许多 强大的扩展/定制化能力 配合CRD进行扩展,更灵活 更原生 不侵入Istio原有配置 降低用户迁移成本/减少冲突可 能 通过 controller0 码力 | 34 页 | 3.50 MB | 5 月前303-基于Apache APISIX的全流量API网关-温铭
开放了自定义负载均衡的挂载点,其他网关都不支持 独创的插件编排/低代码 API 网关 Plugin Orchestration • Kong:支持 Go 编写的插件 • Envoy:支持 Lua、WASM 编写的 filter • Apache APISIX:为什么要“写”插件?ops、PM 也可以直接创造一个插件 • 解决方案:微插件、低代码,需要底层架构和插件足够灵活 有众多信赖的全球领军企业0 码力 | 11 页 | 6.56 MB | 5 月前3
共 8 条
- 1