中间件兴趣圈

其他

不整理不知道,中间件兴趣圈已发表12个专栏、3本电子书、两个开源项目(建议收藏)

点击上方“中间件兴趣圈”,选择“设为星标”中间件兴趣圈公众号,一定能成为你在java领域的进阶之梯,旨在成体系剖析Java主流中间件,构建互联网分布式架构体系,助力突破大厂,从源码分析、架构设计、线上故障案例剖析、实战等4个维度开展,目前已覆盖Netty、RocketMQ、Dubbo、Sentienl、Kafka、Canal、ElasticSearch、ElasticJob等12个专栏近300篇文章。中间件技术是进入互联网大厂的敲门砖,深入掌握1-2个主流中间件,很大可能性突破BAT等大厂,期待Star支持一波建议各位粉丝朋友们,关注一下我的公众号,设置为星标,以便及时获取最新的更新内容,与笔者近距离沟通交流。也欢迎大家加我好友(dingwpmz),拉你进学习交流群,里面有各位BAT等一线互联网大佬,可以提问,内推等,一起抱团取暖。1、
2021年5月2日
其他

性能调优篇:困扰我半年之久的RocketMQ timeout exception 终于被破解了

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!在内网环境中,超时问题,网络表示这个锅我不背。笔者对于超时的理解,随着在工作中不断实践,其理解也越来越深刻,RocketMQ在生产环境遇到的超时问题,已经困扰了我将近半年,现在终于取得了比较好的成果,和大家来做一个分享。本次技术分享,由于涉及到网络等诸多笔者不太熟悉的领域,如果存在错误,请大家及时纠正,实现共同成长与进步。1、网络超时现象时不时总是接到项目组反馈说生产环境MQ发送超时,客户端相关的日志截图如下:今天的故事将从张图开始。2、问题排查2.1
2021年4月27日
其他

知其然而知其所以然,为什么Kafka在2.8版本中会“抛弃”Zookeeper

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!本文已收录到GitHub:https://github.com/dingwpmz/JavaLadder,点击文末“阅读原文”可直达,可全景式一览「中间件兴趣圈」全部文章,进一步提升阅读体验。相信大家最近一定关注到一款重量级消息中间件Kafka发布了2.8版本,并且正式移除了对Zookeeper的依赖,背后的设计哲学是什么呢?仅仅只是减少了一个外部依赖吗?答案显然不会这么简单,容我慢慢道来。在解答为什么之前,我觉得非常有必要先来阐述一下Zookeeper的经典使用场景。1、Zookeeper的经典使用场景zookeeper是伴随着大数据、分布式领域的兴起。大数据中的一个非常重要的议题是如何使用众多廉价的机器来实现可靠存储。所谓廉价的机器就是发生故障的概率非常大,但单台的成本也非常低,分布式领域希望使用多台机器组成一个集群,将数据存储在多台机器上(副本),为了方便实现数据一致性,通常需要从一个复制组中挑选一台主节点用户处理数据的读写,其他节点从主节点拷贝数据,当主节点宕机,需要自动进行重新选举,实现高可用。上述场景中有一个非常重要的功能Leader选举,如何选举出一个主节点、并支持主节点宕机后自动触发重新选举,实现主从自动切换,实现高可用。使用Zookeeper提供的临时顺序节点与事件监听机制,能非常轻松的实现Leader选举。上面的t1,t2可以理解为一个组织中的多个成员,能提供相同的服务,但为了实现冷备效果(即同一时间只有一个成员对外提供服务,我们称之为Leader,当Leader宕机或停止服务后,该组织中的其他成名重新竞争Leader,然后继续对外提供服务)。正如上图所示,Zookeeper是以集群部署的,能有效避免单点故障,并且集群内部提供了对数据的强一致性。当成员需要竞争Leader时,借助Zookeeper的实现套路是向zookeeper中的一个数据节点(示例中为/app/order-service/leader)节点创建两个子节点,并且是顺序的临时节点。客户端判断创建的节点的序号是否为/app/order-service/leader中序号最小的节点,如果是则成为Leader,对外提供服务;如果序号不是最小的,则向自己前置的注册节点删除事件,一旦Leader代表的进程宕机,它与Zookeeper的会话失效后,与之关联的临时节点会被删除,一旦Leader创建的节点被删除,其后继节点会得到通知,从而再次触发选主,选举出新的Leader,继续对外提供服务,保质服务的高可用性。回顾上述场景,借助Zookeeper能非常轻松的实现选主,为应用提高可用带来简便性,主要是利用了Zookeeper的几个特性:临时节点临时节点是与会话关联的,一点创建该临时节点的会话结束,与之会被自动删除,无需应用方人工删除。顺序节点事件机制借助与事件机制,Zookeeper能及时通知存活的其他应用节点,重新触发选举,使得实现自动主从切换变的非常简单。2、Kafka对Zookeeper的迫切需求Kafka中存在众多的Leader选举,熟悉Kafka的朋友应该知道,一个主题可以拥有多个分区(数据分片),每一个数据分片可以配置多个副本,如何保证一个分区的数据在多个副本之间的一致性成为一个迫切的需求。Kafka的实现套路就是一个分区的多个副本,从中选举出一个Leader用来承担客户端的读写请求,从节点从主节点处拷贝内容,Leader节点根据数据在副本中成功写入情况,进行抉择来确定是否写入成功。Kafka中topic的分区分布示意图:故此处需要进行Leader选举,而基于Zookeeper能轻松实现,从此一拍即合,开启了一段“蜜月之旅”。3、Zookeeper的致命弱点Zookeeper是集群部署,只要集群中超过半数节点存活,即可提供服务,例如一个由3个节点的Zookeeper,允许1个Zookeeper节点宕机,集群仍然能提供服务;一个由5个节点的Zookeeper,允许2个节点宕机。但Zookeeper的设计是CP模型,即要保证数据的强一致性,必然在可用性方面做出牺牲。Zookeeper集群中也存在所谓的Leader节点和从节点,Leader节点负责写,Leader与从节点可用接受读请求,但在Zookeeper内部节点在选举时整个Zookeeper无法对外提供服务。当然正常情况下选举会非常快,但在异常情况下就不好说了,例如Zookeeper节点发生full
2021年4月21日
其他

