流计算StreamCompute

免费开通大数据服务:https://www.aliyun.com/product/odps

背景

每年的双十一除了“折扣”,全世界(特别是阿里人)都关注的另一个焦点是面向媒体直播的“实时大屏”(如下图所示)。包括总成交量在内的各项指标,通过数字维度展现了双十一狂欢节这一是买家,卖家及物流小二一起创造的奇迹!

双十一媒体直播大屏

这一大屏背后需要实时处理海量的庞大电商系统各个模块产生的交易日志,例如双十一当前产生的日志量达到了3.7PB,而每秒处理的峰值更是达到了近1亿事件!

如此大规模、高吞吐和低延时计算,带来一系列世界级的技术挑战,包括:

1.    
实时编程:流式的数据处理给业务逻辑的表达和推理带来了很多的复杂性。特别面对不断变化的业务需求,如何帮助用户快速地编写和验证实时计算逻辑是至关重要的。

2.    
低延时:实时计算强调计算延时和结果的时效性。例如实时大屏对计算延时特别敏感,每年的双十一都超越前一年更早地达到相同的成交量,系统需要在秒级甚至毫秒级反应出每一笔交易。即使在流量高峰时(双十一晚0:00点)也需要保证延时!

3.    
集群利用率:为提高资源利用率,我们将不用业务的实时处理逻辑共享一个集群。这样的共享也带来性能隔离的问题,即如何让同一台物理机上的不同逻辑任务不互相干扰。这也是大部分开源框架忽略的重要问题。

4.    
严格容错及数据一致性:随着应对高吞吐而不断扩大的集群规模,各种软硬件故障都难以避免。如何保证实时计算在任何故障下都能产生准确、一致的计算结果,不遗漏、重复事件输出,也不引起内部状态的偏差,是另一个重大挑战。

5.    
多样化场景支持:随着实时决策对业务的价值越来越多,系统还需要支持越来越复杂和多样化的场景,如在线机器学习、结合图计算实现的动态关系网络分析等等。

下文介绍StreamCompute的重要技术创新,简要描述它们如何帮助应对以上技术挑战。

 

SQL与增量计算——复用熟悉的离线思维,自动实现增量(流式)计算!

为了简化用户编程,特别是利用原有的离线计算作业快速实现实时计算,StreamCompute允许通过高层描述性语言,如用户熟悉的SQL来编写流计算作业。例如下面的例子,通过简单几行SQL代码就可以实现过滤、维表关联等业务逻辑。

在执行时,由于数据是以流式进入系统的,用户的SQL就像数据库视图一样,被自动增量更新,并以一定的频率输出结果,供下游计算和展示。

这一独特的编程设计,不仅帮助用户借助熟悉的离线处理思维表达实时计算逻辑,也因为同样的程序可以在离线系统运行,使得结果的对比变得易如反掌。

 

高性能优化引擎——实现低延时计算

用户的SQL脚本经过编译优化,生成数据流图,然后运行于StreamCompute的分布式引擎之上。相比开源数据流引擎,StreamCompute引擎在“阿里巴巴规模”下,面对真实复杂的业务场景做了很多优化。包括自适应的消息打包、自定义序列化、数据行+列压缩、先进的内存管理、和内部缓存队列和线程模型,以及基于下游向上游“反向”传递压力的流控策略等。

图:StreamCompute优化执行流和运行时模块

经过以上一系列的优化,StreamCompute相比去年提升了6倍左右的吞吐性能。下图显示了StreamCompute相比开源系统的性能优势。在面对今年双十一3倍于去年的峰值情况下,表现非常稳健。

图:开源框架性能对比,通过“窗口WordCount(6组参数)”基准测试获取

 

灵活的资源调度

StreamCompute面对阿里巴巴集团众多业务场景,将不同业务放置于大规模(几千台服务器组成的)共享集群中,以提高资源利用率。另一方面也随之带来了“多租户”环境下的作业资源隔离问题,它直接影响资源的有效利用和作业的计算性能。

经过多年的积累,StreamCompute支持CPU、内存、网络和磁盘I/O等多维度资源的隔离。例如,对于CPU的隔离支持灵活的min-max策略,既保证了每个作业最基本的资源需求,也使的空闲的资源被最大限度利用。

图:作业维度的CPU资源min-max共享模型

在此基础上,StreamCompute的资源调度还支持一定比例的“超卖”、作业优先级调度、动态负载均衡和微作业共享单一物理核等多种机制。对于资源消耗特别大的作业还支持动态按需分配(即资源的弹性分配)。在满足复杂的运维要求和实时计算连续性的同时,实现了高效的资源利用和性能隔离。

容错与状态管理

流计算需要连续处理可能无界的输入和连续产生输出。在长时间运行中,大规模计算集群的各种软件或硬件故障难以避免。由此对于计算和中间结果(如内存状态)的容错就至关重要。为了做到精确的容错和故障恢复,保证结果的准确性。StreamCompute支持多种灵活的容错策略,以在不同计算特性下,权衡容错资源消耗和恢复性能。如基于输入的重新计算、状态检查点(checkpoint),甚至是多副本的状态和计算容错等。

