文档章节

万亿级数据洪峰下的分布式消息引擎

小虾米DYX
 小虾米DYX
发布于 2017/08/10 14:26
字数 1439
阅读 2
收藏 0
点赞 0
评论 0

点击查看全文

前言

通过简单回顾阿里中间件(Aliware)消息引擎的发展史,本文开篇于双11消息引擎面临的低延迟挑战,通过经典的应用场景阐述可能会面临的问题 - 响应慢,雪崩,用户体验差,继而交易下跌。为了应对这些不可控的洪峰数据,中间件团队通过大量研究和实践,推出了低延迟高可用解决方案,在分布式存储领域具有一定的普适性。在此基础上,通过对现有有限资源的规划,又推出了分级的容量保障策略,通过限流、降级,甚至熔断技术,能够有效保障重点业务的高吞吐,成功的支撑集团包括海外业务平缓舒畅地度过双11高峰。与此同时,在一些对高可靠、高可用要求极为苛刻的场景下,中间件团队又重点推出了基于多副本机制的高可用解决方案,能够动态识别机器宕机、机房断网等灾难场景,自动实现主备切换。整个切换过程对用户透明,运维开发人员无需干预,极大地提升消息存储的可靠性以及整个集群的高可用性。

1. 消息引擎家族史

阿里中间件消息引擎发展到今日,前前后后经历了三代演进。第一代,推模式,数据存储采用关系型数据库。在这种模式下,消息具有很低的延迟特性,尤其在阿里淘宝这种高频交易场景中,具有非常广泛地应用。第二代,拉模式,自研的专有消息存储。能够媲美Kafka的吞吐性能,但考虑到淘宝的应用场景,尤其是其交易链路等高可靠场景,消息引擎并没有一位的追求吞吐,而是将稳定可靠放在首位。因为采用了长连接拉模式,在消息的实时方面丝毫不逊推模式。在前两代经历了数年线上堪比工况的洗礼后,中间件团队于2011年研发了以拉模式为主,兼有推模式的高性能、低延迟消息引擎RocketMQ。并在2012年进行了开源,经历了6年双11核心交易链路检验,愈久弥坚。目前已经捐赠给阿帕奇基金会(ASF),有望成为继ActiveMQ,Kafka之后,Apache社区第三个重量级分布式消息引擎。时至今日,RocketMQ很好的服务了阿里集团大大小小上千个应用,在双11当天,更有不可思议的万亿级消息流转,为集团大中台的稳定发挥了举足轻重的作用。

e673c3eeeef08ed68ff261e06085697a1696fa1d

2. 低延迟可用性探索

疾风吹征帆,倏尔向空没。千里在俄顷,三江坐超忽。—孟浩然

2.1低延迟与可用性

随着Java语言生态的完善,JVM性能的提高,C和C++已经不再是低延迟场景唯一的选择。本章节重点介绍RocketMQ在低延迟可用性方面的一些探索。
应用程序的性能度量标准一般从吞吐量和延迟两方面考量。吞吐量是指程序在一段时间内能处理的请求数量。延迟是指端到端的响应时间。低延迟在不同的环境下有不同的定义,比如在聊天应用中低延迟可以定义为200ms内,在交易系统中定义为10ms内。相对于吞吐量,延迟会受到很多因素的影响,如CPU、网络、内存、操作系统等。
根据Little’s law,当延迟变高时,驻留在分布式系统中的请求会剧增,导致某些节点不可用,不可用的状态甚至会扩散至其它节点,造成整个系统的服务能力丧失,这种场景又俗称雪崩。所以打造低延迟的应用程序,对提升整个分布式系统可用性有很大的裨益。

2.2 低延迟探索之路

RocketMQ作为一款消息引擎,最大的作用是异步解耦和削峰填谷。一方面,分布式应用会利用RocketMQ来进行异步解耦,应用程序可以自如地扩容和缩容。另一方面,当洪峰数据来临时,大量的消息需要堆积到RocketMQ中,后端程序可以根据自己的消费速度来进行数据的读取。所以保证RocketMQ写消息链路的低延迟至关重要。
在今年双11期间,天猫发布了红包火山的新玩法。该游戏对延迟非常敏感,只能容忍50ms内的延迟,在压测初期RocketMQ写消息出现了大量50~500ms的延迟,导致了在红包喷发的高峰出现大量的失败,严重影响前端业务。下图为压测红包集群在压测时写消息延迟热力图统计。

 

 

