重构工业物联网大数据处理平台的存储栈(下)

上篇文章中,我们介绍了工业物联网平台的基本架构和特征,阐述了设计工业物联网平台会遇到的挑战,从而引出了“以数据流向为核心”的设计理念。本文将重点阐述数据流平台的设计思想,以解决上文中提出的挑战

作者:DellEMC中国研发集团 吴长平 郭永生

===================分割线=====================

1. 设计思路

1.1 数据中台

通常数据中台的目标是:“治理与聚合数据,将数据抽象封装成服务提供给前台业务使用”。因此,数据的治理、聚合以及抽象是数据中台的关键点。当前的大数据处理平台,不管是Kappa架构还是lambda架构,数据的存储都是多组件化并且冗余的。例如,同样的数据在Kafka、HDFS和Elasticsearch里都可能会有,有些用户还使用了更多的存储中间件,这不仅进一步增加了冗余数据的存储,还增加了数据的存储成本,另一方面也降低了数据的可信性、可靠性、合规性。

这些无疑给数据标准化以及重复利用带来了困难,不利于数据的分享,也不利于合规地、低成本地以及安全可靠地支持业务和决策。通过使用分布式流存储,大数据处理平台的架构可以进化成”分布式流计算+分布式流存储“这样的原生流式数据处理平台架构,以很好地体现了“数据治理、聚合和抽象”这一“数据中台”的理念。

1.2 流原生架构

依据“流原生”的架构设计哲学以及数据中台的理念,这里提出”分布式流计算+分布式流存储“这样的原生流式工业大数据处理平台的架构。不同于Lambda架构与Kappa架构,流原生架构最主要的工作是对数据进行了治理、聚合与抽象,使得工业大数据平台的计算层通过统一的数据API接口调用底层的流存储系统。

《重构工业物联网大数据处理平台的存储栈(下)》
《重构工业物联网大数据处理平台的存储栈(下)》

如上图所示,Spark,Flink以及检索系统等都调用统一的流存储接口,从而减少了平台复杂度以及降低数据存储成本和运维成本,并且流存储系统可以部署在k8s平台上以实现系统的安全、弹性、可扩展和编排等功能。

1.3 管道式编程

工业大数据处理平台虽然很复杂,然而抽象到最后就是一个简单的数学公式:“Y=F(X)”,输入数据x,经过F算子计算再输出结果Y。数学表达式并不复杂,如同质能方程E=mc²,但是从理论到落地需要经历一个浩大的工程,Y=F(x)其复杂度主要来源于:

  1. 每个数据算子都认为是一个Y=F(x),需要对无数个这样的算子进行高性能的计算;
  2. 需要对无限个随时可能乱序的Y=F(x)算子进行编排、组合、拆分;
  3. 需要对无限个Y=F(x)算子的中间结果进行持久化、保序,以及保证计算结果的正确性。

因此需要一个专门的数据处理架构来解决这些复杂度。

《重构工业物联网大数据处理平台的存储栈(下)》
《重构工业物联网大数据处理平台的存储栈(下)》

如上图所示,“流原生”的Flink计算加上“流原生”的存储管道组成了“流原生”的大数据处理平台:

  1. 数据从分布式流存储输入,经过map算子计算,输出中间计算结果到分布式流存储里;
  2. 数据再从分布式流存储里读入到Filter算子里,经过计算中间结果又放到了分布式流存储里;
  3. 最后的计算结果经过Apply算子的计算放到了目的地的分布式流存储里。

这个过程体现了算子编排和管道式编程的设计哲学,在这里分布式流存储起到了大数据处理平台里的管道的作用。

1.4 分布式流存储

分布式流存储的产品定位是万物互联这样的应用场景,从技术角度来看它具有自身的特点,正如这个术语提到的三个关键词:“分布式”、“流”、“存储”。首先它是分布式的,具有分布式系统本身所具有的一切能力,其次这是专门为流式数据设计和实现的,最后它从存储的视角处理流数据,这是一个原生的存储解决方案,它讲究数据的可靠性、持久化、一致性、资源隔离等。分布式流存储针对“流数据”的自身属性以及相应的特殊的业务需求场景做了专门的设计与实现,下面从命名空间、业务场景、无限性、可伸缩性、恰好一次、字节流、数据管道、租户隔离和海量小文件的角度依据最佳实践原则简要阐述流式存储系统与块存储系统、文件存储系统以及对象存储系统的差异化所在。

1.4.1 命名空间

通常,块存储系统以分区、目录、文件,文件存储系统以目录、文件,对象存储系统以租户、桶、对象来定义数据的存储路径以及命名空间,而流存储系统则以范围(scope)、流(stream)、段(segment)、事件(event)来描述数据的存储路径以及命名空间。下表简要列举了它们的差别:

《重构工业物联网大数据处理平台的存储栈(下)》
《重构工业物联网大数据处理平台的存储栈(下)》

在流存储系统里,如下图所示,数据的组织形式被抽象成范围、流、段和事件,范围由流组成,流由段组成,段由事件组成,事件由字节(bytes)组成。

《重构工业物联网大数据处理平台的存储栈(下)》
《重构工业物联网大数据处理平台的存储栈(下)》

1.4.2 业务场景

在自动驾驶的场景里采用分布式流存储,我们可以这样处理自动驾驶的数据:给每一辆无人车定义一个1TB存储空间的范围,车上的每个传感器都归属于一个流,传感器上报的事件都在段内持久化。再假设每辆车都有1000个传感器(实际情况只多不少),那么10万辆车就需要定义1亿个流。可以想象要进行这种规模的隔离,也就只有这种专门针对流数据而设计的流存储系统能够支持。

