Apache APISIX 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。

什么是 Apache APISIX ?

Apache APISIX 是一个动态、实时、高性能的 API 网关, 提供负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。

你可以使用 Apache APISIX 来处理传统的南北向流量,以及服务间的东西向流量, 也可以当做 k8s ingress controller 来使用。

Apache APISIX 的技术架构如下图所示:

上图为 APISIX 产品中控制平⾯(简称 CP)与数据平⾯(简称 DP)的架构⽰意图,并包含了3个部分:

  1. API ⽹关 ⽤于承载并处理业务流量,管理员在配置路由规则后,⽹关将根据预设规则将请求转发⾄上游服务。 此外,借助 APISIX 内置的 50 多种插件,可实现⾝份验证、安全防护、流量控制、分析监控、请求/响应 转换等常⻅业务需求;若内置插件⽆法满⾜需求,我们也⽀持使⽤ Lua、Java、Go、Python 语⾔⾃ 定义插件,可作⽤于请求进⼊、上游响应各个阶段。

  2. Manager API ⽤于管理 API ⽹关,通过访问其暴露的 RESTful API 接⼝以实现对路由、上游、证书、全局插件、消 费者等资源的管理。

  3. 控制面板

    为了简化⽹关管理,管理员可以通过 Dashboard 控制⾯板以可视化形式操作⽹关,⽀持监控分析、⽇ 志审计、多租⼾管理、多集群切换、多⼯作分区等能⼒。

APISIX 能解决什么问题

  • 边缘路由

机房对外暴露的访问入口 IP 数量,通常是极少的,但是却支撑了很多个服务。比如,访问的 IP 是 1.2.3.4,但却同时提供了 a.domain.com、b.domain.com 的访问服务。这就需要用到边缘路由,边缘路由会将不同域名的访问,转发到不同的内网地址。

APISIX 中三种方式可以注册边缘路由,dashboard、ingress-controller、admin api。

  • 基础网关能力

网关的功能不限于转发流量,更重要的是限流、熔断等。

APISIX 内置了很多插件,提供 APM、日志、熔断、鉴权、证书管理、故障注入等功能。同时,也支持拖拽组合新的插件、开发新插件以满足业务需求。

  • Serverless

APISIX 通过插件的方式提供 Serverless,目前仅支持 Lua。但 APIGateway + Serverless 的组合,极具想象力。

利用 Serverless 可以快速对外提供无服务的 API,粘合各种服务,也可以对外直接提供功能服务。

  • 灰度发布

由于对网关层进行了控制,APISIX 允许用户通过配置权重控制流量的转发行为,可以用来做灰度发布使用。

技术架构

  1. 数据平⾯

    数据平⾯⽤于接收并处理调⽤⽅请求,使⽤ Lua 与 Nginx 动态控制请求流量。当请求进⼊时,将根据 预设路由规则进⾏匹配,匹配到的请求将被⽹关转发⾄对应上游服务。在此过程中,⽹关有能⼒根据 预设规则中不同插件的配置,使⽤⼀系列插件对请求从进⼊到离开的各个阶段进⾏操作。例如:请求 可能会经过⾝份认证(避免重放攻击、参数篡改等)、请求审计(请求来源信息、上游处理时⻓ 等)、路由处理(根据预设规则获取最终上游服务地址)、请求转发(⽹关将请求转发⾄上游⽬标节 点)、请求响应(上游处理完成后,⽹关将结果返回给调⽤⽅)等⼏个步骤。

  2. 控制平⾯

    控制平⾯包含了 Manager API 与默认配置中⼼ ETCD。管理员在访问并操作控制台时,控制台将调⽤ ManagerAPI 下发配置到 ETCD,借助 ETCD Watch 机制,配置将在⽹关中实时⽣效。例如:管理员可 增加⼀条路由,并配置限速插件,当触发到限速阈值后,⽹关将会暂时阻⽌后续匹配到该路由的请求 进⼊。借助 ETCD 的 Watch 机制,当管理员在控制⾯板更新配置后,APISIX将在毫秒级别内通知到各个 ⽹关节点。

  3. 其它

    APISIX采⽤了数据平⾯与控制平⾯分离的架构⽅式,通过配置中⼼接收、下发配置,使 得数据平⾯不会受到控制平⾯影响。配置中⼼默认为 ETCD,但也⽀持 Consul、Nacos、Eureka 等, 可根据您的实际情况进⾏选择。此外,企业⽤⼾只需关注业务本⾝,与业务⽆关的⼤部分功能交给 APISIX 内置插件即可实现,如⾝份验证、性能分析等。

