服务网关

本文介绍了网关的基本概念及其在微服务架构中的重要作用,并通过权限校验实例对比了几种实现方案,最后调研并分析了不同网关技术的优劣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是网关

      网关是出现在系统边界上的一个串行集中式的强管控服务,这里的边界是企业IT系统的边界,可以理解为企业级应用防火墙,主要起到隔离外部访问与内部系统的作用。在微服务概念的流行之前,网关就已经诞生了,例如银行、证券等领域常见的前置机系统,它也是解决访问认证、报文转换、访问统计等问题的。网关的流行,源于近几年来,移动应用与企业间互联需求的兴起。移动应用、企业互联,使得后台服务支持的对象,从以前单一的Web应用,扩展到多种使用场景,且每种使用场景对后台服务的要求都不尽相同。这不仅增加了后台服务的响应量,还增加了后台服务的复杂性。随着微服务架构概念的提出,网关成为了微服务架构的一个标配组件。

二、为什么需要网关(以权限校验为例)

       1、实现方案

       方案1:每个服务自己实现一遍

       方案2:写到一个公共的服务中,然后其他所有服务都依赖这个服务

       方案3:写到服务网关的前置过滤器中,所有请求过来进行权限校验

       2、方案评估

       方案1:缺点太明显,基本不用。

       方案2:相较于方案1好很多,代码开发不会冗余,但是有以下两个缺点:

                     a:由于每个服务引入了这个公共服务,那么相当于在每个服务中都 引入了相同的权限校验的代码,使得每个服务的jar包大小增加了一些,尤其是对于使用docker镜像进行部署的场景,jar越小越好。

                     b:由于每个服务都引入了这个公共服务,那么我们后续升级这个服务可能就比较困难,而且公共服务的功能越多,升级就越难,而且假设我们改变了公共服务中的权限校验的方式,想让所有的服务都去使用新的权限校验方式,我们就需要将之前所有的服务都重新引包,编译部署。

       方案3:服务网关恰好可以解决了方案2的两个缺点

                     a:将权限校验的逻辑写在网关的过滤器中,后端服务不需要关注权限校验的代码,所以服务的jar包中也不会引入权限校验的逻辑,不会增加jar包大小

                     b:如果想修改权限校验的逻辑,只需要修改网关中的权限校验过滤器即可,而不需要升级所有已存在的微服务

3、作用概况

      

 

三、网关技术调研

      综述:经调研,使用Spring Cloud Zuul解决方案的占多数,已经能满足绝大多数公司需求。但除了一些超级公司外,比如阿里,京东,他们是自己撸的一套网关。此外,点评直接采用的nginx负载均衡前置网关,而没用第七层网关,原因据说是七层网关会影响性能,但由于对其架构不甚了解,所以也不得而知。

1、 携程:zuul

2、阿里无线:ACCS网关方案

3、京东:tomcat sevelet ,基于netty自研

四、网关技术选型

       1、网关有哪些技术架构(按语言分类)

网关技术架构

语言

相对java进行说明

Kong

Lua

1、非java语言开发的对jav性能优势不明显

2、对内部协议和基础组件支持或者拓展不方便

API Umbrella

apigee

Node.js

StrongLoop

Tyk

go

Zuul 1.x(servlet+Groovy)

java

具备以上非java语言开发的所有功能,所以只需要对比该4个框架即可

Zuul 2.x (servlet+RexNetty+Groovy)

Spring cloud zuul (spring整合zuul 1.x)

Spring cloud gateway

       2、特性比较

特性

Spring cloud zuul

Spring cloud gateway

Zuul 2.x

star

2088

519

4081

watch

328

114

647

更新时间

2018-04

2018-03

2018-03

开源组织

spring

Spring

netflix

开源语言

java

java

Java+groovy

使用难易

可扩展性

可维护性

 

 

 

 

 

 

 

 

       3、spring cloud zuul和spring cloud zuul性能比对

测试工具:jmeter

系统:win10

处理器:i5-7500  3.40GHz

RAM:16.0GB

              a:一千个并发,字节大小11544-11610

spring cloud gateway和spring cloud zuul聚合报告

比较avergaer得知zuul响应时间接近gateway的两倍,比较throughput得知zuul的吞吐量是gateway的两倍

 

再看执行结果明细

比较偏离值可知zuul稳定性是gateway的2倍多

 

       b:一万个并发, 字节大小11544-11610

综合以上指标,在一万个并发的时候,经过多次测试,性能差不多,有的时候gateway性能高一些。

 

       c:在十万并发,字节大小11544-11610

综上指标可知,经多次测试在十万并发的情况下spring cloud gateway吞吐量和稳定性是spring cloud zuul的一倍左右

 

五、总结

      由于zuul2.x在官网有些功能文档不全,故不对起进行性能比对

 

由于Spring Cloud Gateway未完全成熟,而且性能,稳定性等,现在无从考证,没有使用案例,基于Spring Cloud Gateway方案构建自己的网关风险比较大

 所以,若并发量小于10万,则建议使用spring cloud zuul

六、参考文章:

http://microservices.io/patterns/apigateway.html

https://github.com/Netflix/zuul/wiki

https://segmentfault.com/a/1190000012848405#articleHeader10

http://m.vlambda.com/wz_wE1SSrhH0z.html#

https://m.sohu.com/a/127357764_609518/?pvid=000115_3w_a

https://blog.youkuaiyun.com/younger_z/article/details/52851339?locationNum=11&fps=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值