本文分享自天翼云开发者社区《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. @RequestParam @RequestBody @PathVariable 等参数绑定注解详解()

    转载自:http://blog.csdn.net/walkerjong/article/details/7946109 学习了下,对@RequestBody,@SessionAttributes,@M ...

  2. antlr的使用

    我从以下几个问题入手介绍ANTLR的相关知识. 1 ANTLR是什么? ANTLR, ANother Tool for Language Recognition, 是一个可以接受含有语法描述的语言描述 ...

  3. BUU get_started_3dsctf_2016

    先checksec一下 32位程序,没开PIE,再观察一下主函数 gets函数有可能是栈溢出,再观察一下后门函数 方法一: 考虑栈溢出后直接跳转到if判断后面的语句,进而跳过if条件判断 from p ...

  4. 前端好用API之MutationObserver

    前情 一直以来都没有好的方式可以监听元素变化,Mutation events虽然可以监听DOM树结构变化,但是因性能问题和差的兼容问题(Webkit内核不支持)并不推荐使用. MutationObse ...

  5. 注册美区 Apple ID 账号!都2020年了,你还没有一个自己的海外苹果ID?

    写在前面: 小伙伴们学腻了技术,不防今天来点大家都感兴趣的海外苹果 Apple ID 吧! 今天就教大家怎么注册美区 Apple ID,这个方法也是目前注册苹果美区  Apple ID  最快最简单的 ...

  6. 腾讯云对象存储COS获Veritas认证,数据安全能力再升级

    近日获悉,腾讯云对象存储 COS 正式通过 Veritas 备份软件标准化测试,为数据安全再添新助力. Veritas 对 COS 的支持已经从底层打通,目前 Veritas 的 NetBackup ...

  7. R数据分析:冲击流图与热图的做法以及多图布局

    今天看了一篇新冠肺炎相关后遗症的文章,主要探讨新冠住院病人一年后的后遗症情况,文章的统计分析很简单,不过结果展示中的两个图我觉的大家可以学一学,原文如下 Rivera-Izquierdo, M., L ...

  8. EverEdit插件-CHM助手:一种免费、高效的CHM手册制作方式

    1 EverEdit插件-CHM助手:一种免费.高效的CHM手册制作方式 1.1 前言   业界制作CHM手册的工具多如牛毛,高贵的商业工具如:HelpNDoc.Help+Manual.HelpSmi ...

  9. 聊一聊 C#线程池 的线程动态注入 (上)

    一:背景 1. 讲故事 在线程饥饿的场景中,我们首先要了解的就是线程是如何动态注入的?其实现如今的ThreadPool内部的实现逻辑非常复杂,而且随着版本的迭代内部逻辑也在不断的变化,有时候也没必要详 ...

  10. 2024年1月Java项目开发指南19:Vue动态页面渲染

    以文章为例子,我们获取了文章列表. 现在想实现,点击文章列表里面的某一篇文章,跳转页面,这个页面显示文章的具体内容. 那么应该怎么实现. 首先,你要创建一个文章详情页的组件(article.vue) ...