借力亚马逊云科技实现 Apache APISIX 的生态探索与产品成长

2023-11-19

a79cade32512d6ea32b51a19276d8877.gif

关于 Apache APISIX

Apache APISIX 于 2019 年被两位创始人捐赠给 Apache 软件基金会孵化器,并于第二年7月从孵化器毕业,成为 Apache 顶级项目。APISIX 作为开源 API 网关,一直以活跃和快速成长的状态,在网关领域持续发光发热。

性能优异,扩展丰富

作为一个云原生 API 网关,APISIX 从诞生之日起就对性能层面有着高要求。

APISIX 在产品使用上,给用户最直接的表现就是高性能与低延迟。同时在功能方面,也有着丰富的流量治理能力,比如常用于后端服务的灰度发布、蓝绿发布。还有 API 安全层面的鉴权认证,APISIX 支持多种不同的鉴权方式,比如 JWT Auth, HMAC Auth 以及 Open ID Connect 协议等等。

此外,APISIX 对于有着扩展和定制开发的开发者们也非常友好。除了 APISIX 自身支持的 Lua 语言外,你也可以借助 APISIX Plugin Runner 去使用一些高级语言对 APISIX 进行扩展,比如 Java, Go, Python 和 WebAssembly。有了多语言插件的加持,无需投入学习成本就可以轻易进行二次开发了。

WebAssembly:

https://webassembly.org

生态多样,活跃开放

目前 APISIX 在生态层面做了非常多的动作,基于各种不同类型的项目进行了集成开发,APISIX 主仓库目前已经拥有了超过70+的插件。

使用这些插件,你可以与类似亚马逊云科技这样的平台进行快速集成与使用落地,减少用户在使用过程中额外的开发成本。

同时在社区中,APISIX 的月度贡献者活跃数量一般都维持在30人左右,这是一个非常活跃的数字。你可以看到在 APISIX 的 GitHub 中,每天都有社区用户帮忙回答或解决 Issue, PR 或者 Discussion 中的问题。良好的社区运作氛围,也带动着产品的快速迭代与生态的丰富扩展。

因此,APISIX 也开始在全球范围内拥有多个领域的企业用户。比如空中云汇(跨境支付)、新浪微博、欧盟数字工厂、NASA、奈雪的茶等用户。得益于越来越多企业的使用与贡献,APISIX 也逐渐被大众看到。目前 APISIX 贡献者已突破300人,总项目贡献者也已超过500人。

1d7b30a030600c476545f822311a1279.png

架构升级,取长补短

回到产品架构层面,APISIX 的架构采用了数据面+控制面的模式,如下图所示。

89639cc68c9c12393080b741d78691b1.png

左侧为 APISIX 自身,也就是整个 API 网关的数据面,主要去承担和处理用户的真实业务流量。这其中 APISIX 会提供服务治理能力,比如限流限速、负载均衡等。右侧则是 API 网关的控制面,也就是控制 APISIX 运作的组件,包括像可观测性相关的日志组件等等,方便收集运行状态数据。同时搭配 etcd 与 Admin API,帮助用户去配置相关规则,进而让 APISIX 能够按照既定的方式运行。

e0896ddeb2d1d26452749e22c6926775.png

像上文提到的多语言插件就可以嵌入到左侧数据面结构内。比如通过 APISIX 内置 wasm plugin 模块允许用户去使用 C++ 或 Rust 语言进行扩展。而右边则是呈现了基于 Plugin Runner 的多语言方式,通过传统的 Unix domain socket 这种 RPC 的方式,调用相关语言的 Plugin Runner(比如 Java Plugin Runner)去接受来自于 APISIX 的请求,然后帮助 APISIX 去处理这些流量。

APISIX 基于

亚马逊云科技的探索

目前 APISIX 基于亚马逊云科技也进行了一些产品和性能层面的尝试。

Amazon Marketplace

