如今,大数据技术已进入“后红海”时代,成了“水电煤”一样可以普惠人人的技术。同时,新领域仍在不断演进迭代。
本文的上篇 “Snowflake如日中天是否代表Hadoop已死?大数据体系到底是什么?”,阐述了后红海时代下大数据体系的演进热点是什么,以及大数据体系3个子领域的技术解读,包括多层智能化演进的分布式存储系统、统一框架和算法多元化发展的分布式调度系统,和统一化发展的元数据服务。
本文作为下篇,继续对计算引擎、框架与接入、数据开发与治理、智能化、安全与隐私保护、运维6个子领域做技术解读,概述各领域的演进历史、背后驱动力、以及发展方向,并希望和大家一起探讨大数据体系未来演进的技术趋势,以及仍待探索的未解问题。
大数据体系的领域架构
在Shared-Everything架构角度下,大数据体系子领域划分成9个领域:
注:这张图上的前3个子领域:分布式存储、分布式调度、元数据服务已在上篇完成,本文直接从第4个子领域开始分享。
计算层是整个大数据计算生态的核心,是数据到价值转换的关键。大数据场景中有各类计算形态,如批、流、交互式、多模、图、搜索、等多种计算模式。
大数据领域发展了20年,在“后红海”时代,主流计算模式已经基本固定,形成批处理、流处理、交互式、机器学习四个核心方向,以及一些小众/专门场景的计算模式。在开源社区领域,经过百舸争流式的竞争和沉淀,也基本形成了主流的社区形态。
除了机器学习,前三个方向有一定的overlapping,例如Spark同时支持流、批和部分交互能力。但最终形成广泛影响力的引擎,都是在某一方向建立显著的竞争门槛。
整体看,计算引擎的发展将会在存储计算分离架构基础上,以一套数据支持多种计算模式:
(1)存储计算分离,以及随后的1+N架构(即一套数据之上支持多种计算模式)
(2)批处理——是大数据处理的基础形态,以Bulk Synchronous Parallelism(BSP)为基础原理,从Map-Reduce(MR)模式开始发展起来,所谓“批”指的就是Bulk(也译作Batch)。Map-Reduce的运算框架逐步发展成Direct Acyclic Graph(DAG),上层语言也开始从MR的Java代码向SQL转型,第一版本集大成的批处理开源系统是Hive+Tez。因为Hive2.0是严格BSP模式,每次数据交互均需要落盘,牺牲了延迟和性能。Spark抓住内存增长的趋势,推出基于ResilientDistributed Dataset(RDD)的运算框架,展开与Hive的竞争。当前在开源领域,Hive/Spark是主流引擎,随Spark稳定性和内存控制逐步完善,Spark逐步占领开源市场。目前批处理仍然是最主流的计算形态,整体的优化方向是更高吞吐/更低成本。
最近两年,随近实时方向的兴起(以开源ApacheDelta/Hudi为代表),批处理数据从接入到计算的延迟得的显著的降低,给用户提供了一种成本/延迟的另一个平衡点。
(3)交互式分析——通常是面向分析场景(人驱动,中小规模输入数据/小规模输出数据),在中小规模cook好的数据上(通常是批处理之后的数据),基于更快的存储、更多的内存(bufferpool)、更实时的数据更新(通常是基于LSMTree的方案),也采用更多的OLAP优化技术(例如PlanCache)。优化方向更偏延迟(而非成本和吞吐率)。技术栈发展上,有两个脉络,一个是从分布式数据库角度发展起来,采用MPP架构,例如开源领域的Apache Impala和Clickhouse,自研领域的AWS Redshift。另一个是更偏云原生和大数据的架构,例如Apache Presto。
批处理和交互分析,有天然的统一需求,因此很多自研的分析引擎也包括一定的批处理能力,形成一体化,例如当前如日中天的SnowFlake。而Google BigQuery采用附加交互引擎(内置一个更快的BIEngine)的方式形成一体化。从细节看,交互分析的引擎优化更偏数据库类优化方向,更强调用好Memory和Index,Plan相对简单,对QueryOptimizer要求低,不需要支持丰富的UDF,也不需要做Query中间的failover。批处理引擎更面向吞吐量(Throughput)优化,核心是更优化的Plan以及尽量降低IO,同时对failover要求高(因此部分数据要落盘)。这也是为什么BigQuery选择双引擎的原因。
(4)流处理——采用ContinuousProcessing的计算模式,通过本地状态保存(State)和CheckPoint(CP,用来做failover),形成分布式增量计算引擎。这种计算模式与BSP架构不同。主打的场景是实时大屏,监控报警以及最近流行的实时机器学习。系统面向低延迟优化,处理的是流式写入的数据,一致性模型(Exact-OnceVS Atleast-Once)、LateEvent处理方式、以及Window函数支持是不同流计算引擎设计的取舍。开源领域Spark Streaming、Apex、Heron和Flink经过竞争,Flink因具备完整Exact-Once语义保证和完善的LateEvent处理能力,最终获得社区广泛的关注。
(5) 机器学习(ML)/深度学习(DL)——以统计为基础理论的传统机器学习有丰富的生态,包括Python系、Matlab等等。大数据领域SparkMLib以一套数据多种计算的优势,一度成为大数据传统算法的主流。随AlphaGo引爆深度学习领域,TensorFlow和Pytorch成为业界标杆。目前DL领域仍然处于红海期,模型并行化以及超大模型是近期的热点。特别的,随DL兴起,Python作为标准语言开始流行,Spark推出Koalas用于连接大数据与AI开发,Python有取代Java成为命令式编程类(Imperitive)大数据开发语言的潜力(Decleritive类编程标准一直是SQL)。
(6)其他小众计算模式——因满足不同细分场景,还有包括图计算,文本检索等引擎。图领域细分成三个子场景:图计算、图分析和图学习。分布式图分析场景目前仍未有完善的方案,图语言也在发展期,未形成统一标准。文本检索领域,主要基于倒排索引技术,开源生态ElasticSearch成为生态主流。限于篇幅,这部分不再做更细节的介绍。
展望未来,我们看到可能的发展方向/趋势主要有:
近实时化成为主流:近实时化方案,是在分钟级的延迟上做到数据的一致性,几乎不用依赖大量内存的BTree系统和常驻的服务,将成本降低到几乎和离线一致,在延迟和成本间找到一个新的平衡,会逐步取代部分离线的作业。
IoT领域兴起:随设备的智能化和5/6G网络兴起,面向IoT的分析会逐渐火热。计算形态可能会发生变化,从云为中心演进到云边端一体。
大数据平台/引擎整体云原生化:新兴的引擎均基于云的架构重新设计,充分利用云的优势,降低复杂度的同时提供更多价值。随云原生化,Shared-Everything架构成为未来的演进趋势。
Learned based优化:机器学习技术会充分融入大数据系统(甚至任何系统)的设计,优化器、调度系统、存储格式、Index/MV设计等多个领域均会大量使用AI的技术来做优化。例如Cost based Optimization中的基于Statistics的Cost推导,会大量被Learn based Statistics取代。
接入层和管控是一个子系统,主要用于服务背后的主系统。从架构和功能角度上看,与大多数服务的接入层差异不大,也不存在明确的演进和代差,因此简要概述。唯一值得一提的是,随越来越多的大数据平台走向“托管化”或者说“服务化”,框架管控层越来越厚,大多数企业级能力增强来自管控部分。例如,计算引擎是数仓类产品的核心,但最终用户需要的远不止引擎本身而是好用的数据仓库产品,就像发动机是汽车的核心部件,但用户所需的是完整、好开的汽车。
接入和管控层,抽象下来,主要功能包括:
a. 前端API接入:是系统对外的接口,通常提供HTTP协议接入,并具有认证、流控能力。部分系统提供Web接入能力。
b. 服务层:包括更多的业务逻辑,例如用户/租户管理,提供服务层面的访问控制,以及服务级别的流控。对于引擎来说,服务层很可能包括编译与作业分发能力,异常作业的检测与隔离等等。有些系统为了简化将API接入与服务层合二为一个服务进程。
设计考虑:
a.服务于背后的主系统,功能随后台变化而变化,并没有“一定之规”。
b.管控层直接决定系统的可用性,因此也需要完善的容灾能力,无状态的服务组件通常依托部署系统实现容灾,对于有状态服务,通常将状态存储在元数据系统或者底层存储系统中。
c.很多独立引擎,特别是开源类,接入和管控层通常比较简单。对于企业级服务来说,很多额外的功能都在本服务扩展,也体现企业级服务的价值。例如:监控/运维能力、审计日志、计量计费、对计算系统热切换的控制等。甚至包括自动化作业调优等高级功能(例如SparkCruise,来自微软Azure托管版的基于历史信息的自动作业调优子系统)。
d.当用户选用多个系统组合搭建一套大数据平台,不同系统都会有自己的管控层,造成服务的冗余和各系统的割裂。因此很多云平台提供商,会致力于抽象统一规范和公共子模块,例如统一认证协议/服务(Kerberos等)、统一权限管理,TerraformAPI标准等。
展望未来,我们看到可能的发展方向/趋势主要有:
托管化 - 框架与接入层是企业级能力增强的关键一层,随托管化成为大趋势,这一层会有大量的企业级能力加入,会逐步成为关键层。
随着大数据技术在众多领域的广泛应用,大量数据源需要接入大数据平台,多种数据处理引擎和开发语言被各类技术/非技术人员人员使用,复杂业务催生了规模庞大、逻辑复杂的工作流程,数据成为业务的生命线需要重点保护,数据作为业务的原动力需要更加方便快捷的被分析和应用。
让大数据计算平台真正能够服务于业务,还需要一系列数据研发和数据治理利器,以帮助数据工作者低成本和高效地获取数据洞察,实现业务价值:
1. 数据集成:支持关系型数据库、大型数仓、NoSQL数据库、非结构化数据、消息队列等数据源之间的数据同步,包含批量数据同步、实时数据同步、整库数据迁移等,解决云上、跨云、跨地域以及本地IDC机房等复杂网络环境之间的数据同步问题。
2. 元数据服务:支持不同数据源的元数据发现与元数据归集,并构建数据目录和数据血缘服务,同时为上层数据开发与数据治理提供元数据服务。
3. 数据开发:提供在线数据开发IDE,支持多种计算存储引擎,提供批计算、实时计算、交互式分析、以及机器学习等一体化数据开发服务,为各种技术/非技术人员提供高效极致的ETL/ELT研发体验。
4. 调度系统:支持大规模、高并发、高稳定性的细粒度周期性任务调度,支持流处理、批处理与AI一体化数据任务编排,保障数据生产的时效性、稳定性。
5. 数据治理:提供数据资产管理、数据质量控制、数据安全管理、监控告警、数据标准、成本优化等服务,保障数据仓库能够规范、健康、合规和可持续发展。
6. 数据服务:提供快速将数据表生成数据API服务的能力,连接数据仓库与数据应用的“最后一公里”,实现灵活可控的数据共享交换服务。
展望未来,我们看到可能的发展方向/趋势主要有:
低代码开发与分析:数据的获取、分析与应用将逐步从专业开发人员覆盖到更多的分析师和业务人员,因此数据开发与分析工具将逐步从专业代码开发工具向低代码化、可视化工具演进。甚至是基于NLP和知识图谱技术,实现通过自然语言执行数据查询。低代码化开发与分析工具让非技术人员也能轻松获取数据洞察,实现数据价值的普惠,实现“人人都是分析师”。
智能编程:在传统的ETL开发过程中,存在着大量重复的或相似的编码工作,未来将在AI的加持下,通过语义分析、数据血缘探测、输入意图预测等技术,以智能编程助手的形式帮助开发人员实现更高效的编程。
开发即治理:过去我们大多习惯于先开发后治理,最终则让数据治理成为了负担。随着数据规模的不断增长、数据安全与隐私保护越来越受关注、数据业务化的持续发展,将不再允许数据治理仅仅是事后行为,数据治理将会融合到覆盖事前、事中和事后的大数据生产与应用的全链路中,数据开发与治理将协同并进。
随着大数据平台及其所承载业务的发展,我们也面临着新的挑战:
1. 10PB到EB级数据和百万级别作业规模,已经成为主流,海量数据和作业靠人很难管理。传统的DBA模式或数据中台团队不再胜任。
2. 多种数据融在一起,人无法在海量规模上理解数据的所有价值。
3. 大数据系统经过多年发展,如果需要实现“跃迁”式的进步,需要体系结构层面的改造。
因此AI for System的概念兴起,基于AI的能力做系统的优化,在数仓领域我们可以称之为自动数仓(AutoData Warehouse)。数据湖领域也可以有更多的自动化,但因为数仓方向的数据管理/调优能力发展更早,这个领域更领先。下图是一个基本的自动数仓能力分类。
自动化本身并不太可衡量,我们定义了一个“自动数仓”的能力分级,类比“自动驾驶”。分为L1-L5。
1. L1级:运维能力白屏化和工具化。目前绝大多数系统都可以做到这个层次。
2. L2级:更好的系统托管化,底层系统对用户透明。例如小文件Merge自动化、软硬件升级透明、自动loadbalance等。很多全托管系统都可以做到这个层次(例如Snowflake、MaxCompute)。
3. L3级:中台能力的自动化,辅助数据关联与理解,建模与调优。包括数据血缘,相似度,冗余度,使用情况与自动评分。辅助标签系统,辅助中台建设。市面上的很多数据中台产品聚焦在这一层。
4. L4级:系统具备自学习能力。基于历史信息的性能调优(自动Parallelism,自动冷热数据分层等等),资源与优先级的动态调配,自适应的监控和报警能力,自动数据异常识别。目前大多数系统的能力边界在此,有巨大的发挥空间。
5. L5级:自动化建模。包含更高阶的数据理解,能够自动发现数据的内在关联与冗余度,根据数据访问情况,自动维护数仓体系。
最近1-2年,自动化资源管理和自动化作业调优成为热点,有非常多的研究性论文。几个核心元产品也推出新能力,例如AWSRedshift的自动workload mgmt、自动key sorting和table sorting,微软Azure的SparkCruise(@VLDB2021)用来抽象公共子查询做MaterializedView。
智能化作为大数据体系的发展趋势之一,上述内容即为我们对这个子领域的未来展望。
随着大数据的发展,数据在多方数据融合场景下能发挥更大的价值。然而在这种场景下用户的隐私保护以及数据的合规问题成为了严重的问题。问题的本质是数据的开放性与使用安全性的平衡。安全能力,包括数据安全/隐私保护能力,是大数据体系中的重要能力基线之一。
信息的可用性、信息的完整性、以及信息的保密性是信息安全的三个基本要素。我们将企业级大数据中台要面临的安全风险, 根据其所涉及的系统及技术领域的不同,分为三个层次。
1. 最基础的层次是数据中心的物理安全与网络安全,数据中心是构建大数据中台的基础,数据中心自身安全性和网络接入安全性直接影响到企业大数据中台的可用性。主要包括数据中心保障设施、数据中心安全管控、数据中心的网络安全等几个维度的建设。当云架构成为主流,物理安全方面通常由云厂商承担。
2. 在这之上是企业大数据平台的系统安全,由大数据平台内部的多个安全子系统构成,如访问控制、应用程序隔离、平台可信、风控和审计等子系统。这些子系统共同保障大数据平台的完整性。
3. 最上层是数据应用安全,贴近于用户的应用场景。通过在这一层提供丰富多样的数据安全产品,大数据中台为用户应用数据的各类业务场景提供切实可靠的数据安全能力。
下图给出了一个基于数据生命周期的数据安全管理体系。里面有非常多的子领域,比较存储加密、敏感数据发现和保护、数字水印等等。
展望未来,我们看到可能的发展方向/趋势主要有:
数据安全共享 — 随数据被认知为资产,数据变现成为一个热门话题,它背后的技术:数据安全共享和多方安全计算也成为热点方向。总体看,数据变现(也称为数据安全共享),有两种典型场景:一方数据对外售卖,多方数据交互计算。
域内多租的方案,通常需要细粒度的接入/访问控制、计算隔离、下载保护等技术配合。主流数仓产品均提供这类方案(比如Snowflake的DataSharing)。另外,这个领域的一个研究方向是基于差分隐私(DifferentialPrivacy)加密的密态计算(例如 DPSAaS@Sigmod2019)。
多方数据交互计算方案,通常基于联邦学习技术(FederatedLearning)。
运维是伴随着任何一家公司的产品,在整个产品生命周期中一直是存在的。运维负责公司产品业务的正常运转,处理紧急故障响应,保障业务连续性,产品可用性改进,性能&效率优化,变更管理,监控,容量规划与管理等相关工作:这些是运维核心的定义所在。
随着大数据行业的发展,运维走过了传统Ops到专业化、工具平台化、再到云化数据化、甚至是到了智能化的阶段,从云计算SaaS/PaaS/IaaS三层的演进趋势我们可以看到,IaaS与PaaS之间的分界线越来越往上走,基础设施越来越统一,云化虚拟化的趋势抹平了基础设施层;同时SaaS与PaaS层的分界线也没有那么清晰,在SaaS层快速构筑应用的成本越来越低,越来越多的SaaS层能力抽象后下沉到PaaS层,拿来即用,也可以说是PaaS层在往上层演进。结合云计算SPI三层的发展,我们也可以将运维粗略划分为面向SaaS层的应用型运维、面向PaaS和IaaS层的平台型运维。
大数据运维业务围绕稳定性(质量)、成本及效率主要关注如下:
1. 针对日常业务稳定性可以分为日常事件管理、问题管理、变更管理及发布管理的标准化ITIL流程;
2. 针对成本管理包含了从资源预算、资源采购、预算执行、财务账单、过保替换等围绕资源生命周期管理的相关事项;
3. 针对效率包含了如何开发一体化的运维平台以高效支撑业务监控、服务管理、系统管理、应急/安全管理等。
大数据体系发展至今,服务器规模已发展到数万、数十万、甚至百万台规模。随着基础设施规模的发展,运维系统也经历了一个从人工、到平台化、再到智能化的自然的演进过程,运维的演进需要能支撑起大数据基础设施的高复杂、高安全、高可靠、高效率要求。
展望未来,我们看到可能的发展方向/趋势主要有:
产品化:运维的产品化,本周上是指让各类运维动作的更标准,更可控。产品化是把对本身服务客户的产品的运维需求、和运维产品本身的需求、集成到产品功能上,并迭代传承。同时通过这些标准化的动作,逐步把底层的一些运维数据统一起来。
数据化:随着产品规模的扩大以及系统的复杂多产品依赖,在整个过程中会产生大量的系统数据,随之数据化能力会凸显的非常重要。数据的收集存储,计算处理,运维数仓建设,数据分层,实时性,运营分析等相关数据化能力会逐步成为必须基本能力。重点需要关注运维数据的工程,集成,安全和质量。
智能化:在超大业务规模下,逐步按以前的传统的运维操作方式不能更高效的支持好业务,一个例子对线上复杂问题的快速定位和修复。但这类人脑的规则级随着复杂度增长以及产品周期发展不会是一个线性提升,这个时候是需要通过一些智能化算法能力去帮助处理这些海量数据,从中找到一定的结果规则,辅助加快专业人士的判断。但这块的技术挑战非常巨大,同时对资源也有一定的消耗。但这个方向是应该持续发展。
在离线batch计算和纯流式实时计算之间,以开源Apache Delta/Hudi为代表的近实时架构成为热点。近实时架构避免了流计算庞大的状态存储与管理,在成本和延迟上找到了另一个平衡。随近实时架构的形成,计算架构最终完成从离线到实时全频谱支持。
数据成为资产,开始具备可变现和可交易的能力。可保护隐私的数据交换/共享能力成为强劲的需求。基于DifferentialPrivacy的数据编码交易,以及基于Federated Learning的多方面安全计算是该领域的热点技术。
目前人的行为数据(日志)是大数据计算的主要来源,超过80%的数据都来源于行为日志(例如浏览、点击)。随5G+智能化设备的兴起,设备日志会成为更大的数据源增长点,面向海量低价值设备数据的处理和优化,需要得到更多的关注。
AI for System,即上文中提到的大数据自动驾驶。AI作为工具,成为优化的常用手段。在大数据领域,随数据量/系统复杂度的增长,DBA模式已经不再试用。利用算法优化系统成为主流方向,大数据的“自动驾驶”会越来越自动。
大数据技术收敛,并进入普惠和业务大规模应用的阶段,渗透到各行各业。超大规模数据计算和基于数据的智能决策,已经是企业业务数据化运营的重要基础。不过,在后红海时代,大数据体系发展有3个疑问值得我们关注:
随大数据系统整体架构的稳定,各种引擎的发展逐渐进入收敛期,批计算、流计算、交互分析、机器学习收敛成为四个核心计算模式,每个模式均有主线开源引擎成为事实标准。
过去3年没有再诞生主流的开源计算引擎(每个模式中,引擎的发展脉络详见第二章节)。同时,引擎边界开始变得模糊,HTAP等Hybrid模式成为探索的新趋势,计算模式是否进一步收敛,收敛的终态会是什么样子,是个热点话题。
大数据领域整体还是以二维关系表达和计算为基础(RelationalDB的理论基础),是否有新的计算范式在数据库领域也持续讨论了多年,尽管有包括图计算在内的其他计算范式,但过去的40年,关系运算持续成为主流。
其中核心原因是二维关系表达更贴近人的理解能力,或者说高维表达和处理很难被人理解和处理。但关系表达有显著的短板,它无法处理半结构化和非结构化的数据(比如音视图类的数据)。
近几年兴起的深度学习技术,带来了一种全新的处理方式,海量正交化的高维特征作为输入,由深度神经网络理解数据,以模型作为产出的引擎计算出结果。这种方式避免人脑对数据处理的局限性,可以在更高维度更复杂数据上做处理,给未来提供了一种新的处理方式的可能性。
但深度学习核心仍然在寻找“最好”的co-relation,可解释性,推导逻辑以及对结果正确性保证都不够好。
开源软件是大数据发展的关键推手,助力大数据系统的普及化。但面临如下挑战:开源系统的软件交付模式,也给很多客户带来高维护成本。
以一个典型的腰部互联网企业为例,一个100台规模的大数据平台硬件投入大约200万/年,同时需要维持一个3-5人的研发/运维团队,年成本200-300万/年。综合TCO高达450万/年。
这也是为什么像Snowflake这样的自研企业级产品流行的原因,大多数不具备深度研发能力的公司,愿意为更丰富的企业级能力和更低的综合TCO买单;大数据系统开发进入深水区,投资巨大,需要高商业利润才能支持。
事实上,云计算四巨头均有自己的自研产品提升利润率的同时也提升差异化竞争力(例如AWSRedshift,Google BigQuery,阿里云飞天MaxCompute)。
而每个开源社区背后无一例外均有商业公司推出企业版(例如Databricks之于Spark,VVP之于Flink、Elastic之于Elasticsearch)。
因此,长期看,大多数用户(特别是中小型)进入“技术冷静期”后,开始审慎考虑综合投资收益,考虑上云、以及直接采购企业级产品+服务(放弃自建平台)。
本文试从系统架构的角度,就大数据架构热点,每条技术线的发展脉络,以及技术趋势和未解问题等方面做了一个概述。特别的,大数据领域仍然处于发展期,部分技术收敛,但新方向和新领域层出不穷。本文内容和个人经历相关,是个人的视角,难免有缺失或者偏颇,同时限于篇幅,也很难全面。仅作抛砖引玉,希望和同业共同探讨。