云原生网关

APISIX 是⼀个云原⽣⽹关,与平台⽆关,没有供应商锁定的⻛险。它⽀持裸⾦属、虚拟机、 Kubernetes、OpenShift、ARM64 等。此外,APISIX 也可轻松与其它组件对接,如 SkyWalking、 Prometheus、Kafka、Zipkin 等,共同为企业赋能;

APISIX 支持混合云、多数据中心、Kubernetes等多种部署方式,帮助您快速安全地处理业务数据,动态扩展。

特色亮点

你可以把 Apache APISIX 当做流量入口,来处理所有的业务数据,包括动态路由、动态上游、动态证书、 A/B 测试、金丝雀发布(灰度发布)、蓝绿部署、限流限速、抵御恶意攻击、监控报警、服务可观测性、服务治理等。

  1. ⾼可⽤: APISIX 默认选⽤ ETCD 作为配置中⼼,ETCD 天然⽀持分布式、⾼可⽤,并且在 K8s 等领域有⼤量实践 经验,使得 APISIX 可以轻松⽀持毫秒级配置更新、⽀撑数千⽹关节点;⽹关节点⽆状态,可任意扩容或 缩容;
  2. 协议转换: ⽀持丰富的协议类型,如 TCP/UDP、Dubbo、MQTT、gRPC、SOAP、WebSocket 等;
  3. 安全防护: 内置多种⾝份验证与安全防护能⼒,如 Basic Auth、JSON Web Token、IP ⿊⽩名单、OAuth 等;
  4. 性能极⾼: APISIX 使⽤ Radixtree 算法实现⾼性能、灵活路由,在 AWS 8 核⼼服务器中,QPS 约为 140K,延迟约 为 0.2 ms;
  5. 全动态能⼒: 修改⽹关配置、增加或修改插件等,⽆需重启⽹关服务即可实时⽣效;⽀持动态加载 SSL 证书;
  6. 扩展能⼒强: 借助灵活的插件机制,可针对内部业务完成功能定制;⽀持⾃定义负载均衡算法与路由算法,不受限 于 API ⽹关实现;通过运⾏时动态执⾏⽤⼾⾃定义函数⽅式来实现 Serverless,使⽹关边缘节点更加 灵活;
  7. 治理能⼒丰富: 如故障隔离、熔断降级、限流限速等;在启⽤主动健康检查后,⽹关将⽀持智能跟踪不健康上游节点 的能⼒,并⾃动过滤不健康节点,以提⾼整体服务稳定性。

项目案例

APISIX 与华炎魔方集成平台

华炎魔方集成平台(Steedos Integration Platform)使用 APISIX 作为前端网关,主要包含了如下功能模块:

  • 多环境:⽀持多 ETCD 集群,集群之间数据不共享;
  • ⾝份验证:包含多种认证类插件,如 basic-auth、jwt-auth、key-auth、wolf-rbac 等。此外,借 助内置的 HMAC 插件,可使⽤ AK/SK 对请求参数进⾏签名与校验,以实现请求防篡改、请求防重 放的需求,并能够达到鉴权的⽬的; •
  • 服务路由:APISIX 基于 Radixtree 实现⾼效的路由匹配,是⽬前匹配路由速度最快的 API ⽹关。它⽀ 持全路径匹配、前缀匹配,也⽀持使⽤ Nginx 内置变量作为匹配条件,以此实现精细化路由。此外,APISIX ⽀持流量镜像与⾼级路由匹配功能,可实现灰度发布等精细化路由管理功能。此外,它 也⽀持服务发现与多种注册中⼼,并有能⼒根据请求中 Header、Query、Cookie 等参数进⾏分 流;
  • 协议转换:APISIX ⽀持丰富的协议,如 TCP/UDP、Dubbo、MQTT、gRPC、WebSocket 等,并能 够实现 HTTP 协议到后端服务其它协议的转换。API ⽹关对外暴露统⼀ HTTP ⼊⼝,管理员可通过 控制台界⾯完成协议转换设置,⽀持请求与后端服务的参数映射;
  • 服务治理:APISIX ⽀持熔断、限流、限速、IP ⿊⽩名单、故障隔离等能⼒,通过控制台可视化⾯ 板,可⽅便、清楚地完成相关功能设置;
  • ⾃定义插件:APISIX 内置了50多种插件,涵盖安全防护、流量控制、⽇志记录等各个分类,可满⾜ 绝⼤多数企业需求。对于特定业务,APISIX ⽬前⽀持 Lua、Java、Go、Python 编写⾃定义插件, 且插件可以作⽤于流量进出的各个阶段。得益于全动态能⼒,新增、修改插件⽆需停机重启,可实 时⽣效,避免中断业务;
  • 分析监控:APISIX 内置了请求审计、监控告警、统计报表等分析监控功能,API ⽹关将记录所有节点 每个请求的信息,并进⾏成功请求、异常请求统计,可在控制台查看请求成功数、请求失败数、错 误码、请求延迟等指标。此外,借助 Grafana 的能⼒,可满⾜更多维度地分析监控需求;

