淘宝notify-消息中间件(2)

2024-06-20 17:58

本文主要是介绍淘宝notify-消息中间件(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

核心原理

Notify在设计思路上与传统的MQ有一定的不同,他的核心设计理念是

为了消息堆积而设计系统

无单点,可自由扩展的设计

下面就请随我一起,进入到我们的消息系统内部来看看他设计的核心原理

为了消息堆积而设计系统在市面上的大部分MQ产品,大部分的核心场景就是点对点的消息传输通道,然后非常激进的使用内存来提升整体的系统性能,这样做虽然标称的tps都能达到很高,但这种设计的思路是很难符合大规模分布式场景的实际需要的。

在实际的分布式场景中,这样的系统会存在着较大的应用场景瓶颈,在后端有大量消费者的前提下,消费者出现问题是个非常常见的情况,而消息系统则必须能够在后端消费不稳定的情况下,仍然能够保证用户写入的正常并且TPS不降,是个非常考验消息系统能力的实际场景。

也因为如此,在Notify的整体设计中,我们最优先考虑的就是消息堆积问题,在目前的设计中我们使用了持久化磁盘的方式,在每次用户发消息到Notify的时候都将消息先落盘,然后再异步的进行消息投递,而没有采用激进的使用内存的方案来加快投递速度。

这种方式,虽然系统性能在峰值时比目前市面的MQ效率要差一些,但是作为整个业务逻辑的核心单元,稳定,安全可靠是系统的核心诉求。

无单点,可自由扩展的设计

图3-5展示了组成Notify整个生态体系的有五个核心的部分。

发送消息的集群这主要是业务方的机器,这些APP的机器上是没有任何状态信息的,可以随着用户请求量的增加而随时增加或减少业务发送方的机器数量,从而扩大或缩小集群能力。

配置服务器集群(Config server)这个集群的主要目的是动态的感知应用集群,消息集群机器上线与下线的过程,并及时广播给其他集群。如当业务接受消息的机器下线时,config server会感知到机器下线,从而将该机器从目标用户组内踢出,并通知给notify server,notify server 在获取通知后,就可以将已经下线的机器从自己的投递目标列表中删除,这样就可以实现机器的自动上下线扩容了。

消息服务器(Notify Server)消息服务器,也就是真正承载消息发送与消息接收的服务器,也是一个集群,应用发送消息时可以随机选择一台机器进行消息发送,任意一台server 挂掉,系统都可以正常运行。当需要增加处理能力时,只需要简单地增加notify Server就可以了

存储(Storage)Notify的存储集群有多种不同的实现方式,以满足不同应用的实际存储需求。针对消息安全性要求高的应用,我们会选择使用多份落盘的方式存储消息数据,而对于要求吞吐量而不要求消息安全的场景,我们则可以使用内存存储模型的存储。自然的,所有存储也被设计成了随机无状态写入存储模型以保障可以自由扩展。

消息接收集群业务方用于处理消息的服务器组,上下线机器时候也能够动态的由config server 感知机器上下线的时机,从而可以实现机器自动扩展。

3.2、Notify双11准备与优化

在双11的整个准备过程中,Notify都承载了非常巨大的压力,因为我们的核心假定就是后端系统一定会挂,而我们需要能够承载整个交易高峰内的所有消息都会堆积在数据库内的实际场景。

在多次压测中,我们的系统表现还是非常稳定的,以60w/s的写入量堆积4.5亿消息的时候,整个系统表现非常淡定可靠。在真正的大促到来时,我们的后端系统响应效率好于预期,所以我们很轻松的就满足了用户所有消息投递请求,比较好的满足了用户的实际需要。

这篇关于淘宝notify-消息中间件(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078845

相关文章

【NodeJS】如何安装淘宝cnpm

工具官网 Node.js淘宝 NPM 镜像 安装cnpm npm install -g cnpm --registry=https://registry.npm.taobao.org 输入cnpm -v查看是否正常(前提是你已经设置好了环境变量) cnpm -v 如果想给npm添加淘宝镜像,请参考: 【NodeJS】修改npm的registry为淘宝镜像(npm.taobao.o

【python 爬虫】python淘宝爬虫实战(selenum+phontomjs)

1、需求目标 : 进去淘宝页面,搜索耐克关键词,抓取 商品的标题,链接,价格,城市,旺旺号,付款人数,进去第二层,抓取商品的销售量,款号等。 2、结果展示 3、源代码 # encoding: utf-8import sysreload(sys)sys.setdefaultencoding('utf-8')import timeimport pandas as pd

企业级大数据平台建设参考 | 淘宝滴滴美团360快手京东

点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 本文结合小编自己的经验并且参考了淘宝&滴滴&美团&360&快手等各个大厂大数据平台建设的思路。在尊重事实的基础上重新组织了语言和内容,旨在给读者揭开一个完善的大数据平台的组成和发展过程。 大数据平台是为了计算,现今社会所产生的越来越大的数据量,以存储、运算、展现作为目的的平台。大数据技术是指从各种各样类型的数据中,快速获得有价值信息

5000字阐述云原生消息中间件Apache Pulsar的核心特性和设计概览

点击上方蓝色字体,选择“设为星标” 回复”面试“获取更多惊喜 Apache Pulsar 是 Apache 软件基金会顶级项目,自称是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。 Pulsar 是一个用于服务器到服务器的消息系统,具有多租户

淘宝 API 接口调用失败的常见原因及解决方法

在使用淘宝 API 接口的过程中,可能会遇到接口调用失败的情况。以下是一些常见的原因及相应的解决方法。 一、常见原因 (一)认证问题 未正确注册和认证开发者账号:如果没有在开放平台上​​完成注册和认证流程​​,将无法获得合法的 API 调用权限。API 密钥错误:App Key 和 App Secret 是调用 API 的重要凭证,如果输入错误或被泄露,可能导致调用失败。 (二)参数问题

java join sleep wait notify notifyAll

sleep:在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。该线程不丢失任何监视器的所属权。  通过调用sleep使任务进入休眠状态,在这种情况下,任务在指定的时间内不会运行。 调用sleep的时候锁并没有被释放。 休眠  Java SE5引入了更加显示的sleep()版本作为TimeUnit类的一部分,这个方法允许你

java线程 yield,sleep,join,synchronized wait notify notifyAll,ReentrantLock lock condition, 生产者消费者

yield,sleep,join yield,join,sleep,join是Thread中的方法,不需要 在synchronized 代码块中调用,和synchronized 没关系,也不会释放锁。 Thread.sleep(100);Thread.yield();Thread t;t.join(); (1)yield()不一定保证让出cpu yield()只是使当前线程重新回

消息中间件都有哪些

RabbitMQ:这可是一个开源的消息代理软件,也叫消息中间件。它支持多种消息传递协议,可以轻松地在分布式系统中进行可靠的消息传递。   Kafka:Apache Kafka是一个分布式流处理平台,它主要用于处理实时数据流。Kafka的设计初衷是为了处理高吞吐量的日志数据,但它也被广泛用于其他类型的消息传递和流处理任务。   ActiveMQ:Apache ActiveMQ

如何使用电商API接口?(淘宝|京东商品详情数据接口)

一、了解电商API接口: 如今,在电商市场中,电商API接口的广泛应用极大地提高了电商行业的工作效率,使得商家能够灵活集成多种服务,高效优化业务流程。 当前,电商平台中的多种业务都可以通过使用API接口来做优化,如商品数据获取、用户数据、支付信息、物流跟踪等等。 二、选择并使用API接口: 当电商品牌方在选择API接口时,首先要做的是查阅电商API接口的相关文档,了解API接口的功能及

淘宝订单 API 接口:获取淘宝平台数据的 api 接口(电商 ERP 订单对接方案)

taobao.seller_order_list 获取卖家订单列表 taobao.custom 自定义淘宝开放平台 API 公共参数 请求地址: 登录 - 凡邦跨境电商平台接口提供商 数据采集公司 数据接口定制服务 企业级数据服务商 seller_order_list 参数说明 请求参数 请求参数:page=&tabCode=&dateBegin=&dateEnd=&buyerN