本文分享自天翼云开发者社区《API网关-APISIX简介》,作者:w****n

Apache APISIX 是一个动态、实时、高性能的云原生 API 网关,提供了负载均衡、动态上游、灰度发布、服务熔断、身份认证、可观测性等丰富的流量管理功能。APISIX 构建于nginx+ngx_lua的技术基础之上,充分利用了LuaJIT所提供的强大性能,基于openresty+etcd实现了云原生,高性能,可扩展的微服务API网关。

APISIX主要包括两部分:

1. apisix core:apisix核心提供了诸如API管理,路由匹配,负载均衡,服务发现等api网关的主要功能; 另外也支持多语言插件运行时,提供了原生lua插件的运行框架和其他常规语言(例如go,java,python等)运行时支持,也包括wasm;

2. apisix plugin:apisix插件提供了功能丰富的各种内置插件,包括:

1)鉴权,各种类型认证, jwt,basic-auth, cas-auth,ldap-auth等

2)安全,ip黑白名单,用户黑白名单,referer黑白名单,cors,用户拦截等

3)流量控制, 限流(包括流速限制,连接数限制,请求限制等),熔断,镜像请求等;

4)可观测性,各种监控插件支持,日志投递,链路追踪等;

5)多协议支持

APISIX的技术优势

无数据库依赖: 目前大多数API网关产品在关系数据库中存储API数据、路由、证书和配置信息,但如果数据库出现故障,这种方法可能会导致可用性问题。相比之下,APISIX使用etcd存储配置信息可以实现实时更新,并更好地反映API网关的高可用性要求。此外,使用etcd作为存储系统使APISIX与云原生架构更加兼容,并允许更快地更新配置信息。

高性能的路由匹配算法:API 网关需要使用匹配算法来决定如何处理每个请求,而一个优秀的匹配算法是必不可少的。Hash 算法性能不错,但无法实现模糊匹配;正则可以模糊匹配,但性能不好。APISIX 选择使用 RadixTree 这种高效且支持模糊匹配的搜索数据结构,它提供了kv存储查找的数据结构并对只有一个子节点的中间节点进行了压缩,支持一个前缀下有多个不同路由的场景(具体实现可见 lua-resty-radixtree)。即当对某个请求进行匹配时,RadixTree 将采用层层递进的方式进行匹配,其复杂度为 O(K)(K 是路由中 URI 的长度,与 API 数量多少无关),该算法非常适合公有云、CDN以及路由数量比较多的场景,可以很好地满足路由数量快速增长的需求。

高性能IP匹配算法: APISIX 的 IP 匹配算法与路由匹配算法所使用的原理以及原始数据是不一样的。以 192.168.1.1 这个 IP 为例,由于每个 IP 段的范围是 0 到 255,因此在对 IP 进行匹配时我们可以认为 IP 地址是由 4 个16 位整数型的数构成的,IP 长度是固定的。那么我们可以采用更高效的算法完成匹配。假设现在有一个包含 500 条 IPv4 记录的 IP 库,APISIX 会将 500 条 IPv4 的记录缓存在 Hash 表中,当进行 IP 匹配时使用 Hash 的方式进行查找,时间复杂度为 O(1)。而其他 API 网关则是通过遍历的方式完成 IP 匹配,发送到网关每个请求将逐个遍历最多 500 次是否相等后才能知道计算结果。所以 APISIX 的 高精度 IP 匹配算法大大提高了需要进行海量 IP 黑白名单匹配场景(如 WAF)的效率。

精细化路由: API 网关通过请求中的流量特征完成预设规则的匹配,常见特征包含了请求中的 Host、URI 路径、URI 查询参数、URI 路径参数、HTTP 请求方法、请求头等;除此之外,APISIX还支持更多特性以解决复杂多变的应用场景。既包括NGINX内置变量, 也包括条件表达式。

支持多语言插件: APISIX目前支持了80多种的插件,但是为了涵盖用户多样复杂的使用场景,用户可以针对具体业务进行定制化插件开发。APISIX对自定义插件的支持主要有两种,一种是通过Plugin Runner来支持更多主流变成语言(java,python,go等),让用户可以通过本地rpc通信,实现插件开发;第二种是支持wasm开发插件,用户可以使用嵌入到apisix中的wasm编译wasm的字节码,以支持插件在apisix中运行,提高利用率。

