转自:http://www.cnblogs.com/lushilin/p/6209976.html(鲁仕林)

1.What is nmq?

nmq = new message queue;

一个通用消息队列系统

为在线服务设计

什么是消息队列?问什么需要?有哪些功能?

消息队列的本质:1.多个不同的应用之间实现相互通信的一种异步传输模式2.异步3.解耦

业界有哪些比较好的mq?

yahoo YMB 、twitter Kestrel、amazon SQS、apache kafka

百度的nmq和bigpipe

那么为什么会有这么多的实现呢?

影响设计的关键需求:

1.数据安全性

2.传输实时性

3.时序需求

4.吞吐需求

5.消费方形态

6.消息关联形态

现在介绍一下百度的nmq(看一下nmq的设计考量):

1.项目起源于大社区

2.重复开发、分散运维;极大的人力浪费;

并发+时序的难点,让rd头疼

核心+单点的运维,让op蛋疼

3.架构的发展,让老的系统不在适合

4.业务的发展,对性能、可扩展性有了更高的要求;

mq的本质需求:

1.数据安全性————》其实还好

2.传输实时性————》要求很高

3.吞吐需求————》很大

4.时序需求————》真的需要

5.消费方形态————》多样

6.消息关联形态————》1vN

nmq的其他需求:

1.集中运维

2.解耦

3.运维平台化、自动化

4.完善的功能,强大的时序+并发控制

5.支持国际化数据互通

模型设计(第一个问题)

nmq是基于消息的队列,还是基于消费者的队列

考虑点:

1.存储容量

2.运维便利度

3.扩展性

4.开发成本

所以最终选择应该基于消息本身。

模型设计(第二个问题):

1.推或者拉

2.核心问题:谁维护信息?

为了更加深入的对“推”和“拉”这两种模式进行对比,可以将consumer分为2类:

1.竞争模式:一个consumer模块部署很多机器,但所有机器竞争消费同一份消息。

2.多主模式:一个consumer模块部署很多机器,每个机器都消费全量消息。

推模型的分析:

1.推模型是消息集中管理方式,消息队列知道consumer的一切。

2.可以支持2种consumer模式,容易实现各种策略。

3.优点是灵活,什么都可以做

4.缺点是耦合,消息队列本身的运维是问题

拉模式分析

1.对多主的consumer:完美

消息队列只负责消息的存储和查询

运维便利、架构清晰、简单

2.对竞争的consumer:难以支持

两种模式的选择

1.竞争模式会是我们今后的主流模式和大趋势;

数据逻辑层和存储引擎层的分离

数据的拆分和冗余,都会在存储引擎层实现

2.PHP模块实现“拉”有一定的难度

3.实现策略的灵活性和重要,推模式有天然的优势

4.拉模式,会带来更大的迁移代价

5.最终选择“推”模式

消息标识:

1.msg = product+topic+cmd

2.product产品线标识

3.topic

按业务划分的消息序列,逻辑上的概念,可小可大。

nmq只保证相同的topic内的命令时序

4.cmd消息类别的最终标识,不同topic之间可以同名

模型:

1.proxy

消息唯一入口,以topic为单位消息分流

2.topic-server(ts)

消息存储。级联和备份

3.pusher

消息发送,协议可扩展

nmq集群图片:

nmq的扩展性设计:

1.垂直扩展

当接收同一个topic的consumer增多,导致pusher出现性能瓶颈。

可以通过ts级联扩展多个pusher解决,支持多级级联

2.水平扩展

当一个topic的命令增多,导致超过单机ts性能极限

可以通过将该topic拆分到多个ts解决;比如按照某个partition key进行拆分;拆分后,只有相同pk的消息才能保证时序。

运维设计

1.队列的存储粒度

一个ts内部的所有topic串行存储于一个队列中,共享一维transid;

牺牲性能换取简单,易运维

2.主从同步和切换

ts级联和备份合一;slave主动从master拉数据,配合资源定位,简化主从切换步骤。

异步pipeline模式,强吞吐,支持跨机房。

并发+时序

1.一发一答的串行更新模式远不能满足更新性能的需求

2.在并发的前提下,可以做到按照某个key的时需保证;

具有相同key的消息,可以保证时序

比如接贴吧发帖的命令的consumer,可以通过配置做到不同发帖更新并发,但保证同一个吧的发帖是有序串行的;

3.实现