线上环境大规模RocketMQ集群不停机优雅升级实践

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!本文已收录到GitHub:https://github.com/dingwpmz/JavaLadder,点击文末“阅读原文”可直达,可全景式一览「中间件兴趣圈」全部文章,进一步提升阅读体验。见字如面,我是威哥,一个从普通二本院校毕业,从未曾接触分布式、微服务、高并发到通过技术分享实现职场蜕变,成长为RocketMQ社区优秀布道师、大厂资深架构师,出版《RocketMQ技术内幕》一书,欢迎大家关注「中间件兴趣圈」,设置为星标,一起交流进步。关注「中间件兴趣圈」,回复RMQPDF即可获取两本电子书,浓缩了笔者千亿级消息流转经验。接安全部门的行政要求,生产环境上百台RocketMQ机器必须在半个月内升级,必须支持ACL,规避安全风险。RocketMQ集群的升级方案、落地实施就自然而然的落到了我的头上,本文不仅要介绍一下笔者是如何升级的,更想展示作为一名架构师,处理这些问题的方法论,展示大厂架构师的工作日常。温馨提示:关于ACL相关的内容,后续文章会单独分享从4.1.0版本升级到4.8并开启ACL的曲折经历。1、版本升级的迫切性说来惭愧,作为RocketMQ社区优秀布道师,笔者所在公司的RocketMQ服务端版本竟然还是4.1.0,RocketMQ在4.4.0版本之前是不支持ACL(访问控制),对应生产环境中任意一台机器都可以订阅任意topic,在任意一台生产应用服务器都可以安装一个rocketmq-console,从而控制整个集群,拥有删除主题、删除消费组的权限,想想是不是后背发凉.2、升级方案2.1
2021年4月19日
其他

阿里面试真题:NIO为什么不适合文件上传场景、如何优雅解决

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!该系列已分别介绍了服务端、客户端的启动流程,本文将重点剖析Netty是如何封装NIO的读事件。温馨提示:本文虽然是源码分析,但强烈建议精读,根据源码阐述其背后的设计哲学,也用黑体进行了标注,请特别留意。在阅读本篇文章之前,请稍微思考如下几个问题:NIO为什么不适合文件上传等场景NIO如何避免一个超大数据传送的连接对其他请求的影响NIO如何处理半关闭1、读事件概述关于Read事件在SocketChannel与ServerSocketChannel所对应的操作不一样,在SocketChannel中,则对应数据读,而在ServerSocketChannel中则被被封装成接受客户端的连接请求。NIO
2021年3月15日
其他

