京麦消息中心是京麦平台核心业务之一,负责向京麦平台商家用户提供消息推送,ISV消息订阅,以及消息追踪,消息监控,消息统计等功能。

京麦消息中心(以下简称MC)经过4个618的洗礼,技术及业务模型日趋成熟和稳定,本文将为您揭开京麦消息中心业务模型及涉及到的技术点内幕。

首先简单聊下整体架构,整个消息中心承载业务系统消息,资讯类消息,其他类消息。

  • 业务系统消息首先经Anycall系统接入,然后分发给MC。
  • 资讯类消息经过运营系统,下发给MC。
  • 其他类消息通过MQ Topic下发给MC。

MC作为京麦消息协议中转中心,将接入进来的消息转换为京麦协议,下发给推送系统。

推送系统是TCP网关的一个部分,采用自研的Session作为应用层协议,底层采用Netty作为网络通信框架,来实现消息接收、推送、确认,整个过程的完全异步化处理。

下图是京麦消息中心整体架构图:

MC系统

MC系统包括接入,校验,分发,消息配置中心,消息存储,消息统计,消息日志模块。

其中接入模块采用MQ方式接入各个系统消息,校验模块负责对消息的合规性进行校验,分发模块可以根据配置中心的配置进行消息分发,消息存储模块负责对协议消息进行存储,消息日志负责整个消息全链路的追踪。

如下是MC系统的模型图:

因为之前的模型不支持一个类型消息的分发,随着业务扩展,衍生出了Broker这个概念,一个类型的消息可以根据配置中心的配置,可以有不同的Broker。

Broker实际上是一个接口,可以根据不同的业务扩展Broker去实现不同的存储逻辑等等,提高了业务承载能力,来达到隔离的目的。

MQ的运用

整个消息的流转大量采用异步的方式去处理,而且根据业务进行Topic的隔离,达到互不影响的目的,提升了系统承载能力。

如图:Anycall系统根据业务不同分发到不同的MQ,发送给MC。每一个厂商一个Topic,离线推送互不影响,提升推送性能。

snowflake算法实战中的应用

消息id作为全链路消息的唯一标志,作为客户端确认消息的唯一标识,之前是采用数据库生成递增long类型id,此方式缺点是依赖数据库,高并发环境下性能低下, 生成一条id可达到150ms,在此基础上采用snowflake算法生成趋势递增消息id,优势是不依赖任何第三方资源,性能高,实战中仅需要1ms。

Es的使用

考虑到消息数据量大,过期性,及查询性能,所以采用es存储消息数据,同时也根据消息类别创建多个索引,来达到消息数据的分离,起到隔离保护作用,对于类似新订单类的消息采用一天过期机制。

消息日志采用按天创建索引,使用别名,运用routing策略,最多保存7天的机制,大大提升了日志查询效率。

缓存策略

因为消息的实时性,所以缓存策略必不可少,针对业务类型不同,采用的缓存策略不同。

1. 对于基本配置信息,采用本地缓存 + redis + 数据库的方式

优势:三级缓存机制,本地缓存guava cache的运用采用时效机制,提高系统性能,不怎么依赖第三方资源,redis二级缓存采用时效机制,大大提高了空间的利用,最后是数据库兜底,这样下来基本上不怎么依赖第三方起到了自保的作用。

2. 消息未读数计数器

优势:考虑到频繁更新和查询操作,如果用数据库去实现,因消息量太大会造成性能瓶颈,所以采用redis incr的方式处理,原因是此方式性能高,保证了原子性,解决了并发问题。

分布式锁运用

拉取消息接口,目前采用多线程方式调用京麦接口,轮训拉取,考虑到并发,所以运用分布式锁解决此问题。

利用redis特性,setNX(SET if Not eXists)命令。

推送系统

基于 Netty 作为网络层框架,构建海量推送模型,使用静默长连接通道,实现从消息接收、推送、确认,整个过程的完全异步化处理。

总结和感悟

针对消息有太多的事情要做,我们不仅仅做一个消息推送,我们要打造一个完整的稳定的消息闭环,我们要做一个完备的消息体系,支持各种业务,监控,统计,分析,为决策层提供数据依据,为上游提供便利的接入,为ISV提供便利的消息推送能力,为运营提供便利的统计分析等等,最终达到提供丰富的消息提醒,来为商家提供便利的京麦服务,增加商家对京麦的粘性。

出处:http://www.linkedkeeper.com/detail/blog.action?bid=1020

