集群/分布式/SOA :
分布式:一个业务分拆多个子业务,部署在不同的服务器上
集群:同一个业务,部署在多个服务器上
集群每一台服务器实现的功能没有什么差别。分布式每一台实现的功能是有差异的
集群是同一个业务部署在多台机器上,提高系统可用性。分布式是不同的业务模块拆分到不同的机器上,解决高并发的问题。
参考来源:https://www.zhihu.com/question/20004877
为什么需要SpringCloud?
就是把我们一大的项目,分解成多个小的模块。这些小的模块组合起来,完成功能
SpringCloud的基础功能:
- 服务治理: Spring Cloud Eureka 【 [juˈriːkə] (因找到某物,尤指问题的答案而高兴)我发现了,我找到了】
子系统之间的通讯,Eureka专门用于给其他服务注册的称为Eureka Server(服务注册中心),其余注册到Eureka Server的服务称为Eureka Client
- 客户端负载均衡: Spring Cloud Ribbon 【[ˈrɪbən] (使用功能区;铝带;蝴蝶結;功能区;丝带)】
客户端负载均衡(Ribbon),服务端负载均衡(Nginx)
- 服务容错保护: Spring Cloud Hystrix
- 声明式服务调用: Spring Cloud Feign 【[feɪn] (假装,捏造;捏造)】
基于 Netflix Feign 实现,整合了 Spring Cloud Ribbon 与 Spring Cloud Hystrix, 除了整合这两者的强大功能之外,它还提 供了声明式的服务调用(不再通过RestTemplate)。Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。
- API网关服务:Spring Cloud Zuul
在API网关服务上进行统一调用来对微服务接口做前置过滤,以实现对微服务接口的拦截和校验。
- 分布式配置中心: Spring Cloud Config
Zuul支持Ribbon和Hystrix,也能够实现客户端的负载均衡。我们的Feign不也是实现客户端的负载均衡和Hystrix的吗?既然Zuul已经能够实现了,那我们的Feign还有必要吗?
答:
- zuul是对外暴露的唯一接口相当于路由的是controller的请求,而Ribbonhe和Fegin路由了service的请求
- zuul做最外层请求的负载均衡 ,而Ribbon和Fegin做的是系统内部各个微服务的service的调用的负载均衡