微服务架构下的组件需求


下面是基于一个请求进来之后,所需要用到的组件和功能 

微服务架构下的组件需求

从图可以看到,如果要实施微服务,我们需要解决很多的问题,比如 
1. 服务注册发现 
2. 远程服务调用 
3. 负载均衡 
4. 断路器 
5. 分布式消息 
6. 配置中心 
7. 链路监控 

所以,spring cloud提供了一些解决这类问题的工具,比如服务注册提供了Eureka/Consoul/zookeeper;远程调用基于RestTemplate针对http协议调用的封装;负载均衡采用Ribbon、断路器采用hystrix;分布式消息基于kafka、rabbitMQ;配置中心基于config;链路监控基于sleuth. 

但是,从这些组件中,我们发现了一些问题,这些组件并不是spring提供的啊,比如eureka、ribbon、hystrix是netflix开源的。而kafka、zookeeper是一些独立的组件,和spring似乎没有关系。没错,这就是spring团队的强大之处,他们很少重复早轮子,而是他们利用别人造好的轮子来进行封装使得用户在使用的时候更加方便。 

举个简单例子,比如最早spring只提供了IOC和AOP的核心功能,而像ORM框架、缓存、MVC框架,spring只是提供了一种兼容以及支持,所以当时大家说spring是万能胶,可以把各种各样的框架整合进来。 

当然,spring也会对一些市面上做得不好的技术进行替代,比如struts2.,我记得当时公司使struts2经常出现各种漏洞,所以spring mvc才被创造出来并且很快代替了struts。成为现在的主流框架。 

所以,对于spring cloud来说也是如此,spring cloud并不是一个框架,因为Spring Cloud的核心并没有实现服务注册、熔断、配置中心等功能,它提供了一个标准规范。而Spring Cloud Netflix才是spring Cloud规范的一种实现。