京麦消息中心业务模型分析(京东)相关推荐

  1. 京麦消息中心业务模型分析

    京麦消息中心业务模型分析 京麦消息中心是京麦平台核心业务之一,负责向京麦平台商家用户提供消息推送,ISV消息订阅,以及消息追踪,消息监控,消息统计等功能. 京麦消息中心(以下简称MC)经过4个618的 ...

  2. 小程序进入客服消息中心业务(一)

    小程序进入客服消息中心业务(一) 1. 如何进入小程序客服消息中心 button按钮进入小程序客服消息中心 <button open-type="contact">点击 ...

  3. 2021CCPC华为云挑战赛 卷业务模型分析

    卷业务模型分析 题目链接 写的时候根本没有想到是最小二乘法,把高中知识全忘了,害 知道是最小二乘法后,那么|B[i]-(k*A[i]+b)|<=10,就可以等价于找到由A1与B ,A2与B所得到 ...

  4. mysql恩阳执行脚本_王新栋 | 2017京东商城-京麦平台618备战实践

    作者:王新栋 编辑:王友强 作为技术研发人员,我们常戏称京东每年只干两件事,一个是618,另外一个是双11! 确实每一次的大促都是一场全兵演练,技术人员在这场战斗中,从团队合作.技术提升.用户意识上都 ...

  5. 分析业务模型 - 类图 新书《火球 UML大战需求分析》试读 第3章

    摘要:类图(Class Diagram)可能是用得最多的一种UML图.类图的基本语法并不复杂,你可能最多学习两三天就可以掌握,然而要真正做到活用类图则可能需要几年的功力.类图是锻炼面向对象分析(OOA ...

  6. 深度linux使用京麦,京东京麦开放平台的高可用架构之路

    京麦是京东商家的多端开放式工作平台,是京东十万商家唯一的店铺运营管理平台,为京东商家提供在移动和桌面端的操作业务,京麦本身是一个开放的端体系架构,由京东官方和 ISV 为商家提供多样的应用服务. 京麦 ...

  7. 京麦开放平台架构演进与优化之路

    作者:张松然.2013年加入京东,目前在京东商城担任京麦卖家工作台服务端负责人.负责京麦平台化转型,实现服务对外开放.主导了京麦网关.京麦平台和消息推送等多个核心系统的开发和架构设计工作.三年间,与团 ...

  8. Rabbitmq消息中心_消息中心总体方案

    消息中心方案 一.消息中心简介 为了将各个应用系统之间进行业务解耦,对业务的透明化处理及技术架构的统一管理,方便对各应用的整体把控,保证系统的稳定性,也方便各应用的消息中间件的快速搭建,因此搭建消息中 ...

  9. 京东的Netty实践,京麦TCP网关长连接容器架构

    背景 早期京麦搭建 HTTP 和 TCP 长连接功能主要用于消息通知的推送,并未应用于 API 网关.随着逐步对 NIO 的深入学习和对 Netty 框架的了解,以及对系统通信稳定能力越来越高的要求, ...

最新文章

  1. 脚本中export不起作用的原因分析
  2. mysql bit类型 使用select查询无法看到其值
  3. OpenCV学习笔记(五十四)——概述FaceRecognizer人脸识别类contrib
  4. 如何用Vue实现简易的富文本编辑器,并支持Markdown语法
  5. 基础练习 Sine之舞 (递推)
  6. 爬虫:python爬虫学习笔记之网站保持登录机制及简单验证码处理
  7. k3cloud6.0文件服务器,K3Cloud系统集成配置详解
  8. 深度强化学习(二)强化学习算法的分类
  9. SQL在执行JOIN ON时,到底发生了什么?
  10. java graphics类详解_Java中Graphics2D类的使用操作解析
  11. 64位计算机装32位系统,32位装64位系统教程
  12. 抑郁症:从自毁到重生,可能你只差一个它
  13. css 文本超出显示省略号不起作用
  14. 计算机开机f8键,开机F8键“高级启动选项”的秘密
  15. 面向用户界面设计,故障诊断程序集成设计(以CWRU为例)
  16. 第19节 三个败家子(19)——史上最牛太守孙坚
  17. Codeforces 1166 F. Vicky's Delivery Service 并查集+set
  18. 前程无忧python爬虫
  19. 视频直播软件开发中关于极光用户修改 [头像、昵称] 的教程
  20. Java中sort()方法的使用

热门文章

  1. 卡塔尔世界杯半自动越位识别技术(SAOT)的工作原理
  2. Android IJKPlayer 直播RTMP
  3. keras实现pspnet和resnet101-refinenet
  4. 【N沟道MOS管和P沟道MOS管】经典全详解
  5. activiti7创建25张表
  6. matlab的imwrite函数将图片写入指定文件夹中
  7. VS导入数据到数据库
  8. RFID网络读卡器通讯协议
  9. Centos 7离线安装Nginx 配置负载均衡集群
  10. 算法导论/第一部分_基础知识