img

架构图

熔断降级

限流

当系统的处理能力不能应对外部请求的突增流量时,为了不让系统崩溃,必须采取限流的措施

  • 流量计数法

限制每秒请求数量

  • 滑动时间窗口

比较流行的一种方法,看时间窗口内的请求数量,窗口内是各个时间窗格,但流量控制不够精细

  • 漏桶算法

把漏桶想成一个漏斗的意思,先将请求缓存起来,然后均匀的发送给服务端,相较于滑动时间窗口,它可以削峰填谷,但是有几点要注意:

漏桶的大小要多大

漏桶给服务端的发送速率

  • 令牌桶算法

类似于去医院挂号看病,医院每天放号的数量是有限的,起到限流的作用

取不到令牌,只能被拒绝或者走服务降级的逻辑

img

  • hystrix限流

使用信号量限流,在提供服务的方法上加上只能有20个并发线程来访问这个方法

熔断

访问服务器时,通过断路器做代理进行访问,当失败超过设置的阈值时断路器就不再转发请求

img

断路器有三种状态,分别是

  • CLOSED:正常工作
  • OPEN:达到阈值后,就不再转发请求
  • HALF OPEN:尝试查看服务是否已经恢复

img

服务降级

站在系统全局的角度上,是对非核心、非关键的服务进行降级

  • 可以使用hystrix降级
    • 异常降级:在方法上加上@HystrixCommand注解
    • 调用超时降级:调用第三方接口3秒未收到响应就降级到errMethod方法

小结

限流和熔断是服务降级的一种手段

熔断和服务降级主要是针对非核心业务功能,而核心业务如果超过峰值,则要限流

SpringCloud

SpringCloud 是微服务系统结构的一站式解决方案,再平常构建微服务的过程中需要做如服务发现注册、配置中心、消息总线、负载均衡断路器、数据监控等操作,而SringCloud提供了一个简易的编程模式,可以在SpringBoot的基础上轻松实现微服务项目的构建

SpringCloud的服务发现框架-Eureka

RestTemplate

RestTemplate是一个Spring提供的一个访问HTTP服务的客户端类,就是微服务之间的调用是使用的 RestTemplate

Ribbon

和Nginx的区别

Nginx:集中式的负载均衡器,将所有请求都集中起来,然后再进行负载均衡

img

Ribbon:对于 Ribbon 来说它是在消费者端进行的负载均衡

img

注意Request的位置

Ribbon的负载均衡算法

默认是使用的 RoundRobinRule 轮询策略

  • RoundRobinRule:轮询策略。Ribbon 默认采用的策略。若经过一轮轮询没有找到可用的 provider,其最多轮询 10 轮。若最终还没有找到,则返回 null。
  • RandomRule: 随机策略,从所有可用的 provider 中随机选择一个。
  • RetryRule: 重试策略。先按照 RoundRobinRule 策略获取 provider,若获取失败,则在指定的时限内重试。默认的时限为 500 毫秒。

SpringIOC

Spring框架的IOC是基于Java反射机制实现的

java反射

反射机制是指在运动状态中,对于任意一个类,都能知道这个类的所有属性和方法;对于任意一个对象,都能调用它的任意方法和属性;简单来说,指的是程序运行时获取自身信息