其他
阿里云实时数据加工服务的设计及实践
凌云时刻
编者按:作者王彬(花名蓝雁),技术专家,现供职于阿里巴巴云智能事业群日志存储团队,负责阿里巴巴集团、蚂蚁金服、阿里云和外部客户等全站日志的数据加工服务的性能优化及功能开发工作,每日处理 PB 级别的数据。目前主要关注流式计算、编译优化、异常检测等技术,发表专利30余项。本文根据作者出席QCon全球软件开发大会的演讲整理而成。
数据规整。数据规整是数据分析的前提,对混乱格式的原始日志进行字段提取、格式转换,获取结构化数据以支持后续的流处理、数仓计算。 数据分派。通常各类日志的重要性不同,不同类型日志的存储时长不同,数据分派能够将全量日志按转发规则分别提取到多个下游存储供不同业务使用。 数据富化。原始日志信息有限,为打通关联业务数据,数据富化可以将日志(例如业务订单)与维表(例如用户信息MySQL表)进行字段join,为日志添加更多维度信息供分析。
采集端系统。在采集阶段利用机器资源完成一定程度的预处理,不需要专用计算集群做预处理。复杂处理逻辑会造成数据源采集延时,延时过大可能会丢失原始数据。不保存原始日志,会影响错误回溯的准确性,由于配置散落在众多机器上,加工逻辑变更或作业运维大多依赖机器上操作,维护较为复杂。 数据库系统。多用于存储清洗后的数据,用于在线服务场景。存储结构化数据,内置函数有限,复杂场景扩展内置函数难度较大。 批量计算系统。以可扩展的计算和海量存储能力,解决了大数据分析难题。在延迟敏感型业务占比越来越大的背景下,离线系统的延迟高、交互性差。 流式计算系统。让数据加工变得实时化,定位于通用场景。需要编写较多的程序代码实现自身业务逻辑,且维护集群成本较高。
易用性。为实现上述数据规整、数据分派和数据富化三大业务场景,设计了一种特定领域语言DSL。客户仅仅编写简洁的DSL,即可实现复杂业务需求。 云原生。多租户,弹性伸缩,免运维,按量收费,成本较低。 高性能。采用语义编译优化和较优的运行时数据结构,增强了执行效率,缩短了数据加工延时,提升了实时性。
易用性设计-DSL
云原生设计
多租户。用户数量大,隔离性好,数据量大,每天处理PB级数据。 弹性。日志服务Logstore具有Append Only写入的特性,可以满足业务高并发、高吞吐需求,此功能类比kafka。由于业务特征,日志流量也呈现周期性波动,比如上下班时间某些业务用户访问量大,凌晨几乎没有用户访问,上班时间访问量适中。适中时采用两个shard存储,高峰时存储自动扩大为5个shard,低谷时只需采用1个shard存储。数据加工的work会根据存储动态伸缩,适中时采用两个worker计算,高峰时存储自动扩大为3个worker计算,低谷时只需采用1个worker计算。如果采用自建方案,通常需按照峰值购买硬件设备,相比而然,数据加工服务成本较低,业务流量增长也能自动应对。 Serverless。服务化、全托管、免运维、按量付费,客户无需投入运维成本,使用较为简单。
高性能设计-DSL编译期优化
高性能设计-DSL运行时优化
高性能设计-性能优化
具体函数:静态模式初始化、常量抽取、内存保护的AC、复杂逻辑触发、op_and/op_or短路、e_search语义优化、e_json/e_split优化、字段操作函数优化。 全局语义:公共子表达式删除、if转switch、资源函数主键自动推导、e_split下移、e_keep/e_drop上移。
数据分派实践
复杂场景实践–方案对比
开源自建方案。上面是基于开源软件以前的实现方案,首先将两种日志统一传输到服务器,然后采用Logstash的拉去落盘日志到Kafka,然后采用Flink编写程序实现业务逻辑,最后将结果输出到ElasticSearch。使用组件多、数据链路复杂、调试极为困难、运维工作重、开发代码量大。 日志服务方案。日志服务SLS提供了统一的解决方案,包含了:日志采集、日志存储、数据加工、日志查询分析(日志服务SLS实现了索引功能)等功能,一直在日志服务中流转,只需要一个服务SLS。全托管、免运维、自动扩容缩容、两行DSL语句搞定。
展望
计算下推:存储和计算深度结合,将单机执行算子下推导存储端,以扩大算子的并行性,减少不必要的网络负载,降低数据加工核心服务器的CPU占用率。 扩展python语法及函数库:更好的服务客户需求,增强易用性。
丰富流计算功能:增加聚合统计功能。
你可能还想看