事务消息应用场景、实现原理与项目实战(附全部源码)

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!1、活动中心场景介绍在电商系统上线初期,往往会进行一些“拉新”活动,例如活动部门提出新用户注册送积分、送优惠券活动。基于分布式、微服务的设计理念,通常的架构设计(子系统交互)如下图所示:其核心系统介绍如下:账户中心提供用户登录、用户注册等服务,一个新用户注册时,向MQ服务器中的USER_REGISTER主题发送一条消息,主流程结束,与送积分,送优惠券等过程解耦。优惠券(券系统)提供发放优惠券、使用优惠券等与券相关的基础服务。积分中心提供积分相关的服务,例如积分赠送、积分消费、积分查询等基础服务。送积分服务(消费者)订阅MQ,按照规则决定是否需要赠送积分,如果需要则调用积分相关的基础接口,完成积分的发放。送优惠券(消费者)订阅MQ,按照规则决定是否需要赠送优惠券,如果需要则调用券系统相关的基础接口,完成优惠券的发放。上面的架构设计非常优雅,但并不是无懈可击,读者们肯定会想到如果新用户注册成功,但消息发送到MQ失败,或者消息成功发送到MQ,但发送完MQ后系统出现异常导致用户注册失败又该如何呢?上面的问题其实就是典型的分布式事务问题:即如何保证用户注册(数据库操作)与MQ消息发送这两个分布式操作的一致性。RocketMQ事务消息闪亮登场。2、事务消息实现原理一言以蔽之:RocketMQ事务消息要解决的问题是消息发送与业务的一致性,其解决思路:二阶段提交与事务状态回查,其具体实现流程如下图所示:其核心设计理念:应用程序开启一个数据库事务,进行数据库操作,并且在事务中发送一条PREPARE消息,PREPARE消息发送成功后通知应用程序记录本地事务状态,然后提交本地事务。RocketMQ在收到类型为PREPARE的消息时,首先备份消息的原主题与原消息消费队列,然后将消息存储在主题为RMQ_SYS_TRANS_HALF_TOPIC的消息队列中,故PREPARE的消息是不会被客户端消费的。Broker消息服务器开启一个定时任务处理RMQ_SYS_TRANS_HALF_TOPIC中的消息,会每隔指定时间向消息发送者发起事务状态查询请求
2021年3月8日
其他

“我”被阿里巴巴宠幸了

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!Oh
2021年3月4日
其他

Netty进阶:手把手教你如何编写一个NIO服务端

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!Netty是一款非常优秀的网络编程框架,是对NIO的二次封装,本文将重点剖析Netty服务端的启动流程,深入底层了解如何使用NIO编程服务端。本文是笔者基于问题的启发式源码阅读技巧的展示,建议带着如下问题开始本文的阅读:ServerBootstrap
2021年2月22日
其他

Netty进阶:手把手教你如何编写一个NIO客户端

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!Netty是一款非常优秀的网络编程框架,是对NIO的二次封装,本文将重点剖析Netty客户端的启动流程,深入底层了解如何使用NIO编程客户端。本文是笔者基于问题的启发式源码阅读技巧的展示,请带着如下问题开始本文的阅读:Netty是如何将客户端的事件加入到事件链中?Netty客户端在启动时需要注册读事件?Netty客户端在启动时需要注册写事件?如果让你基于NIO写一个客户端需要实现的关键点是什么呢?上面的问题也可以这样问:在使用NIO实现客户端时该注册哪些事件?本节将详细学习Netty4客户端的启动流程,我们从一个Netty客户端使用示例入手。1、Netty
2021年1月25日
其他

面试官:Netty的线程模型可不是Reactor这么简单

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!笔者看来Netty的内核主要包括如下图三个部分:其各个核心模块主要的职责如下:内存管理主要提高高效的内存管理,包含内存分配,内存回收。网通通道复制网络通信,例如实现对NIO、OIO等底层JAVA
2021年1月11日
其他

一文揭晓通信协议设计的奥妙,直接"秒杀"面试官

byteOrder字节序列,Netty默认使用大端序列(主要是针对int、long等数值类型),所谓的大端序列,通常可以这样理解,接收端收到的字节流的顺序是从数值类型的高字节。int
2021年1月4日
其他

