APISIX 在 API 和微服务领域的探索

分享人:温铭,Apache 顶级项目 APISIX 的 PMC 主席,开源商业化公司 API7.ai 的联合创始人和 CEO。

原文链接

背景介绍

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

作为 API 网关,Apache APISIX 可以帮助企业快速、安全地处理 API 和微服务流量,应用于网关、Kubernetes Ingress 和服务网格等场景。利用 APISIX 既可以处理从客户端到服务端的南北向流量,也可以处理从各个企业微服务之间的东西向流量。

APISIX 在 2019 年 6 月 6 号开源,同年 10 月份捐赠给了 Apache 软件基金会。在之后不到一年的时间内,毕业成为 Apache 顶级项目。

在项目快速发展的背后,APISIX 在技术上进行了哪些探索?为什么会得到越来愈多开发者和企业用户的青睐?在接下来的内容中,将为你讲述更多细节。

APISIX 技术探索之路

摆脱数据库依赖

在 APISIX 项目问世之前,也有非常多的商业 API 网关或开源 API 网关产品,但这些产品大多数都把 API 数据、路由、证书和配置等信息存放在一个关系型数据库中。

存放在关系型数据库的优势其实很明显,可以让用户更加方便地使用 SQL 语句进行灵活查询,方便用户进行备份及后续维护等环节。

但这种情况也会额外带来一个问题。网关作为一个基础中间件,它处理了所有来自客户端的流量,这种情况下对于可用性的要求便会非常高。如果你的 API 网关依赖了一个关系型数据库,也就意味着关系型数据库一旦出现了故障(比如宕机、丢失数据),你的API网关也会因此受到影响。这种情况下,系统的整体可用性就会大打折扣。

所以 APISIX 在设计之初,就从底层架构上避免了类似上述情况的发生。

APISIX 在 API 和微服务领域的探索_第1张图片

APISIX 的架构主要分成两部分。第一部分叫做数据面,它是真正去处理来自客户端请求的一个组件,去处理用户的真实流量,包括像身份验证、证书卸载、日志分析和可观测性等功能。数据面本身并不会存储任何数据,所以它是一个无状态结构。

第二部分叫做控制面。APISIX 在底层架构上和其它 API 网关的一个很大不同就在于控制面。APISIX 在控制面上并没有使用传统的类似于像 MySQL 去做配置存储,而是选择使用 etcd。这样做的好处主要有以下几点:

  1. 与产品架构的云原生技术体系更统一
  2. 更贴合API网关存放的数据类型
  3. 能更好地体现高可用特性
  4. 拥有低于毫秒级别的变化通知

使用etcd后,对于数据面而言只需监听 etcd 的变化即可。如果轮询数据库的话,可能需要 5-10 秒才能获取取到最新的配置;但如果监听 etcd 的配置变更,就可以将时间控制在毫秒级别之内,达到实时生效的效果。

所以使用 etcd 而不是关系型数据库,不仅让 APISIX 在底层上更加贴合云原生,也让它在系统高可用的体现上带来了更多优势。

支持多语言插件

API 网关其实和数据库或其他中间件不太一样,虽然都属于基础组件,但对于网关来说,它更多使用场景是进行一些定制化开发和系统集成。

目前 APISIX 官方虽然有非常多的插件,但仍难以涵盖用户的所有使用场景。所以在真实使用场景中,多多少少都会面对业务进行一些定制化的插件开发。通过网关去集成更多的协议或者系统,最终实现在网关层的统一管理。

APISIX 在刚开始只支持使用 Lua 语言进行开发插件。这样做的好处在于,通过原生计算语言的底层优化,可以让开发出来的插件具备非常高的性能。但是它的劣势也非常明显,就是学习 Lua 这门新语言是需要时间和理解成本的。

你可能感兴趣的:(技术布道,版本发布,微服务,java,架构)