58一站式数据分析平台云窗的实践之路

随着人工智能的崛起,大数据的行业地位变得日益重要,《财富》杂志曾这样说到:“数据,就是新的石油”。可见,大数据对公司、对行业的重要性可见一斑。

云窗,是58集团一站式数据分析云平台,已经为各个业务线提供了数据生态链的完整解决方案,其中已经涵盖但不限于数据管理、权限管理、数据查询和可视化、数据监控等领域,旨在帮助云窗用户简单高效的挖掘数据中的价值,让人人都能成为数据分析师。

本文将从云窗的整体架构入手,逐步为大家说明云窗是如何解决具体技术与产品问题的,以及相应的解决方案:

第一部分:云窗服务端架构演化

第二部分:产品及技术方案

第三部分:总结

在开始本文之前,先澄清几个名词,它们可能会在本文中频繁出现,为了避免引起歧义,特此说明如下:

1.文档/Doc:文档是云窗平台对用户为了执行一个数据统计或计算任务,而编写的一段SQL文本的统称。

2.临时文档:如果一个文档是用户为了满足某次临时查询而编写,不需要定时运行,也不需要保存,即服务端没有因此而生成文档ID,则属于一个临时文档。

3.定时文档:如果一个文档被用户保存,并且设定一个固定时间点或时间间隔运行一次,则它就是一个定时文档。

4.任务/Task:文档提交运行后生成一个或多个Task,所有Task运行完毕才代表文档运行完毕。

5.AKKA/Actor:AKKA是一个高并发的开源分布式框架,Actor是AKKA集群任务计算的最小单元。

云窗整体架构

从架构图中可以发现,云窗是一个偏业务的服务平台,产品栈非常丰富,面向用户包括研发工程师、产品运营人员、以及所有具有数据使用需求的同事和领导等,产品架构主要分如下三层:

1.服务层

服务层提供数据的存储和计算服务,包括Hadoop、Hive、SparkSQL等。

2.数据层

数据层包含云窗整个产品体系最核心的模块,比如数据仓库的管理,权限管理、数据质量监控和通知等模块,该层提供了应用层所需的所有基础服务。

3.应用层

应用层是云窗对外输出层,它的产出形式是多种多样的,比如面向业务人员的可视化服务、面向研发人员的高级SQL查询和开放平台API等,开放平台主要面向研发,用于第三方平台与云窗做对接。

服务端架构演化

云窗为58集团业务线提供数据服务已近三年了,累计接入10.2万张数据表,其中hive表6.9万张,覆盖集团全业务线,文档运行数量也在快速增加,为了应对日益增长的需要,云窗服务端已经经过了三个阶段的架构演进。

云窗服务端是基于Akka的cluster集群,Akka是一个用于构建高并发和分布式的弹性消息驱动应用框架,基于Actor的异步消息传递实现并发模型,Actor作为最小运算单元,具备Scala等函数式编程要求的不可变性。为什么要选择AKKA呢?主要原因有以下三点:

1.云窗最初采用Scala语言进行开发,而Akka是基于Scala语言的,使用非常方便;

2.云窗文档执行时,属于轻门面、重逻辑的接口,Akka基于Actor的并发模型,可以将复杂的逻辑进行拆分,由不同的线程、甚至机器并发执行,具备纵横可扩展性;

3. Akka内部维护消息队列和MailBox,开发者不需要维护消费队列,大幅降低开发成本。

第一阶段Task分离

云窗在设计之初,就通过AKKA集群实现了异步计算,由Actor队列自动维护计算队列。服务端实现了API Server和Task Server两部分的实现。

API Server负责接收从Nginx代理进来的用户查询临时文档请求,再转发给Task Server去处理,Task Server随机选举空闲的Actor来完成计算,如果所有Actor都处于繁忙状态,该条消息会压入MessageBox栈进行排队。

该阶段集群逻辑较为简单,但是代码上线耗时,不具备平滑上线的机制。当任务出现堆积时,只能通过增加线程数量来尝试解决,API Server到Task Server的任务分发完全随机,不可控,无法进行水平扩展。

第二阶段Quartz分离

如上图所示,为了解决平滑上线的问题,在该阶段,云窗将Quartz定时器从API Server中独立出来形成新的Cron Server,专门负责定时文档的调度。因此对于频繁增加功能的API Server(图中的YC Engine)就可以通过Nginx端口代理切换,随时上下线,实现业务的平滑重启和上线。

