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

2024-06-20 17:58

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

淘宝的notify是一个非常有特色的消息中间件。它用创新地方式解决了分布式事务的问题,用相对较低的成本,实现了跨micro service的最终一致性。这种把最终一致性用application queue而不是database replication queue的方式来实现,把IT技术层面的跨业务的事务变成一个业务层面的单据传递的概念,非常值得推广。

消息中间件——分布式消息的广播员

综述

消息中间件是一种由消息传送机制或消息队列模式组成的最典型的中间件技术。通过消息中间件,应用程序或组件之间可以进行可靠的异步通讯来降低系统之间的耦合度,从而提高整个系统的可扩展性和可用性。

3.1、Notify

Notify是淘宝自主研发的一套消息服务引擎,是支撑双11最为核心的系统之一,在淘宝和支付宝的核心交易场景中都有大量使用。消息系统的核心作用就是三点:解耦,异步和并行。下面让我以一个实际的例子来说明一下解耦异步和并行分别所代表的具体意义吧:

假设我们有这么一个应用场景,为了完成一个用户注册淘宝的操作,可能需要将用户信息写入到用户库中,然后通知给红包中心给用户发新手红包,然后还需要通知支付宝给用户准备对应的支付宝账号,进行合法性验证,告知sns系统给用户导入新的用户等10步操作。

那么针对这个场景,一个最简单的设计方法就是串行的执行整个流程,如图3-1所示:

这种方式的最大问题是,随着后端流程越来越多,每步流程都需要额外的耗费很多时间,从而会导致用户更长的等待延迟。自然的,我们可以采用并行的方式来完成业务,能够极大的减少延迟,如图3-2所示。

但并行以后又会有一个新的问题出现了,在用户注册这一步,系统并行的发起了4个请求,那么这四个请求中,如果通知SNS这一步需要的时间很长,比如需要10秒钟的话,那么就算是发新手包,准备支付宝账号,进行合法性验证这几个步骤的速度再快,用户也仍然需要等待10秒以后才能完成用户注册过程。因为只有当所有的后续操作全部完成的时候,用户的注册过程才算真正的“完成”了。用户的信息状态才是完整的。而如果这时候发生了更严重的事故,比如发新手红包的所有服务器因为业务逻辑bug导致down机,那么因为用户的注册过程还没有完全完成,业务流程也就是失败的了。这样明显是不符合实际的需要的,随着下游步骤的逐渐增多,那么用户等待的时间就会越来越长,并且更加严重的是,随着下游系统越来越多,整个系统出错的概率也就越来越大。

通过业务分析我们能够得知,用户的实际的核心流程其实只有一个,就是用户注册。而后续的准备支付宝,通知sns等操作虽然必须要完成,但却是不需要让用户等待的。

这种模式有个专业的名词,就叫最终一致。为了达到最终一致,我们引入了MQ系统。业务流程如下:

主流程如图3-3所示:

 

图3-3-用户注册流程-引入MQ系统-主流程

异步流程如图3-4所示:

 

图3-4-用户注册流程-引入MQ系统-异步流程

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



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

相关文章

【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