当进行架构设计,业务复杂度比较高的时候,面对可扩展性,我们会考虑在架构中使用SOA或者微服务框架。
微服务框架
一个典型的微服务框架至少是包含如下组件的系统:
对于Spring Cloud有两大路线,一是NetFlix,一是Alibaba Cloud。
NetFlix套件
首先,所有的组件都是基于Springboot脚手架的,其中微服务的各个组成部分如上。
SpringCloud为了让组件更加通用,发布了Spring-Cloud-Common这样的抽象层,这个抽象层就类似于操作系统的VFS,让整个微服务更加通用,基于抽象层实现的微服务模块或者组件可以根据需要进行替换。
实际上微服务的各个模块或者组件可以使用其它的模块或者组件进行替换。
OpenFeign
OpenFeign是RPC组件,使用可以参见https://spring.io/projects/spring-cloud-openfeign的说明,相当简单。简单下有不简单,在文档中
Spring Cloud integrates Eureka, Spring Cloud CircuitBreaker, as well as Spring Cloud LoadBalancer to provide a load-balanced http client when using Feign.
openfeign中集成了负载均衡、断路器等功能。openfeign的实现也是基于装配机制,通过装配构造了代理,在代理中实现了负载均衡、断路器等。
Ribbon
openfeign的负载均衡是通过Rebbon实现,rebbon原理如下
Ribbon中获取并缓存了可用服务器数据,是以SDK方式实现,其中两个关键功能是负载均衡算法和状态监测。
Ribbon负载均衡算法以IRule为接口,以策略模式实现,提供了随机、轮训、权重等几种算法。
小结
Spring Cloud的两大路线都可以按照如上微服务组件图来学习,这样可以理清组件之间的关系,加深理解。