此时,虽然API Server发布速度非常快了,也不会对其他节点产生影响,但是Task Server和Cron Server发布还是不够灵活,比如如果要重启Cron Server,我们需要等待该节点上所有Task运行结束后才能重启。

第三阶段集群化

该阶段实现了集群化管理,如上图所示,根据Actor功能不同分配不同的角色,因此可以随时对一个角色上下线。

1.Actor节点水平扩展

当出现任务堆积时,仅需迅速增加新的Actor即可完成水平扩展,如下图,是Actor的管理界面。

2.Actor节点任务分配

如果某个节点任务压力太大,后台可以动态调整,甚至取消分发任务到该节点。如下图所示。如果需要重启节点或发布代码,修改并使新的任务分发到新的节点即可,旧节点等待任务全部运行完毕后自动下线。

至此,系统的运维效率进一步提升,也加快了产品迭代的速度。

3.文档界面化管理与监控

本次也增加了完善的任务管理页面,如下图所示,当业务发生异常时,可以通过后台快速批量进行任务维护。

产品及技术方案

1.数据仓库的建设与管理

如下图所示,云窗的数据管理包括三个核心模块:

1)数据元数据管理

元数据包括server(集群和服务器)、database(数据库)和table(表与字段)的管理三部分,用户可在云窗生态系统内创建表和管理表。

2)权限管理

权限分元数据权限和内容权限,云窗对数据权限可以精确到列和行级别,后文还会有详述。

3)数据内容管理

云窗对所有已接入的表都有完善的标签体系,可以方便的过滤、筛选用户需要的表,如下图。

2.数据查询和可视化

数据所能产生的价值需要通过业务展现,因此云窗提供了多种用户使用场景,具体包含以下几个方面:

1)数据查询

云窗提供了多种数据查询方式,对产品运营、或者不会使用SQL的用户,我们提供了个性化的可视化查询,简单的拖动定制您的筛选条件和要获取的字段即可,如下图。

如果用户具有SQL的使用经验,云窗也提供了高级SQL查询界面,所有Hive和MySQL支持的SQL语法,云窗高级SQL查询界面都是支持的,如下图。

另外,云窗也支持将数据导入kylin形成主题宽表实现主题化多维分析,也支持接入外部MySQL数据,通过数据可视化通道展现。

2)数据可视化

数据可视化是数据平台不可或缺的组成部分,云窗的数据可视化模块包括云图可视化系统、魔方多维分析和邮件微报表,导出功能仅用于特殊场景。

云图:致力于解决各种类型数据的图表可视化,以各种直观的曲线趋势图展示数据概览,目前云图已经支持定时文档、魔方、MySQL、临时文档、手动上传等数据的图表绘制功能。

魔方:云窗可以基于Kylin开发主题化的业务宽表,然后在魔方上做上卷下钻的多维分析。

邮件微报表:为了满足邮件订阅数据报表的需求,平台提供通用的微报表模块,用户只需要根据数据需求配置好邮件模板即可定时获取到邮件报表。

3.权限管理

云窗权限模块信息权限、内容权限和审批权限三种类型。

1)信息权限:包括用户的hadoop账号权限,用户对数据表的使用权限和管理权限

云窗对数据表的底层查询权限,是通过hadoop账号绑定的,而hadoop账号与用户所属OA部门虚拟对应。

云窗对数据表的管理权限,是通过表的的设计者和审批人管理的,比如表的设计者可以更新表字段、设置加密字段等,表审批人可以设置表的审批人、敏感字段、表安全级别等。

2)内容权限:包括文档和报表的所属权限,数据表的表级、行级、列级权限控制。

文档和报表设计为仅所属人有权限,当所属人离职或者转部门时,可以通过离职/转岗申请,将对应的所有权交接给新的负责人。

在云窗上使用非本部门的数据表,需要走申请流程过审批(详见审批权限部分)。如果数据表的内容对安全性和保密性要求较高,可以使用内容控制,云窗支持以下形式的内容级别权限控制。

1.设置敏感字段,敏感字段需要单独申请才能使用,服务端接收到文档SQL后,会自动解析SQL涉及到的所有字段名,并判断用户是否有使用该字段的权限。

2.设置加密字段,云窗允许开发者对特定字段内容进行加密,然后在表管理者界面设置加密字段,并上传指定解密UDF。用户使用加密字段时同敏感字段,也需要单独申请,审批通过后云窗给每个用户分配使用密钥,每个用户拥有单独的密钥,密钥中包含用户对加密字段的权限信息,从而确保加密信息的安全性。

