springcloud微服务架构进阶pdf_微服务架构 & Spring Cloud
编者按
有了前面Spring、SpringBoot的学习基础之后,再接触Spring Cloud分布式的架构时能够比较快速地理解一些概念。以下整理一些学习笔记,以备日后回顾。欢迎指正。
(一)微服务架构[1]
将传统web开发方式与微服务架构放在一起比较,会对这两个概念有更好的理解。注释中链接地址的博客文章,非常通俗易懂地解释了微服务框架,记录下来分享。
传统web开发方式采用单体式,将所有功能全部打包在一个包中。
优点是简单集中,没有分布式管理和调用的消耗。
缺点是不易维护和扩展,牵一发而动全身。
于是诞生了分布式的微服务框架,将各个功能模块拆分解耦,形成具有特定功能的服务。如果需要使用到某一服务的功能,则通过请求调用即可,降低模块间直接的代码依赖,使得各个服务更具有扩展性。
(二)Spring Cloud[2]
注释链接中的教程,搭建了最简单的SpringCloud架构,通过搭建框架能够更好地理解。
1 注册中心Eureka
微服务各个模块之间需要的相互调用,使得形成了服务端与客户端的概念,而由于所有服务都有可能处于请求方,因此设立了一个端口作为各个服务查找请求地址的枢纽。Eureka使得注册中心成为这样一个管理者,作为server接收来自各个client的信息,注册中心本身也是一个client。
从结构上看,各个client通过server相连;但在client的角度上,他们之间是直接调用的关系。
通过Eureka将各个分布式的服务关联起来,只要提供对应的接口,无需了解其具体实现,即可直接调用相应的服务。达到了功能分隔的效果,在对某个功能进行维护、扩展、更新时,不会影响其他服务的正常运行。
- 用@EnableEurekaServer标注是server
- 用@EnableEurekaClient标注是client
在application.yaml文件中,
1)设置name
指明spring.application.name很重要,服务与服务之间的调用需要依靠这个名字.
2)设置server
要配置eureka.client.registerWithEureka和fetchRegistry为 false表明是server.
3)设置client1和client2
要配置eureka.client.serviceUrl.defaultZone:自己的注册中心的地址。
# 设置server
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
application:
name: eurka-server
# 设置client
server:
port: 8762
spring:
application:
name: service-hi
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
2 服务消费者
微服务框架中各服务之间的通讯基于Http请求,Spring Cloud中采用两种服务调用方式:一种是Ribbon+Template,一种是Feign。
2.1 Ribbon + restTemplate
Ribbon是一个负载均衡客户端,用来调解服务器请求的压力,将请求均衡地打出,防止出现崩溃。
假设开启一个注册中心Server,有两个服务器client1/2提供Service-hi功能。
现在client3不停发起Service-hi请求,则经过Ribbon会使得两个服务器轮流提供hi服务。
创建client3:
1)用@EnableEurekaClient标注启动类是client,向注册中心注册。
2)在启动类中注入一个Bean:restTemplate,并用@LoadBalanced注解标明开启负载均衡。
3)编写一个Service,通过注入的Template消费server-hi的接口。
4)编写一个Controller,调用Service的方法。
RestTemplate是Spring提供的用于访问Rest服务的客户端,是Spring用于同步client端的核心类,简化了与http服务的通信,满足RestFul原则,程序代码可以给它提供URL,并提取结果。
2.2 Feign
Feign是一个伪Http客户端,采用基于接口的注解,默认集成Ribbon。
整合了Ribbon均衡负载,整合了Hystrix(下一节内容)具有熔断能力。
因此使用Feign只要创建一个接口并注解即可,较前一种方式方便很多。
创建client3:
1)用@EnableEurekaClient标注启动类是client,向注册中心注册。
2)创建一个接口interface,用@FeignClient注解,其中指定调用的是哪个服务@RestMapping(value, method)。
3)Web层Controller对外暴露一个接口,通过Feign客户端消费Service-hi。
3 熔断器Hystrix
由于服务与服务之间的依赖性,一旦出现故障就会传播,进而导致整个微服务系统崩溃,此为"雪崩"效应。为了防止出现这样的情况,业界提出了熔断器/断路器的模型。
使用熔断器后,当对特定的服务的调用的不可用达到一个阀值时断路器将会被打开,使用fallback方法直接返回一个固定值,防止长时间等待无应答造成的系统崩溃。
3.1 Ribbon
在Ribbon中需要添加Hystrix的依赖,然后在启动类和Service类中添加注解打开其功能。
3.2 Feign
Feign中集成了Hystrix,因此直接在配置文件中添加开启选项,然后在接口的@FeignClient注解中设置fallback的内容即可。
4 路由网关Zuul
Zuul的主要功能是路由转发和过滤器,可以起到身份验证的作用。
参考
- ^微服务架构 https://www.cnblogs.com/skabyy/p/11396571.html
- ^SpringCloud教程 https://blog.csdn.net/forezp/article/details/70148833
更多推荐
所有评论(0)