图文并茂剖析Netty编解码以及背后的设计理念

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!本文主要介绍网络通信中与通信息息相关的重要部分:通信协议的底层实现原理:编码与解码。温馨提示:源码分析或许比较枯燥,在浏览的过程中建议重点关注黑色字体与流程图,是根据源码进行的提炼,突出源码背后的设计理念。1、Netty4编码解码概述Netty中定义的编码解码器核心类图如下:Decoder(解码器)
2020年12月31日
其他

丁威: 优秀程序员必备技能之如何高效阅读源码(二更)

于是Sentinel认为整个“用户信息查找”服务不可用了,熔断了。这明显是不合理的,因为192.168.1.4和192.168.1.5这两个机器还活着呢!本质上这是因为熔断错误率被定义到了服务级别
2020年12月29日
自由知乎 自由微博
其他

从年末生产故障解锁RocketMQ集群部署的最佳实践

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!笔者比较“悲催”,临近年末笔者维护的生产MQ集群中的一台物理机内存故障导致操作系统异常重启,在10分钟内众多的应用发送客户端出现消息发送超时,事故并定性为S1,笔者的“年终奖”。。。1、故障描述RocketMQ
2020年12月28日
其他

源码阅读的方法、误区以及三种境界

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!在技术职场中普遍存在如下几种现象:对待工作中所使用的技术不需要阅读源码,只需在开发过程中能够熟练运用就行看源码太费时间,而且容易忘记,如果从实际使用过程中出现的问题出发,针对性的阅读源码,其学习效率会更高效,所以平时无需看源码。对此我有着不同的理解,容我慢慢道来。本文将从如下4个角度进行剖析:源码阅读的必要性源码阅读技巧源码阅读的三种境界源码阅读的误区1、源码阅读必要性1.1
2020年12月21日
其他

Netty4 事件处理传播机制

handler)其中省略了addLast、addBefore、addAfter的其他重载方法,模式为addFirst类似。在这里着重讲解一下各个参数的含义。EventExecutorGroup
2020年12月14日
其他

Netty4 ChannelHandler 概述(通道篇)

触发用户自定义的事件,目前只定义了ChannelInputShutdownEvent(如果允许半关闭(输入端关闭而服务端不关闭))事件。void
2020年12月7日
其他

Kafka 和 RocketMQ 之性能对比

,每一个分区一个物理文件夹,在分区文件级别实现文件顺序写,如果一个Kafka集群中拥有成百上千个主题,每一个主题拥有上百个分区,消息在高并发写入时,其IO操作就会显得零散,其操作相当于随机IO,即
2020年12月2日
其他

Netty4 Channel 概述(通道篇)

remoteAddress)Netty客户端连接到服务端,该过程同样会触发一系列事件(ChannelPipeline)。该部分将在后续讲解客户端启动流程时再详细分析。ChannelFuture
2020年11月30日
其他

