9 唯有坚持不懈

尚未进行身份认证

我要认证

丁威,《RocketMQ技术内幕》作者、CSDN博客专家,原创公众号『中间件兴趣圈』维护者。目前就职于中通快递研发中心担任资深架构师,负责消息中间件与全链路压测的实施与落地。擅长JAVA编程,对主流中间件RocketMQ、Dubbo、ElasticJob、Netty、Sentienl、Mybatis、Mycat等中间件有深入研究。

等级
TA的排名 3k+

Canal binlog 日志 Dump 流程分析

Canal 的 dump 支持串行和并行模式两种模式,本篇重点梳理 dump 的核心流程,以便对 dump 过程有一个充分的了解,更好的理解 Canal 的实现原理与细节,下一篇中将重点关注Canal是如何引入并行模式来提高dump的性能,即并行编程相关的技巧。从前面的文章我们得知 Canal binlog 日志解析的基本流程如下图所示:解析来重点梳理一下 dump 命令的发送逻辑,特别是日志的处理流程,一些基本的日志格式。1、 dump 流程分析在 Canal 中 dump 方法声明如下:带

2020-08-12 22:36:31

Canal binlog 日志管理器与GTID简介

本节目录1、Canal 位点管理(日志管理器)1.1 类图1.2 日志管理器使用方法2、MySQL GTID 扫盲正如上文提到的那样,在 Canal Instance 启动的时候,首先会查询日志管理器中查找上一次的同步位点,如果没有查询到,则默认会从最新的位点开始同步,但如果每一次启动Instance都从最后开始同步,其数据完整性无法保证,正确的做法是在数据同步的过程中应该记录位点并持久化,重新启动后按照继续从上一次的位置继续同步,实现真正的增量同步。本文就是来详细探讨 Canal的几个日志管理器,并来

2020-08-02 20:57:26

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

本文将详细剖析Canal在初次启动时如何定位同步位点,行为思路先源码,再辅以流程图进行说明,并在总结部分使用思维导图进行总结,试图引发各位的讨论。本节目录1、Canal定位启动位点1.1 查找位点1.2 基于时间戳从查找 binlog 位点2、总结1、Canal定位启动位点在一个 Canal Instance 实例启动时,在向 MySQL 发送 dump 命令之前,首先先得计算该从 binlog 的什么位置开始同步,初次启动时如何寻找位点等。其代码如下图所示:从这里可以看成,将调用 findSta

2020-07-20 19:31:25

Canal 如何实现数据库库事务的一致性

本文将主要介绍在 EventParser binlog 日志同步流程中关于环形缓存区的使用技巧。1、环形缓存区关系型数据库讲究的是ACID 4个特性,故引入了数据库事务的概念,一个数据库事务中的多条SQL引发的多条数据变更要么全部成功,要么全部失败,即数据的一致性,那同样在数据同步的场景,在解析一个事务的 binlog 日志时,一次数据同步应该至少以事务为单位,一个事务内的所有 Event 应该作为一个批次提交到数据消费端,让消费端有能力一次同步一个事务中的数据,而不是一条一条变更日志的处理,这样容易造

2020-07-13 21:41:52

一张图揭示主流互联网架构体系

先来一个自我介绍:《RocketMQ技术内幕》作者、『中间件兴趣圈』公众号维护者、2019 年 RocketMQ 社区优秀布道师评选斩获第一名、2019 年度CSDN博客之星TOP10获得者,目前就任中通科技技术平台部担任资深架构师。一个二类本科毕业生,无BAT等一线互联网企业背景,通过分享技术,主攻中间件原理分析与技术应用,构建自己的互联网架构技术栈,从而取得目前的成就。接下来先用一张思维导图来展示目前已有的研究成果:温馨提示:上图是『中间件兴趣圈』已覆盖的知识图谱,文末有指引可获得原图。接

2020-07-08 21:57:15

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

本文将从三个方面深度剖析 EventParser 组件。从官方文档看 EventParser 的设计思想从 EventParser 初始化了解内部的是可配置项从 EventParser 的启动窥探其工作实现原理温馨提示:本篇篇幅较长,如果耐心阅读一定会有不错的收获,为了提高阅读体验,本文所有源码都是通过截图方式,大家可以重点阅读对应的文字说明,并在文末进行了总结。1、官方文档看 EventParser首先我们先从官方文档来看 EventParser 的整体设计,其架构设计图如下所示:

2020-07-07 22:42:50

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

详细介绍了 Canal Instance 的设计理念,文末更是有彩蛋,抛出 canal 定制开发的思路与源码研究 Canal 的方法。

2020-06-22 21:01:39

数据异构之 Canal 初探(技巧篇)

数据异构重磅武器 Canal 系列正式开始连载,本文是该系列的第一篇,从应用场景、架构设计理念 再到 在开发工具中跑通Demo,为后续带着自己的思考深入学习 canal打下坚实基础。如果本文对你有所帮助,麻烦点亮在看,能同时转发朋友圈更好

2020-06-16 08:52:46

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

一个草根程序员参与开源项目的另外一种方式。

2020-06-08 19:10:34

结合 Sentinel 专栏谈谈我的源码阅读技巧

本文行文思路:先抛出源码阅读方法,然后结合Sentinel创作过程谈谈具体是如何运用这些技巧,最后解答几个源码阅读的误区。Sentinel 系列共包含15篇文章,主要以源码分析为手段,图文并茂的方式对 Sentinel 的架构设计理念、核心实现要点进行了一一剖析,并加以实战分析与思考。很多朋友都在询我是如何阅读源码的。对此可归纳为如下几个要点,然后结合 Sentienl 源码分析专栏对各个要点进行拆解,对源码阅读方法进行一次“实战”。阅读官方文档,从全局了解待学习框架能解决什么样的问题,整体架构.

