【从入门到精通小米数据流服务】浅析什么是小米数据流服务



转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com

AIQ 机器学习大数据 知乎专栏 点击关注

小米数据流服务,依托于流式消息队列 Talos,主要用于解决数据收集和数据中转问题而研发。目前已经在小米生态云和小米融合云上线,并且已经支持许多数据业务。本篇文章将从技术层面解析什么是小米数据流服务。

1

整体架构

小米数据流服务整体架构如下图:

** 数据总线:** 小米数据流服务使用 Talos 作为数据总线,使得所有数据均通过 Talos 进行中转;

**Source 支持:** 所有写入的模块均定义为 Source,用于将数据实时的写入 Talos;

**Sink 支持:** 所有从 Talos 写出的模块定义为 Sink,用于将数据实时的从 Talos 导出;

** 流式计算:** 所有数据写入 Talos 之后,均可以通过 Spark Streaming 进行流式计算;

在这个架构下,小米数据流服务具备以下特点:

** 完全兼容 Scribe 数据流:** 小米数据流服务完全兼容 Scribe 数据流服务,并且支持平滑升级;

**Source/Sink 完全解耦:** 通过引入数据总线,使得 Source 与 Sink 完全解耦,不再相互影响;

**Source/Sink 易于扩展:** 支持多种 Source/Sink,且定义好接口,非常易于扩展;

** 全方位数据中转服务:** 通过 Source/Sink 模式,系统数据中转的复杂度由(N*N-1)降低为(2N);

** 完整的流式计算支持:** 所有数据均可以通过 spark Streaming 进行处理,使得流式计算成为标配;

** 完整的安全认证体制:** 整个数据流均接入了融合云账号体系,使得数据安全可靠;

** 完整的数据质量监控:** 提供整体数据流 SLA,用于说明数据丢失情况与数据延迟情况;

** 完整的服务质量监控:** 提供整体数据流全链路监控,实时发现数据流异常并出发报警;

** 全新的用户交互设计:** 通过全新的中心化配置管理,使得数据流配置转化为界面的点击操作;

** 完善的服务运维体系:** 通过引入 LCSAgent 的自升级机制,实现了 LCSAgent 全公司统一维护;

2

交互流程

交互流程主要为:

1、用户通过 Web 配置数据流,Web 端会将配置持久化到后端存储;

2、Source 会定期更新配置,当读取相关配置之后会将数据写入到 Talos;

3、Job Scheduler 也会定期更新配置,之后会启动 spark straming 作业用于将数据转储到对应的 Sink;

其主要交互流程图如下:

3

发展现状

目前服务质量监控已经上线,数据质量监控已经灰度上线,后续开放给用户。同时后续也会详细描述监控方案实现细节,其背后都是直接利用小米数据流服务实现,请大家关注后续文章。

LCSAgent 配置的中心化管理与 LCSAgent 自身的动态更新已经上线半年的时间,极大的解放了 SRE 团队的运维压力。

数据流整体的权限控制和 LCSAgent 白名单机制,大大提升了整体数据流的安全性能。

后续我们将继续加大监控和开发方面的投入,开发 SchemaRegistry 服务,为用户提供简单可依赖的数据流服务;

4

愿景

一、流式数据处理

目前小米仍然存在大量的批处理计算,首先将数据收集到 HDFS 集群,然后通过 MapReduce 或者 Hive 进行批量计算,基本如下图所示:

MapReduce 是批量计算很容易理解,但是这里将 Hive 归到批量计算,主要是因为:目前 Hdfs 的文件,主要是按照天切分和小时切分的方式,即 Hive 作业统计的最小周期也是 1 小时,因此将其归为批量计算;

批量计算的问题为延迟太大。对于业务而言,延迟越小越有利于进行决策等,流式计算在越来越多的场景将发挥更大的作用;目前业界流式计算框架,包括 Spark Streaming,Storm,Flink,Smaza 等,几乎全部依赖 Kakfa,或者类 Kafka 系统:Amazon Kinesis,阿里云 RocketMQ,包括我们团队自研的 Talos 等系统,作为其输入。因此基于上述描述,期望基于小米数据流服务,让流式计算成为今后各个业务的标配。