程序员如何提高影响力

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!影响力能有效表征你所在领域或行业的知名度、号召力、被认可度。影响力是一种无形的优质资产。2020年华为的天才少年最高档年薪获得者左鹏飞的事迹大家应该有所耳闻,一个博士毕业生入职华为200W年薪,翻开他的履历,原来他在博士期间以第一作者发表10余篇高质量论文,更是以第一作者在计算机操作系统最顶级学术会议之一的OSDI和计算机体系结构顶级学术会议上各发表一篇论文,其影响力可见一斑,高年薪入职华为便是水到渠成的事。1牛人的成功或许无法复制,但能激励我们努力去打造自己的影响力,那作为一名程序员该如何打造影响力呢?一、名牌大学毋容置疑,高考目前依然是最具权威的人才评估机制,也是贫苦大众改变命运、跻身上流社会的一个重要途径。进入一流名牌学校的毕业生自然而然地能得到更多企业的认可,一流大学的优秀毕业生往往在社招期间就能进入各行各业中的头部企业,他们的起点或许是别人奋斗的终点。二、各行各业的头部企业担任高阶职位环境、平台在很大程度上决定了你的上限。在该行业、该领域内头部企业往往拥有更大资源优势,能面对更加复杂的业务场景、更大的数据量与并发度,面临的技术挑战远不是普通小公司能比的,程序员获得的成长速度不可同日而语,这样在头部企业的员工在业界必然具备更好的影响力,更高的被认可度。目前JAVA类的培训机构基本都会打出这样一条亮眼的广告语“该课程对标阿里P7、P8”,这样的广告语对程序员有极大的杀伤力,对其趋之若鹜,故程序员在步入职场的第一天,就要树立一定要拼进去该行业的头部企业这一奋斗目标。因为这样的企业自带“光环”,与生俱来的自带影响力。三、技术分享与融入开源社区名牌大学,头部企业的员工已经具备了先发优势,如果既没有好的学历背景又没有好的职场背景(头部企业的从业经验),那该如何提升影响力呢?笔者认为通过技术分享、融入开源社区是我们的“救命稻草”。在CSDN、掘金、公众号等主流技术分享平台持续输出原创类文章是提升知名度的一个非常行之有效的方法。要想快速提高知名度,技术研究和分享应该聚焦在某一个板块,深度研究底层实现原理,持续成体系分享某一个板块的内容,成为该板块知名人士,从而塑造影响力。2接下来我以笔者的真实经历来和大家聊聊我是如何聚焦,如果通过技术分享打造的影响力,从而突破瓶颈,以更好的姿态迎接更大挑战。笔者从事JAVA行业10余年,只是一个普通的二类本科,同样没有BAT等一线互联网企业的履历,在工作5年左右迷茫了,此时的我入职的是一家电子政务类公司,不曾接触大数据、高并发,甚至都不曾接触分布式架构体系,危机感油然而生,经过不断的思考与摸索,开始了我的技术分享之路。技术分享的前提是确定分享的内容,即确定后续努力学习的主要方向,那该分享什么呢?通过对互联网分布式架构的研究,我将突破的方向放在了“中间件领域”,因为我发现整个分布式架构体系离不开各种各样的中间件支撑,如果成体系掌握好这些中间件,就能轻松驾驭分布式架构,技能也将得到质的提升,个人总结的分布式架构体系大概如下图所示:大家可以憧憬一下:如果你深入研究过上述大部分中间件,理解它在分布式架构中的具体职责、使用场景,那将意味着什么,妥妥的优秀架构师。不错,这就是我为自己分享学习定下的目标,成体系剖析JAVA主流中间件,深入探讨其实现原理。但问题来了,这么多中间件,从什么地方入手呢?其实当时的我,还无法直接看懂数据库中间件MyCat的源码,那该如何破解呢?分布式中间件的共性是什么?踏入中间件领域之前需要具备哪些基本技能呢?我认为分布式的共性是网络通信,需要掌握的基本技能:数据结构、Java并发。基于此我将踏入中间件分解成三步走战略。第一步:研读JAVA基础数据结构、JUC(Java并发框架)、Netty(NIO框架,网络通信基础框架)。第二步:挑选Dubbo、RocketMQ作为主要突击点。第三步:优先公司项目中使用的中间件。完成上述战略的前两步,尽管我们暂时没有高并发的经验,但已经具备了高并发的理论基础,并且对Dubbo、RocketMQ的理论研究非常到位,通过持续的分享,且勇于宣传自己,将自己的作品通过各种渠道进行传播,“江湖”上一定存在了关于你的传说,即会形成一定的影响力,此时一定会有更好的职位主动来找你。例如急需RocketMQ方面人才的公司就会注意到,给你提供机会,这样你就能理论与实战相结合,不断的强化在RocketMQ方面的优势,从而形成良性循环,然后继续持续向外输出其他中间件方面的内容,持续完善中间件体系,逐步向目标奋进。你就会发现,越努力越幸运,除了工作机会主动找你,出版社、知识付费平台(专栏、视频)等网站都会联系你,邀请你出书,出视频等,这样通过与这些平台的合作,知名度将持续提高,良性循环。除了分享技术,还可以根据个人具体情况,尝试努力成为一个开源项目的Commiter,这样的含金量将非常高,能极大地提高其影响力。通过技术分享逐步打造影响力,吸引公司提供更好的平台、出书、成为开源项目的Commiter,从而形成良性循环,不断提高影响力,从而实现逆袭。欢迎加入我的知识星球,一起交流源码,探讨架构,揭秘亿级订单的架构设计与实践经验,打造高质量的技术交流圈,为广大星友提供高质量问答服务,长按如下二维码加入。
2020年11月23日
其他

