概述
微服务架构基础 SpringCloud
SpringCloud简介 :
SpringCloud是在springboot的基础上构建的,用于简化分布式系统构建的工具集
服务发现 :
Eureka介绍 :
Eureka服务包含两大组件 服务端发现组件(Eureka Server)和客户端发现组件(Eureka Client) ;服务端发现组件也称服务注册中心,主要提供了服务的注册功能,客户端发现组件主要用于处理服务的注册与发现
上图中,客户端发现组件会向注册中心注册自身提供的服务,并周期性地发送心跳来更新服务(默认时间为30s,连续三次心跳都不能发现服务,eureka就会将这个服务节点从注册表中移除),与此同时,客户端组件会从服务端查询当前注册的服务信息并缓存到本地,即使Eureka Server 出现了问题,客户端组件可以通过缓存中的信息调用服务节点中的服务.各个服务之间会通过注册中心的注册信息以Rest的方式来实现调用,并且可以直接通过服务名进行调用
Eureka服务中心包含三个角色 : 服务注册中心,服务提供者,服务消费者,三者之间的关系如下所示 :
客户端负载均衡
Ribbon介绍 :
Ribbon是Netflix发布的开源项目,其主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起.Ribbon的客户端提供了一系列完善的配置项,例如连接超时,重试等
在Erureka的自动配置依赖中,已经集成了ribbon.两者一起使用时,ribbon会利用从eureka读取到的服务信息列表,在调用服务实例时,以合理的方式进行负载
Ribbon的使用:
1. 通过@LoadBalanced注解实现负载均衡,RestTemplate的方法上添加注解
2. 通过实例调用 this.restTemplate.getForObject(“http://microservice-eureka-order/”+oid,String.class);
3. 创建服务监听类 (查看调用服务端口号):
@Component
public class ServiceInfoUtil implements
ApplicationListener<WebServerInitializedEvent>{
private static WebServerInitializedEvent event;
@Override
public void onApplicationEvent(WebServerInitializedEvent event) {
ServiceInfoUtil.event = event;
}
/**
* 获取端口号
* @return 端口号
*/
public static int getPort(){
return event.getApplicationContext().getWebServer().getPort();
}
}
4.调用服务
Ribbon的工作主要分为两步:
1.选择Rureka Server,优先选择同一个区域负载较少的Server
2.根据用户指定的策略(轮询,随机等),从server取到的服务注册列表中选择一个地址
服务容错保护 :
Spring Cloud Hystrix 介绍:
微服务架构中,通常存在多个服务层调用的情况;如果基础服务发生故障,可能会出现级联传递,导致整个服务链上的服务不可使用;
为了解决服务级联失败这种问题,在分布式架构中产生了断路器的一系列服务保护机制.在SpringCloud中,Spring Cloud Hystrix就是用来实现断路器,线程隔离等服务保护功能,它是基于Netflix的开源框架Hystrix实现的,该框架的使用目的是通过控制那些访问远程系统,服务和第三方库节点,从而对延迟和故障提供更强大的容错能力.
断路器是可以实现弹性容错的,一定条件下可以自动打开和关闭,使用时主要有三种形态
短路器的开关由关闭到打开的状态是通过当前服务健康状态(服务健康状况=请求失败数/请求总数)和设定阈值(默认为10s内20次故障)比较决定的;
当断路器关闭或健康状况高于阈值,开关保持关闭,请求允许通过断路器;反之,当断路器打开是,请求禁止通过,如果设置了fallback方法,则会进入fallback流程;当断路器处于打开状态时,经过一段时间,断路器会自动进入半开状态,此时断路器允许一个请求通过,当该请求调用成功时,断路器进入关闭状态;请求失败,继续打开,请求禁止通过
Spring Cloud Hystrix 使用 :
@HystrixCommand(fallbackMethod = “fallbackInfo”)用于指定当前方法发生异常时调用的方法,该方法通过fallbackMethod 的属性值来指定,需注意:回调方法的参数类型和返回值要和原方法保持一致
Hystrix Dashboard使用 :
Hystrix除了可以对不可用的服务进行断路隔离外,还可以对服务进行实时监控,可以实时.累加的记录所有关于HystrixCommand的执行信息,包括每秒执行多少,请求成功多少,失败多少
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
启动类添加 : @EnableHystrixDashboard,启用 Hystrix Dashboard 功能
为服务实例添加endpoint
Hystrix Dashboard 监控单实例节点需要通过访问实例的/actuator/hystrix.stream接口来实现,自然我们需要为服务实例添加这个 endpoint,需要监控的服务pom添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
为启动类添加@EnableCircuitBreaker或@EnableHystrix注解,开启断路器功能。
在配置文件 application.yml 中添加
management:
endpoints:
web:
exposure:
include: hystrix.stream
management.endpoints.web.exposure.include这个是用来暴露 endpoints 的。由于 endpoints 中会包含很多敏感信息,除了 health 和 info 两个支持 web 访问外,其他的默认不支持 web 访问。
在 Hystrix-Dashboard 的主界面上输入 eureka-consumer-feign-hystrix 对应的地址 http://localhost:8030/actuator/hystrix.stream 然后点击 Monitor Stream 按钮,进入页面。
如果没有请求会一直显示 “Loading…”,这时访问 http://localhost:8030/actuator/hystrix.stream 也是不断的显示 “ping”。
这时候访问一下 http://localhost:8030/hello/windmt,可以看到 Hystrix Dashboard 中出现了类似下面的效果
以上图来说明其中各元素的具体含义:
实心圆:它有颜色和大小之分,分别代表实例的监控程度和流量大小。如上图所示,它的健康度从绿色、黄色、橙色、红色递减。通过该实心圆的展示,我们就可以在大量的实例中快速的发现故障实例和高压力实例。
曲线:用来记录 2 分钟内流量的相对变化,我们可以通过它来观察到流量的上升和下降趋势。
参考:https://github.com/Netflix/Hystrix/wiki/Dashboard
到此单个应用的熔断监控已经完成
最后
以上就是超帅音响为你收集整理的微服务架构基础 SpringCloud基础组件学习 贺兰的博客的全部内容,希望文章能够帮你解决微服务架构基础 SpringCloud基础组件学习 贺兰的博客所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复