控制面板

为了简化⽹关管理,管理员可以通过 Dashboard 控制⾯板以可视化形式操作⽹关,⽀持监控分析、⽇ 志审计、多租⼾管理、多集群切换、多⼯作分区等能⼒。

分析监控

APISIX 内置了请求审计、监控告警、统计报表等分析监控功能,API ⽹关将记录所有节点 每个请求的信息,并进⾏成功请求、异常请求统计,可在控制台查看请求成功数、请求失败数、错 误码、请求延迟等指标。此外,借助 Grafana 的能⼒,可满⾜更多维度地分析监控需求;

认证鉴权

API ⽹关内置了 key-auth、basic-auth、jwt-auth 等认证鉴权插件,以 hmac 插件为例,我们可配合AK/SK 对请求参数进⾏加密,以保证请求未被篡改。

请求参数包括 Request Header、Request Path、Request Query String、时间戳、签名算法等,以避免请求被篡改、重放。

服务路由

APISIX 基于 Radixtree 实现⾼效的路由匹配,是⽬前匹配路由速度最快的 API ⽹关。它⽀ 持全路径匹配、前缀匹配,也⽀持使⽤ Nginx 内置变量作为匹配条件,以此实现精细化路由。此 外,APISIX ⽀持流量镜像与⾼级路由匹配功能,可实现灰度发布等精细化路由管理功能。此外,它 也⽀持服务发现与多种注册中⼼,并有能⼒根据请求中 Header、Query、Cookie 等参数进⾏分 流;

灰度发布

路由作为 API ⽹关的核⼼功能,⽤于对经过 API ⽹关的请求进⾏路由匹配,并转发⾄对应的上游服务中。当上游服务完成处理后,结果将被返回⾄客⼾端。若请求未匹配到路由时,⽹关将返回 404 状态码,这是由于路由未被发布到⽹关或未配置相关路由。

借助 APISIX 强⼤的路由功能,也可以实现灰度发布、蓝绿部署的需求,以便企业稳定地进⾏服务平滑升级。此外,API ⽹关将请求转发⾄上游服务时,将携带⼀些 HTTP 请求头,⽤于标记这些流量来⾃于⽹关。

以灰度发布为例:在开始灰度发布后,⾸先启动新版本服务(应⽤),并交给测试⼈员对新版本进⾏测试。如果测试正常,那可以将少量的流量切换到新版本中,接着对新版本进⾏运⾏状态检查,并收集各种数据。当确认新版本运⾏良好后,再逐步将更多的流量切换到新版本中。直到将 100% 流量全部切换到新版本中,再关闭旧版本服务,这样便完成了灰度发布。如果在灰度发布过程中发现了新版本有问题,就⽴即将流量切回旧版本中,这样,负⾯影响将会控制在最⼩范围内。

协议转换

API ⽹关对外统⼀暴露 RESTful API,管理员可在控制⾯板进⾏设定。这些 API 与企业内微服务/上游 服务相对应,除代理常⻅的 HTTP 服务外,也⽀持对 Dubbo、gRPC、WebServices、MQTT 等协议 的代理。

插件

APISIX 内置了50多种插件,涵盖安全防护、流量控制、⽇志记录等各个分类,可满⾜ 绝⼤多数企业需求。对于特定业务,APISIX ⽬前⽀持 Lua、Java、Go、Python 编写⾃定义插件, 且插件可以作⽤于流量进出的各个阶段。得益于全动态能⼒,新增、修改插件⽆需停机重启,可实时⽣效,避免中断业务;

对于个性化需求,提供可视化界面自定义插件。