java
文章平均质量分 95
小飞哥wzf
这个作者很懒,什么都没留下…
展开
-
ReentrantLock详解
本博客主要讲述ReentrantLock的实现原理,主要内容包括:AQS原理以及实现过程ReenetrantLock获取锁、释放锁流程,以及原理源码分析Condition原理ReentrantLock与Synchronized的对比1 AQS1.1 AbstractQueuedSynchronizerAbstractQueuedSynchronizer简称AQS,是一个用于构建锁和相关同步器的框架,它依赖于FIFO的等待队列实现。见AbstractQueuedSynchronizer的描原创 2021-07-17 15:06:49 · 512 阅读 · 0 评论 -
TCC-Transaction原理
本文主要介绍TCC的原理,以及从代码的角度上分析如何实现的;不涉及具体使用示例。本文分析的是github中开源项目tcc-transaction。当然github上有多个tcc项目,但是他们原理相近,所以不过多介绍,有兴趣的小伙伴自行阅读源码。1 TCC架构1.1 原理一个完整的业务活动由一个主业务服务与若干从业务服务组成。主业务服务负责发起并完成整个业务活动。从业务服务提供TCC型业务操作。业务活动管理器控制业务活动的一致性,它登记业务活动中的操作,并在业务活动提交时进行confirm操作原创 2021-05-23 12:57:49 · 1339 阅读 · 0 评论 -
Seata原理
1 Seata架构Seata目前支持四种分布式方案,其整体架构有很多相似之处,这里从整体上介绍方案,具体每种方案见相关博客。1.1 整体架构注:此图来自seata官网TC (Transaction Coordinator) 事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。TM (Transaction Manager)事务管理器:定义全局事务的范围:开始全局事务、提交或回滚全局事务。RM (Resource Manager)资源管理器:管理分支事务处理的资源,与TC交谈以注册原创 2021-05-23 12:53:44 · 652 阅读 · 3 评论 -
Seata-XA模式 原理
1 XA模式示例示例参考:github上seata-sample业务代码层面和xa完全相同,仅数据库代理层面替换成DataSourceProxyXA即可,更多内容,参考示例。2 架构注:此图来自seata官网。3 源码分析3.1 TM开启全局事务此过程和AT模式一样,使用@GlobalTransactional即可。3.2 RM执行分支事务因为DataSource使用了代理,所以所有DB操作均交个DataSourceProxyXA完成,当执行db操作时,请求将会由ExecuteTempl原创 2021-05-23 12:48:57 · 1336 阅读 · 0 评论 -
Seata-Saga模式 原理
1 Saga模式示例1.1 Saga状态机工具状态机设计组件:seata-saga-statemachine-designer状态机在线画图工具:saga_designer1.2 代码示例github上Seata-sample有完整的示例代码,Seata Saga模式中有此示例的完整介绍和分析。这里仅摘取部分和介绍原理有关的代码进行分析。1.2.1 初始化dbmysql示例:CREATE TABLE IF NOT EXISTS `seata_state_machine_def`(原创 2021-05-23 12:44:50 · 8374 阅读 · 0 评论 -
Seata-TCC模式 原理
1 TCC原理TCC(Try-Confirm-Cancel)将一个事务分成两阶段:Try阶段:尝试锁定资源Confirm阶段:如果Try阶段所有资源均锁定成功,那么执行Confirm阶段,真正的扣除资源。Cancel阶段:如果Try阶段有部分资源锁定失败,那么执行Cancel阶段,回滚Try阶段锁定的资源。注意:除了Try阶段为主动触发外,Confirm/Cancel均有框架从自动发起。TCC系统模型如下所示:从微服务的调用过程上看TCC系统模型如下所示:TCC有多种实现方式,本文仅原创 2021-05-23 12:40:57 · 1799 阅读 · 0 评论 -
Seata-AT模式 原理
1 AT模式示例1.1 代码示例AT模式使用非常简单,这里仅摘取和实现原理相关的部分代码,并结合这些代码进行原理分析。这里的示例摘自github上seata-sample1.1.1 TM系统配置<bean class="io.seata.spring.annotation.GlobalTransactionScanner"> <constructor-arg value="dubbo-demo-app"/> <constructor-arg value=原创 2021-05-23 12:31:58 · 1359 阅读 · 1 评论 -
CountDownLatch
CountDownLatch和ReentrantLock有很多相似的地方,因为相似部分内容已经在博客《ReentrantLock详解》中讨论过了,本文不会再次详细讨论。CountDownLatch是一个计数(构造函数中指定此数值)的锁,当通过countDown方法将此计数值减为0时会唤醒之前调用await的线程。一般用于当某些任务执行完后,在执行其他任务的场景中。一 CountDownLa...原创 2019-02-15 15:22:48 · 169 阅读 · 0 评论 -
LockSupport
一 简介1 概述LockSupport是用于创建锁和其他同步类的阻塞原语。以下是jdk对LockSupport的描述。Basic thread blocking primitives for creating locks and other synchronization classes.在《ReentrantLock详解》(地址:https://yq.aliyun.com/art...原创 2019-02-15 15:13:55 · 184 阅读 · 0 评论 -
ReentrantLock详解
本博客主要讲述ReentrantLock的实现原理,主要内容包括:AQS原理以及实现过程 ReenetrantLock获取锁、释放锁流程,以及原理 源码分析 Condition原理 ReentrantLock与Synchronized的对比 一 AQS1 AbstractQueuedSynchronizerAbstractQueuedSynchronizer简称AQS,是...原创 2019-02-15 15:12:09 · 548 阅读 · 0 评论 -
事务模板 VS 声明式事务
本文主要讲述事务模板与声明式事务的优缺点,以及为什么我极力建议大家使用事务模板的原因。原创 2017-09-26 22:00:16 · 1136 阅读 · 0 评论 -
IO模型
介绍同步、异步、阻塞、非阻塞的区别。介绍五中IO模型。介绍IO多路复用使用的Ractor设计模式;介绍异步IO的Proactor设计模式,以及Proactor的流程。IO模型的对比。原创 2017-10-15 17:12:38 · 650 阅读 · 0 评论 -
RocketMQ实践
本文主要介绍RocketMQ的使用,主要内容如下:集群部署:集群部署结构以及Name Server、Broker、Producer、Consumer如何配合保证高可用的事务:MQ与DB写操作一致性原理,案例分析,系统间数据一致性解决方案Producer最佳实践Consumer最佳实践原创 2017-09-24 14:41:28 · 786 阅读 · 0 评论 -
Spring bean初始化原理详解
l Bean的解析化过程是怎样的?l BeanFactory的原理是怎样的?l 为什么有的时候存在相同id的bean,spring启动报错,有的时候可以正常启动;此时通过id或者类型获取bean的时候使用的是哪一个bean?l 自定义注解的实现原理是怎样的?l bean的属性是在什么阶段注入的?原创 2017-07-01 12:56:17 · 8338 阅读 · 1 评论 -
限流方案
每个系统都有服务的上线,所以当流量超过服务极限能力时,系统可能会出现卡死、崩溃的情况,所以就有了降级和限流。限流其实就是:当高并发或者瞬时高并发时,为了保证系统的稳定性、可用性,系统以牺牲部分请求为代价或者延迟处理请求为代价,保证系统整体服务可用。本文主要介绍以下四种限流方案:访问量限流并发量限流漏桶(Leaky Bucket)算法限流令牌桶(Token Bucket)算法限流原创 2017-07-04 22:25:11 · 2093 阅读 · 0 评论