一、注册中心Eureka
每一个服务(订单服务、库存服务、积分服务...)中都会有一个Eureka Client组件,此组件就是负责将服务的信息注册到Eureka Server中(实质上是将服务的地址和端口暴露到Eureka Server注册中心上);
Eureka Client:负责将服务的信息注册到Eureka Server中。
Eureka Server:注册中心,其中有一个注册表,记录的有各个服务所在的机器和端口号。
二、服务网关Zuul
Zuul:就是微服务网关,主要是负责网络路由的。
浏览器所有请求都需要经过网关,网关就会根据请求中的特征将请求转发后端的各个服务中。网关还可以做统一的降级,限流,认证授权…
三、服务调用Feign
Feign:服务调用。服务与服务之间的代码调用方式基于含有注解FeignClient自定义的接口。简化了构建服务之间网络连接等环节。FeignClient会根据接口配置到注册中心(本地缓存)找到对应的请求服务接口。
Feign实际上使用了动态代理的方式,实现了服务调用。原理如下。
a,如果我们在操作中对某个接口定义了@FeignClient注解,那么Feign就会针对这个接口创建一个动态代理。
b,当我们调用此接口时,本质上就是调用Feign创建的动态代理
c,Feign的动态代理就会根据接口上的@RequestMapping…等注解,动态的构造出要请求的服务地址。
d,最后会针对这个地址,发起请求,解析响应。
四、熔断器Hystrix
熔断器,它是一个隔离,熔断以及降级的框架。
订单服务调用积分服务,由于积分服务异常导致订单服务的请求都在调用积分服务时卡住几秒钟,高并发情况下,订单服务所有的线程都卡在请求积分服务侧,将导致订单服务异常。这就是服务雪崩。熔断器的存在就是需要在积分服务异常情况下,订单服务仍正常运行不会出现服务异常情况。
隔离:服务与服务之间请求使用线程池,防止下游服务异常导致上游服务所有线程都卡住在请求该下游服务的卡顿环节。
熔断:当订单服务请求积分服务时,若积分服务出现异常则及时熔断积分服务,订单服务再次请求积分服务时将直接走hystrix熔断器返回报错信息。
降级:在订单服务请求走熔断器过程中,将该过程中请求记录下面,涉及到积分变更的数据存入数据库,后续人工处理好数据。
五、负载均衡Ribbon
Ribbon 的负载均衡在默认情况下使用的 Round Robin轮询算法。 指的就是当订单服务对积分服务发起了6次请求,那就会先请求第一台机器,接着是第二台…,不断的循环
参考文献:https://blog.csdn.net/weixin_56702673/article/details/121186371