SpringCloud之Gateway
一、为什么选择SpringCloud Gateway而不是Zuul?
Gateway和Zuul的职责一样,都承担着请求分发,类似Nginx分发到后端服务器。
1.SpingCloud Gateway 和SpringCloud Zuul对比分析
(1)相同点
- 底层都是servlet
- 两者均是web网关,处理的是http请求
(2)不同点
a.内部实现
gateway对比zuul多依赖了spring-webflux,在spring的支持下,功能更强大,内部实现了限流、负载均衡等,扩展性也更强,但同时也限制了仅适合于Spring Cloud套件;
zuul则可以扩展至其他微服务框架中,其内部没有实现限流、负载均衡等。
b.是否支持异步
zuul仅支持同步;
gateway支持异步(理论上gateway则更适合于提高系统吞吐量(但不一定能有更好的性能),最终性能还需要通过严密的压测来决定)。
c.框架设计的角度
gateway具有更好的扩展性,并且其已经发布了2.0.0的RELESE版本,稳定性也是非常好的。
d.性能
Zuul和Gateway哪个性能更好,有朋友特别做了测试并写下了文章:
微服务网关选型:spring cloud gateway、zuul 1性能对比测试
e.限流
Zuul2:可通过配置文件或者filter实现;
Gateway:可对IP、用户、集群进行限流,并提供扩展接口。
f.鉴权
Zuul2:filter中代码实现;
Gateway:普通鉴权、auth2.0。
g.监控
Zuul2:filter中代码实现;
Gateway:Gateway Metrics Filter实现。
h.易用性
Zuul2:参考较少;
Gateway:简单易用。
(3)架构图
a.Zuul2内部架构图
b.Gateway内部架构图
2.究竟该选Gateway还是Zuul?
我的看法是结合业务场景和实际情况。比方说,如果是一个新的项目可以采用Gateway,如果是二次开发某个项目,而那个项目网关用的是Zuul,建议不要改,保持现状,直到真正搞懂了那个项目和框架底层,可以尝试试验换(最终换不换在于换的成本有多高,如果太高的话,还是不要换)。
二、SpringCloud整合Gateway
1.导入Maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2.配置文件
server:
port: 8080 spring:
cloud:
gateway:
discovery:
locator:
lowerCaseServiceId: true
enabled: true
routes:
# 认证中心
- id: blog-api
uri: lb://blog-api
predicates:
- Path=/api/**
filters:
- StripPrefix=1 application:
name: blog-gateway-server eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
3.启动并测试
整合其实非常简单,关键在于两个:
第一,SpringCloud和SpringBoot版本要兼容;
第二,配置文件要对,否则会遇到这样的问题,能够正常启动,但是通过网关访问不到下面的微服务。
我的测试效果,如图:
如果有朋友对Zuul感兴趣,可以参考我的这篇文章:
SpringCloud之Zuul
本文参考资料如下:
微服务网关Zuul和Gateway的区别
SpringCloud Gateway 新网关与zuul的对比选型
微服务网关选型:spring cloud gateway、zuul 1性能对比测试
Zuul和Gateway对比
最新文章
- SCCM 2012 R2安装部署过程和问题(三)
- .Net程序员之Python基础教程学习----字符串的使用 [Second Day]
- touch 命令
- SPOJ #2 Prime Generator
- Jenkins-测试自动化环境搭建(Python+RobotFramework+selenium)
- HDU 5522 Numbers 暴力
- magic Ajax使用以及注意事项
- Riak VClock
- SQL SERVER 查看日志大小及日志已满的处理方法 (转)
- 【Python】 迭代器&;生成器
- 5. Web vulnerability scanners (网页漏洞扫描器 20个)
- MySql共享锁和排它锁
- servlet篇 之servlet实现
- 如何将frm文件导入MySql数据库
- Online DDL工具的安装与使用
- office2013安装和破解教程
- leetCode题解单链表反转
- calayer 的特殊属性整理
- Oracle11gR2--手工建库&;dbca建库
- Python基础-2
热门文章
- 08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成
- Code Test(1)
- 1. Spring Boot入门
- OpenCV计算机视觉学习(2)——图像算术运算 &; 掩膜mask操作(数值计算,图像融合,边界填充)
- Arduino control Eeprom by IIC method of using device address in Arduino
- C++中cstring.h和string.h的区别
- 题解 P3572 [POI2014]PTA-Little Bird
- 从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建
- Docker笔记4:在 CentOS 上安装 Docker
- IOS使用UITextView进行富文本编辑|纯干货