2019独角兽企业重金招聘Python工程师标准>>>

前言

京麦消息是京麦商家开放平台的核心组成部分。从消息源到消息中心再到触达用户,以及最终根据消息协议呼起操作页面,京麦消息是一个完整且健康的生态闭环。下面我会详细的介绍下京麦消息是如何在演变中不断完善的。

京麦消息框架

我将从消息接入、MC系统搭建、消息配置、消息触达、消息监控五个方面来阐述京麦消息在2017年的成长。

一、消息接入

原有消息接入存在的弊端主要有以下两点:

1、消息接入方式多样化。京麦消息包含业务系统类消息、服务资讯类消息以及其他各类消息类型,消息来源多种多样。当时为了快速的接入各种消息源,提供了servlet接入、client接入、JMQ接入等,接入方式多样化,加上没有完善的监控系统,这样就导致了一个很尴尬的问题,我们自己都不清楚我们的消息系统到底接入了多少种类型的消息。

2、消息处理中心与消息源强依赖。Anycall是系统消息的主要入口,从Anycall到原消息处理后台是通过servlet调用来实现的,系统间的耦合性太强。

消息接入做的改善:

1、所有的系统消息统一由Anycall进行接入,清晰化消息类型边界。

2、京麦消息的接入方式统一。所有京麦消息统一通过JMQ异步化接入,并且根据不同业务通过不同的topic进行隔离,避免数据量大的业务(比如订单消息)对其他业务的阻塞。

3、麦圈的打造、咚咚离线消息的接入等项目的完成,使得京麦消息的生态不断丰富,同时也极大的增加了用户粘性。

二、MC(京麦消息中心)系统的搭建

原来京麦消息的主要痛点:

1、接入方式不统一。

2、不稳定、大促被降级。

3、消息处理逻辑复杂,接入新的消息源困难。

4、没有完善的消息追踪,消息统计。

基于上述原因,重新打造了一个稳定、专一的消息处理中心——MC系统。

1、统一的JMQ接入,在上一部分已经介绍过了。

2、MC系统与其他系统没有耦合,不在存在由于消息量过大对京麦其他业务造成影响的问题,实现了在大促时可以提供稳定的服务。

3、MC系统使用了broker分发的模式。模块化可插拔的处理方式,使得新消息源的接入变的极其简单,大大的缩短了开发的周期。正是这种broker分发模式的存在,咚咚离线消息、ISV消息订阅等项目实现了快速接入,并提供服务。

4、在MC系统搭建的过程中,全链路消息追踪、消息统计也得到了实现(在第五节消息监控会详细讲解)。

三、消息配置

消息过滤、消息组装、消息存储、消息推送是京麦消息中心的四大核心。消息组装是根据不同消息的不同配置来进行的,而这些配置是在开发侧的config配置中心来配置的,因此产品或者运营想从Anycall新接入一种系统消息所做的工作量是极其大的。

基于这个原因,我们将所有的配置环节统一到了一个页面。配置信息的获取添加三层缓存(Guava Cache+redis+DB)来应对海量调用。统一配置页面的存在使得业务类系统消息的接入变的简单快捷。

另一个比较大的优化是呼起协议配置化。之前消息的呼起协议是写死在消息体里面,极其的不灵活,甚至很多系统消息无法对接呼起协议直接将链接暴露在消息体里,用户的体验是很不好的。为此,呼起协议对接统一协议管理中心(后面文章会详细介绍),所有的呼起协议会根据消息里携带的protocolID从统一协议管理中心获取。呼起协议的中心化、配置化使得消息在系统流转的过程中不再需要关注具体的呼起协议,简化了消息在系统中的处理逻辑。而且协议中心化之后,协议的内容可以直接呈现给产品和运营,整个消息呼起的过程变得更加的清晰。

四、消息触达

京麦消息触达分为在线通知和离线通知。

在线通知是通过服务端和客户端的TCP长连接来实现的。

离线通知在最开始只有IOS的apns推送,Android系统无法很好的进行离线通知的推送一直是一大痛点。

在这种情况下我们开发了Android推送的开源包,对接了华为、小米、魅族三大厂商,实现了Android离线通知的推送。

五、消息监控

全链路消息追踪系统,整合从消息源到最终的消息推送,整个链路各个节点消息的流转状况,并且异步化存储。从上图可以看到系统中的处理方式是,分别订阅JMQ的同一个topic实现将消息日志分别存储在ES和HBase,存ES保证了我可以在消息管理后台对所有消息进行清晰透明化的追踪查询,存HBase是为了可以将数据长久的保存并且进一步的分析。

消息统计是依托于京东大数据平台来实现的。将HBase里的数据导入到京东数据集市,从而对消息数据进行各个维度的统计分析。

总结

京麦消息经过一年是成长,在稳定、监控、内容丰富程度上有了长足的发展。下一步的规划是完整的消息失败重试机制、提高消息送达率、消息推送产品化等。

京麦是一个年轻且充满活力的团队,京麦消息系统伴随着京麦的成长,不断的完善优化。为用户提供更优质的服务是我们永远的追求。

在此我向大家推荐一个架构学习交流群。交流学习群号: 744642380, 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良