0d7d77d9d0f062e23a13f4343d951af1.png

在 Amazon Marketplace 页面中搜索 APISIX 的话,你会发现如上图所示的结果。早在 2021 年,支流科技就将 APISIX 上架到了平台上。基于这个软件,你可以非常快速地把 APISIX 部署到 Amazon EC2 的实例中。同时这个软件费用为 0,你只需支付 EC2 实例的费用即可。

该软件会在 EC2 实例中运行一个 APISIX 进行和 etcd 实例。因此,比较适用于本身就是亚马逊云科技的用户,当你想去试用 APISIX 或者是想用 POC 去验证 APISIX 是否满足一些目标场景的需求。

CDK APISIX

CDK 是亚马逊云科技所提供的开源软件开发框架,旨在帮助用户通过编程的方式来操作云上的基础设施。

APISIX 社区的 committer Pahud Hsieh

(https://dev.amazoncloud.cn/column/articleDetail/?id=6350ea4cad4c5528389b450e) 基于此开发了 cdk-apisix

(https://dev.amazoncloud.cn/column/articleDetail/?id=6350ea4cad4c5528389b450e)。该项目允许用户通过可编程以及自动化的方式,去创建 APISIX 实例,与上文不一样的是,使用该项目可以把 APISIX 部署到 Amazon Fargate 中。这样就可以在一些需要有事件触发的场景下,去完成 APISIX 的部署与销毁。整个过程更加响应式,无需手动处理。

77d2336397e3a1e408934299196e3357.png

从上方架构图中可以看到,客户端的流量进入后会经过云上的 ELB 将流量分发到 APISIX,之后 APISIX 会进行一些基本的处理,比如判断权限、限流限速应用等。然后会发到后端真正的应用实例上。

使用 CDK 这种方式,可以方便用户使用自己熟悉的语言部署 Apache APISIX,并且借助这些高级语言的特性,可以更加方便地将 APISIX 部署到亚马逊云科技。同时在使用层面,当你把编写好的一份部署模板配置完成后,可以将其复用或者定制。这就意味着在未来某个时刻,如果你需要再次去使用这样的场景模版时,可以直接拿来使用,从而减轻部署流程。

Amazon-Lambda 插件

使用 Lambda 或者 Serverless 去部署应用时,可以以一种成本非常低的方式去运作相关业务,并且可以非常快速地实现扩缩容等业务场景。使用这种方式部署时,通常需要一个事件触发器,那么 API 网关就是一个可以作为触发器的通道。

当用户在路由中配置了 APISIX 的 amazon-lambda  插件后,它能够将流量全量地转发给用户所配置的 Lambda 函数地址,然后交由 Lambda 函数去处理请求,最终将由 APISIX 再次返回到客户端。

该插件同时也支持 Amazon IAM 认证和 Key Auth。这样就可以保证在后端进行业务部署的 Lambda 函数,可以在不牺牲安全性的情况下,更好地与 APISIX 进行集成。

相关性能测试

在今年5月份,Amazon Graviton3

(https://aws.amazon.com/cn/blogs/aws/new-amazon-ec2-c7g-instances-powered-by-aws-graviton3-processors/) 处理器正式推出。与 Amazon Graviton2 处理器相比,基于领先的 DDR5 内存技术,Graviton3 处理器可提供高达25%的性能提升、高达2倍的浮点性能以及50%的内存访问速度;在性能与同类 EC2 实例相同的情况下,Graviton3 还可减少60%的能源。

在 Amazon Graviton3 推出不久,APISIX 就对此进行了完整的回归测试,这意味着用户可以非常放心地在 Graviton3 EC2 的实例上去使用 APISIX,并且不会存在任何兼容性问题。同时我们也在 Amazon Graviton 系列处理器环境下进行了性能测试,通过两种场景,分别对 Amazon Graviton2 和 Amazon Graviton3 进行了性能测试:

• 单个上游。该场景下使用单个上游(不包含任何插件),主要测试 APISIX 在纯代理回源模式下的性能表现。

• 单上游+多插件。该场景下使用单上游与多插件配合,在这里使用了两个插件。主要测试 APISIX 在开启 limit-count 和 prometheus  两个核心消耗性能插件时的性能表现。

d3026685b44178bcf0c6b1733d5d438e.jpeg

可以看到,无论是稳定性还是流量处理层面,APISIX 的表现都十分亮眼。在 API 网关这样网络 IO 密集型的计算场景下,Amazon Graviton3 比 Amazon Graviton2 的性能提升了76%,同时延迟还降低了38%。这个数据比开头提到的亚马逊云科技官方给出的数据(25%性能提升)还要优异。

12cdb7c25b0837b37bdec99623abc510.png

所以整体来说,在 Grafana 3 上使用 APISIX 时,它的整个性能表现是非常优异的。基于 Amazon Graviton3 这种高性能的处理器,也能给我们在实际业务中提升效率,降低资源和使用成本。

API7 Cloud 如何借力亚马逊云科技

实现产品快速成长

云原生的兴起,使得越来越多企业将业务进行上云(往往是多种公有云平台)。在这种背景下,如何高效管理并部署云上的 API,变成了一个亟待解决的难题。

API7 Cloud 是一款基于 APISIX 的 SaaS 服务,帮助用户连接部署在任意云上 API 的 SaaS 产品,于2022年3月份正式发布。它为用户提供了简单易用的 API 管理功能、灵活且丰富的可观测性指标以及 API 安全特性,让用户的 API 连接能够更加高效、安全与可靠。

该产品是按照 API 调用次数来付费,目前支持两种数据面部署方式。一种是 self-host,即用户自己准备基础设施,将 APISIX 部署到自己的基础设施内,保持 APISIX 与 API7 Cloud 的通信。另一种是 semi-managed,也称为半托管,即用户需要授权 API7 Cloud 去使用他的云账户(比如亚马逊云科技账户),然后就可以在 API7 Cloud 的控制台上,一键部署 APISIX 到其账号下的某个基础设施。

目前 API7 Cloud 的整套组件都是托管以及使用了亚马逊云科技服务的,产品架构如下图所示。

eecdb81a7b5c89986e11e16fe3454648.jpeg

从上图可以看到,数据面的 APISIX 可以部署在不同的云上,甚至是部署在用户自己的基础设施或数据中心中。API7 Cloud 这一侧则主要去提供类似可观测性、基础 API 管理和一些比较重要的 API 安全等特性。

借助亚马逊云科技的一些服务,API7 Cloud 呈现了更好的产品表现。

首先就是依赖于 Amazon EKS 服务。作为一个新的 SaaS 产品,API7 Cloud 在一开始就被部署在了 K8s 中。因此我们也希望能利用云上的一些能力,所以将所有组件部署在 EKS 集群中。同时每个用户可能会有一些不同的组件,独立的组件都需要运行在这个集群里面,所以我们也是使用了基于 NetWorkPolicy 的租户隔离方式,进行一些网络隔离,保证这些租户的 namespace 是相互之间不可访问的。整套服务中,还借助了 APISIX Ingress Controller 作为网关,来顺利完成整套流程的运行。

APISIX Ingress Controller 是一个 Ingress 控制器的实现,可以将用户配置的规则转换为 APISIX 中的规则,从而使用 APISIX 完成具体的流量承载。

其次作为产品中最重要的数据库组件,API7 Cloud 在这里选择了 Amazon RDS(PostgreSQL)。使用 RDS 主要是存储用户的元数据,包括类似于 API 的源数据或用户的行为数据等。因为作为一个 SaaS 产品,我们需要去关注一个用户是怎么使用产品的,以及通过这些数据来判断我们的产品是否在布局和开发者体验上存在问题,从而明确未来的产品决策方向。

同时在 API7 Cloud 中,我们还使用了Amazon ElastiCache 组件,并选用了主从模式的 Redis。这主要用来保存数据面的实例状态,也就是 APISIX 在连接到 API7 Cloud 之后定期向 Cloud 发送的状态数据。因为这种状态数据本身并不是特别敏感或者重要的数据,并且数据面和控制面需要频繁交互,因此没有选择使用关系型数据库。

此外该组件的另一个重要用途就是,作为消息队列。Redis 5.0 中引入了 Stream 数据结构,我们用它做了一个非常轻量的消息队列,帮助用户快速地完成数据的控制、创建和销毁。

总结

以上就是从 APISIX 相关产品视角带来的分享,通过借力亚马逊云科技各类产品的功能和生态加持,也使 APISIX 在生态领域的探索更进一步。未来也期待 APISIX 与亚马逊云科技能够有更多有趣的集成,共同创造一个蓬勃的生态。

本篇作者

作者张超,Apache APISIX PMC 成员,API7.ai 技术专家。API7 Cloud 产品负责人,开源爱好者。本文整理自《亚马逊云科技——中国峰会》中的分享内容。

……

想快速获取技术干货吗?

想找到志同道合的技术知音吗?

亚马逊云科技开发者社区

致力为开发者们提供更丰富的内容,

企业或技术团队还可申请技术专栏号;

个人开发者也可向Builder专栏投稿,

扫描下方二维码或点击阅读原文,

了解更多官网信息,

亚马逊云科技与你共赢成长!

352921b836e87666689bed387315b950.jpeg

91c4f6615ff0659671f9fd3945045953.gif

fe5f0b73e67949da03ddd658d291d34f.gif

听说,点完下面4个按钮

就不会碰到bug了!

09878b0b5a8a44414de00cd40df13a81.gif

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

借力亚马逊云科技实现 Apache APISIX 的生态探索与产品成长 的相关文章

随机推荐

  • Nginx配置安全策略总结

    Nginx配置安全策略总结 Content Security Policy 头缺失或不安全 X Content Type Options 头缺失或不安全 X XSS Protection 头缺失或不安全 HTTP Strict Transp
  • SpringCloud——GateWay网关(详解+案例)

    目录 一 相关概念 1 网关概念 2 网关作用 3 网关架构图 4 网关三大核心 二 案例 1 案例说明 2 搭建GateWay网关9527服务 1 创建maven工程 2 导入依赖 3 配置application yml文件 4 创建主启
  • 深入了解== 和 equals的比较

    原文链接 https blog csdn net qq 41841247 article details 106987762
  • SMI/慧荣/SM32**主控量产通用教程,PNY U盘量产!

    我的PNY 8G U盘已多次量产测试 绝对可用 SMI 慧荣主控 SMI主控应该都能通用 我量产后 型号变成SM321 325了 这个可以改的 量产的时候 量产前 PNP设备 ID VID 154B PID 0 044 设备备序列号 AAA
  • Mysql高可用高性能存储应用系列2 - 深入理解锁和Mvcc

    概述 Mysql数据库在处理并发中下了很多功夫 锁是为了更好的保护数据的正确和可靠 Mvcc是维持一个数据的多个版本 使得读写操作没有冲突的解决并发的数据库方案 锁 当数据访问多了 就会出现并发的问题 Mysql锁设计的初衷是处理并发问题
  • vite 创建vue.js项目及vant安装

    1 npm create vitejs app 2 project name select framework select variant 3 cd wx vant 4 npm install 5 npm run dev 6 npm i
  • Linux 内存管理

    摘要 本章首先以应用程序开发者的角度审视Linux的进程内存管理 在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法 力求从外到内 水到渠成地引导网友分析Linux的内存管理与使用 在本章最后 我们给出一个内存映射的实例 帮
  • 你不知道的js

    作用域 LHS RHS 区别 如果 RHS 查询在所有嵌套的作用域中遍寻不到所需的变量 引擎就会抛出 ReferenceError 异常 值得注意的是 ReferenceError 是非常重要的异常类型 相较之下 当引擎执行 LHS 查询时
  • 循环单链表(C语言版)

    前言 小可爱们 本次一起来看看循环单链表吧 嘻嘻 一 循环单链表的定义 循环单链表是单链表的另一种形式 其结构特点链表中最后一个结点的指针域不再是结束标记 而是指向整个链表的第一个结点 从而使链表形成一个环 和单链表相同 循环链表也有带头结
  • 量化涌现:信息论方法识别多变量数据中的因果涌现

    来源 集智俱乐部 作者 Fernando E Rosas Pedro A M Mediano Henrik J Jensen等 译者 潘佳栋 审校 梁金 编辑 邓一雪 导语 大量个体聚集起来 常常涌现出新的复杂结构 鸟儿聚集起来形成兼具灵活
  • vue-cli 添加顶部导航栏及点击导航菜单,左侧菜单栏切换

    layout 模板包含菜单栏等主要框架 router 路由管理 根据路由可生成左侧菜单栏 When your routing table is too long you can split it into small modules imp
  • 迈向多模态AGI之开放世界目标检测

    作者 王斌 谢春宇 冷大炜 责编 夏萌 出品 360人工智能研究院 引言 目标检测是计算机视觉中的一个非常重要的基础任务 与常见的的图像分类 识别任务不同 目标检测需要模型在给出目标的类别之上 进一步给出目标的位置和大小信息 在 CV三大任
  • 【腾宇】postinstall-postinstall配合patch-package重写node_modules的依赖方法

    1 本地安装依赖 postinstall postinstall patch package npm i patch package postinstall postinstall save dev or yarn add patch pa
  • Python使用pandas从mysql数据库读取数据并导出到Excel

    工作中我们经常会从数据库中提取数据 处理之后 将结果整理为excel输出 本文主要介绍使用python的pandas工具从mysql数据获取数据 按要求处理之后 导出到excel文件 安装依赖 首先确定已经安装PyMySQL pandas
  • 算法高级(23)-彩虹表(Rainbow Table)

    一 彩虹表的定义 百度百科 彩虹表是一个用于加密散列函数逆运算的预先计算好的表 为破解密码的散列值 或称哈希值 微缩图 摘要 指纹 哈希密文 而准备 一般主流的彩虹表都在100G以上 这样的表常常用于恢复由有限集字符组成的固定长度的纯文本密
  • Python-test 2021.11.1

    1 val for val in b1 if val in b2 列表的交集与差集 b1 1 2 3 b2 2 3 4 b3 val for val in b1 if val in b2 b4 val for val in b1 if va
  • pandas列值根据字典批量替换

    更多 更及时内容欢迎留意微信公众号 小窗幽记机器学习 背景 DataFrame数据中一列的值需要根据某个字典批量映射为字典中的value 方法1 pandas中的df replace import pandas as pd import n
  • 1204: 鸡兔同笼

    1204 鸡兔同笼 时间限制 1 Sec 内存限制 128 MB 提交 188 解决 77 提交 状态 讨论版
  • 物理层(比特流)

    物理层 一 物理层的基本概念 二 数据通信的基础知识 1 数据通信系统的模型 2 有关信道的几个基本概念 3 信道的极限容量 4 信道的极限信息传输速率 三 物理层下面的传输媒体 1 导引型传输媒体 2 非导引型传输媒体 四 信道复用技术
  • 借力亚马逊云科技实现 Apache APISIX 的生态探索与产品成长

    关于 Apache APISIX Apache APISIX 于 2019 年被两位创始人捐赠给 Apache 软件基金会孵化器 并于第二年7月从孵化器毕业 成为 Apache 顶级项目 APISIX 作为开源 API 网关 一直以活跃和快