hello大家好,我是阿七。
在前面的文章中,我们已经基本搭建了一套微服务系统,包含内容中心和用户中心,我们在接口调用的时候,分别通过两个微服务的端口进行调用。那么,如果微服务有几十个,几百个呢?这种方式肯定是行不通的,此时我们就需要一个网关来进行统一管理。
我整理了之前发布的SpringCloud Alibaba系列文章:
一、Spring Cloud Netflix简介
二、Nacos服务注册与发现
三、你要的负载均衡Ribbon
四、Feign如何使用?看看这篇文章吧
五、Sentinel:分布式系统流量防卫兵
六、微服务消息通信RocketMQ及分布式事务
一、Zuul和Gateway的恩怨情仇
1、背景
Zuul是Netflix开源的一个项目,Spring只是将Zuul集成在了Spring Cloud中。而Spring Cloud Gateway是Spring Cloud的一个子项目。
还有一个版本的说法是Zuul2的连续跳票和Zuul1的性能并不是很理想,从而催生了Spring Cloud Gateway。
2、性能比较
网上很多地方都说Zuul是阻塞的,Gateway是非阻塞的,这么说是不严谨的,准确的讲Zuul1.x是阻塞的,而在2.x的版本中,Zuul也是基于Netty,也是非阻塞的,如果一定要说性能,其实这个真没多大差距。
而官方出过一个测试项目,创建了一个benchmark的测试项目:spring-cloud-gateway-bench,其中对比了:
Spring Cloud Gateway
Zuul1.x
Linkerd
从结果可知,Spring Cloud Gateway的RPS是Zuul1.x的1.6倍。
ok,我们进入正题,开始聊聊Spring Cloud Gateway的一些事情,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。
二、搭建Gateway微服务
1、通过Spring Initializr快速搭建一个gateway微服务,pom如下
<?xml version="1.0" encoding="UTF-8"?>4.0.0org.springframework.boot spring-boot-starter-parent 2.1.5.RELEASEcom.seven gateway 0.0.1-SNAPSHOTgatewayDemo project for Spring Boot1.8org.springframework.cloud spring-cloud-starter-gateway org.springframework.boot spring-boot-starter-actuator org.springframework.cloud spring-cloud-starter-alibaba-nacos-discovery org.springframework.boot spring-boot-starter-test testorg.junit.vintage junit-vintage-engine org.springframework.cloud spring-cloud-dependencies Greenwich.SR1pomimportorg.springframework.cloud spring-cloud-alibaba-dependencies 0.9.0.RELEASEpomimportorg.springframe