哈喽各位同学们大家好呀,今天是开发者学院中课程“Spring Cloud微服务架构设计与开发实战”的章节二的“Java Spring Cloud网关Zuul ”干货总结~是一起学习新课程吧!
课程链接以及图谱地址小编已经为大家指路了,搭配学习效果更佳👇
课程名称:Java Spring Cloud网关Zuul
课程地址:https://developer.aliyun.com/learning/course/60/detail/1091
图谱名称:Alibaba Java 技术图谱
图谱地址:https://developer.aliyun.com/graph/java
Java Spring Cloud网关Zuul
一、Java Spring Cloud网关Zuul
本节课讲的是微服务架构非常重要的技术“Zuul网关”,现在已经迭代到2.0版本,架构底层也发生了较大的变化。微服务集群为什么需要网关,因为服务特别多,尤其是对外的时候,作为调用端,不可能知道每台服务的实例地址,中间有注册中心,实例地址会动态变化,所以希望有统一的出口,这就是网关的作用。
网关是两个网络边界的通道,相当于请求转发,就是代理服务器。
(一)Spring CloudZuul网关
Zuul是Netflix开源的微服务网关工具,Netflix公司在微服务领域贡献了早期的核心代码,当然2020年之后Zuul,包括其他的一些Spring Cloud的组件,主要在维护阶段与Spring Cloud官方产生了分歧,但是仍然可以使用,而且功能也比较完善,包括实名验证、日志、路由定制等功能。2.0版本的功能更加强大,因为后面考虑到优化,比如连接池等相关功能的扩展。
Spring Cloud官方也出了类似Zuul的Gateway技术,Gateway技术基于Spring Framework 5 底层框架实现的,吞吐量方面有比较高的提升。但是使用场景要看实际情况,绝大部分公司的并发都不会超过1000,很少有超过10000万的公司,因为中国互联网公司不是各个都是BAT, 所以会有差异。
Spring CloudZuul网关总结:
1. Zuul是Netflix开源的微服务网关工具;
2. 可以和Eureka、Ribbon、Hystrix等组件配合使用;
3. Spring Cloud对Zuul进行了整合与增强,
4. Zuul旨在实现动态路由,监视,弹性和安全性。
5. Zuul默认使用的HTTP客户端是Apache HTTPClient;
6. 也可以使用RestClient或okhttp3.OkHttpClient;
7. Zuul默认会为Eureka注册的服务创建动态路由;
8. zuul在2.x甚至3.x的分支中已经引入了netty;
9. github地址:https://github.com/Netflix/zuul;
10.官方文档:https://github.com/Netflix/zuul/wiki。
(二)Spring Cloud Zuul网关架构
网关做为代理端,后面挂接微服务集群,熔断、监控、身份验证等都可以放在代理层做,Zuul出口对外可以做微服务代理模式,前面可以连接移动APP等,后面数据库设计,有一种模式叫一个微服务一个数据库,还有现在国内还比较流行的分库分表,有没有把数据库拆开,要不要把数据库拆开以后再分表。这个问题变得越来越复杂,不同的公司不同的业务量,规模都会有差别。
当然好处是里面的组件都可以替换,不会出现多个相同的组件,比如注册中心,可以替换成阿里开源的,国内很多人喜欢阿里的技术。阿里在Java这块是国内贡献最大的一个公司,如果阿里不在淘宝上使用Java,有可能Java在国内没有这么大市场,架构不会得到如此广泛的实践性验证。现在无论是 Spring Clord 还是 Dubbo技术,都是很好的技术选型。
(三)Zuul网关特性
Zuul首先是作为代理层作为网关,路由、负载均衡、日志等都是扩展功能,主要的作用是把请求转发过去。
1. Authentication and Security –验证和安全;
2. Insights and Monitoring –跟踪、统计、监控;
3. Dynamic Routing –动态路由 消息到 后台集群;
4. Stress Testing – 压力测试 逐级递增;
5. Load Shedding –过载保护;
6. Static Response handling – 静态消息处理,无需后台集群服务器处理;
7. Multiregion Resiliency – 多区域弹性伸缩,跨AWS区域路由请求,分散压力,请求处理更接近调用者。
二、Spring Cloud网关Zuul实战
(一)创建Zuul代理
首先引入Zuul的依赖包,其次需要和注册中心进行交互,要知道那些服务可用,来代理可用的服务,是微服务集群的统一入口。
• 首先创建一个Spring Boot项目,
• 然后引入Zuul相关依赖。
• <dependency>
• <groupId>org.springframework.cloud</groupId>
<artifactId> spring-cloud-starter-zuul</artifactId>
• </dependency>
• <dependency>
• <groupId>org.springframework.cloud</groupId>
<artifactId> spring-cloud-starter-eureka</artifactId>
</dependency>
• 添加注解@EnableZuulProxy;
• Zuul内部使用Ribbon实现客户端负载均衡。
(二)EnableZuulServer
为了方便启动微服代理应用,Zuul提供了EnableZuulProxy 的快速注解,里面有组件默认的集成,直接在POS里实现。
• @EnableZuulServer只启动代理服务;
• @EnableZuulProxy简单理解为@EnableZuulServer的增强版,
• 当Zuul与Eureka、Ribbon等组件配合使用时,
• 使用@EnableZuulProxy。
(三)Spring Cloud Zuul网关底层优化
1. RestClient或okhttp3.OkHttpClient;
2. Zuul默认会为Eureka注册的服务创建动态路由;
3. zuul在2.x甚至3.x的分支中已经引入了netty。
实战演示:
之前做的项目不动,里面有微服务、注册中心、调用端。打开Eclipse开发工具,新建项目,Name栏直接加上:ZoolProxyDemo。
下一步,Frequently Used:勾选上Eurka Discovery Clie、Spring Boot Devtools、Zuul[Mainternance],版本选2.3.7。
下一步,直接上线。
稍等,会有一个构建过程,下一步加注解,@EnableZuulProxy。注意中间不能中断,包一旦出错很难找回。
因为Zuul配置和调用端很像,直接复制调用端的配置改成Zuul。Name=ZuulProxy,端口=1000,详情配置如下图所示:
默认连接注册中心以后,会把所有的服务列表全部拉过来,默认形成一个路由策略,会基于服务名、方法名来形成一个路由规则,当然用户也可以改路由规则,可以定制,也可以改配置。暂时这里不改,后面作为扩展学习的时候再深入讲。
接下来启动程序,直接右键,选Run As ,有两种启动方式,1.jave Application,2.Spring Boot APP,两种都可以启动。
启动成功之后,打开浏览器,输入http://localhost:10000/order-microservice/hello 回车,显示已经调用成功。
看一下访问规则,端口是:10000;服务端是:hello; 注册中心是:order-microservice。现在的路由规则是基于服务名和方法名调用。
通过代理服务器(网关),输入服务名字加方法名就可以了。当然也可以定制特殊的规则,这节课不演示。做演示会比较简单,主要是把整个调用链跑通,告诉大家整个微服务架构的搭建过程。