Nacos
Nacos 端口号:8848 注册中心和配置中心
Nacos的心跳机制-------为每个微服务和Nacos保持沟通和交换信息
默认情况下:服务启动每隔5秒向Nacos发送一个心跳包,包含基本信息
一个服务心跳3次心跳(15秒)未与Nacos进行信息交互-----不健康
一个服务心跳6次心跳(30秒)未与Nacos进行信息交互------从注册列表中删除
Dubbo
RPC(Remote Procedure Call):远程过程调用
需要通信协议和序列化协议
Dubbo是一套RPC框架(实现微服务之间的相互调用)
使用的是2.7之后的版本
通信协议------dubbo(默认)
序列化协议------hessianz(默认)
特征:
使用NIO单一长链接
优秀的并发性能,处理大型文件
注册发现流程
服务的提供者启动服务会将自己具备的服务注册到注册中心(Nacos),其中包括ip地址及端口等信息,同时注册该项目提供的远程调用的方法。
消费者的那个项目,也注册到注册中心,同时从Nacos中获得所有服务列表
当注册中心发现新的服务,会通知已订阅的消费者,更新所有服务队列
RPC调用,根据注册中心服务列表的信息,只需要服务名称就可以利用Dubbo调用远程方法
负载均衡(Loadbalance)
多个功能相同的项目运行(集群),可以承受更高的并发,负载均衡为了将请求尽可能的在相对空闲的服务器上运行。
Dubbo内置的负载均衡算法
random loadlabance 随机分配(默认)------随机生成一个随机数,在哪个范围就让哪个服务器运行
优点:算法简单,效率高,长时间运行下,任务分配比例准确
缺点:偶然性高,如果连续的几个随机请求发送带性能弱的服务器,会导致宕机
round Robin Loadlabance 权重平滑分配------按照比例,选择占比最大的,选择后减去总权重数,然后一次加上占比数.
Leastactive Loadbalance 活跃度自动感知分配-------记录每个服务器处理一次请求的使时间,按照时间比例分配任务数,运行一次时间多的分配的请求少。
Consistanthash Loadbalance一致性hash算法分配------根据请求的参数进行hash运算,以后每次相同参数的请求都会访问固定服务器,因为根据参数选择服务器,不能平衡的分配到每台服务器上,所以用得也较少。
配置
生产者:
要有service接口
业务逻辑层实现类上添加@DubboService
SpringBoot启动类添加@EnableDubbo
消费者:
Pom文件添加消费者模块的service依赖
在业务逻辑层调用前,添加@DubboReference
Seata
在微服务架构下提供高性能和简单易用的分布式事务
事务的四个特性:
原子性:事务中的操作是一个整体,要么都成功,要么都失败
一致性:事务的执行不能破坏数据的完整性和一致性,一个事务执行前和执行后,数据库都必须处于一直状态(如果数据库在运行过程中发生故障,有些事务未完成就*中断,但是事务对数据库已经做了一定的修改(一些如物理数据库),数据库则处于一种不正确的状态,这就是不一致状态)
隔离性:并发事务是相互隔离的,每个事务都有各自的数据空间,事务之间的执行是互不干扰的。
事务的四个隔离了机制:
读未提交(Read Uncommited)------如果一个事务已经开始写数据,其他事务不能同时进行写操作,但是,允许其他事务读此行数据,可以通过排他锁实现,可以避免更新丢失,但是会造成脏读(一个事务读取到了另一个事务未提交的数据操作结果。)。
读已提交(Read Commmited)-------读取数据的事务允许其他数据访问,但是对于未提交的写事务,会禁止访问。避免了脏读,但是可能会出现不可重复读。
可重复读(Repeatable Read)--------读取数据的事务将会禁止写事务(允许读事务),写事务禁止任何其他事务。可以通过共享锁和排他锁实现。避免了不可重复读和脏读,但是可能会出现幻读
可串行化------要求事务序列化,一个一个的执行,但是只靠行锁是无法实现的。但是一般不会用
持久性:保存到硬盘。
Seata组成
TC:事务协调器
TM:事务管理器
RM:资源管理器
AT模式运行过程:
事务的发起方(TM)向事务协调器(TC)申请一个全局事务id,并保存
Seata会管理事务中所有的参与方的数据源,将数据操作前后的镜像都保存到undo-log表中,依靠它来实现提交和回滚。
事务的发起方(TM)会连同全局id一起通过远程调用,运行RM中的方法。
RM接收全局id,去运行指定方法,并运行结果的状态发送到TC。
如果所有的分支都正常,TC会通知所有分支进行提交,此时才会正真的影响数据库。反之如果有任何一个分支发生异常,TC会通知所有分支进行回滚,数据库恢复运行前的内容。
启动命令:Seata-server.bat -h 127.0.0.1 -m -file
使用:业务逻辑层实现类增加@GlobalTransational
Sentinel
端口号:8080
为了保证服务的稳定性,在请求数到达设计最高值是,将过期的请求限流/保证在设计请求数内的请求能够稳定完成处理。
一般运用在控制层上。
增加@SentineResource(Value,blockHandler,fallback)
限流方法 降级方法