RocketMQ核心概念扫盲篇

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!在正式进入RocketMQ的学习之前,我觉得有必要梳理一下RocketMQ核心概念,为大家学习RocketMQ打下牢固的基础。1、RocketMQ部署架构在RocketMQ主要的组件如下:NameserverNameserver集群,topic的路由注册中心,为客户端根据Topic提供路由服务,从而引导客户端向Broker发送消息。Nameserver之间的节点不通信。路由信息在Nameserver集群中数据一致性采取的最终一致性。Broker消息存储服务器,分为两种角色:Master与Slave,上图中呈现的就是2主2从的部署架构,在RocketMQ中,主服务承担读写操作,从服务器作为一个备份,当主服务器存在压力时,从服务器可以承担读服务(消息消费)。所有Broker,包含Slave服务器每隔30s会向Nameserver发送心跳包,心跳包中会包含存在在Broker上所有的topic的路由信息。Client消息客户端,包括Producer(消息发送者)和Consumer(消费消费者).客户端在同一时间只会连接一台nameserver,只有在连接出现异常时才会尝试连接另外一台。客户端每隔30s向Nameserver发起topic的路由信息查询。温馨提示:Nameserver是在内存中存储Topic的路由信息,持久化Topic路由信息的地方是在Broker中,即${
2020年10月19日
其他

RocketMQ学习环境搭建(RocketMQ安装与IDEA Debug环境搭建)

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!本文主要分如下几个部分展开:Linux服务器安装RocketMQ、RocketMQ-ConsoleIDEA中搭建可调试环境1、Linux安装RocketMQ、RocketMQ-Console1.1安装RocketMQStep1:从如下地址下载RocketMQ安装包cd
2020年10月12日
其他

RocketMQ消息发送常见错误与解决方案

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!本文将结合自己使用RocketMQ的经验,对消息发送常见的问题进行分享,基本会遵循出现问题,分析问题、解决问题。1、No
2020年9月28日
其他

Canal binlog 日志管理器与GTID简介

都从最后开始同步,其数据完整性无法保证,正确的做法是在数据同步的过程中应该记录位点并持久化,重新启动后按照继续从上一次的位置继续同步,实现真正的增量同步。本文就是来详细探讨
2020年7月27日
其他

Canal 初次启动时如何定位同步位点(文末附流程图)

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!本文将详细剖析Canal在初次启动时如何定位同步位点,行为思路先源码,再辅以流程图进行说明,并在总结部分使用思维导图进行总结,试图引发各位的讨论。1、Canal定位启动位点在一个
2020年7月20日
其他

Canal 如何保证数据库库事务的一致性

4个特性,故引入了数据库事务的概念,一个数据库事务中的多条SQL引发的多条数据变更要么全部成功,要么全部失败,即数据的一致性,那同样在数据同步的场景,在解析一个事务的
2020年7月13日
其他

探究 Canal EventParser 的设计与实现奥妙

的启动窥探其工作实现原理温馨提示:本篇篇幅较长,如果耐心阅读一定会有不错的收获,为了提高阅读体验,本文所有源码都是通过截图方式,大家可以重点阅读对应的文字说明,并在文末进行了总结。1、官方文档看
2020年7月6日
其他

一文详解 Canal Instance 设计理念与定制开发思路

getAlarmHandler()告警服务。AbstractCanalInstanceCanalInstance的抽象实现类。CanalInstanceWithManager基于手动编程式的
2020年6月22日
其他

数据异构重器之 Canal 初探

监听数据库的binlog日志,然后将数据再同步到商家订单库,而用户订单库以用户ID为维度进行分库,商家订单库以商家ID做分库,完美解决问题。2、架构设计原理在了解到
2020年6月15日
其他

我的另一种参与 RocketMQ 开源社区的方式

开源社区所获得的成就:2019年RocketMQ社区授予我优秀布道师荣誉称号,证书很高大上,奖品丰厚哦。布道师是什么?开源项目不是都在追求如何成为一名
2020年6月8日
其他

结合 Sentinel 专栏谈谈我的源码阅读方法

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!本文行文思路:先抛出源码阅读方法,然后结合Sentinel创作过程谈谈具体是如何运用这些技巧,最后解答几个源码阅读的误区。Sentinel
2020年6月1日
其他

Sentinel 系统自适应限流原理剖析与实战指导

SystemSlot,该类实现简单,如下图所示:SystemRuleManager#checkSystem从这里可以看出实现的关键在于SystemRuleManager,这里是直接调用
2020年5月25日
其他

RocketMQ 一行代码造成大量消息丢失

BUG未解决的情况下适当提高该值能有效的缓解。但这是并不是好的解决方案,我会在近期向官方提交一个PR,将这个问题修复,建议大家在公司尽量对自己使用的版本进行修改,重新打一个包即可,因为这已经违背了
2020年5月18日
其他

Sentinel Dubbo 适配器看限流与熔断(实战思考篇)

提供的适配器并加以理解,提出了如下观点,欢迎大家留言探讨,相互交流,共同进步。限流规则根据不同的使用场景可以在客户端、服务端配置。熔断规则通常在服务调用方配置即可。Sentinel
2020年5月11日
其他

Sentinel 集群限流设计原理

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!1、集群限流使用场景首先一个服务有三个服务提供者,但这三台集群的硬件配置不一样,如图所示:在这里插入图片描述为了充分利用硬件的资源,诸如
2020年5月4日
其他

Sentinel 动态数据源架构设计理念与改造实践

中主要有如下几个角色:管理后台、限流熔断规则数据源、应用程序。1)管理后台管理后台主要用于可视化配置限流规则、熔断规则,其操作界面截图如下:2)限流熔断规则数据源用于存储限流熔断规则的数据容器,在
2020年4月26日
其他