点击查看全文

本文转载自:http://click.aliyun.com/m/23000/

共有 人打赏支持
小虾米DYX
粉丝 0
博文 113
码字总数 0
作品 0
海淀
SACC2017:万亿级数据洪峰消息引擎实践

  【IT168 SACC现场报道】在数字化转型时代,云已成为万物智能的数字化大脑。而随着大数据应用、人工智能、移动互联网等技术的飞速发展,“智慧+”的概念正在深入到各行各业,提升企业效率...

it168网站
2017/10/20
0
0
Apache RocketMQ:从孵化项目到顶级项目 这是一个新的开始

几个月前,RocketMQ 社区发生了一件大事 —— Apache RocketMQ 宣布从 Apache 社区正式毕业,成为 Apache 顶级项目 (TLP),这也是国内首个互联网中间件的 Apache 顶级项目。要知道,RocketM...

局长
2017/12/18
427
1
分享一个号称万亿级海量的深度日志分析系统

分享一个号称万亿级海量的深度日志分析系统 我想,作为我们IT运维管理人员都知道,日志是记录设备和系统问题的信息,同时还可以监视系统中发生的事件,用户可以通过它来分析错误发生的原因,...

畅享择天0
2016/08/28
615
5
阿里巴巴向 Apache 软件基金会捐赠消息中间件 RocketMQ

继向 Apache 软件基金会捐赠 JStorm 后,阿里巴巴在开源界又有一大举动。 11 月 28 日,阿里巴巴宣布将开源分布式消息中间件 RocketMQ 捐赠给 Apache,成为 Apache 孵化项目,孵化成功后 Ro...

局长
2016/11/28
12.1K
32
如何扛住1.8亿/秒的双11数据洪峰?阿里流计算技术全揭秘

  今年的双11再次刷新了记录——支付成功峰值达25.6万笔/秒、实时数据处理峰值4.72亿条/秒。面对较去年增幅100%的数据洪峰,流计算技术可谓功不可没。今天,我们将揭开阿里流计算技术的神...

天池大数据科研平台
2017/11/28
0
0
常用mq对比及rocketmq、kafka选型

一、常用MQ对比 上述来自CSDN搜索博客中的图片。 上述来自阿里云栖社区搜索博客中的图片。 二、rocket、kafka选型 (以下汉字内容是从下述各个网站中摘取出的个人认为的重点内容。) 1、Kaf...

二进制卤蛋
2017/10/11
0
0
RocketMQ 孵化成为 Apache 顶级项目

美国时间 2017 年 9 月 25 日,Apache 软件基金会(ASF)宣布 Apache®RocketMQ™ 已孵化成为 Apache 顶级项目(TLP ),是国内首个互联网中间件在 Apache 上的顶级项目,也是全球继 Active...

达尔文
2017/09/26
3.3K
12
全球级的分布式数据库 - Google Spanner

Spanner 是Google的全球级的分布式数据库 (Globally-Distributed Database) 。Spanner的扩展性达到了令人咋舌的全球级,可以扩展到数百万的机器,数已百计的数据中心,上万亿的行。更给力的是...

匿名
2014/11/18
4.1K
2
【干货合集】技无止境——2017双11核心技术大揭秘

一、视频分享 1、双11万亿流量下的分布式缓存Tair技术揭秘 视频主要从Tair发展和应用开始谈起,接着谈及双11面临的挑战,重点分享了性能优化方面的实践,最后对缓存难题给出了解决方案。 点击...

阿里云云栖社区
01/03
0
0
架构-高并发-解决方案

5 个构建第一个 Java 镜像的小窍门 本文介绍了构建 Java 镜像的五个小窍门,从而以超越基本概念和框架的方式开启 Docker 容器之旅。 唱吧 K 歌亭基于 Docker 的微服务架构 随着互联网的高速发...

掘金官方
01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
2
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部