SpringCloud 就是一套工具,帮助大家很容易地搭建出这么一个 集群和分布式的架子出来。逐步引入服务注册中心eureka 、客户端ribbon、feigh ,断路保护Hystrix、配置服务,消息总线等一些概念和用法。
微服务概念
要说springcloud 分布式之前,先引入微服务概念。
微服务简单说,一个 springboot 就是一个 微服务,并且这个 springboot 做的事情很单纯。 比如 project-service 这个项目,就可以拆成两个微服务,分别是 数据微服务,和视图微服务,其实就是俩 springboot, 只是各自做的事情都更单纯~、
project-service
数据微服务 视图微服务
服务注册
那么有了微服务,就存在如何管理这个微服务,以及这两个微服务之间如何通信的问题,所以就要引入一个 微服务注册中心概念,这个微服务注册中心在 springcloud 里就叫做 eureka server, 通过它把就可以把微服务注册起来,以供将来调用。
服务访问
在业务逻辑上, 视图微服务 需要 数据微服务 的数据,所以就存在一个微服务访问另一个微服务的需要。
而这俩微服务已经被注册中心管理起来了,所以 视图微服务 就可以通过 注册中心定位并访问 数据微服务了。
在后续教程里,会演示微服务的相互调用。
分布式概念
分布式简单说,原来是在一个 springboot里就完成的事情,现在分布在多个 springboot里做,这就是初步具备 分布式雏形了。
那么分布式有什么好处呢?
- 如果我要更新数据微服务,视图微服务是不受影响的
- 可以让不同的团队开发不同的微服务,他们之间只要约定好接口,彼此之间是低耦合的。
- 如果视图微服务挂了,数据微服务依然可以继续使用
等等
集群
原来数据微服务只有这一个springboot, 现在做同样数据微服务的,有两个 springboot, 他们提供的功能一模一样,只是端口不一样,这样就形成了集群。
那么集群有什么好处呢?
- 比起一个 springboot, 两个springboot 可以分别部署在两个不同的机器上,那么理论上来说,能够承受的负载就是 x 2. 这样系统就具备通过横向扩展而提高性能的机制。
- 如果 8001 挂了,还有 8002 继续提供微服务,这就叫做高可用 。
分布式和集群周边服务
以上是很简单的分布式结构,围绕这个结构,我们有时候还需要做如下事情:
- 哪些微服务是如何彼此调用的? sleuth 服务链路追踪
- 如何在微服务间共享配置信息?配置服务 Config Server
- 如何让配置信息在多个微服务之间自动刷新? RabbitMQ 总线 Bus
- 如果数据微服务集群都不能使用了, 视图微服务如何去处理? 断路器 Hystrix
- 视图微服务的断路器什么时候开启了?什么时候关闭了? 断路器监控 Hystrix Dashboard
- 如果视图微服务本身是个集群,那么如何进行对他们进行聚合监控? 断路器聚合监控 Turbine Hystrix Dashboard
- 如何不暴露微服务名称,并提供服务? Zuul 网关