自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (1)
  • 收藏
  • 关注

原创 系统架构分析

DDD分层架构 VS 六边形架构 VS 洋葱架构虽然模型的表现差异较大,但是他们的核心设计思想都一样: - 都是做到核心业务逻辑和技术实现细节的分离和解耦。 - 都体现了高内聚,低耦合的设计原则。

2022-01-26 11:53:22 5981 1

原创 DDD(领域驱动设计)

Domain Driven Design(领域驱动设计, DDD),不是一种架构,而是一种架构方法论,是一种拆解业务、划分业务、确定业务边界的方法,是一种领域设计思想。 - 核心思想:建立领域模型,领域模型处于架构的核心位置。 - 核心目标:避免业务逻辑的复杂度与技术实现的复杂度混淆在一起。DDD包括战术设计和战略设计两部分。 - 战略设计:侧重于高层次、宏观上去划分和集成限界上下文。 - 战术设计:关注更具体使用建模工具来细化上下文。

2022-01-26 11:39:11 44792 2

原创 中台架构设计

中台架构的主要目标是通过业务领域边界划分和微服务拆分,建立稳定的、单一职责的领域模型,让业务和应用具有更强的扩展和复用能力。

2022-01-26 11:30:00 9277

原创 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 416

原创 ThreadPoolExecutor

1 核心属性1.1 int corePoolSize指该线程池中核心线程数最大值核心线程:线程池新建线程的时候,如果当前线程总数小于corePoolSize,则新建的是核心线程,如果超过corePoolSize,则新建的是非核心线程。核心线程默认情况下会一直存活在线程池中,即使这个核心线程啥也不干(闲置状态)。如果指定ThreadPoolExecutor的allowCoreThreadTimeOut这个属性为true,那么核心线程如果不干活(闲置状态)的话,超过一定时间(时长下面参数决定),就会

2021-07-17 15:15:49 325

原创 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 661

原创 CyclicBarrier

1 CyclicBarrierCyclicBarrier是让一组线程达到一个屏障(也叫做同步点),当这一组线程执行到达这个屏障(cyclicBarrier.await()代码处)时,这组线程才会继续往下执行。CyclicBarrier比较适用于多线程计算的场景,当这些线程都执行到某一个预设地点以后,再执行另外的操作。例如,开多个线程批量处理数据,多所有数据都处理完成后再进行汇总分析的场景。CyclicBarrier和之前介绍的CountDownLatch比较类似,他们的主要区别是:CountDownL

2021-07-17 15:11:18 215

原创 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 113

原创 Semaphore

Semaphore管理一系列许可证;通过acquire方法获取许可证,如果获取到许可证,那么直接返回,否则进入阻塞状态;通过release释放许可证,释放的时候如果有线程因为调用acquire处于阻塞状态,将会唤醒一个线程。一般用于管理一个公共的资源,并且同一时间只允许指定数量的线程访问的场景。java.util.concurrent中的并发类基本上都是用的是AQS(AbstractQueuedSynchronizer)来实现的。1 构造函数以下是Semaphore构造函数:public Semap

2021-07-17 15:09:27 185

原创 ReentrantReadWriteLock

ReentrantReadWriteLock的核心思想是:允许多个读操作同时进行,读写操作互斥(即读时不能写,写时不能读);同时兼顾读写的性能。个人非常建议先研究明白ReentrantLock,然后研究ReentrantReadWriteLock。因为相较而言ReentrantLock的逻辑更加简单,而且ReentrantReadWriteLock和ReentrantLock的很多逻辑(甚至是代码)都是相同的,熟悉ReentrantLock原理后学习ReentrantReadWriteLock将会容易很多

2021-07-17 15:08:22 165

原创 ReentrantLock详解

本博客主要讲述ReentrantLock的实现原理,主要内容包括:AQS原理以及实现过程ReenetrantLock获取锁、释放锁流程,以及原理源码分析Condition原理ReentrantLock与Synchronized的对比1 AQS1.1 AbstractQueuedSynchronizerAbstractQueuedSynchronizer简称AQS,是一个用于构建锁和相关同步器的框架,它依赖于FIFO的等待队列实现。见AbstractQueuedSynchronizer的描

2021-07-17 15:06:49 513

原创 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 1460

原创 Zookeeper原理

本文主要内容如下:Paxos协议,以及在Zookeeper上的应用。Zookeeper原理,包括集群结构、特性等。Zookeeper的设计,包括QuorumPeer模型、leader选举、lead流程、followLeader流程、广播模式Zookeeper写请求处理1 PaxosZookeeper不管是leader选举,还是广播模式使用的都是paxos协议,确切来说是paxos协议的变种,所以我们首先了解一下Paxos。1.1 分布式系统数据一致性问题在基于消息投递的分布式系统中,可能