正在发送窗口+待发送窗口

发送先前check是否有互斥的消息正在发送

国内跨城市方案:

国际化数据互通方案:

php 消息中间件,消息中间件NMQ相关推荐

  1. 深入理解阿里分布式消息中间件

    什么是分布式消息中间件 什么是分布式消息中间件? 对于分布式消息中间件,首先要了解两个基础的概念,即什么是分布式系统,什么又是中间件. 分布式系统: "A distributed syste ...

  2. 《分布式消息中间件实践》 读书笔记

    写在前面 听人家总说这些,之前项目里也没有用到,其实挺好奇的,之前也没时间看.这里准备用这本书入门,查了一下,书评很一般,但是入门应该够了,而且200多页,正合适,生活加油 笔记主要是书的摘写,不懂的 ...

  3. 创业公司 互联网架构方案 整体技术栈 基础设施 数据库 服务治理 消息中间件 日志系统 ELK 自动化部署

    欢迎关注博主公众号:[矿洞程序员]文章由陈晓阳原创. 本人微信:chenxiaoyangzxy. 免费提供本人大量学习资料. 从零开始搭建创业公司后台技术栈 原创: 潘锦 说到后台技术栈,脑海中是不是 ...

  4. 分布式中间件之消息中间件

    中间件是什么 首先,一个拥有信息化建设积累的公司内部可能同时运行着多个不同的业务系统,而这些系统可能基于不同操作系统,不同存储数据的数据库等,若需要将这些信息系统可以结合成一个协同工作的整体,实现企业 ...

  5. 分布式--消息中间件

    1.什么是消息中间件 消息中间件是指:利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程之间的通信. ...

  6. 消息中间件--ActiveMQ

    一.消息中间件(Message-Oriented) 1.1 什么是消息中间件 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息排 ...

  7. java 中间件介绍_java消息中间件的使用与简介

    一.为什么要使用消息中间件 消息中间件就是可以省去繁琐的步骤,直达目的,怎么讲呢,就是比如你想很多人,知道你的动态,而知道的人可能手机没电,可能手机信号不好,可能手机不在服务区,或者看的人比较忙,看的 ...

  8. 分布式消息中间件设计

    目录 1.什么是分布式消息中间件 1.1.单体架构 1.2.分布式系统架构 2.基于消息中间件的分布式系统架构 2.1.什么是消息中间件 2.2消息中间件概述 3.消息中间件的核心设计 3.1.本质 ...

  9. JAVA面试系列(二)消息中间件

    本人目前项目中有用到rocketMQ作为数据传输过程中的中间件,今天整理了一下资料,记录一下自己对消息中间件的理解. 一.概念 1.MQ message queue消息队列,消息队列是就是队列,是一种 ...

最新文章

  1. html财务统计,财务统计.html · 珠烟/layuiadmin-templete - Gitee.com
  2. Openresty+Nginx+Lua+Nginx_http_upstream_check_module 搭建
  3. Hash Table in C
  4. JSON-B和Yasson详解
  5. FreeImage的配置与使用
  6. 股市预测python代码<循环神经网络>
  7. python实现网页截图功能——学习篇(01)
  8. 阿里巴巴达摩院视觉AI平台概述
  9. 站内信功能 java_站内信功能
  10. Git 从已有分支拉出新分支
  11. 《U-Net: Convolutional Networks for Biomedical Image Segmentation》学习笔记
  12. 在一家虚拟现实公司工作是什么感受?
  13. ctf 杂项 猜 writeup
  14. 二二、方程Ax=b的行空间中的解
  15. 25万的特斯拉会动了谁的奶酪?
  16. matlab利用magnify作图
  17. libxml2创建xml
  18. qt开发界面程序快速入门总结
  19. C\C++代码优化的一些建议
  20. jmeter的下载,安装与压测功能基本使用

热门文章

  1. Json字符串解析原理、超大json对象的解析
  2. 在YII2框架中使用UEditor编辑器发布文章
  3. iOS9基础知识(OC)笔记
  4. AzureDirectory Library for Lucene.Net
  5. jquery操作radio/checkbox/select 及其相关
  6. 解决js跨域调用WebApi的问题
  7. python 实现异常退出
  8. 同一DIV内,两个行内块元素不对齐的解决方案
  9. 统一异常处理+错误编码设计方案
  10. Intellij Idea debug 模式如果发现异常,即添加异常断点在发生异常处