- 博客(45)
- 资源 (1)
- 收藏
- 关注
原创 系统架构分析
DDD分层架构 VS 六边形架构 VS 洋葱架构虽然模型的表现差异较大,但是他们的核心设计思想都一样: - 都是做到核心业务逻辑和技术实现细节的分离和解耦。 - 都体现了高内聚,低耦合的设计原则。
2022-01-26 11:53:22
6088
原创 DDD(领域驱动设计)
Domain Driven Design(领域驱动设计, DDD),不是一种架构,而是一种架构方法论,是一种拆解业务、划分业务、确定业务边界的方法,是一种领域设计思想。 - 核心思想:建立领域模型,领域模型处于架构的核心位置。 - 核心目标:避免业务逻辑的复杂度与技术实现的复杂度混淆在一起。DDD包括战术设计和战略设计两部分。 - 战略设计:侧重于高层次、宏观上去划分和集成限界上下文。 - 战术设计:关注更具体使用建模工具来细化上下文。
2022-01-26 11:39:11
45991
2
原创 Future与Callable原理
本文主要介绍Future与Callable原理,即如何在线程外获取线程执行结果以及其原理。1 示例1.1 示例一以下示例代码通过线程池执行一个Callable,然后通过Future来获取返回结果。public static void main(String[] args) throws Exception { Callable<Integer> callable = () -> { Thread.sleep(1000); Random ran
2021-07-19 13:08:50
470
原创 ThreadPoolExecutor
1 核心属性1.1 int corePoolSize指该线程池中核心线程数最大值核心线程:线程池新建线程的时候,如果当前线程总数小于corePoolSize,则新建的是核心线程,如果超过corePoolSize,则新建的是非核心线程。核心线程默认情况下会一直存活在线程池中,即使这个核心线程啥也不干(闲置状态)。如果指定ThreadPoolExecutor的allowCoreThreadTimeOut这个属性为true,那么核心线程如果不干活(闲置状态)的话,超过一定时间(时长下面参数决定),就会
2021-07-17 15:15:49
417
原创 Thread&ThreadLocal
1 线程状态在之前讨论线程-基础知识的时候,详细讲述过java的线程模型、线程状态流转、线程安全出现的原因以及解决办法,所以这里不多过的讨论这一块。此小节的重点从源码的角度上看看那些地方会引起线程状态变化。1.1 线程状态流转图中Waiting、Blocking的区别是:当线程处于Blocking状态时,代表着线程可以尝试获取CPU资源。当线程处于Waiting状态时,线程不会获取CPU资源。1.2 Thread源码1.2.1 join1.2.1.1 源码分析让当前线程等待,直到调用
2021-07-17 15:15:04
696
原创 CyclicBarrier
1 CyclicBarrierCyclicBarrier是让一组线程达到一个屏障(也叫做同步点),当这一组线程执行到达这个屏障(cyclicBarrier.await()代码处)时,这组线程才会继续往下执行。CyclicBarrier比较适用于多线程计算的场景,当这些线程都执行到某一个预设地点以后,再执行另外的操作。例如,开多个线程批量处理数据,多所有数据都处理完成后再进行汇总分析的场景。CyclicBarrier和之前介绍的CountDownLatch比较类似,他们的主要区别是:CountDownL
2021-07-17 15:11:18
253
原创 LockSupport
1 简介1.1 概述LockSupport是用于创建锁和其他同步类的阻塞原语。以下是jdk对LockSupport的描述。Basic thread blocking primitives for creating locks and other synchronization classes.1.2 许可LockSupport通过许可(permit)实现挂起线程、唤醒挂起线程功能。可以按照以下逻辑理解:pack时:如果线程的permit存在,那么线程不会被挂起,立即返回;如果线程的perm
2021-07-17 15:10:25
135
原创 Semaphore
Semaphore管理一系列许可证;通过acquire方法获取许可证,如果获取到许可证,那么直接返回,否则进入阻塞状态;通过release释放许可证,释放的时候如果有线程因为调用acquire处于阻塞状态,将会唤醒一个线程。一般用于管理一个公共的资源,并且同一时间只允许指定数量的线程访问的场景。java.util.concurrent中的并发类基本上都是用的是AQS(AbstractQueuedSynchronizer)来实现的。1 构造函数以下是Semaphore构造函数:public Semap
2021-07-17 15:09:27
230
原创 ReentrantReadWriteLock
ReentrantReadWriteLock的核心思想是:允许多个读操作同时进行,读写操作互斥(即读时不能写,写时不能读);同时兼顾读写的性能。个人非常建议先研究明白ReentrantLock,然后研究ReentrantReadWriteLock。因为相较而言ReentrantLock的逻辑更加简单,而且ReentrantReadWriteLock和ReentrantLock的很多逻辑(甚至是代码)都是相同的,熟悉ReentrantLock原理后学习ReentrantReadWriteLock将会容易很多
2021-07-17 15:08:22
196
原创 ReentrantLock详解
本博客主要讲述ReentrantLock的实现原理,主要内容包括:AQS原理以及实现过程ReenetrantLock获取锁、释放锁流程,以及原理源码分析Condition原理ReentrantLock与Synchronized的对比1 AQS1.1 AbstractQueuedSynchronizerAbstractQueuedSynchronizer简称AQS,是一个用于构建锁和相关同步器的框架,它依赖于FIFO的等待队列实现。见AbstractQueuedSynchronizer的描
2021-07-17 15:06:49
550
原创 DruidDataSource原理
1 示例<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc_url}" /> <property name="username" value="${jdbc_user}" /> <propert
2021-07-17 14:57:04
1573
原创 Zookeeper原理
本文主要内容如下:Paxos协议,以及在Zookeeper上的应用。Zookeeper原理,包括集群结构、特性等。Zookeeper的设计,包括QuorumPeer模型、leader选举、lead流程、followLeader流程、广播模式Zookeeper写请求处理1 PaxosZookeeper不管是leader选举,还是广播模式使用的都是paxos协议,确切来说是paxos协议的变种,所以我们首先了解一下Paxos。1.1 分布式系统数据一致性问题在基于消息投递的分布式系统中,可能
2021-06-28 13:50:17
242
原创 ZAB协议恢复模式-数据同步
本文讨论一下Leader选举以后的事情,并了解zookeeper的集群管理原理。提前说明:本文主题虽然是讲述崩溃恢复模式,不过也会对广播模式的内容进行简单的描述。为了在文中描述不至于太过啰嗦,所以对超过半数省略掉了一个限定范围。例如当出现类似于“超过半数follower与leader同步”,“收到超过半数follower的回复”这种描述时,这种描述不正确,因为这个半数计算的时候是包含leader的。即如果文中讲述“超过半数”其实指的是leader、follower在一起,超过半数,或者所有服务器(不
2021-06-28 09:50:21
698
原创 ZAB协议恢复模式-Leader选举
本文内容:详细讲述zookeeper的leader fast选举流程。源码分析。通过示例分析选举详细过程,以及可能的各种异常场景。为了避免理解上的歧义,将投票动作和投票信息区分开,在本文中,我将服务器的投票信息称之为选票。1 基本概念1.1 NoitifcationNotification其实是选举过程中的通信信息;选举过程主要围绕Notification进行。选Leader过程中Zookeeper server(QuorumPeer)都会根据Notification信息生成Vote(选
2021-06-27 18:06:31
388
1
原创 TCC-Transaction原理
本文主要介绍TCC的原理,以及从代码的角度上分析如何实现的;不涉及具体使用示例。本文分析的是github中开源项目tcc-transaction。当然github上有多个tcc项目,但是他们原理相近,所以不过多介绍,有兴趣的小伙伴自行阅读源码。1 TCC架构1.1 原理一个完整的业务活动由一个主业务服务与若干从业务服务组成。主业务服务负责发起并完成整个业务活动。从业务服务提供TCC型业务操作。业务活动管理器控制业务活动的一致性,它登记业务活动中的操作,并在业务活动提交时进行confirm操作
2021-05-23 12:57:49
1428
原创 Seata原理
1 Seata架构Seata目前支持四种分布式方案,其整体架构有很多相似之处,这里从整体上介绍方案,具体每种方案见相关博客。1.1 整体架构注:此图来自seata官网TC (Transaction Coordinator) 事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。TM (Transaction Manager)事务管理器:定义全局事务的范围:开始全局事务、提交或回滚全局事务。RM (Resource Manager)资源管理器:管理分支事务处理的资源,与TC交谈以注册
2021-05-23 12:53:44
706
2
原创 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
1468
原创 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
11634
原创 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
1966
原创 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
1471
1
原创 ChainLink原理
1 ChainLink简介1.1 区块链是确定性的区块链是一个交易驱动的状态机(a transaction-based state machine),它能做的事情就是通过向区块链提交事务/交易(transaction),来将区块链从一个状态转变成另一个状态。简单来说就是:区块链没有主动获取数据的能力,它能用的只有区块链自己本身的数据。数据的缺失导致智能合约的应用范围非常少,目前大部分的应用都是围绕着token来展开的。区块链的确定性意味着:在任何节点上,只要连入到区块链的分布式网络中,它就可以同步所有
2021-02-10 17:29:21
7798
5
原创 MakerDao原理
1 Maker协议简介1.1 Maker协议(Dai稳定币系统)Maker协议是以太坊上的智能合约平台,通过抵押债仓(Collateralized Debt Position, CDP)、自动化反馈机制和适当的外部激励手段支撑并稳定Dai的价格,简单来说就是:Maker协议是Dai稳定币系统。Maker协议由世界各地的治理型代币MKR持有者管理,通过由执行投票(Executive Voting)和治理投票(Governance Polling)组成的科学型治理系统。Maker协议是以太坊区块链上最大
2021-01-23 13:05:01
3768
4
原创 Uniswap原理
1 Uniswap简介1.1 Uniswap是什么Uniswap is a protocol for automated token exchange on Ethereum. It is designed around ease-of-use, gas efficiency, censorship resistance, and zero rent extraction.Uniswap是一个基于以太坊的自动代币交换协议,它的设计目标是:易用性、gas高利用率、抗审查性和零抽租。Ease-Of-U
2020-12-27 13:05:22
10791
8
原创 ElasticSearch应用篇-搜索增强
ES有一些非常强大的能力,例如:根据用户搜索的时候,也可以搜索同义词,也可以基于语义进行分词,返回最最适合的结果,ElasticSearch是如何实现这种能力的呢?一、ES搜索与Analyzer1.ES搜索过程为了搞清楚这个问题,我们需要提前搞清楚ES搜索的过程,ElasticSearch的这个能力是由Analyzer来实现的。ES中一个Analyzer处理搜索的过程如下:从这个处理流程可以看到,在token filter会为词条增加一些同义词,这就是ES可以支持同义词搜索的原因所在。2.Ana
2020-12-19 13:09:10
448
1
原创 ElasticSearch应用篇-搜索效果
一、集群搜索问题1.问题:如何聚合多个节点或分片的数据生成返回结果在对Mysql进行分库分表的时候,经常会遇到一个问题:如果查询的数据分散在多张表中,因为涉及到组合多种表的数据,将会非常麻烦;对于有些分页场景,更是一个灾难,所以对Mysql分库分表的时候经常会基于查询维度来尽量避免跨表查询的场景。ElasticSearch也是分布式的,当数据分散与多个节点或者分片上时,他是如何解决数据聚合问题的呢?另外,搜索基本都需要排序,如何解决排序问题呢?2.ES整体流程假设有N个分片,数据可能分散在这N个分
2020-12-19 13:07:55
261
1
转载 ElasticSearch原理篇
一、基本信息1.简介介绍ElasticSearch前我们先预热一些常识,提到非结构化数据的检索的时候,经常听到Lucene、Solr、ElasticSearch,那他们的区别是什么呢?Apache Lucene不是搜索引擎,而是一个开源的搜索引擎工具包,他提供了查询和检索能力。Lucene是为了给开发人员提供一个简单易用的搜索工具包,以方便开发人员的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Solr是一个基于Apache Lucene的高性能企业级搜索引擎,它具有高可
2020-12-19 13:05:27
797
1
原创 Compound原理
Compound原理1 Compound1.1 Compound是什么Compound是DeFi上的借贷市场,这个借贷市场提供了存币和借币的功能,就像一个银行,用户可以存币并获得利息收益,或进行抵押借币。Compound不是点对点的市场,而是流动性的资金池市场,这种模式让它更接近于传统银行的借贷模式。但与此同时,它的运作是基于智能合约来完成的,这让它具备了更多实时性、不可篡改性以及市场决定利率的特性。在实现原理上,Compound的帐本模型也与银行类似,并遵循了国际会计准则。注意:目前区块链上没
2020-12-19 12:51:15
4561
4
原创 共识算法-PBFT
简介PBFT简介BFT(Byzantine Fault Tolerance)是区块链共识算法中需要解决的一个核心问题。例如,公有链网络中,比特币和以太访中用的是POW,EOS用的是DPOS。PBFT一般用于联盟链场景中,它是共识节点较少的情况下BFT的一种解决方案。PBFT(Practical Byzantine Fault Tolerance)即:实用拜占庭容错算法。该算法是Mig...
2020-05-02 14:27:23
11039
3
原创 CountDownLatch
CountDownLatch和ReentrantLock有很多相似的地方,因为相似部分内容已经在博客《ReentrantLock详解》中讨论过了,本文不会再次详细讨论。CountDownLatch是一个计数(构造函数中指定此数值)的锁,当通过countDown方法将此计数值减为0时会唤醒之前调用await的线程。一般用于当某些任务执行完后,在执行其他任务的场景中。一 CountDownLa...
2019-02-15 15:22:48
193
原创 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
205
原创 ReentrantLock详解
本博客主要讲述ReentrantLock的实现原理,主要内容包括:AQS原理以及实现过程 ReenetrantLock获取锁、释放锁流程,以及原理 源码分析 Condition原理 ReentrantLock与Synchronized的对比 一 AQS1 AbstractQueuedSynchronizerAbstractQueuedSynchronizer简称AQS,是...
2019-02-15 15:12:09
578
原创 IO模型
介绍同步、异步、阻塞、非阻塞的区别。介绍五中IO模型。介绍IO多路复用使用的Ractor设计模式;介绍异步IO的Proactor设计模式,以及Proactor的流程。IO模型的对比。
2017-10-15 17:12:38
683
原创 RocketMQ实践
本文主要介绍RocketMQ的使用,主要内容如下:集群部署:集群部署结构以及Name Server、Broker、Producer、Consumer如何配合保证高可用的事务:MQ与DB写操作一致性原理,案例分析,系统间数据一致性解决方案Producer最佳实践Consumer最佳实践
2017-09-24 14:41:28
810
转载 RocketMQ原理
介绍RocketMQ原理的内容,主要内容如下RocketMQ的特点以及消息发送、消费模型RocketMQ原理:mmap+write,文件系统,数据存储结构,队列,刷盘策略,消息查询,消息过滤,事务消息,发送、订阅负载均衡,同步双写/异步复制,充分利用内存,消息堆积能力以及解决办法
2017-09-24 14:26:19
19396
1
原创 Kafka VS RocketMQ VS RabbitMQ
kafka、rabbitMQ、RocketMQ对比,主要对比项为:定位基础对比:成熟度、社区活跃度、api完备性、开发余元、支持协议、客户端语言、持久化方式可用性、可靠性对比:部署方式、集群管理、选主方式、可用性、主从切换、数据可靠性、消息写入性能、性能稳定性、单机支持队列、消息堆积能力、复制备份、消息投递实时性功能对比:顺序消费、定时消息、事务消息、broker端过滤、消息查询、消费失败重试、发送端负载均衡、消费并行度、消费方式、批量发送、消息清理运维成本:系统维护、部署一来、管理后台总结:优
2017-09-23 11:18:20
3525
原创 Kafka原理
功能与使用场景:特性、适用场景、基本概念:Broker、Topic、Partition、Partition、Producer、Consumer、Consumer Groupkafka模型:producer-broker-consumer模型,集群部署模型Topic 、 Partition 、 消息文件Producer:负载均衡、消息发送流程、Ack机制、消息要锁、平滑扩容机制、同步VS异步、消息发送机制Consumer:模型、设计原理、ApiReplications :容错性、副本、ISR、同
2017-09-22 22:39:45
1111
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人