转载于:https://my.oschina.net/u/3833719/blog/1802449

京东搭建“千万级消息推送架构”的演进之路相关推荐

  1. .NET Core使用IO合并技巧轻松实现千万级消息推送

    之前讲述过多路复用实现单服百万级别RPS吞吐,但在文中有一点是没有说的就是消息IO合并,如果缺少了消息IO合并即使怎样多路复用也很难达到百万级别的请求响毕竟所有应用层面的网络IO读写都是非常损耗性能的 ...

  2. 千万级在线推送系统架构解析

    2019独角兽企业重金招聘Python工程师标准>>> 千万级在线推送系统架构解析 移动短消息是大家所熟知的一种信息推送方式, 基于信令通道的推送在简单信息的体验方面已经被大家所接受 ...

  3. 京东京麦商家开放平台的消息推送架构演进之路

    1.前言 京麦实时消息推送是京东的京麦商家开放平台的核心组成部分.从消息源到消息中心再到触达用户,以及最终根据消息协议呼起操作页面,京麦实时消息推送是一个完整且健康的生态闭环.下面我会详细的介绍下京麦 ...

  4. 京东架构师:亿级消息推送平台架构实践!9页ppt一次讲透

    点击"技术领导力"关注∆  每天早上8:30推送 来源:京东商城架构团队 每个app或者业务都有将信息推送到用户客户端的需求.作为中台的推送平台,需要为公司内部许多个不同app同时 ...

  5. 平台千万级订单推送实现

    背景:基于公司业务,需要对接不同平台阿里,京东,有赞,苏宁,抖音等众平台,平台以消息推送的方式将订单数据推送给我们,订单量千万级,架构师让我出一份技术方案. 1.技术方案 A:platform-lis ...

  6. 百亿级实时消息推送的实战之道,与王者荣耀一班车就是这么稳!

    要说现在市面上最火爆的手游,莫非拥有两亿注册用户的王者荣耀了.据悉,王者荣耀的渗透率高达22.3%,这意味着每7个中国人中就有一位是王者荣耀注册用户.众所周知,手游App对推送实时性和精准性要求非常高 ...

  7. 消息推送技术干货:美团实时消息推送服务的技术演进之路

    本文由美团技术团队分享,作者"健午.佳猛.陆凯.冯江",原题"美团终端消息投递服务Pike的演进之路",有修订. 1.引言 传统意义上来说,实时消息推送通常都是 ...

  8. 关于 APP 消息推送,看这篇文章就够辣!!

    原链接:http://www.sohu.com/a/168278657_251759 APP消息推送作为消息分发渠道,一方面起到内容告知的作用,另一方面在一定程度上可以提高用户活跃,在用户流失后也许能 ...

  9. CoolQ/DingTalk 实现CI/CD消息推送到群

    基于Gitlab 的 CI/CD 流程搞好后,需要将CI Job或流水线的执行状态通知到给相关QA或者开发人员,整个大前端组,项目系统工程数量>15个,所以有必要聚合CI/CD相关自动化流水线信 ...

最新文章

  1. python webshell_python脚本实现查找webshell的方法
  2. Linux命令(11)—— 给文件增加和减少权限chomod命令
  3. netty系列之:对聊天进行加密
  4. python中冒号报错_python新手常见错误和异常
  5. [Spring5]IOC容器_Bean管理_工厂Bean
  6. STM32之内部FLASH例程
  7. Android 服务类Service 的详细学习
  8. Ubuntu、CentOS、redHat的区别与联系
  9. 在“BROWSEINFO”产生的“浏览文件夹”对话框中加入“新建文件夹”按钮
  10. 三款免费好用的代码对比工具,丢弃BeyondCompare
  11. 计算机报名验证码不出现怎么办,电脑显示验证码很慢或验证码显示不出来怎么办...
  12. wpsa4排版_wps排版(wps如何一键排版)
  13. mac 强制关闭程序
  14. figure,figcaption的用法
  15. C. Edgy Trees
  16. muduo学习笔记:net部分之Http-协议简介
  17. 【CVPR 2020】蒸馏篇(四):Online Knowledge Distillation via Collaborative Learning
  18. 高侨名人冒险岛java,高桥名人冒险岛无敌版
  19. Windows利用easyBCD装Ubuntu双系统
  20. 60个最佳新年2012年日历壁纸

热门文章

  1. Window 10 自带工具
  2. 怎么卸载nodejs?
  3. pandas读取csv数据、参数指定作为行索引的数据列索引列表形成复合(多层)行索引、使用set_index函数把数据列转化为行索引(keys参数指定需要被转化的数据列)
  4. Win11关闭Superfetch服务的操作方法分享
  5. Task 3 异常处理
  6. 微信小程序 给input 添加选中样式
  7. 华为5g鸿蒙麒麟,2019华为十大黑科技盘点麒麟9905G鸿蒙OS受重视
  8. c易语言自定义函数规则,【图】请教用易语言写通达信的自定义函数dll接口_选股公式,炒股公式,炒股,股票公式,炒股软件_股票软件技术交流论坛_理想论坛 - 股票论坛...
  9. 阿里云 OSS监控上传进度
  10. 根据String类型日期算年龄