2020-06-01 21:43:15

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

看到标题中的几个关键字系统自适应限流是不是觉得高大上,这个自适应又是如何实现的呢?1、Sentinel 系统自适应概述从官方了解到 Sentienl 系统自适应限流是一个全局的概念,对应用入口流量统一进行统一控制,结合应用的机器负载、CPU 使用率,总体平均响应时间、入口 QPS 和并发线程数等几个维度的监控指标从而决定是否调用进行限流操作。为了有一个直观的感受,我们可以从官方的运维平台看看其系统自适应限流的操作界面:RT、线程数、入口QPS这三个指标是可以通过采集调用信息进行统计计算的,那系统LO

2020-05-25 21:26:35

RocketMQ一行代码造成大量消息发送失败

1、问题现象首先接到项目反馈使用 RocketMQ 会出现如下错误:错误信息关键点:MQBrokerException:CODE:2 DESC:[TIMEOUT_CLEAN_QUEUE]broker busy,start flow control for a while,period in queue:205ms,size of queue:880。由于项目组并没有对消息发送失败做任何补偿,导致丢失消息丢失,故需要对这个问题进行深层次的探讨,并加以解决。2、问题分析首先我们根据关键字:TIMEO

2020-05-18 21:01:58

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

本文是源码分析 Sentinel 系列的第十三篇,已经非常详细的介绍了 Sentinel 的架构体系、滑动窗口、调用链上下文、限流、熔断的实现原理,相信各位读者朋友们对Sentinel有一个较为体系化的认知了,这个时候是该开始如何在生产环境进行运用了。本文将以 Dubbo 服务调用为案例剖析场景,尝试对官方提供的 Dubbo 适配器做一个研究学习并对此做出自己的评价,抛出我的观点,期待与大家共同探讨,交流。一个 Dubbo RPC 的简易调用过程如下图所示:消费者会维护一个服务提供者列表,然后再

2020-05-11 21:32:31

源码分析Sentinel专栏

源码分析Sentinel系列是打造的又一重磅专题,详细介绍了限流、熔断的实现原理。1、Alibaba Sentinel 限流与熔断初探(技巧篇)2、源码分析 Sentinel 之 Dubbo 适配原理3、源码分析 Alibaba sentinel 滑动窗口实现原理(文末附原理图)4、寻找一把进入 Alibaba Sentinel 的钥匙(文末附流程图)5、Sentinel 调用上下文环境实现原理6、源码分析 Sentinel 实时数据采集实现原理7、源码分析 RateLimiter Smoot

2020-05-08 20:53:13

Sentinel 集群限流设计原理

本节目录1、集群限流使用场景2、集群限流与单机限流的异同思考3、探究集群限流实现原理3.1 ClusterBuilderSlot 详解3.2 集群限流模式实现原理3.2.1 DefaultClusterTokenClient 详解3.2.2 DefaultTokenService 详解4、总结1、集群限流使用场景首先一个服务有三个服务提供者,但这三台集群的硬件配置不一样,如图所示:为了充分...

2020-05-04 14:23:23

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

在介绍集群限流之前需要首先掌握动态数据源的配置方式,本文将根据 Sentinel 官方提供的代码提出整体架构思路,并最终给出实践指导。温馨提示:本文主要分为动态数据源架构设计理念、从官方示例寻找改造思路、基于SpringBoot改造方案三个部分来详细剖析 Sentienl 动态数据源的改造方案,循序渐进,不仅解决问题本身,更是反映了作者研究一个问题的思路与方法。1、架构设计理念在 Sen...

2020-04-26 09:05:23

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

详细剖析了Sentinel DegradeSlot 熔断的实现原理,提供了三中熔断策略:DEGRADE_GRADE_RT(基于响应时间)、DEGRADE_GRADE_EXCEPTION_RATIO(异常数比例)、DEGRADE_GRADE_EXCEPTION_COUNT(异常数量)。

2020-04-12 16:11:41

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

本文详细介绍了匀速排队 RateLimiterController 与 预热 WarmUpController 实现原理,并且在文章末尾对 WarmUpController 的实战使用提出了建议。

2020-04-06 23:07:18

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

一名普通二类本科程序员的10年IT从业经验总结,结合自身每一段经历所做过的弯路以及遇到职业瓶颈之后的迷茫、破局逆袭之路,给各位初入职场不久的新人一些中坑建议,值得借鉴。

2020-04-02 09:27:10

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

本文详细了介绍了RateLimiter SmoothWarmingUp预热机制的实现原理,对其算法图进行详细的阐述,绝非是对注释进行的英文翻译,特别是解释了预热算法中coldFactor的含义。

2020-03-29 16:06:32

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 图书勋章
    图书勋章
    CSDN技术图书作者专属勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证(专家版)
    技术圈认证(专家版)
    博客专家完成年度认证,即可获得
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力计划专属勋章
    原力计划专属勋章
    2019年《原力计划【第一季】》专属勋章,现已经开启第二季活动啦,小伙伴们快去参加吧
  • 原力探索
    原力探索
    参与《原力计划【第二季】——打卡挑战》的文章入选【每日精选】的博主将会获得此勋章。
  • 原力突破
    原力突破
    参与《原力计划【第二季】— 打卡挑战》的文章入选【打卡挑战周榜】的博主,即可获得此勋章。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 博客之星-前十名
    博客之星-前十名
    授予每年博客之星评选结果第4-10名的用户
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。