一、什么是SpringCloud?
SpringCloud是Spring团队提供的一套微服务架构体系的开发解决方案。内部继承了20多种为微服务开发所需要的服务和组件。直接开箱即用即可,极大的方便了微服务架构的开发。
SpringCloud是基于SpringBoot
二、什么是微服务?
微服务的特点:
1、按照系统的业务模块进行服务的拆分
2、每个服务独立部分,隔离运行,并且通过一个小型的管理中心集中管理
3、服务和服务之间通过轻量级的通信机制进行通讯(dubbo - rpc / Spring cloud - Http Restful...)
4、服务需要高可用部署
5、服务可以采用不同的语种实现、存储也可以采用不同的方式
三、服务的注册和发现 - Eureka
如何搭建一个注册中心:
1、添加Eureka Server的相关依赖:
2、去启动类添加相关注解:
3、配置application.yml:
4、打开浏览器,访问注册中心
如何搭建一个微服务的提供者(本身就是一个微服务,可以是提供者也可以是消费者):
1、添加Eureka client依赖
2、启动类上添加注解
3、配置application.yml
4、提供一个Controller(就是给其他微服务调用的接口)
注意:微服务的集群关系,是通过spring.application.name确定的,当两个微服务的名称相同时,注册中心就会认为这两个微服务是一个集群的关系
四、Eureka组件
什么是Eureka的自我保护机制?
一旦Eureka触发了自我保护机制,则注册中心上所以可能有问题的服务,就会被Eureka保护起来,而不被移除。
为什么Eureka要设定一个貌似鸡肋的自我保护机制(zookeeper - 过半数存活原则)?
CAP原则:任何分布式存储系统,必须遵循CAP原则中的2个原则,因为P(网络分区)不可避免,所以通常分布式系统都会从A和C中做选择,Zookeeper就是CP设计,Eureka是AP设计。
P(分区容错性):当一个分布式服务,发生网络分区问题时,仍然可以对外正常提供服务。
C(强一致性):对于任何的读操作,总能返回最新的写操作的结果
A(高可用性):对于读取集群中任意一个节点,会返回一个合理的结果,但是有可能不正确(不能是超时或者报错)
AP理论 - Base理论(对AP原则的一个补充):
选择AP并不意味着丢弃数据一致性,而是在网络分区问题发生时,短暂的牺牲掉数据一致性,保证服务的高可用,一旦网络分区的问题恢复后,最终整个服务系统数据还是要回到一致性状态的。(最终一致性)
Ba:服务基本可用,当服务资源出现问题时,首先保证更重要的服务可以正常运行
s:软状态,整个系统允许某个时刻出现弱一致性状态,
e:最终一致性,当系统分区问题解决后,整个数据最终还是要回归一致性状态的
自我保护机制触发的条件:
在 1 分钟后,Renews (last min) < Renews threshold * 0.85,就会触发自我保护机制
Renews (last min):表示Eureka在最后一分钟,接收到的心跳数量
Renews threshold:表示Eureka认为在最后一分钟,应该接收到的心跳数量
如何避免自我保护机制?
1、通过配置关闭自我保护机制(不推荐)
2、修改自我保护机制的比例值(不推荐)
3、将Eureka集群进行自我注册 - 心跳数会增加(推荐)
注意:因为Eureka的高可用性选择,所以设计了一个自我保护机制,保护那些因为网络分区问题影响的微服务不会移除。但是也可能保护了真正出现了问题的微服务。这个时候,其他的微服务调用这个服务时,可能就会得到一个错误的结果,这种情况只能在调用端自行解决,比如通过Hystrix进行隔离熔断。
Eureka如何搭建集群:
1、准备三个Eureka服务
2、配置每个Eureka服务的application.yml
3、给配个集群机器分配一个域名(/hosts文件)
4、验证集群
Zookeeper和Eureka的区别:
1、zk是cp设计,eureka是ap设计
2、zk集群有角色,eureka集群没有角色
3、zk提供了watch机制,eureka是通过长轮询实现
Nacos - AP设计 注册中心