今日分享
读写锁,写锁源码,springcloud alibaba组件使用
1. 写锁
同样的道理因为读写锁继承了AQS所以我们只要看读写锁中重写了 tryAcquire()方法就行了
//首先要理解 李老师这个读写锁呢把资源state32位int为高16位表示正在操作读锁个数 低16位表示正在操作写锁线程个数
protected final boolean tryAcquire(int acquires) {
//获取当前线程
Thread current = Thread.currentThread();
int c = getState(); //看看当前有没有线程正在使用锁
int w = exclusiveCount(c); //拿到有多少线程正在使用写锁
if (c != 0) { //如果有线程正在使用锁
//且这个线程索取的不是写锁是读锁 或者 这个线程不是自己那么自己阻塞 读写互斥在这 写写互斥也在这里
if (w == 0 || current != getExclusiveOwnerThread())
return false;//返回false会触发AQS入队阻塞操作
if (w + exclusiveCount(acquires) > MAX_COUNT) //以上的那个判断要过来只能是有线程在写切当前线程是我那么我直接放行 可重入锁的细节实现
throw new Error("Maximum lock count exceeded");
setState(c + acquires);
return true;
}
//没有人在操作嘛 就抢锁
if (writerShouldBlock() ||
!compareAndSetState(c, c + acquires)) //cas抢不到的就阻塞咯
return false;
setExclusiveOwnerThread(current); //抢到的把当前在操作线程 指向自己
return true;
}
可见其实写锁是非常简单的,我正在看读锁,读锁有点负责短时间我看不懂
2. SpringCloud Alibaba Nacos
内容
nacos嘛,服务注册&发现和配置管理功能,讲道理比较简单,我们就只需要修改配置文件就行了,但是要知道配置文件的顺序,默认先加载bootstart.yaml 再到 配置中心那里的.yaml。
配置
还有一些共享配置,扩展配置的实现。
配置动态发布
还有发布配置后服务会感知,cloud只是感知配置更变但具体你要刷内存还是自己做的,比如我修改了数据库的源那么你直接发布,服务自己是不知道的,你得自己写一个监听。当然nacos有一个是默认实现那就是@Value他是可以知道替换的。
灰度发布
我们如果需要更改配置,但不要影响主服务,我们可以开个测试服务在测试服务上进行灰度发布,如果测试服务没问题那么我们就手都将灰度发布刷到主服务
3.SpringCloud Alibaba Sentinel
他主要的作用是监控服务,保护服务,降级熔断,限流操作。
- 降级:当系统出现异常或者高负载的情况下,为了保证核心功能的正常运行,可以暂时关闭某些非核心功能,降低系统的整体复杂度和负载压力,从而保证核心功能的稳定性。比如,当系统的数据库出现异常时,可以关闭某些查询功能,只保留核心的增删改操作。
- 熔断:当系统的某个服务出现异常或者高负载的情况下,为了保证整个系统的可用性,可以暂时关闭该服务,防止服务的异常或者高负载影响整个系统的稳定性。比如,当系统的某个服务出现异常时,可以关闭该服务,避免服务的异常或者高负载对整个系统的影响。
- 限流:当系统的请求量超过系统的处理能力时,为了保证系统的稳定性,可以限制系统的请求量,防止系统的负载过高,从而保证系统的可用性。比如,当系统的请求量过大时,可以限制系统的请求量,只处理部分请求,保证系统的稳定性。
这里就不过多的讲解他了 因为他还是比较简单的,可以去web服务动态配置。
3.SpringCloud Alibaba Seata
分布式事务概述
分布式事务协调框架,重点何为分布式事务,这里就不啰嗦了。
分布式事务解决方案
- 2PC(2阶段提交) 大概为由全局事务管理 问其他分支事务 1.你们准备好了没有 2.你们提交完成没有。
- 3PC(3阶段提交) 大概为2PC阶段多加了一个预提交阶段。
- TCC(Try-Confirm-Cancel)模型是一种分布式事务解决方案,这个我也没太懂大概会有3个阶段。
seata的使用
以下为
TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
各个协议的操作我就不复制粘贴了 因为我都是在官网直接看的。