小于 1 分钟
实验环境
- Windows
- docker desktop(WSL2)
Windows
└── WSL2(Linux 内核环境)
└── Docker 容器
大约 13 分钟
实验环境
- Ubuntu 22.04.3 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)
- docker desktop(Windows)
安装 APISIX
通过git clone
拉取仓库
root@DESKTOP-42B4J2H:~# git clone https://github.com/apache/apisix-docker.git
Cloning into 'apisix-docker'...
remote: Enumerating objects: 2528, done.
remote: Counting objects: 100% (390/390), done.
remote: Compressing objects: 100% (131/131), done.
remote: Total 2528 (delta 352), reused 259 (delta 258), pack-reused 2138 (from 3)
Receiving objects: 100% (2528/2528), 473.72 KiB | 1.42 MiB/s, done.
Resolving deltas: 100% (1370/1370), done.
大约 2 分钟
思维导图
插件过滤请求
插件处理过程
小于 1 分钟
发布 API
思维导图
概念介绍
🔶上游(Upstream)
上游:应用层服务 / 节点 的抽象;
路由 / 服务 与 上游 对应关系可以为:多对一。
🔶服务(Service)
服务:某类 API 的抽象?(一组 路由 的抽象?)
对应关系:服务与上游 通常是 一对一,路由与服务 通常是 多对一。
大约 3 分钟
API Gateway
API 网关核心职责:
反向代理、接受所有 API 的调用、整合处理后端服务、返回相应的结果。
API 网关功能:
- 请求转发;
- 接口安全:身份验证、授权、速率限制;
- 分析:监控、日志记录、跟踪;
- 防御 SQL 注入、DDOS 攻击、XSS 等恶意攻击媒介;
小于 1 分钟
traffic-split
思维导图
小于 1 分钟
参考链接
- OpenResty 从入门到实战
- 序 · OpenResty最佳实践
- ChatGPT / Claude 回答
- OpenResty® - 开源官方站
- Lua 教程 | 菜鸟教程
小于 1 分钟
大约 2 分钟
思维导图
专业术语
🔶NYI
Not Yet Implemented,JIT 编译器不支持的原语操作,JIT 编译器在当前代码路径上遇到 NYI 时,会退回到解释器模式,导致性能下降。
实践
root@DESKTOP-42B4J2H:/opt/lua# echo 'local a = 0 for i = 1, 1e8 do a = a + 1 end print(a)' > bench.lua
root@DESKTOP-42B4J2H:/opt/lua# ls
1.lua bench.lua
root@DESKTOP-42B4J2H:/opt/lua# cat bench.lua
local a = 0 for i = 1, 1e8 do a = a + 1 end print(a)
root@DESKTOP-42B4J2H:/opt/lua# time resty -joff bench.lua
100000000
real 0m0.628s
user 0m0.612s
sys 0m0.009s
root@DESKTOP-42B4J2H:/opt/lua# time resty bench.lua
100000000
real 0m0.102s
user 0m0.081s
sys 0m0.008s
root@DESKTOP-42B4J2H:/opt/lua# resty -jv bench.lua
[TRACE 1 bench.lua:1 loop]
100000000
root@DESKTOP-42B4J2H:/opt/lua# resty -jdump bench.lua
---- TRACE 1 start bench.lua:1
0006 ADDVN 0 0 1 ; 1 (bench.lua:1)
0007 FORL 1 => 0006 (bench.lua:1)
---- TRACE 1 IR
0001 int SLOAD #3 I
0002 > int SLOAD #2 T
0003 >+ int ADDOV 0002 +1
0004 + int ADD 0001 +1
0005 > int LE 0004 +100000000
0006 ------ LOOP ------------
0007 >+ int ADDOV 0003 +1
0008 + int ADD 0004 +1
0009 > int LE 0008 +100000000
0010 int PHI 0004 0008
0011 int PHI 0003 0007
---- TRACE 1 mcode 93
7f816496ffa3 add rsp, -0x10
7f816496ffa7 mov dword [r14-0xef8], 0x1
7f816496ffb2 mov ebx, [rdx+0x8]
7f816496ffb5 cmp dword [rdx+0x4], 0xfff90000
7f816496ffbc jnz 0x7f816496004c ->0
7f816496ffc2 mov ebp, [rdx]
7f816496ffc4 add ebp, +0x01
7f816496ffc7 jo 0x7f816496004c ->0
7f816496ffcd mov [rsp+0x8], ebp
7f816496ffd1 add ebx, +0x01
7f816496ffd4 cmp ebx, 0x05f5e100
7f816496ffda jg 0x7f8164960050 ->1
->LOOP:
7f816496ffe0 mov [rsp+0x8], ebp
7f816496ffe4 mov r15d, ebp
7f816496ffe7 add ebp, +0x01
7f816496ffea jo 0x7f8164960054 ->2
7f816496fff0 add ebx, +0x01
7f816496fff3 cmp ebx, 0x05f5e100
7f816496fff9 jle 0x7f816496ffe0 ->LOOP
7f816496fffb jmp 0x7f8164960058 ->3
---- TRACE 1 stop -> loop
100000000
大约 1 分钟