特别是自动的分布式增量检查点功能,系统自动利用内存、本地磁盘和远程存储构成的多级存储,在不影响流计算延时的情况下异步实现了计算状态的持久化。当有故障发生时,保存的状态可以被快速加载。这一切对用户都是无感知的。

图:自动利用多级存储的流计算状态管理

 

开放可编程API(兼容Apache Beam

除了SQL这样高层的描述语言和用户自定义逻辑(UDF),StreamCompute还支持Apache Beam API,以提供更为灵活的实时逻辑编程。Beam是一个统一开放的大数据应用编程接口,可以同时描述离线和在线逻辑,最早由Google提出。Beam提供了功能丰富的编程接口,能有效的处理有界、无界、乱序的数据流输入。 下面显示了通过Beam实现的流式WordCount的例子:

1.指定Runner(底层计算引擎)创建一个Pipeline。
2.使用Source在Pipeline上生成一个PCollection,输入数据。
3.对PCollection应用Transforms操作,比如wordCount中的count操作。
4.对最后的PCollection应用Sink,输出结果到外部存储中。
5.Run Pipeline到底层的计算引擎中。
使用Beam实现WordCount代码样例
public static class CountWords extends PTransform<PCollection<String>,
    PCollection<KV<String, Long>>> {
  @Override
  public PCollection<KV<String, Long>> apply(PCollection<String> lines) {
    // Convert lines of text into individual words.
    PCollection<String> words = lines.apply(
        ParDo.of(new ExtractWordsFn()));
    // Count the number of times each word occurs.
    PCollection<KV<String, Long>> wordCounts =
        words.apply(Count.<String>perElement());
    return wordCounts;
  }
}

借助Beam,用户可以利用高性能的StreamCompute引擎,定制面向特定领域的系统交互接口。同时,StreamCompute今后也将兼容更多生态(如Spark Streaming和Flink Streaming API)。

 

可视化集成开发平台和自动化运维

StreamCompute还提供了“一站式”的集成开发环境——贝叶斯(Bayes,https://data.aliyun.com/product/sc)和自动化运维平台——特斯拉(Tesla当前仅服务阿里集团内部,未来逐步开放对外服务)。通过它们,用户可以方便地管理流计算应用的生命周期,包括编程、调试、监控运维,极大地降低了流计算系统的使用门槛。

图:贝叶斯集成开发环境

 

双十一的宝贵工程经验!

为保障系统在双十一平稳支撑业务,在以上功能基础上,我们还总结了完整的全链路保障方法:

·       
主备双链路容灾:利用StreamCompute对多副本执行的支持,面向双十一重点媒体大屏等实时业务,实现了跨机房的多链路副本。哪怕是整个机房的故障,都能在秒级自动切换到另一副本上执行,保障了双十一系统高可用。

·       
实时全链路监控:我们从数据采集、读取、消费、入库各个环节都增加延时指标的埋点,可以清晰地看到整条链路各个阶段的延时,快速分析哪个组件性能瓶颈。另外,针对作业本身运行情况,比如输入吞吐、流量、CPU和内存消耗,都做了实时分析和展示的系统,能在秒级发现作业的异常。

·       
运维诊断工具:为应对各种应急响应,我们做了一套完整的运维诊断工具用于发现集群热点机器、热点作业。在Tesla页面上能快速找到集群的热点机器,通过“机器分析”工具查看这台机器上实时跑的任务,并且能定位到相应的业务和用户。通过“作业分析”工具能自动诊断异常,结合作业的优先级,实现了一键负载均衡、启停、续跑等运维操作。

通过这些保障设施,双十一当天,即使在发生交换机硬件故障的情况下,面向全球直播的媒体大屏业务并没有受到任何影响!

 

总结

拥有这些和其它诸多能力,StreamCompute已经具备了相当完善的实时计算能力,也提供了“一站式”的解决方案。今年双十一当天,StreamCompute处理了3.7PB数据,处理峰值达到了1亿事件每秒,平均处理延迟在毫秒级!除了双十一媒体大屏,StreamCompute还支撑着阿里巴巴集团内外众多实时业务,包括数据运营、广告营销、搜索个性化、智能客服、物流调度、支付宝、聚划算等。

时间: 2024-11-02 19:15:27

流计算StreamCompute的相关文章

阿里云计算能力再次飞跃 流计算2.0每秒峰值达千万QPS

10月12日,阿里巴巴集团副总裁周靖人在云栖大会上发布了阿里云在大数据计算能力上的新突破:将BigBench数据规模扩展到100T:流计算2.0每秒峰值达千万QPS,整体链路延时亚秒级:E-MapReduce对比同类产品平均性能提升3倍. 周靖人说,数据是机器智能创新的基础,拥有充沛的计算能力才能全面释放数据的价值.我们希望通过不断的释放阿里云的计算红利,帮助开发者抓住更多市场机遇. BigBench全球首次达到100TB TPCx-BigBench是大数据端到端真实复杂的业界领先测试基准,目前

阿里云大数据利器之-使用sql实现流计算做实时展现业务( flume故障转移版 )

实时业务处理的需求越来越多,也有各种处理方案,比如storm,spark等都可以.那以数据流的方向可以总结成数据源-数据搜集-缓存队列-实时处理计算-数据展现.本文就用阿里云产品简单实现了一个实时处理的方案. 一,总体架构 按照数据流向 数据采集:flume(配置故障转移) 缓存队列:datahubhttps://help.aliyun.com/product/53345.html?spm=5176.7618386.3.4.cigK2v 数据计算:阿里流计算(StreamCompute)http

阿里云大数据利器之-使用flume+sql实现流计算做实时展现业务(归档Maxcompute)

实时业务处理的需求越来越多,也有各种处理方案,比如storm,spark等都可以.那以数据流的方向可以总结成数据源-数据搜集-缓存队列-实时处理计算-数据展现.本文就用阿里云产品简单实现了一个实时处理的方案. 一,总体架构 按照数据流向 数据采集:flume(配置故障转移) 缓存队列:datahubhttps://help.aliyun.com/product/53345.html?spm=5176.7618386.3.4.cigK2v 数据计算:阿里流计算(StreamCompute)http

阿里蒋晓伟谈流计算和批处理引擎Blink,以及Flink和Spark的异同与优势

首届阿里巴巴在线技术峰会(Alibaba Online Technology Summit),将于7月19日-21日 20:00-21:30 在线举办.本次峰会邀请到阿里集团9位技术大V,分享电商架构.安全.数据处理.数据库.多应用部署.互动技术.Docker持续交付与微服务等一线实战经验,解读最新技术在阿里集团的应用实践. 7月19日晚8点,阿里搜索事业部资深搜索专家蒋晓伟将在线分享<阿里流计算和批处理引擎Blink>,其基于Apache Flink项目并且在API和它上兼容,深度分享阿里为

S4分布式流计算引擎

背景   最近花了点时间研究了下分布式计算这一块的内容.领导给的第一个任务,就是学习下S4和GridGain.花了几天的时间把s4的源码看了下,把自己的理解和学习的内容做一个记录. 下一篇会是GridGain的分享 学习 s4的论文: S4: Distributed Stream Computing Platform s4的官网: http://s4.io/ s4是什么? 1.  s4的全称 :  Simple Scalable Streaming System (简单的描述:分布式流计算系统)

为什么对整个文件流计算MD5比分块慢

问题描述 计算一个文件的MD5和把文件分成n分,计算每块的MD5.为什么对文件流计算的还慢呢?HMACSHA1hmac=newHMACSHA1(BitConverter.GetBytes(HashKey[0]));hashes=hmac.ComputeHash(data);//其中一个文件块,共n块HMACSHA1hmac2=newHMACSHA1(BitConverter.GetBytes(HashKey[0]));hashes=hmac2.ComputeHash(fstream);//计算文

阿里流计算平台开发实例之电商双11实时计算

由于之前没写过博客之类的文章,所以这次写也是心中揣揣,也是由于这个项目间没有找到相关的一些文档,当时就想着完成后写一个出来,如果有写的不周到的地方,请联系我改正,谢谢. 一. 项目案例 用户商业模式含盖电商零售与加盟店批发零售,本次主要业务需求在于淘宝双11期间能实时计算用户所关注的一些指标数据,如:订单数.订单金额.商品SKU数.订单来源地.商品排名等等. 基于这些指标需求,除了要达到实时的要求以外,还需要具备适当的展现图设计,本次使用的是阿里云的DATAV,提供饼状图占比分析.商品与类目数据

云端流计算、在线业务、实时分析 闭环设计 - 阿里云RDS、HybridDB for PostgreSQL最佳实践

背景 水的流动汇成江河大海,孕育生命,形成大自然生态.数据流动,推进社会进步,拓展业务边界. <从人类河流文明 洞察 数据流动的重要性> 以某淘系业务案例展开,看看用户如何利用阿里云RDS PostgreSQL,HybridDB for PostgreSQL,海量对象存储OSS,打造一个从流计算到在线业务,再到数据分析和挖掘的业务,发挥数据的价值,拓展业务的边界. 业务简介 一个电商业务通常会涉及 商家.门店.物流.用户.支付渠道.贷款渠道.商品.平台.小二.广告商.厂家.分销商.店主.店员.

流计算风云再起 - PostgreSQL携PipelineDB力挺IoT(物联网), 大幅提升性能和开发效率

标签 PostgreSQL , pipelinedb , 流计算 , patch , bug , libcheck , zeromq , kafka , kinesis , IoT , 物联网 背景 pipelinedb是基于PostgreSQL的一个流式计算数据库,纯C代码,效率极高(32c机器,单机日处理流水达到了250.56亿条).同时它具备了PostgreSQL强大的功能基础,正在掀起一场流计算数据库制霸的腥风血雨. 在物联网(IoT)有非常广泛的应用场景,越来越多的用户开始从其他的流计