在工业厂房的场景下,可以这样定义工业设备的数据:给一个厂房里的每台设备定义一个范围,每台设备里的每个传感器都对应一个流,传感器上传的事件数据保存在流内的段里,这样就很方便的对工业设备进行了大规模的租户数据隔离。

因此,以“范围、流、段、事件”的方式很方便的进行了大规模的租户隔离保证了用户信息安全,同时又进行了存储资源配额的隔离。

1.4.3 数据无限性

无限性是分布式流存储最为重要的设计原则。从流数据的角度来看,数据是大量、快速、连续而又无限的,这就给流存储系统的设计与实现带来极大的困难。无限的数据使得存储系统必须能支持连续且无限规模的数据流,仅这一点就对存储系统的可扩展性提出了极高的要求,另外还要求存储系统能够根据到达的数据量动态而又优雅地进行扩容与缩容。从技术与成本的角度来看,数据无限性意味着冷热数据分离,长期不用的数据淘汰到长期存储系统里,热点数据需要缓存,同时还需要能支持历史数据的读取以及实时数据的读取与写入。

1.4.4 可伸缩性

可伸缩性也是分布式流存储一个很重要的设计原则,流存储里的可伸缩性还要求是自动化的、资源细粒度的可伸缩。通常,在云原生的场景下,资源的缩放是以主机、虚机或容器为单位的,这样的缩放对流存储来说粒度太大。在流存储的场景下需要能够以数据的“流段”为单位,比如一个流段2MB,那么就需要能支持一次自动扩容或缩容2MB的存储空间。另外在流存储里还要求写入与读取对数据子集的操作是解耦分离的,并且写入与读取二者之间跟数据流段还要有一个合理的平衡。

1.4.5 恰好一次

恰好一次是分布式流存储的另外一个很重要的设计原则,恰好一次意味着数据的可持久化、有序、一致性以及事务性的支持。持久性意味着一旦得到确认,即使存储组件发生故障,写入的数据也不会丢失。有序意味着读客户端将严格按照写入的顺序处理数据。一致性意味着所有的读客户端即使面对存储故障、网络故障也都会看到相同的有序数据视图。事务性写入对于保证Flink这样的计算应用处理结果的完全正确是非常必要的。

1.4.6 字节流

分布式流存储里采用字节流的格式组织数据,而不是像消息系统里采用消息报文的方式。这意味着接口的通用性,二进制的字节流是与数据格式无关的,字节流可以组成事件封装在分布式存储的流段里。而消息系统里数据是采用消息头和消息体的格式进行封装的,在兼容性上不如字节流。

1.4.7 数据管道

在存储界通常喜欢用跑车、卡车、渡轮来比喻块存储、文件存储以及对象存储。形象点来说,块存储类似跑车:极快、极稳,但装的人少,并且成本高;文件存储类似卡车:快、稳,装的人比跑车多,但是没跑车那么快;对象存储类似渡轮:可以装非常多的货,讲究量大、成本低;那么分布式流存储又像什么呢?在我们的定义里它就像管道:数据如同流水一般流过管道,又快又稳、源源不断而又永无止境。

1.4.8 租户隔离

分布式流存储从一开始设计的时候就将“租户隔离”作为其基本特性进行实现,“隔离”是分布式流存储的最基本的特性之一。在分布式流存储里,租户隔离不只是租户B绝对不能看得到租户A的任何数据的这种信息安全层面的隔离,它还支持范围、流、段和事件层面的隔离,另外还有资源、命名、可视空间、权限以及服务质量层面的隔离。海量租户规模支持也是分布式流存储系统的设计目标之一,在分布式流存储里单集群需要能支持千万量级起的租户数。

1.4.9 海量小文件

对海量小文件的支持是分布式流存储的重要设计目标。正如前面提到的,万物互联下的海量数据来源于传感器,而传感器上传的数据大都是类似温度、地理位置和告警信息这样的只有几个字节的小数据。这就意味着在万物互联的场景下会有海量的小数据上传,而且90%以上的数据操作行为都是写入。为了保证数据写入的性能、可靠性、正确性和持久性,以及保证介质的使用寿命以降低成本,需要针对这种业务场景对存储系统进行专门的设计。

在分布式流存储里,每个事件第一步仅被附加写入一个缓存的段内进行封装,而当段达到一定的大小之后(比如64MB),它就会被封闭不再被写入,这时再将整个段写入下一级的持久化存储里。这种通过将小数据在缓存里封装成大块数据,再将大块数据写入持久化存储设备的方式保证了存储系统整体的性能。

小结

《一代宗师》里提到习武之人有三个境界:“见自己,见天地,见众生”。做技术做产品也同样如是,“三见”如同一体三面不可分割,认知上从只关注自己的想法到关注格局与创新,再扎根到用户当中替用户解决有价值的实际问题。现有的工业物联网大数据处理平台有创新,也替客户解决了部分工业数据处理的难题,但是还是属于一个”DIY“的系统,离产品化还有距离,因此需要我们继续扎根下去替客户解决新的实际问题。在万物互联的智能世界里,为了实现将海量数据近实时转化成信息和决策的愿景,除了流式计算应用,还需要一个流式存储系统。未来已来,已有开源的分布式流存储系统(如pravega.io)正走在这条路上

问题思考

最后给大家留一个思考题:如果让您来设计一个工业物联网平台产品,您会如何定义它的产品灵魂?欢迎大家在下方留言作答。

作者简介

1、吴长平– Dell EMC高级首席工程师,主要从事工业互联网平台、云计算、存储以及大数据相关的架构设计与产品交付工作。

2、郭永生– Dell EMC高级首席工程师,主要从事在云计算,虚拟化和搜索场景下的数据保护和数据安全的架构设计与产品交付。

    原文作者:戴尔科技集团
    原文地址: https://zhuanlan.zhihu.com/p/81314208
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