apisix源码分析-前言(0)

apisix源码分析-前言(0)

apisix 是什么

Apache APISIX® – Cloud-Native API Gateway

apisix 是一个动态、实时、高性能的 API 网关。

发展

当使用 nginx 做网关、代理、均衡负载时。想要对 nginx 添加一些需求。

tengine : 使用 nginx 的插件方式来实现原生扩展。

openresty : 实现了 nginx lua 的扩展: openresty/lua-nginx-module ,使用 lua 来扩展 nginx 功能。

openresty 的出现让我们能够方便快捷的扩展 nginx 的功能。tengine 也通过添加 lua-nginx-module 扩展实现了相关能力。

在学习 apisix 之前,先要了解 openresty 的执行阶段,如下图:

Untitled.png

初始化

initinit_worker 阶段分别对应到 nginx 的 master 进程和 worker 进程的初始化。

请求

ssl_certificate 对应到证书认证阶段,当使用 https 访问时会最先进入到这个阶段。

set_by_lua 变量设置阶段,可以在 nginx.conf 里设置一些变量,在这个阶段生效后,在之后的阶段通过 ngx.var. 访问

rewrite 重写阶段,在 ngx_http_rewrite_module 运行后执行。

access 访问阶段,在 ngx_http_access_module 运行后执行。

响应

content 内容处理

balancer 均衡负载

header_filter 返回 header 处理

body_filter 返回 body 处理

日志

log 在写日志之前运行

通过 openresty 对 nginx 功能进行扩展,可以对不同的阶段进行介入,实现需求。 当在各个阶段实功能不断迭代时,功能的边界会越来越模糊,导致代码混乱,无法管理。

所以我们提出了需求来解决问题:

  • 不同的功能要有清晰的边界(插件化)
  • 对不同的路由能够启用不同的功能(路由管理)
  • 能够动态的管理后端服务 (动态化)
  • 能够对证书管理
  • ……

apisixkong 就是基于 lua-nginx-module 实现的框架,将 route、 server 、plugin 、ssl 等等,能够动态的管理起来。 以下是我认为的 apisix 和 kong 最大的区别点:

apisix kong
配置同步 使用 etcd 存储配置,通过 watch 同步配置,毫秒级变更配置。 使用配置文件或数据库(postgres),定期轮询同步配置,5秒同步一次
路由匹配 使用 radixtree 存储路由,高性能。 前缀匹配,性能一般
插件 队列或有向无环图 队列

apisix源码分析-前言(0)

https://beixiu.net/apisix-source-0/

作者

张巍

发布于

2023-08-15

更新于

2023-08-15

许可协议

评论