阿里消息中间件ONS的应用场景(一)

消息中间件的产生主要是为了达到以下目的:

  1. 异步
  2. 解耦
  3. 最终一致性
  4. 并行

 下面我们来看针对同一件事情,不同的处理办法:

过年了拜年发微信:

  • 普通青年:编辑微信,群发给所有人。
  • 文艺青年:编辑微信,交给美腻秘书发送,自己已去......
  • 二笔青年:编辑微信,发送;编辑微信,发送;编辑微信,发送;..........

我们现在主要关注第二种场景,它的使用方式实现了解耦操作和异步操作。

  • 举一个淘宝的简单例子:

104004_5x99_3101476.png

一笔交易的完成涉及到很多系统协调操作的过程,如上多个系统,但如果只是串行的执行这些操作,可能还没执行完这些操作,用户可能已没有耐心,离开了操作界面。给用户留下不好的用户体验。

  • 现在消息中间件就派上了用场:

104354_Dkts_3101476.png(以下截图都取自阿里沈询消息中间件ONS讲解)

消息中间件具有减少延迟,提升用户体验(异步解耦)

最终一致性:如果由于消息中间件消费端的一个模块 crash 了,而出现的短暂不一致现象,而该模块恢复以后会重新完成它的操作,最终保证数据操作的一致性,我们可以使用消息中间件来保证最终状态的统一。

并行:因为消息时并行发送到各个消息队列的,也是并行的被各个系统进行处理的,系统的高效可以由此得到保证。

ONS的设计思路:

消息中间件的难点主要是在于权衡和取舍。

  • 设计假定:
    • 每台PC机器都可能down机不可服务
    • 任意集群都可能处理能力不足
    • 最坏的情况一定会发生
    • 内网环境要低延迟来提供最佳用户体验
  • 关键设计:
    • 分布式集群化
    • 强数据安全
    • 海量数据堆积
    • 毫秒级投递延迟

数据安全:交易物流等 数据不能丢失

105828_Eoq2_3101476.png

110044_DZOY_3101476.png

使用队列多冗余的方式保证消息队列的高可用性。(包括数据的复制,服务器的切换等操作都是在消息队列后端来完成,对用户是不可见的)。

110230_CHXb_3101476.png

中间件设计保证:不管系统堆积了多少消息,系统本身的处理能力不能慢或不能挂。

110449_0t3R_3101476.png

  • 消息投递的三种方式:
  1. 推拉结合

Kafkia 面向的场景是:日志的分析,处理 及 统计功能,它主要更关注于日志拉取的吞吐量。而不太关注数据拉取的延迟,它采取的主要地消息投递模式是拉模型。

ONS采取的是推拉结合的模式(长轮询的模式)

推送策略:

队列中收到消息后会主动推送给订阅者,订阅者返回一个ack,这样的数据延迟会比较小,并且订阅者比较轻量,主需要关注接收和处理消息就可以了。

拉取策略:拉消息是订阅者定时向消息服务器拉取消息,这样消息服务器压力会比较大,并且延迟相对来说会比较大,拉消息模式关注的主要是吞吐量。

推拉结合:当队列中收到发布者发送的消息之后,会给消息订阅者一个通知,我这边收到消息了,然后订阅者会向消息中间件的服务器拉取消息。——缺点,拉取消息本身的交互次数会变得非常多。

另一种方案:消息的订阅者在主动拉取消息的同时,ONSServer 会 hold住你拉的请求,知道有消息以后会返回给你。以这种方式可以实现 以拉取的模式(策略)来实现非常及时的通讯。

 

 

 

转载于:https://my.oschina.net/LucasZhu/blog/1784898

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、MQ场景     1)订单异步解耦     2)解决分布式事务问题     3)应用于聊天平台     4)大规模机器的Cache同步     5)MySQL BinLog订阅数据分发 2、ONS应用场景     异步、解耦、最终一致、并行 3、设计假定     1)每台PC机器都可能down机不可服务     2)任意集群都可能处理能力不足     3)最坏情况一定会发生     4)内网环境需要低延迟来提供你最佳用户体验 4、关键设计     1)分布式集群化         a、理论上无限处理能力         b、集群级别高可用     2)强数据安全         a、单机磁盘级别冗余         b、单组多队列级别冗余         c、多组消息队列冗余     3)海量数据堆积         a、推模式:订阅者逻辑简单         b、拉模式:关注吞吐量,快         c、推拉结合:队列通知消费者,消费者去拉取(两次交互)         d、阿里采用长连接和轮询:轮询去拉,有则拉取,无则保持长连接等待,直到有消息     4)毫秒级投递延迟 5、关键概念     1)Topic:第一级消息类型,主标题     2)Tug:第二级消息类型,分标题     3)发送组:生产者所在集群     4)订阅组:消费者所在集群     5)RocketMQ不是一对一,也不是一对多,是随机一对一     6)网络三种状态:成功、失败、没响应 6、消息乱序问题:Message服务器不处理,恰好不需要解决     1)发送时对消息进行编号     2)一组消息只有唯一一个订阅者处理(sharding)     3)一组消息的数量(即“锁的颗粒度”)越小越好 7、消息重复问题     1)重复原因:网络不可达     2)幂等:某个操作无论重复多少次,结果都一样(不需要解决,性能极高)     3)非幂等,去重         a、保证有个唯一ID标记每一条消息;         b、保证消息处理成功与去重表日志同时出现     4)去重代价:额外的tps和qps 8、事务的分布式优化     1)事务1-->MQ Server-->事务2     2)同时成功,同时失败:         a、发消息;         b、执行事务1;         c、确认消息发送;         d、投递消息到消费者     3)处理超时问题(重复):事务2增加消息确认表(去重表)     4)消息失败(事务2失败):记录后人工处理(小概率事件)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值