延迟或者定时消息在使用场景上有两种:消息消费失败重试;业务直接发送定时消息。
这两种场景broker上的实现可能不同,如果开启了时间轮的配置(timerWheelEnable,默认开启),业务上的延迟消息发送时只要设置了DeliveryTimestamp字段,消息的定时服务就会使用时间轮;消费失败的重试则依然使用老的实现方式,不同的延迟等级对应不同的内部延迟队列。
下面我们分着两种场景来看下具体的实现逻辑。
总结-四年期满
“谁让你读了那么些书,又知道了双水村以外还有一个大世界… …如果你从小就在这个天地里日出而作,日落而息,那你现在就会和众乡亲抱同一理想:经过几年的辛劳,像大哥一样娶个满意的媳妇,生个胖儿子,加上你的体魄,会成为一名相当出色的庄稼人。不幸的是,你知道得太多了,思考得太多了,因此才有了这种不能为周围人所理解的苦恼… …” --
《平凡的世界》路遥
年终的生活和工作压力很大,这种时候会再温故《平凡的世界》中的人生百态,巨变的年代,不变的底层生活,人物向上的生活态度和面对苦难的韧性,给当下的自己一些精神支持,这本伟大的巨著将伴随我的余生。
译-理解HBase和BigTable
前言
最近在了解HBase,作为一个HBase小白,迫切的想对HBase有一个较为直观的认识,但大部分文章切入的角度喜欢和RDMS做比较,看下来千篇一律,没有清晰形象的解释清楚HBase的基本数据模型。HBase官方手册中推荐了两篇博客,个人认为写的醍醐灌顶,比较适合我这种愚钝的人,决定用蹩脚英文稍加翻译记录,方便下次快速回忆。
开篇
学习Hbase(谷歌BigTable的开源实现)最困难的部分是HBase它实际是个什么。
非常不幸的是,Hbase和BigTable这两个伟大的系统在名称中都包含table和base这两个词,这往往导致和RDBMS(例如我自己)产生混淆。
这篇文章旨在从概念角度描述这些分布式数据存储系统。相信在你读完后会对何时使用HBase和传统数据库有更明智的决定。
rocketmq-事务消息
前言
之前有转载过一篇关于分布式事务最终一致的MQ实现的文章,当时也是碰到了分布式事务的情形,最后按照文章的思路利用rmq实现了数据的最终一致。不太清楚分布式事务的,可以先看下这边文章了解下。
PS:本篇默认你已经了解rmq的一些基础并看过部分源代码,建议在看该篇时,先看下官方的文档RocketMQ事务消息。
牵涉到的分布式的话题一般都会提到CAP,从知乎上打捞来一份比较好解释。
思考延时队列
rocketmq-深入消费源码
对比看两种消费方式的实现:顺序消费与并发消费。这里对顺序消费只关注消费端,不关心producer与broker怎么处理顺序消息,假设架构及策略已保证消息的全局或者局部顺序性。通过构建假定前提,我们可以忽略本次讨论的非重点内容。以下仍以Push方式为例。
消费方式
宏观上看rmq自身是一个生产-消费模式,在他各个角色的具体实现中也不乏生产-消费模式的使用。DefaultMQPushConsumerImpl
中消息的拉取及拉取成功后的消费均采用生产-消费的方式进行组织(PullRequest
、ConsumeRequest
),消费的流程在之前rocketmq-消息重复分析一文中记录的很清楚,不再展开。
rocketmq-消息重复分析
rocketmq-半入门级架构及核心流程概览
一直在用rocketmq,对他的功能和大概流程略知一些,但是比较浮,经不起稍微的推敲。是时候进一步了解下这个NB的中间件了。
这里不再赘述它的那些特性,网上一大堆,这里主要按照自己想了解的一些方面作整理,贴出部分核心代码,意图通过表现各个角色间的交互,勾画大致架构,方便以后对每个要点各个深入。如果想要引导来阅读源代码,推荐rmq源码系列,写的很有诚意,本笔记中也部分参考引用其文章。
部署结构(逻辑结构/物理结构)
消息中间件的整体看起来像我们相互邮寄明信片。李雷(Producer)通过邮局公告(Namesrv)找到邮局的地址,然后去邮局(Broker)把明信片(Message)发送给韩梅梅(Consumer)。
JMH(Java Microbenchmark Harness)笔记
看开源项目时,时不常遇到一个叫做benchmark的目录,此时脑子停滞,一眼带过,最近一次看到就顺手问了下谷大哥,发现benchmark还是个挺有意思的东西。
基准测试是什么
基准测试
是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。
例如,对计算机CPU进行浮点运算、数据访问的带宽和延迟等指标的基准测试
,可以使用户清楚地了解每一款CPU的运算性能及作业吞吐能力是否满足应用程序的要求;再如对数据库管理系统的ACID(Atomicity, Consistency, Isolation, Durability, 原子性、一致性、独立性和持久性)、查询时间和联机事务处理能力等方面的性能指标进行基准测试
,也有助于使用者挑选最符合自己需求的数据库系统。
丢了眠的精神病
失眠这件事已经扰了我很久,看样子还要随我走很长时间。翻到以前失眠时随手拼凑的梦话,觉得有意思,原来失眠逼得我作文不写谎话,想起那些年为完成作文编的故事,唉!实在是对不起小明、小红等等这些素未谋面的伙伴,原谅我吧。