如何设计一个消息中心

背景

在互联网公司都会有一个叫消息中心的基础平台,基于我以往做消息中心的经验,简单的分析一下我对于如何设计一个消息中心的看法。

问题

对于一个消息中心要解决的主要问题有以下几个:

  • 调用量大
  • 低延迟
  • 不丢消息、不重复发送消息
  • 历史消息查询和备份
  • 消息统计分析

分析

调用量大

消息中心的上游系统很多是监控系统、或者是营销系统等,这些系统的特点就是瞬间的调用量大,比如当云厂商发生故障时,基本上所有的监控系统都在告警,往外push消息。又或者营销系统在某个时间点大量发送营销消息。这个问题的答案就是引入MQ来削峰。

低延迟

业务方通常希望自己的消息越快越好,最好实时送达,但是我们的资源是有限的,所以我们应该给消息分级别和分泳道,因为重要的消息一般量小,需要低延时。而不重要的消息量大,往往可以接收一定时间的延时。按消息级别分泳道,不要让不重要的消息阻塞重要消息的发送。

不丢消息&不重复发送消息

消息要保证不丢失,不重复发送。我们要记录消息的状态,保证消息的幂等,还要支持发送失败的消息自动或手动重试。

历史消息查询和备份

一般消息中心会对消息做一个较长时间的备份,这方面有政策要求。另一方面,业务方通常也有查询消息来排查错误的需求。我们可以分库分表,或者定期归档到hdfs。

消息统计分析

对消息的统计和分析主要用来治理我们的上游调用方,比如:有些业务大量的使用重要级别发送不重要消息,或者大量消息占用成本等等。

架构

画了一个简单的架构图

message.jpg

总结

以上,就是我在自己工作的过程中,对消息中心的一些经验,希望对建设消息中心的同学能有所启发。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 以前在设计消息中心的时候自行总结的一些内容,分享出来,希望能够帮助到正在做类似设计的人,当时的业务场景是基于...
    秦琼_阅读 2,913评论 0 3
  • 本章我们将会讨论Kafka生产者是如何发送消息到Kafka的。Kafka项目有一个生产者客户端,我们可以通过这个客...
    zwb_jianshu阅读 483评论 0 0
  • 目录 ·大型网站软件系统的特点 ·大型网站架构演化发展历程 ·初始阶段的网站架构 ·需求/解决问题 ·架构 ·应用...
    zhyang0918阅读 2,723评论 0 16
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,594评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,225评论 4 8