3.开放特定行数据权限,云窗支持数据人员仅仅授权部分数据给业务方使用,例如,数据人员A只希望把platform=m的移动端数据开放给业务A用户使用,云窗通过视图控制此类权限,在用户申请权限的多级审批中,数据人员必须设置需要开放的查询条件,云窗组装该条件并自动生成一张视图表,审批通过后,业务A用户不会获取原始表权限,只能通过本次申请的视图表进行查询。

3)审批权限:云窗接入的数据已经覆盖58集团95%以上的业务线,各业务线对数据的使用、共享、流程都有很多个性化需求。云窗通过JBPM定制表权限申请流程。由于JBPM需要预先加载流程,这样用户申请表权限时,只能走固定的流程,灵活性不够。

云窗将第二步审批进行了扩展与深度定制,实现了多级多人审批功能,支持在审批过程中动态增加新的审批人,如下图的自定义审批节点,这样就满足了不同的表需要不同的审批人,甚至不同数量的审批人的需求。

例如,财务数据对安全性要求较高,在申请权限前,需要数据负责人统一核对,并分发给对应的业务方和数据方相关人员审批,如果涉及到更为保密的数据,也需要对应的相关的总监审批。这样一个完整的审批流程会如下图所示:

当leader(领导)审批完后,必须让需求方业务总监进行审批,然后流程到数据审批人,该节点的负责人可以判断表的重要性和敏感性程度,进而决定是否需要数据方业务审批人、需求方财务审批人、数据方财务审批人等人审批,极大满足用户个性化需求。

4.文档依赖与并发

云窗上运行的文档,分临时文档和定时文档两种,在部分场景如数据验证、数据统计、数据分析等场景下,文档的执行不需要任何依赖。对于定时文档,顾名思义,就是某个固定时间定时运行的文档,它在运行前可能需要依赖另外一个文档执行完毕,甚至依赖等待外部信号事件,例如58dp某个任务执行完毕且成功或者您服务器上的某个脚本运行结束等。

先介绍一下Xcenter状态管理中心,Xcenter是一个支持跨业务、跨项目、跨语言的通用状态/事件的依赖服务,专注于解决调度系统中事件依赖、任务依赖等问题。

Xcenter以汇报-询问的机制实现状态依赖,当定时文档需要依赖其他任何事件时,可以在SQL中添加依赖代码,下面的示例代码,表示该文档依赖ID为33115的另外一个云窗定时文档的执行结果,target_event_time_gte表示依赖文档的理论完成时间,$在运行时会被替换成当前日期零点,timeout是等待时长。

5.数据质量监控

云窗的数据质量监控分实时数据监控和离线数据监控。

云窗通过飞流对实时数据进行监控,飞流的数据来源主要是从kafka中读取的实时日志数据,因此如果如果需要对某张数据表进行实时数据监控,需要先将该表的原始日志写入kafka。飞流通过对日志中固定字段按照一定规则抽取、计算,最终得到当前一段时间的实时统计数据,并以折线图、饼图等方式展示并报警,飞流架构图和数据处理流程图分别如下:

云窗通过鹰眼对离线数据监控,鹰眼提供了对数仓数据表的常用指标监控功能,并提供与云窗所有输出进行深度打通,并提供满足用户个性化监控需求的能力,目前已经接入数据仓库表和定时文档,鹰眼架构图如下:

鹰眼从接入层的数据源获得数据后,顺序经过计算模块、策略模块、通知模块的计算过滤,将最终结果和异常数据存入DB,GUI层负责展示。

一个常见的监控条件格式如下。

总结

本文从云窗的整体架构入手,演示了云窗服务端架构升级过程,通过产品介绍了相关技术架构和设计方案。

云窗经过近三年的打磨,消除了业务数据孤岛,实现了数据互联互通,并沉淀了一整套平台化、体系化、全面化的大数据解决方案,已经成为58集团统一的数据云平台,是公司重要的数据基础设施。限于篇幅,云窗生态还有很多功能本文未曾提到,比如多维分析魔方、开放平台API实现、无埋点用户行为分析WMDA、统一数据开发调度平台58DP等。云窗未来会继续与业务紧密结合,深入洞察业务痛点,在人工智能方面为公司各个业务继续提效赋能,欢迎对云窗感兴趣的同学和我们一起交流。

58首款区块链应用

长按识别小程序码即可体验

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180929G0ZPBO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券