一提SpringCloud就会想起分布式、微服务、集群等名词,这几个名词之间有什么关系呢?SpringCloud又是如何实现微服务、分布式和集群的呢?
什么是集群
计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多
什么是分布式
分布式系统是一组计算机,通过网络相互连接传递消息与通信后并协调它们的行为而形成的系统。组件之间彼此进行交互以实现一个共同的目标。
什么是微服务
整个服务的是比较微小的,是一个独立的业务模块,专做改业务的事情,是一个独立的功能单元
区别
从上面的解释来看,我觉得微服务就是把一个整体的系统抽象成一个一个微小的服务,每个服务分别部署在不同的服务器上同时实现了自治就是分布式,每个服务在不同的服务器部署多个然后就构成了集群,这就是我对这三个名词的理解,
SpringCloud如何实现的微服务、分布式、集群
注:一般来说,一个子业务我们称为节点。
CAP理论
在讲SpringCloud之前我们一定要弄懂的一个东西就是CAP
C:数据一致性(consistency)
所有节点拥有数据的最新版本
A:可用性(availability)
数据具备高可用性
P:分区容错性(partition-tolerance)
容忍网络出现分区,分区之间网络不可达。
上面说的有点抽象,具体点来说,C就是说的每个节点部署的服务的数据要保持一致,这样才能使每个服务提供一样的结果,A就是说不管哪个节点出现问题不能服务,都不能影响服务的使用,P是指当出现节点不能通信时,就会出现分区,就是说允许出现这种故障,分区容错性(partition-tolerance)这个是必需的,这是客观存在的。
对于分布式可能会出现一些状况,就是某个服务器不连通了,不能使用了
为什么需要SpringCloud
上图中一个大系统被分成了多个子模块,每个模块之间的通信等管理问题需要springCloud去解决
springCloud的基本功能
- 服务治理:Spring Cloud Eureka
- 客户端负载均衡:Spring Cloud Ribbon
- 服务容错保护:Spring Cloud Hystrix
- 声明式服务调用:Spring Cloud Feign
- API网关服务:Spring Cloud Zuul
- 分布式配置中心:Spring Cloud Config
- 消息总线:Spring Cloud Bus
- 消息驱动的微服务:Spring Cloud Stream
- 分布式服务跟踪:Spring Cloud Sleuth
Eureka的治理机制:
服务提供者
服务注册:启动的时候会通过发送REST请求的方式将自己注册到Eureka Server上,同时带上了自身服务的一些元数据信息。
服务续约:在注册完服务之后,服务提供者会维护一个心跳用来持续告诉Eureka Server: "我还活着 ” 、
服务下线:当服务实例进行正常的关闭操作时,它会触发一个服务下线的REST请求给Eureka Server, 告诉服务注册中心:“我要下线了 ”。
服务消费者
获取服务:当我们启动服务消费者的时候,它会发送一个REST请求给服务注册中心,来获取上面注册的服务清单
服务调用:服务消费者在获取服务清单后,通过服务名可以获得具体提供服务的实例名和该实例的元数据信息。在进行服务调用的时候,优先访问同处一个Zone中的服务提供方。
Eureka Server(服务注册中心):
失效剔除:默认每隔一段时间(默认为60秒) 将当前清单中超时(默认为90秒)没有续约的服务剔除出去。
自我保护:。EurekaServer 在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%(通常由于网络不稳定导致)。Eureka Server会将当前的实例注册信息保护起来, 让这些实例不会过期,尽可能保护这些注册信息。