2021-06-28 13:50:17 206

原创 ZAB协议恢复模式-数据同步

本文讨论一下Leader选举以后的事情,并了解zookeeper的集群管理原理。提前说明:本文主题虽然是讲述崩溃恢复模式,不过也会对广播模式的内容进行简单的描述。为了在文中描述不至于太过啰嗦,所以对超过半数省略掉了一个限定范围。例如当出现类似于“超过半数follower与leader同步”,“收到超过半数follower的回复”这种描述时,这种描述不正确,因为这个半数计算的时候是包含leader的。即如果文中讲述“超过半数”其实指的是leader、follower在一起,超过半数,或者所有服务器(不

2021-06-28 09:50:21 653

原创 ZAB协议恢复模式-Leader选举

本文内容:详细讲述zookeeper的leader fast选举流程。源码分析。通过示例分析选举详细过程,以及可能的各种异常场景。为了避免理解上的歧义,将投票动作和投票信息区分开,在本文中,我将服务器的投票信息称之为选票。1 基本概念1.1 NoitifcationNotification其实是选举过程中的通信信息;选举过程主要围绕Notification进行。选Leader过程中Zookeeper server(QuorumPeer)都会根据Notification信息生成Vote(选

2021-06-27 18:06:31 358 1

原创 TCC-Transaction原理

本文主要介绍TCC的原理,以及从代码的角度上分析如何实现的;不涉及具体使用示例。本文分析的是github中开源项目tcc-transaction。当然github上有多个tcc项目,但是他们原理相近,所以不过多介绍,有兴趣的小伙伴自行阅读源码。1 TCC架构1.1 原理一个完整的业务活动由一个主业务服务与若干从业务服务组成。主业务服务负责发起并完成整个业务活动。从业务服务提供TCC型业务操作。业务活动管理器控制业务活动的一致性,它登记业务活动中的操作,并在业务活动提交时进行confirm操作

2021-05-23 12:57:49 1344

原创 Seata原理

1 Seata架构Seata目前支持四种分布式方案,其整体架构有很多相似之处,这里从整体上介绍方案,具体每种方案见相关博客。1.1 整体架构注:此图来自seata官网TC (Transaction Coordinator) 事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。TM (Transaction Manager)事务管理器:定义全局事务的范围:开始全局事务、提交或回滚全局事务。RM (Resource Manager)资源管理器:管理分支事务处理的资源,与TC交谈以注册

2021-05-23 12:53:44 655 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 1342

原创 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 8426

原创 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 1806

原创 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 1364 1

原创 ChainLink原理

1 ChainLink简介1.1 区块链是确定性的区块链是一个交易驱动的状态机(a transaction-based state machine),它能做的事情就是通过向区块链提交事务/交易(transaction),来将区块链从一个状态转变成另一个状态。简单来说就是:区块链没有主动获取数据的能力,它能用的只有区块链自己本身的数据。数据的缺失导致智能合约的应用范围非常少,目前大部分的应用都是围绕着token来展开的。区块链的确定性意味着:在任何节点上,只要连入到区块链的分布式网络中,它就可以同步所有

2021-02-10 17:29:21 7516 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 3393 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 10399 8

原创 ElasticSearch应用篇-搜索增强

ES有一些非常强大的能力,例如:根据用户搜索的时候,也可以搜索同义词,也可以基于语义进行分词,返回最最适合的结果,ElasticSearch是如何实现这种能力的呢?一、ES搜索与Analyzer1.ES搜索过程为了搞清楚这个问题,我们需要提前搞清楚ES搜索的过程,ElasticSearch的这个能力是由Analyzer来实现的。ES中一个Analyzer处理搜索的过程如下:从这个处理流程可以看到,在token filter会为词条增加一些同义词,这就是ES可以支持同义词搜索的原因所在。2.Ana

2020-12-19 13:09:10 399 1

原创 ElasticSearch应用篇-搜索效果

一、集群搜索问题1.问题:如何聚合多个节点或分片的数据生成返回结果在对Mysql进行分库分表的时候,经常会遇到一个问题:如果查询的数据分散在多张表中,因为涉及到组合多种表的数据,将会非常麻烦;对于有些分页场景,更是一个灾难,所以对Mysql分库分表的时候经常会基于查询维度来尽量避免跨表查询的场景。ElasticSearch也是分布式的,当数据分散与多个节点或者分片上时,他是如何解决数据聚合问题的呢?另外,搜索基本都需要排序,如何解决排序问题呢?2.ES整体流程假设有N个分片,数据可能分散在这N个分

2020-12-19 13:07:55 242 1

转载 ElasticSearch原理篇

一、基本信息1.简介介绍ElasticSearch前我们先预热一些常识,提到非结构化数据的检索的时候,经常听到Lucene、Solr、ElasticSearch,那他们的区别是什么呢?Apache Lucene不是搜索引擎,而是一个开源的搜索引擎工具包,他提供了查询和检索能力。Lucene是为了给开发人员提供一个简单易用的搜索工具包,以方便开发人员的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Solr是一个基于Apache Lucene的高性能企业级搜索引擎,它具有高可

2020-12-19 13:05:27 757 1

原创 Compound原理

Compound原理1 Compound1.1 Compound是什么Compound是DeFi上的借贷市场,这个借贷市场提供了存币和借币的功能,就像一个银行,用户可以存币并获得利息收益,或进行抵押借币。Compound不是点对点的市场,而是流动性的资金池市场,这种模式让它更接近于传统银行的借贷模式。但与此同时,它的运作是基于智能合约来完成的,这让它具备了更多实时性、不可篡改性以及市场决定利率的特性。在实现原理上,Compound的帐本模型也与银行类似,并遵循了国际会计准则。注意:目前区块链上没

2020-12-19 12:51:15 4361 4

原创 共识算法-PBFT

简介PBFT简介BFT(Byzantine Fault Tolerance)是区块链共识算法中需要解决的一个核心问题。例如,公有链网络中,比特币和以太访中用的是POW,EOS用的是DPOS。PBFT一般用于联盟链场景中,它是共识节点较少的情况下BFT的一种解决方案。PBFT(Practical Byzantine Fault Tolerance)即:实用拜占庭容错算法。该算法是Mig...

2020-05-02 14:27:23 10600 3

原创 CountDownLatch

CountDownLatch和ReentrantLock有很多相似的地方,因为相似部分内容已经在博客《ReentrantLock详解》中讨论过了,本文不会再次详细讨论。CountDownLatch是一个计数(构造函数中指定此数值)的锁,当通过countDown方法将此计数值减为0时会唤醒之前调用await的线程。一般用于当某些任务执行完后,在执行其他任务的场景中。一 CountDownLa...

2019-02-15 15:22:48 170

原创 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 185

原创 ReentrantLock详解

本博客主要讲述ReentrantLock的实现原理,主要内容包括:AQS原理以及实现过程 ReenetrantLock获取锁、释放锁流程,以及原理 源码分析 Condition原理 ReentrantLock与Synchronized的对比 一 AQS1 AbstractQueuedSynchronizerAbstractQueuedSynchronizer简称AQS,是...

2019-02-15 15:12:09 551

原创 Netty应用篇

Netty使用介绍

2017-11-18 14:59:55 531

原创 NIO

NIO的介绍:NIO的核心组件NIO的使用NIO的服务端、客户端核心调用流程NIO示例

2017-10-17 21:30:45 656

原创 IO模型

介绍同步、异步、阻塞、非阻塞的区别。介绍五中IO模型。介绍IO多路复用使用的Ractor设计模式;介绍异步IO的Proactor设计模式,以及Proactor的流程。IO模型的对比。

2017-10-15 17:12:38 652

原创 事务模板 VS 声明式事务

本文主要讲述事务模板与声明式事务的优缺点,以及为什么我极力建议大家使用事务模板的原因。

2017-09-26 22:00:16 1141

原创 RocketMQ实践

本文主要介绍RocketMQ的使用,主要内容如下:集群部署:集群部署结构以及Name Server、Broker、Producer、Consumer如何配合保证高可用的事务:MQ与DB写操作一致性原理,案例分析,系统间数据一致性解决方案Producer最佳实践Consumer最佳实践

2017-09-24 14:41:28 786

转载 RocketMQ原理

介绍RocketMQ原理的内容,主要内容如下RocketMQ的特点以及消息发送、消费模型RocketMQ原理:mmap+write,文件系统,数据存储结构,队列,刷盘策略,消息查询,消息过滤,事务消息,发送、订阅负载均衡,同步双写/异步复制,充分利用内存,消息堆积能力以及解决办法

2017-09-24 14:26:19 19060 1

原创 Kafka VS RocketMQ VS RabbitMQ

kafka、rabbitMQ、RocketMQ对比,主要对比项为:定位基础对比:成熟度、社区活跃度、api完备性、开发余元、支持协议、客户端语言、持久化方式可用性、可靠性对比:部署方式、集群管理、选主方式、可用性、主从切换、数据可靠性、消息写入性能、性能稳定性、单机支持队列、消息堆积能力、复制备份、消息投递实时性功能对比:顺序消费、定时消息、事务消息、broker端过滤、消息查询、消费失败重试、发送端负载均衡、消费并行度、消费方式、批量发送、消息清理运维成本:系统维护、部署一来、管理后台总结:优

2017-09-23 11:18:20 3497

原创 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 1081

uniswap-数据推演.xlsx

uniswap-数据推演.xlsx

2020-12-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除