微服务涉及组件
- 服务注册与发现
- 服务调用
- 服务网关
- 服务降级熔断
- 服务配置中心和服务总线
- 中间件消息驱动
- 链路追踪
服务注册,发现,调用
服务注册中心维护着服务提供者的信息,能使得服务消费者调用。三者关系如下
服务注册中心拥有着已注册服务的ip,端口,调用地址等基本信息。通过api可以获取的到全部服务的信息。在程序中,可以通过注入DiscoveryClient
来获取服务列表的实例信息。
List<ServiceInstance> instances =
discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
所以我们能简单的能通过ribbon来定义服务调用的规则,是轮询的还是随机的还是带有其他权重的。并且使用restTemplate来调用uri。
服务网关
服务降级熔断
服务降级:在发生异常时会有对应的降级方法去代替。可以理解为一级方法处理不了,降级到二级方法处理。使服务产生降级的方式有:服务异常,服务限流。
服务熔断:在过多的降级后,会降级该服务的任何请求,即在熔断期内,该服务所有的调用都被降级方法处理。
在降级在同一时间窗口期中达到设定的比例后会被熔断。而在服务被熔断后,该服务的调用在这个时间窗口中总是会被降级,直到窗口期结束。
例如,在一秒内请求10次,降级比例达到百分之60,就被熔断了。而只有在一秒后才有可能再次请求成功。
而在服务熔断结束后,会处在一个半开阶段。这时如果请求还是失败,会再次进入熔断状态。直到下一个窗口期中首次调用成功后解除熔断状态。
服务配置中心和服务总线
将配置保存到配置中心中。服务启动时会到配置中心去获取配置来代替加载本地配置。减少多份相同配置造成的重复修改和配置冗余。并且能动态生效配置的更改。
在spring cloud config和spring cloud bus中,是使用消息订阅的方式来使所有的服务生效更新的配置。如下图
链路追踪
在服务调用中,许多服务的调用就形成一条长的调用链,服务越多,链路越长,而在期间产生错误或者整体调用过慢时,需要定位到某个服务来解决问题。
链路追踪的作用则是记录下每次服务间的调用关系和调用耗时。