SpringCloud

5、微服务网关

2019-04-08  本文已影响0人  小manong

一、API网关概述

1、什么是API网关

API网关
(1)为啥需要API网关

计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。
— David Wheeler

(2)API网关定义

网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。

(3)API网关的四大职能

请求接入:作为所有 API 接口服务请求的接入点,管理所有的接入请求;
业务聚合:作为所有后端业务服务的聚合点,所有的业务服务都可以在这里被调用;
中介策略:实现安全、验证、路由、过滤、流控,缓存等策略,进行一些必要的中介处理;
统一管理:提供配置管理工具,对所有 API 服务的调用生命周期和相应的中介策略进行统一管理。

(4)API网关关注点

(1)开发维护简单,节约人力成本和维护成本。
(2)高性能,节约设备成本,提高系统吞吐能力。
(3)高可用(非常重要)
(4)方便灵活地实现安全、验证、过滤、聚合、限流、监控等各种策略。

二、API网关分类

api网关分类

流量网关:跟具体的后端业务系统和服务完全无关的部分,比如安全策略、全局性流控策略、流量分发策略等。流量网关的功能跟 Web 应用防火墙(WAF)非常类似。WAF一般是基于 Nginx/OpenResty 的 ngx_lua 模块开发的 Web 应用防火墙。
业务网关:针对具体的后端业务系统,或者是服务和业务有一定关联性的部分,并且一般被直接部署在业务服务的前面。业务网关一般部署在流量网关之后,业务系统之前,比流量网关更靠近系统。我们大部分情况下说的 API 网关,狭义上指的是业务网关。并且如果系统的规模不大,我们也会将两者合二为一,使用一个网关来处理所有的工作

三、开源API网关介绍

开源api网关

目前常见的开源网关大致上按照语言分类有如下几类:

Nginx+lua:Open Resty、Kong、Orange、Abtesting gateway 等
Java:Zuul/Zuul2、Spring Cloud Gateway、Kaazing KWG、gravitee、Dromara soul 等
Go:Janus、fagongzi、Grpc-gateway
Dotnet:Ocelot
NodeJS:Express Gateway、Micro Gateway

按照使用数量、成熟度等来划分,主流的有 4 个:

OpenResty
Kong
Zuul/Zuul2
Spring Cloud Gateway

1、Nginx+Lua(Open Resty)

项目地址:http://openresty.org/

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

OpenResty® 的目标是让你的 Web 服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

2、kong

项目地址:

https://konghq.com/
https://github.com/kong/kong

Kong 基于 OpenResty,是一个云原生、快速、可扩展、分布式的微服务抽象层(Microservice Abstraction Layer),也叫 API 网关(API Gateway),在 Service Mesh 里也叫 API 中间件(API Middleware)。

Kong 开源于 2015 年,核心价值在于高性能和扩展性。从全球 5000 强的组织统计数据来看,Kong 是现在依然在维护的,在生产环境使用最广泛的 API 网关。

Kong 宣称自己是世界上最流行的开源微服务 API 网关(The World’s Most Popular Open Source Microservice API Gateway)。

3、Zuul/Zuul2

项目地址:https://github.com/Netflix/zuul

Zuul 是 Netflix 开源的 API 网关系统,它的主要设计目标是动态路由、监控、弹性和安全。

Zuul 的内部原理可以简单看做是很多不同功能 filter 的集合

4、Spring Cloud Gateway

项目地址:

https://github.com/spring-cloud/spring-cloud-gateway/

Spring Cloud Gateway 基于 Java 8、Spring 5.0、Spring Boot 2.0、Project Reactor,发展的比 Zuul 2 要早,目前也是 Spring Cloud 全家桶的一部分。

Spring Cloud Gateway 可以看做是一个 Zuul 1.x 的升级版和代替品,比 Zuul 2 更早的使用 Netty 实现异步 IO,从而实现了一个简单、比 Zuul 1.x 更高效的、与 Spring Cloud 紧密配合的 API 网关。

5、四大开源网关框架对比

网关 限流 鉴权 监控 易用性 可维护性 成熟度
SGW 可以通过IP,用户,集群限流,提供了相应的接口进行扩展 普通鉴权、auth2.0 Gateway Metrics Filter 简单易用 spring系列可扩展强,易配置 可维护性好 spring社区成熟,但gateway资源较少
Zuul2.x 可以通过配置文件配置集群限流和单服务器限流亦可通过filter实现限流扩展 filter中实现 filter中实现 参考资料较少 可维护性较差 开源不久,资料少
Kong 根据秒,分,时,天,月,年,根据用户进行限流。可在原码的基础上进行开发 普通鉴权,Key Auth鉴权,HMAC,auth2.0 可上报datadog,记录请求数量,请求数据量,应答数据量,接收于发送的时间间隔,状态码数量,kong内运行时间 简单易用,api转发通过管理员接口配置,开发需要lua脚本 可维护性较差,将来需要维护大量lua库 相对成熟,用户问题汇总,社区,插件开源
Open Resty 需要lua开发 需要lua开发 需要开发 简单易用,但是需要进行的lua开发很多 可维护性较差,将来需要维护大量lua脚本 很成熟资料很多

https://spencergibb.netlify.com/preso/detroit-cf-api-gateway-2017-03/

6、四大开源网关性能对比

(1)实测情况是性能 SCG~Zuul2 << OpenResty ~< Kong << Direct(直连);
(2)Spring Cloud Gateway、Zuul2 的性能差不多,大概是直连的40%;
(3)OpenResty、Kong 差不多,大概是直连的 60-70%;
(4)大并发下,例如模拟 200 并发用户、1000 并发用户时,Zuul2 会有很大概率返回出错。zuul2.x的可用性不好。

https://github.com/kimmking/spring-cloud-gateway-demo

7、开源网关的选择

脱离场景谈性能,脱离业务谈架构,都是耍流氓。


摘自:百亿流量 API 网关设计与实践

上一篇下一篇

猜你喜欢

热点阅读