2017-06-12
前一篇写了下MQ HA方案的整体架构,下面介绍一下在实现过程面临的一些问题。
HA主从同步协议MQ主从同步借助于Netty实现,主从之间的通信协议主要包括两部分:心跳和数据同步。
心跳有Slave发起,每次汇报自己的最大物理偏移;数据同步由Master发起,包括本次数据的起始位点和消息数据。整体的结构如下:
心跳客户端定期发起心跳,心跳信息一个8字节的ma...
Read More
2017-06-11
公司自研的MQ基本功能稳定后,开始提高可用性,首当其冲的就是要做主备。我们的MQ基本上还是借鉴了阿里的rocketMQ的方案,所以在HA这块也差不多。
主备同步方案主备的数据同步主要由HAService负责:
HAClient:负责连接master,并负责跟master的心跳,以及数据读入
AcceptClientService:负责监听slave的...
Read More
2017-05-14
亲王的书啊,拜一拜
亲王讲起故事来还是挺顺溜的,只不过这本书略显仓促啊。不管怎样,花一个下午,泡上一壶茶,读起来还是很惬意的。
书里面的两段话我很喜欢:
草原的天空宽旷得很,每一只鸟儿都可以尽情飞翔
愿白萨满的舞蹈指引着每个人到达自己梦到的地方。
还有一段,是书里面提到的《罗马书》的一段:
神的事情,人所能知道的,原显明在人心里,因为神已经给他们显明...
Read More
2017-05-12
最近阅读了一片文章:微信红包后台系统可用性设计实践, 主要讲了高可用的一些优化设计,以及如何平行扩所容,细节可以看看原文,我这里主要讲一些我的一些理解。
异步化改造一个系统越复杂,可用性越难保证,在追求高可用的时候,需要梳理整个链路,找出关键路径,然后,其他的非关键路径采用异步的方式,最终结果通过对账等系统保证最终一致。
如上图所示,原来的整个链路比较长,...
Read More
2017-05-07
千亿之夜-百亿之昼,体会失落之感
Read More
2017-05-05
最近业务反馈,他们消费MQ消息的时候,延迟很大,有一分钟多的时间,收到反馈后,我马上看了下MQ整个链路的时间
问题排查根据traceId,把消息的每个步骤的日志拉出来看了下:
消息发送时间12017-05-04 14:46:02,420|0029000001********17a450111|send_ok|t******operation|3|015F00...
Read More
2017-04-29
(这篇文章早就想写了,但苦于一直忙项目开发,就拖到了现在)
最近有两个case对我影响比较深,
一个case一个是帮公司某个业务排查dubbo的问题, 现象是:业务发现他们调用某一个服务的时候,总是调用不到想要的版本:比如,他们本来想调用服务A的1.0版本,但实际上总是掉到2.0版本。
拿到问题后,我就开始梳理dubbo的代码,以及查看zk上的数据。 发现,...
Read More
2017-04-28
最近接手公司自己的mq,梳理了整体的架构,发现broker在扩展性方面,尤其是做HA的时候,存在难以扩展的问题。于是就想,我们在做架构设计的时候,在项目还没有开始之前,怎么能够尽可能提早的发现问题,而不是到了项目成熟期,要做一些诸如HA,扩容所容,高可用的时候才发现系统的架构原来不那么灵活。
注:如果不熟悉mq的一些基本概念,可以先找一些rocketmq的资...
Read More
2017-04-15
最近排查了一次业务的FullGC,顺便理一下各种GC的日志和问题,记录下来。
正常的CMSGC的日志分析初始标记(STW initial mark)根据GC Roots,标记出直接可达的活跃对象,这个阶段STW
12017-04-13T20:17:43.636+0800: 94618.250: [GC [1 CMS-initial-mark: 3483806...
Read More
2017-04-14
最近排查了一些FullGC的问题,就顺带着把Java的GC理一下, 本文捡一些ParNewGC的内容看看。
日志内容1232017-04-13T10:56:37.593+0800: 14084483.509: [GC 14084483.509: [ParNew: 1703042K->29303K(1887488K), 0.0293770 secs] 2...
Read More