API网关-APISIX简介的更多相关文章

  1. 微服务为什么要用到 API 网关?

    本文介绍了 API 网关日志的价值,并以知名网关 Apache APISIX 为例,展示如何集成 API 网关日志. 作者程小兰,API7.ai 技术工程师,Apache APISIX Contrib ...

  2. API 网关的选型和持续集成

    2019 年 8 月 31 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙·成都站,APISIX 作者温铭在活动上做了< API 网关的选 ...

  3. API 网关日志的价值,你了解多少?

    本文介绍了 API 网关日志的价值,并以知名网关 Apache APISIX 为例,展示如何集成 API 网关日志. 作者钱勇,API7.ai 技术工程师,Apache APISIX Committe ...

  4. API网关之Kong网关简介

    1. Kong简介 那么,Kong是一个什么东东呢?它是一个开源的API网关,或者你可以认为它是一个针对API的一个管理工具.你可以在那些上游service之上,额外去实现一些功能.Kong是开源的, ...

  5. 云原生API网关全生命周期管理Apache APISIX探究实操

    @ 目录 概述 定义 NGINX 与 Kong 的痛点 APISIX 的技术优势 特性 架构 应用场景 主要概念 部署 快速入门 quickstart安装 Admin API创建路由 RPM安装 安装 ...

  6. 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

    微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍 一.为什么会有 API Gateway 网关 随着微服务架构的流行,很多公司把原有的单 ...

  7. 基于.NET CORE微服务框架 -谈谈surging API网关

    1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文章中剥析下surging的Api 网关 开源地址:https://git ...

  8. 微服务从设计到部署(二)使用 API 网关

    链接:https://github.com/oopsguy/microservices-from-design-to-deployment-chinese 译者:Oopsguy 本书的七个章节是关于设 ...

  9. 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul

    通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...

  10. 阿里云API网关(11)API的三种安全认证方式

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

随机推荐

  1. Checking Table 设计模式 - 从概念、建模、设计到实现——兼谈基于业务需求驱动的设计模式创新

    郑 先全, 架构师, NEC Asia Pacific Pte Ltd 简介: 如何基于业务需求驱动理念来开展我们的模式创新,成为了当今架构师.设计师的重要职责之一.本文通过具体的 Checking ...

  2. elementUI 选择开始结束日期加限制

    需求是开始结束日期不得大于当前时间,当开始日期发生变化时,结束日期不得小于开始日期且不得大于当前日期 <el-form-item label="开始日期:"> < ...

  3. Educational Codeforces Round 151 (Rated for Div

    C. Strong Password 给定一个字符串\(s\),一个密码的长度\(m\),下界字符串\(l\)和上界字符串\(r\),上下界字符串长度均为\(m\),且字符只在0~9范围内,上界字符串 ...

  4. S2P彩蝶流向数据管理穿透到终端才有意义

    这两年我们也是在医药行业服务当中见证了行业的变化和趋势,流向管理系统,至少到目前,在行业当中将会是很大的趋势. 01过去粗放的流向管理方式 早在十年前,整个医药行业,特别是外资企业.对实时流向管理,流 ...

  5. 案例 | 销讯通加持药企SFE部门效能提升

    为了获取更大的市场空间,医药健康行业正迎来一波前所未有的产业升级.尽管不少企业取得了许多成绩,但仍面临诸多挑战. 江苏某制药公司在心脑血管.中枢神经.胃肠内科.心脏科.内分泌科.皮肤科和风湿科等领域均 ...

  6. 鸿蒙UI开发快速入门 —— part08: 组件状态管理之@Provide/@Consume装饰器

    1.说在前面的话 在此之前,我们已经先后学习了三个装饰器:@State.@Props.@Link,它们的功能和使用场景分别是什么?暂停会议一下. 我们目前已经可以处理组件内状态(@State),也可以 ...

  7. ESP32网页示波器+波形发生器

    项目开源地址:https://github.com/guohaomeng/ESP32WebScope ESP32WebScope 只用一块ESP32制作的ESP32网页示波器+波形发生器,可以拿来生成 ...

  8. 迁移现有用户数据到ABP vNext

    前言 使用 ABP vNext(下文简称 ABP)时,通常都是从 cli 开始新建模板,从一个空项目开始.对已经存续的项目来说,现有的数据,特别是用户等核心数据需要进行迁移. 老的项目,随着规模越来越 ...

  9. JVM简介—2.垃圾回收器和内存分配策略

    大纲 1.垃圾回收概述 2.如何判断对象存活 3.各种引用介绍 4.垃圾收集的算法 5.垃圾收集器的设计 6.垃圾回收器列表 7.各种垃圾回收器详情 8.Stop The World现象 9.内存分配 ...

  10. springboot拦截器过滤token,并返回结果及异常处理

    package com.xxxx.interceptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sp ...