源码专栏

关注微信公众号【中间件兴趣圈】,发送对应关键字,即可获得专栏链接。项目描述关键字rocketmq分布式消息中间件rocketmqKafka分布式消息中间件kafkadubbo分布式RPC服务框架dubboelastic-job分布式调度框架elasticjobmybatisORM持久化框架mybatiselasticsearch分布式全文搜索服务器elasticsearchjava8实战java8实战java8sentineljava限流熔断sentinelmycat分库分表中间件mycatnetty5NIO框架nettyjucjava并发包juc长按如下二维码,添加笔者为好友,拉您进【中间件兴趣圈】微信交流群,一起交流技术,打造高质量的职场技术交流圈,抱团取暖,共同进步。欢迎加入我的知识星球,一起交流源码,探讨架构,打造高质量的技术交流圈,长按如下二维码如果喜欢您喜欢这篇文章,点赞
2020年4月25日
其他

源码分析 Sentinel DegradeSlot 熔断实现原理

true;}Step2:根据资源名称获得对应的集群类节点,有关集群限流将在后续文章中详细介绍。DegradeRule#passCheckif
2020年4月12日
其他

Sentienl 流控效果之匀速排队与预热实现原理与实战建议

latestPassedTime上一次成功通过的时间戳。接下来我们详细来看一下其算法的实现:RateLimiterController#canPasspublic
2020年4月6日
其他

10年IT老兵给职场新人的一些建议(文末有福利)

点击上方“中间件兴趣圈”,选择“设为星标”做积极的人,越努力越幸运!2020年04年01,对我来说一个非常值得纪念的日子,因为10年前的今天我从一个普通二类本科的大学毕业生正式步入职场,开启了我人生的新篇章。经过10年的成长,我从一个青涩少年依然蜕变为一个“中年大叔”了,也取得了一定的成绩,为了突破“中年危机”,将持续努力。首先先来一个自我介绍:丁威,《RocketMQ技术内幕》作者、『中间件兴趣圈』公众号维护者、2019年RocketMQ社区优秀布道师评选斩获第一名、2019年度CSDN博客之星TOP10获得者,目前就任中通科技技术平台部担任资深架构师,负责消息中间件与全链路压测在科技中心的落地与实施工作。回想这10年的工作经历,我个人觉得有很多点可以和大家一起来分享分享。首先我职业生涯的前面四年,是呆在一家国企控股公司,主要从事的业务是电子政务方面的业务,是一个传统行业,虽然我很努力,解决工作中的问题显得得心应手,在公司所在的部门也能得到领导的赏识、同事们的认可,但受限于所在平台的局限性以及公司的规模,薪资无法得到较大幅度的提升,萌生了离开的想法。但让我所料不及的是我满怀信心去找工作的时候让我备受打击,阿里系企业直接将我秒杀,诸如HashMap的内存结构是什么?HashMap为什么不是线程安全的,什么大数据、高并发这些场景更是连想都没有相关,后面就选择一家外部公司,开始了探究互联网相关的技能。回想这段经验,我有如下感悟与建议1、第一份工作真的很重要,如果有好的学历背景,找工作时不能将就。2、如果没有好的学历背景,也无需气馁,要一开始就为自己树立一个远大的目标:一定要凭着自己的努力,励志要进入一线互联网企业。3、有了目标,在工作的第一年主要还是要扩大知识面,点到为止,以便更好的完成工作,进入工作第二年后,就要开始打牢基础,探究原理,快速成长。那如何打牢基础,探究原理,快速成长呢?在经过阿里系面试打击后,我决定先离开工作了4年的环境,寻找了一家有机会接触互联网相关技术的公司,开始打拼,这个时候,在完成工作的情况下,我会利用业余时间进行学习,越努力越幸运,我的运气还不错,认识了MyCat社区的负责人,为我指明了方向,融入开源社区,但那个时候的我发现我无看懂MyCat的源码,也就无法深层次参与其开源建设,那如何破解。后面痛定思痛,既然没有能力看懂MyCat源码,那就从JAVA的基础开始,故与2016年9月正式开通CSDN博客,从源码分析Java集合、JUC(Java并发包)、Java
2020年4月2日
其他