所有数据全部转化为流

所有数据均会写到 Talos,不管其原始数据为何种格式,也不管原始数据存储平台或者生成方式,全部转化为流的形式,进而可以支持 Spark Streaming 等流式计算框架;

多样的流式处理数据源

依托于小米数据流服务 Source 的理念,可以方便的将各种数据:包括业务线上日志,各种数据库更新日志,交易数据等等各种业务有分析需求的数据,全部非常方便的导入到 Talos,然后通过 Spark Streaming 进行流式数据处理。

数据可重放

所有的数据均会在 Talos 里面缓存 24 小时(可配置,最长为 7 天),当业务有新的逻辑更新时,如果逻辑有问题,通过 Talos 的缓存机制,可以方便的进行重新计算。

二、简化数据交互流程

业务场景

随着业务的不断扩展,对于数据的各种统计需求不断增加,目前小米的业务从最开始使用 Hive,到后来的 Durid,ELK,Kylin,Spark SQL 等,都是为了满足业务的各种增加的统计需求。对于 OLAP 系统,为了使查询速度得到提升,一般都会对原始数据做各种形式的转换,所以 OLAP 都会自带存储,或者依赖 HDFS 等作为其存储。因此为了接入 OLAP 系统,一般首先要接入其存储。

另外对于一些在线业务,例如订单系统,不仅要实时更新数据库,同时需要将一些行为数据也更新到后端系统进行存储;依赖行为数据可以进行用户行为分析,广告推送,实时推荐等。

上述只是简述了一些有代表性的业务场景,至于深入到各种真实场景,可能更复杂的多,涉及到的系统也会更多,因此数据交互的场景可能会更加复杂。

一般数据交互流程

如上一节所示,真实的的业务数据交互场景可能描述如下:

在这种交互场景下,会遇到如下问题:

系统交互复杂度过高:每两个系统之间都需要进行交互,复杂度为 N*N-1;

系统复杂度过高:当涉及的系统过多时,系统架构本身就很复杂,对于开发和维护的代价都很高;

无法重用交互逻辑:各个业务按照自身的需求进行开发,尽管存在通用的部分,没有办法复用;

无法保证高可用:由于涉及的模块太多,所以数据交互质量比较难保证;

无法服务化:一般都是由业务部署交互系统,没有办法抽象并服务化;

小米数据流服务数据交互流程

**
**

如上图所示,所有系统均和 Talos 进行交互,其优势如下:

简化系统交互复杂度:各个系统只和 Talos 进行交互,因此复杂度为 2*M,当接入新的系统时也非常方便;

简化系统设计:所有的数据中转均基于小米数据流服务,之前系统交互的逻辑转发为小米数据流服务的一些配置,简单方便快捷,易于维护和扩展;

服务化:小米数据流服务以服务化的形式展现给用户,实现了各个模块的一次开发,全部业务通用;

高可用性:小米数据流服务提供数据质量监控和服务质量监控等两个维度的监控,提升整理数据流的高可用性;

数据中转平台

针对业务繁多的数据中转的需求,小米数据流服务最主要的目标就是要做完整的数据中转平台,让各种数据按照业务的需求在各种系统之间流转起来,为业务提供最高的便捷性,同时保证高可用,高可靠性。依赖于小米数据流服务,业务各种复杂的需求都可以非常快捷的搭建起来,而不需要关注背后的各种细节,把业务彻底解放出来,专注于自身更核心的逻辑,提高整个公司的效率。

三、全方位 Schema 支持

对于各种形式的数据,如果想对其进行利用,必须要理解其数据格式。但是在 Scribe 数据流之中,目前只有 Xlogger 和 Hive 两个首尾的地方有 schema,这就造成无法很好的理解数据并使用数据。后续我们会开发 SchemeRegistry 服务,为接入小米数据流服务的各个数据流提供全方位的 Schema 支持,并在数据流的各个环节进行数据格式校验。目前此服务准备接入中,敬请大家期待。


更多高质资源 尽在AIQ 机器学习大数据 知乎专栏 点击关注

转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com