开源微服务api网关,单核2万qps,今年最值得学习的开源项目

架构师之路 架构师之路     2022-11-28     300

关键词:

文章较长,从概念与场景,到原理与架构,到性能分析,最后是demo,希望大家有收获。


第一部分:解决什么问题。

什么是微服务API网关?
API网关是上承前端用户,下接后端服务的咽喉之地,是所有客户端请求响应出入流量的必经之路。

微服务API网关有什么用?
它除了可以做最基础的反向代理之外,还可以处理通用的公共服务逻辑,如负载均衡、灰度发布、限流熔断、统一认证授权、可观测性、动态路由、协议转换、服务编排、流量镜像、健康检查、监控报警、安全防御等等等等。

说得这么抽象,有没有具体的场景呢?
对应到具体场景,举几个常见的例子。

场景一:负载均衡。
当服务器负载上升时,需要立即对系统资源进行容量评估,适当增加扩容服务器资源,让每台服务器可以平均承载分担请求压力,此时应该采用何种负载策略:轮询、随机还是哈希?果你有API网关,在后台配置好,即可自动实现。

场景二:灰度发布。
上了一个新功能,需要每天自动放 5% 的流量,10天后再一次性全部放开给所有用户。在此期间,可以对新功能加以验证,并对性能和稳定性加以观测优化,提前发现问题、解决问题?果你有API网关,在后台配置好,即可自动实现。

场景三:限流熔断。
双 11 即将来临,可能会出现流量大增,如果没有一定的过载保护策略机制,服务也将面临重大考验。希望实现系统状态不健康或超过阈值时,自动保护上游后端服务,触发限流限频或熔断机制,并即时报警,避免整个服务链条发生雪崩,此需求如何实现?果你有API网关,在后台配置好,即可自动实现。

场景四:统一认证授权。
不少公司用户权限鉴权逻辑散落在各站点服务中,是否可以将目前基于角色的认证逻辑和对外开放平台所使用的 OAuth 授权认证完全抽离出来,统一前置至网关中?果你有API网关,即可统一实现。

场景五:可观测性。
这么多站点,想知道每个站点的流量分布情况;这么多接口,想知道每个接口的处理时间;无数的报错,想知道异常的分布情况;无数的告警短信与邮件,想统一收口告警规则与策略...更重要的是,如何呈现统一的看板,实现相关指标的可视化呢?如果你有API网关,在后台配置配置即可。

既然API网关这么重要,有没有靠谱的,工业级的API网关可以“拿来主义”呢?
推荐一下,Apache APISIXApache基金会最快毕业项目、最活跃的开源API网关项目,个人觉得,它是今年最值得学习的开源项目。

第二部分:架构设计。

Apache APISIX使用了怎样的架构设计方案呢?
一句话概括,它使用了数据平面(data plane)控制平面(control plane)分离的架构方案。

什么是数据平面与控制平面?
数据平面和控制平面,不是Apache APISIX第一次提出,它是计算机网络,报文路由转发里很成熟的概念:
数据平面(data plane):一般用来做快速转发
控制平面(control plane)为快速转发提供必要的信息

它的设计原则是:
(1)在一个路由网关里,转发是最重要的工作,它具备最高的优先级,数据平面(data plane)的设计核心就是高效转发,如何在最短的时间里处理最多的包,往往使用高效内存管理、队列管理、超时管理等技术实现;
(2)控制平面(control plane)则不然,它更偏向于控制与应用;

Apache APISIX的核心架构借鉴了类似的思路。

数据平面以插件的方式,实现流控,认证,安全,日志等等众多的微服务网关核心功能。
控制平面以服务与后台的方式,实现数据收集,命令下发,可视化工作台等功能。
画外音:插件的方式,使得用户可以快速配置需要的功能,并能够定制化自己期望的功能。

第三部分:性能。

通过插件实现了这么多功能,它对请求转发性能有多大影响呢?

可以看到:
(1)单核QPS能跑到1.8W+
(2)延时在0.2ms左右,几乎可以忽略不计;
(3)除了传统的HTTP,还支持Dubbo,MQTT,gRPC等诸多协议;
(4)…
画外音:非常适合做微服务网关。

官网地址https://apisix.apache.org/

第四部分:demo。

这是我觉得这个开源项目最帅气的地方,项目提供了非常完善的中文手册,能够帮助我们快速上手,快速体验:
(1)如何用几个命令快速安装APISIX;
(2)如何快速配置APISIX;
(3)如何测试并验证APISIX;
(4)OK,可以在后台查看并控制你的网关了;
体验之后,再阅读源码,更有感觉哟。

Git地址:https://github.com/apache/apisix
文档地址:
https://apisix.apache.org/zh/docs/apisix/getting-started

这个项目靠谱吗?有哪些公司在使用?
绝非KPI式开源项目,Apache APISIX已经在NASA、腾讯、华为、微博、网易、贝壳、360等公司有着广泛的使用,已然成为世界上最活跃的开源网关项目。
画外音:你没看错,就是美国航空航天局的那个NASA。

对了,如果你对这个项目也感兴趣,欢迎关注项目的官方公众号

APISIX更多干货,欢迎关注


阅读原文,跳转Git主页,标个“星”吧。

架构师之路,21年干货精选

...于底层内核的文章,似乎阅读越来越低了。今年花在开源学习上的时间并不多:《1万行代码,单机50万QPS,今年最值得学习的开源RPC框架!》2.3W+《开源微服务API网关,单核2万QPS,今年最值得学习的... 查看详情

