标签:framework 网关 告诉 lin ase 用户 开源 异常 图片
一、什么是SpringCloud?
二、各组件介绍
一、什么是SpringCloud?
SpringCloud是实现微服务结构的一种方式,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等功能;协调分布式环境中各个系统,为各类服务提供模板性配置。其主要涉及的组件包括:
Eureka:注册中心
Zuul、Gateway:服务网关
Ribbon:负载均衡
Feign:服务调用
Hystrix或Resilience4j:熔断器
二、各组件介绍
1.Eureka注册中心
1.1.Eureka做什么?
Eureka就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。
同时,服务提供方与Eureka之间通过 “心跳” 机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。这就实现了服务的自动注册、发现、状态监控。
1.2.原理图
基本架构:
Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态
1.3.
坐标:
1 <dependency>
2 <groupId>org.springframework.cloud</groupId>
3 <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
4 </dependency>
启动类:
1 //声明当前应用为eureka服务
2 @EnableEurekaServer
3 @SpringBootApplication
4 public class EurekaServerApplication {
5 public static void main(String[] args) {
6 SpringApplication.run(EurekaServerApplication.class);
7 }
8 }
客户端注册服务到集群 :
1 eureka:
2 client:
3 service-url: # EurekaServer地址,多个地址以‘,‘隔开
4 defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka
2.负载均衡Ribbon
2.1.负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
2.2.负载均衡要干什么事情?
服务端负载
需要做三个事情:
1.接收请求
2.选择服务器地址
3.转发/执行请求(转发还是执行可以参考网关)
客户端负载
1.选择服务器地址
2.发请求
负载均衡就是分发请求流量到不同的服务器。
负载均衡一般分为两种:
1、 服务器端负载均衡(nginx)
2、 客户端负载均衡(Ribbon)
2.3、负载均衡架构
2.4.开启负载均衡
因为Eureka中已经集成了Ribbon,所以我们无需引入新的依赖。
在RestTemplate的配置方法上添加 @LoadBalanced 注解:
1 @Bean
2 @LoadBalanced public RestTemplate restTemplate() {
3 return new RestTemplate();
4 }
3.熔断器Hystrix
3.1.Hystrix的作用是什么呢?具体要保护什么呢?
Hystrix是Netflflix开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败。
在高并发领域,在分布式系统中,可能因为一个小小的功能扛不住压力,宕机了,导致其他服务也跟随宕机,最终导致整个系统宕机,所以在SpringCloud中采用Hystrix进行处理。
微服务I 发生异常,请求阻塞,用户请求就不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞。服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,形成雪崩效应。
Hystrix解决雪崩问题的手段主要是服务降级,包括:
线程隔离
服务熔断
3.2.线程隔离
Hystrix为每个依赖服务调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队,加速失败判定时间。用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务。
用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,或者请求超时,则会进行降级处理,什么是服务降级?
服务降级:优先保证核心服务,而非核心服务不可用或弱可用。
用户的请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,至少可以看到一个执行结果(例如返回友好的提示信息) 。服务降级虽然会导致请求失败,但是不会导致阻塞,而且最多会影响这个依赖服务对应的线程池中的资源,对其它服务没有响应。
触发Hystrix服务降级的情况:线程池已满、请求超时
3.3.服务熔断
熔断原理
在服务熔断中,使用的熔断器,也叫断路器,其英文单词为:Circuit Breaker
熔断机制与家里使用的电路熔断原理类似;当如果电路发生短路的时候能立刻熔断电路,避免发生灾难。在分布式系统中应用服务熔断后;服务调用方可以自己进行判断哪些服务反应慢或存在大量超时,可以针对这些服务进行主动熔断,防止整个系统被拖垮。
Hystrix的服务熔断机制,可以实现弹性容错;当服务请求情况好转之后,可以自动重连。通过断路的方式,将后续请求直接拒绝,一段时间(默认5秒)之后允许部分请求通过,如果调用成功则回到断路器关闭状态,否则继续打开,拒绝请求的服务。
4.Feign
5.Spring Cloud Gateway网关
什么是SpringCloud?
标签:framework 网关 告诉 lin ase 用户 开源 异常 图片
原文地址:https://www.cnblogs.com/aaaazzzz/p/12781435.html