源码分析RateLimiter SmoothWarmingUp 实现原理(文末附流程图)

表示。代码@3:如果需要申请的许可数量(requiredPermits)大于当前剩余许可数量(storedPermits),则还需要等待新的许可生成,用freshPermits
2020年3月29日
其他

源码分析 RateLimiter SmoothBursty 实现原理(文末附流程图)

nextFreeTicketMicros(下一次可以免费获取许可的时间),则需要重新计算许可,即又可以向许可池中添加许可。代码@2:根据当前时间可增加的许可数量,在
2020年3月22日
其他

Sentinel FlowSlot 限流实现原理(文末附流程图与总结)

异常,应用程序可捕捉该异常对业务进行定制化处理。每一条流控规则(FlowRule)都包含三个要素:流控类别、基于调用链的流控制策略、限流后的处理行为(参考FlowRule相关的注释)。grade
2020年3月15日
其他

RocketMQ msgId与offsetMsgId释疑(实战篇)

快速定位到该条消息。点【在看】与转发是一种美德,期待您的认可与鼓励,越努力越幸运。欢迎加入我的知识星球,一起交流源码,探讨架构,打造高质量的技术交流圈,长按如下二维码中间件兴趣圈
2020年3月8日
其他

源码分析 Sentinel 实时数据采集实现原理

的相关方法来改变线程数等,将在下文会向详细介绍。代码@3:如果上下文环境中保存了调用的源头(调用方)的节点信息不为空,则更新该节点的统计数据:线程数与通过数量。代码@4:如果资源的进入类型为
2020年1月19日
其他

Sentinel 调用上下文环境实现原理(含原理图)

resourceWrapper资源对象。CtEntry同步调用调用信息封装对象。AsyncEntry异步调用调用信息的封装对象。对应的核心方法将在下文具体用到时再详细介绍。1.2
2020年1月12日
其他

寻找一把进入 Alibaba Sentinel 的钥匙(文末附流程图)

流控相关的逻辑,从侧面也反应了该属性的重要性。代码@4:为该资源加载处理链链,这里是最最重要的方法,将在下文详细介绍。代码@5:根据资源ID、处理器链、上下文环境构建
2020年1月5日
其他

Alibaba Seninel 滑动窗口实现原理(文末附原理图)

机制的目的。这部分内容也将在我的【中间件知识星球】中与各位星友一起探讨,欢迎大家的加入。欢迎加入我的知识星球,一起交流源码,探讨架构,打造高质量的技术交流圈,长按如下二维码中间件兴趣圈
2019年12月29日
其他

源码分析 Sentinel 之 Dubbo 适配原理

服务提供者与消费端的适配套路差不多,这里就重点阐述一下其不同点。代码@1:如果启用前缀,默认服务提供者的资源会加上前缀:dubbo:provider:,可以通过在配置文件中配置属性
2019年12月22日
其他

Alibaba Sentinel 限流与熔断初探

模块提供的是限流等基本API,主要是提供给应用自己去显示调用,对代码有侵入性,故该模块对主流框架进行了适配,目前已适配的模块如下:sentinel-apache-dubbo-adapter对
2019年12月15日