1.服务治理 Spring Cloud Eureka
概念
Eureka提供了服务端组件,我们也称为注册中心。每个服务都向Eureka的服务注册中心,登记自己提供服务的元数据,包括服务的ip地址、端口号、版本号、通信协议等。
原理
服务注册中心,还会以心跳的方式去监听清单中的服务是否可用(默认30秒),若不可用(服务续约时间默认90秒),需从清单中剔除,达到排除故障服务的效果。
Eureka注册中心提供了高可用方案,可以支持集群部署注册中心,保证了AP(可用性和分区容错性),然后多个注册中心实例之间又相互注册,这样每个实例中都有一样的服务清单了。
2.客户端负载均衡 Spring Cloud Ribbon
概念
服务的调用方,在通过Eureka Client缓存到本地的注册表之后,通过服务名称,找到具体的服务对应的实例地址,但是被调用方的服务地址是有多个的,那么该用那个地址去进行调用呢?ribbon提供访问方案。
策略
随机:从服务实例清单中随机选择一个服务实例
权重:根据权重来挑选实例
轮训:根据轮询方式进行,且具备重试机制进行选择实例
3.声明式服务调用 Spring Cloud Feign
概念
Spring Cloud Feign具备可插拔的注解支持,并扩展了Spring MVC的注解支持,调用方通过Feign进程远程服务调用的时候,非常简单,就向是在调用本地服务一样.
原理
Feign底层主要是靠动态代理来实现这整个服务的调用过程的,如果调用方,在调用这个定义了@FeignClient注解的接口时,本质上是会调用Feign生成的代理类。 Feign生成的动态代理类,会根据具体接口方法中的**@RequestMapping**等注解,来动态构造出需要请求的服务地址.
4.服务容错保护 Spring Cloud Hystrix
概念
微服务架构中,我们将系统拆分成多个服务单元,各个服务之间通过服务注册与订阅的方式互相依赖,一旦其中一个有异常,很容易会造成服务雪崩。针对这种情况,Hystrix会提供服务的熔断,隔离,降级。
原理
Hystrix其实是会为每一个服务开辟一个线程池,然后每个线程池中的线程用于对服务的调用请求。这样就算是积分服务挂了,那也只是调用积分服务的线程池出现问题了,而其他服务的线程池还正常工作。这就是服务的隔离。
这样订单服务在的调用积分服务的时候,如果发现有问题了,积分服务可以通过Hystrix返回一个默认值(默认是5秒内20次调用失败就熔断)。这样订单服务就不用在这里卡住了,可以继续往下调用其他服务进行业务操作了。这就是服务的熔断。
虽然说是积分服务挂了,并且也返回了默认值了,但是后续如果积分服务恢复了,想恢复数据怎么办呢?这个时候积分服务可以将接收到的请求记录下来,或者是打到日志中,能为后面恢复数据提供依据就行。这就是服务的降级。
5.API网关服务Spring Cloud Zuul
概念
权限校验机制,请求过滤,请求路由,限流等等