sprincloud核心组件交流

随着产品业务的剧增,不同服务间面临着高耦合的风险,为了降低不同服务之间的耦合度,可将将不同的业务划分成不同的模块。

Eureka

不同的服务之间有依赖关系,为了找到依赖的服务,Eureka提供了服务注册的功能。每个服务的创建和销毁的事件要向Eureka打招呼。Eureka掌握着整个系统所有的服务的信息。当服务A需要调用服务B时,通过Eureka获取服务B的信息,拿到服务B的信息再调用服务B。

Eureka相当于一个中介者的角色。

Ribbon与Feign

由于服务可以部署在多个服务器上,每个服务器的ip地址都是不同的。因此当服务A调用服务B时,到底选择哪个服务器,需要根据不同服务器的负载大小进行有选择的调用。这项功能(负载均衡)通过Ribbon来做。

为了做到负载均衡Ribbon运行时主要做四件事儿:

  • 优先选择在一个Zone且负载较少的Eureka Server,进行连接。(用于获取服务列表)

  • 定期从Eureka更新、过滤服务和实例列表

  • 根据Ribbon提供的负载均衡策略,从注册表中选择一个真正的实例地址。

  • 通过Ribbon client对服务发起调用。

仅仅使用Ribbon就可以完成当前服务对其他服务的调用,为了简化可以使用Feign配合使用。Feign使用了Java的动态代理机制,将Ribbon服务调用的逻辑封装出了一套简洁的接口调用方式。

断路器 Hystrix

断路器的应用场景:一个请求的完成需要依次调用多个服务,若中间某个服务(旁路服务)出现故障将导致不能调用后续服务,因此请求一直完成不了。

所谓旁路服务是指该服务在完成请求时可有可无的操作,因此在该服务出现问题时,系统应阻断该服务,直接进行后续服务的调用,而不耽误处理用户请求。

Api网关Zuul

网关其实是一对过滤器的集合,可以实现一些与业务无关的横切面功能

Zuul的职责:

  • 安全认证。提供统一的认证方式和鉴权功能,避免重复开发。

  • 熔断,限流。针对问题服务,进行熔断操作;对流量进行预估,限制访问。

  • 日志监控。统一流量入口,进行流量分析和监控。

  • 屏蔽内部细节,对外提供一致的接口。

  • 实现灰度。使用自定义策略实现分流,达到测试的目的。

总结

1、服务注册中心,统一管理所有服务的信息,默认组件是Eureka。

2、RPC,网络通信组件,服务A怎么调用服务B。在SpringCloud中,就是Ribbon+Feign。

3、网关,拆分的服务怎么暴露接口,最终见人的样子。 默认组件是Zuul。

2 Likes