1万行代码,单机50万qps,今年最值得学习的开源rpc框架!

又发现一个不错的,工业级的,高性能RPC框架srpc,分享给大家。(1)RPC简介;(2)行业常见RPC框架;(3)srpc特点;(4)srpc上手指南,demo示例;(5)srpc架... 查看详情

限流10万qps跨域过滤器令牌桶算法-网关gateway内容都在这儿(代码片段)

...设为“星标”,和你一起掌握更多数据库知识一、微服务网关SpringCloudGateway1.1导引文中内容包含:微服务网关限流10万QPS、跨域、过滤器、令牌桶算法。在构建微服务系统中,必不可少的技术就是网关了,从早期... 查看详情

支持百万并发高性能网关设计实现系列:什么是网关?

...自研原因分析实际上对于API网关来说,已经有不少的开源的解决方案,比如Zuul、Kong等开源网关实现。但是这些开源网关解决方案并不完备, 查看详情

c#微服务必学清单

在C#领域,有一些不错的微服务书籍和开源框架,对于学习微服务相关知识非常有帮助。以下是一些建议您阅读的微服务书目和开源框架。微服务书目:1.《BuildingMicroservices》(SamNewman):这本书详细介绍了微服务的基本概念、... 查看详情

kong网关配置开源waf组件

1.简介有关kong 微服务网关的配置参考以下文档​kong微服务网关插件机制及常用指令​​https://blog.51cto.com/waringid/5800540​​kong微服务网关配置指南 ​​https://blog.51cto.com/waringid/5793828​​使用Kong和Konga管理微服务和API ... 查看详情

springcloud微服务二:api网关springcloudzuul

...ngCloud微服务一:Consul注册中心Springcloudzuul概览zuul是netflix开源的一个APIGateway服务器,本质上是一个webservlet应用。Zuul在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Spring对zuul进行了整合 查看详情

微服务、服务注册中心、API 网关和数据共享

】微服务、服务注册中心、API网关和数据共享【英文标题】:Microservice,serviceregistry,APIgatewayanddatasharing【发布时间】:2015-06-2212:47:06【问题描述】:我实际上正在阅读有关微服务架构的文章,但是,似乎他们正在以最简单的方式... 查看详情

springcloud——微服务网关介绍

...需要架构师独立实现其服务注册、发现功能。Zuul是Netflix开源的微服务网关,主要职责是对用户请求进行路由转发与过滤。早期SpringCloud与Netflix合作,使用Zuul作为微服务架构网关首选产品。Zuul是基于J2EEServlet实现路由转发,网络... 查看详情

关于api网关(四)——限流

...营同学无感,所以不太被大多数人了解。网关后面是各个服务,各个服务的接口通过网关透出去给用户调用。理论上说,用户的流量是不可预知的,随时可能来一波,一旦流量的峰值超过了服务的承载能力,服务就挂了,比如有... 查看详情

springcloud系列springcloud微服务网关概述(代码片段)

SpringCloud微服务网关概述1、微服务网关概述1.1、为什么要用微服务网关?1.2、什么是微服务网关?1.3、网关的作用及应用场景1.4、常见的API网关实现方式2、基于Nginx的网关实现2.1、Nginx介绍2.2、Nginx正向代理2.3、Nginx反向... 查看详情

基于springcloudgateway实现微服务网关(代码片段)

(一)什么是微服务网关后端写完所有的微服务之后,最终是要交给前端去调用。我们都知道每个微服务都有各自的端口号,如果前端直接通过IP加端口的方式去调用微服务会很麻烦。如果想对请求增加限制也会... 查看详情

基于springcloudgateway实现微服务网关(代码片段)

(一)什么是微服务网关后端写完所有的微服务之后,最终是要交给前端去调用。我们都知道每个微服务都有各自的端口号,如果前端直接通过IP加端口的方式去调用微服务会很麻烦。如果想对请求增加限制也会... 查看详情

微服务 API 网关与微服务机箱

】微服务API网关与微服务机箱【英文标题】:MicroservicesAPIgatewayvs.MicroservicesChassis【发布时间】:2019-04-0619:48:15【问题描述】:我是微服务新手,听说过微服务机箱,但我在网上找不到足够的资源。我想知道微服务底盘框架和API... 查看详情

API网关和微服务认证

】API网关和微服务认证【英文标题】:APIgatewayandmicroserviceauthentication【发布时间】:2018-01-0619:35:11【问题描述】:API网关和微服务的工作原理。谁能用网关解释一下微服务架构的基本流程。我找不到正确的答案。假设我们在不同... 查看详情

通过 API 网关进行内部通信微服务

】通过API网关进行内部通信微服务【英文标题】:internalcommunicationMicroservicesthroughAPIGateway【发布时间】:2019-05-0122:13:39【问题描述】:在微服务架构中,有一种常见的模式称为API网关。我知道来自API网关外部的所有通信都用作单... 查看详情

API网关和微服务通信

】API网关和微服务通信【英文标题】:APIgatewayandmicroservicescommunication【发布时间】:2019-10-0106:17:09【问题描述】:我正在构建微服务架构,我需要沟通方面的帮助。API网关与服务通信的最佳方法是什么?我的API网关将是graphqlapoll... 查看详情

微服务 API 网关模式

】微服务API网关模式【英文标题】:microseviceapigatewaypattern【发布时间】:2018-01-2512:40:52【问题描述】:我正在一个新项目的用户网站上工作,我需要为每个请求保持良好的响应时间。我想知道我应该使用哪些微服务模式。我一... 查看详情