“ Linkis是微众银行开源的一款数据中间件,用于解决前台各种工具、应用,和后台各种计算存储引擎间的连接、访问和复用问题。开源链接:
https://github.com/WeBankFinTech/Linkis。”
Linkis是什么?
Linkis,是一个打通了多个计算存储引擎如Spark、TiSpark、Hive、Python和HBase等,对外提供统一JDBC、REST、WebSocket、Java和Python等接口,提交执行SQL、Pyspark、HiveQL、Scala等脚本的数据中间件。Linkis基于微服务架构,提供了金融级多租户隔离、资源管控、权限隔离等企业级特性,支持统一变量、UDF、函数、用户资源文件管理,具备高并发、高性能、高可用的大数据作业/请求全生命周期管理能力。
为什么需要Linkis?
大数据技术的广泛应用,催生出层出不穷的上层应用和下层计算引擎。通过引入多个开源组件来实现业务需求,不断更新和丰富大数据平台架构,几乎是现阶段所有企业的通用做法。如下图所示,当我们的上层应用、工具系统,和底层的计算存储组件越来越多时,整个数据平台的情况就会变成如上图的网状结构。不断引入新组件来实现业务需求,越来越多的痛点也随之产生:- 业务需求变化多端,上层组件各具特色,用户使用起来割裂感强烈,学习成本高昂。
- 数据种类繁多,存储和计算非常复杂,一个组件一般只解决一个问题,开发和运维人员必须具备完善的技术栈。
- 新组件的引入,在多租户隔离、用户资源管理、用户权限管理等无法兼容原有数据平台,自上而下的定制化开发,不仅工程浩大,而且重复造轮子。
- 上层应用直接对接底层计算存储引擎,一旦底层环境发生任何改变,都会直接影响业务产品的正常使用。
Linkis的设计理念
让上层应用和底层计算存储引擎彻底解耦,真正实现上层用户只负责具体业务实现,下层运维只负责新引擎的引入,其他的诸如高并发、多租户隔离、用户资源管控等和机房搬迁都不受影响的企业级产品能力,全部交由一套统一的中间产品提供,是Linkis数据中间件的设计理念。基于Linkis数据中间件,我们重新定义了整个大数据平台提供服务的方式和流程。连接
- 多种接入方式:JDBC/Rest/Java SDK/Python SDK/WebSocket,简化应用接入。
- 多引擎:Spark、Hive、TiDB、Python等,访问底层计算存储引擎,简单快捷。
- 多语言:SQL、Pyspark、Scala、Java、Python等,让业务逻辑随心所欲的表达。
管控
资源管控:独有的资源管理服务,让YARN不再直接袒露;系统级资源管控,让系统之间不再相互抢占资源;用户级资源管控,Bad SQL不再引发灾难。
流量管控:系统级和用户级并发控制能力,让上层应用的用户访问,分优先级、分批次排队访问。
用户权限管控:提供统一SSO登录鉴权能力;用户请求,如有必要将严格sudo到对应Linux用户执行。
打通
资源文件打通:Jar、UDF、Python/Scala函数、引擎参数、配置文件、物料库资源,一处导入,处处可用。
上下文共享:跨系统的变量共享、跨系统的temp View共享,一处定义,处处可用。
脚本通用性:无需顾及代码通用性,Linkis提供统一规范。让数据研发IDE工具的一段代码,快速实现可视化展示,快速实现工作流定时调度。
简化
元数据采集简化:Linkis统一接入入口,让数据血缘信息的采集、热点数据的采集从未如此简单。
脱敏简化:Linkis提供统一结果查看出口,查看数据时才脱敏,既满足复杂计算需求,又保证数据私密性。
故障排查简化:统一错误码和错误描述,错误码直接关联解决方案,让用户自助化解决异常问题。
运营简化:强化计算存储引擎的标签能力,允许多版本同时并存可用。
安全认证简化:底层任何访问,都必须先经过Linkis,为底层计算存储上一把锁。
Linkis如何助力WeDataSphere构建开源生态
WeDataSphere是一套一站式、金融级、开源开放大数据平台套件,已在国内最大线上银行WeBank,经过了数年海量严苛金融业务场景的打磨和验证,表现卓越。更多关于WeDataSphere的介绍,请访问:https://github.com/WeBankFinTech/WeDataSphere。Linkis,作为承接WeDataSphere上下层组件的核心中间件,我们在其开源之初,就同时筹备开源多个上层大数据工具,将其打造成一个完整的大数据生态。DataWorkis。对接了数据中间件Linkis的DataWorkis,作为一站式数据研发、可视化展现和工作流调度的数据应用开发门户,定位为闭环涵盖数据应用的全流程,满足从数据导入、数据清洗、数据加工、数据可视化展现到数据输出的全数据应用开发场景。数据工具
- 数据地图。对接了数据中间件Linkis的数据地图,定位为管理全行数据资源,包括元数据管理、数据权限、数据血缘,及开发中的数据质量、数据模型等功能模块。
- Qualitis。对接了数据中间件Linkis的数据质量,定位为提供一整套统一的流程来定义和检测数据集的质量并及时报告问题,包括数据质量模型定义,数据质量结果可视化、可监控,当检测到问题时,可以及时发出警报。
- 数据脱敏。对接了数据中间件Linkis的数据脱敏,支持对高密级数据进行脱敏,避免用户直接接触高密级原始数据。
平台工具
- 智能诊断。对接了数据中间件Linkis的智能诊断,支持自动化监测运行中的大数据作业,帮助用户诊断其性能瓶颈,自动告警并提供优化建议。
- 故障排查。对接了数据中间件Linkis的故障排查,支持提供统一的错误码和错误描述,错误码直接关联解决方案,让用户自助化解决异常问题。
Linkis的技术架构
如下图所示,在技术架构层面,我们基于SpringCloud微服务技术,新建了多个微服务集群,来打造Linkis的中间件能力。每个微服务集群都承担系统的一部分功能职责,我们对其进行了如下明确的划分。如:统一作业执行服务
一个分布式的REST/WebSocket服务,用于接收上层系统提交的各种访问请求。已支持计算引擎:Spark、Python、TiSpark、Hive和Shell等。已支持脚本语言:SparkSQL、Spark Scala、Pyspark、R、Python、HQL和Shell等;资源管理服务
实时管控系统和用户的资源使用情况,限制系统和用户的资源使用量和并发数,并提供实时资源动态图表,方便查看和管理系统和用户的资源;
已支持资源类型:Yarn队列资源、服务器(CPU和内存)、用户并发个数等。
统一存储服务
通用的IO架构,能快速对接各种存储系统,提供统一调用入口,支持所有常用格式数据,集成度高,简单易用;
统一上下文服务
统一用户和系统的资源文件(用户脚本、JAR、ZIP、Properties等),用户、系统、计算引擎的参数和变量统一管理,一处设置,处处自动引用;
物料库服务
系统和用户级物料管理,可分享和流转,支持全生命周期自动管理;
元数据服务
实时的Hive库表结构和分区情况展示。
总结
Linkis作为数据中间件,为实现对下层调用细节的屏蔽,做了许多的尝试和努力。
由于篇幅所限,本文不再详细论述Linkisd的架构设计,如您感兴趣,欢迎访问开源Github Wiki:https://github.com/WeBankFinTech/Linkis/wiki。
有没有一套真正基于开源,经过金融级生产环境和场景的自研打磨完善,再回到开源社区的大数据解决方案,让人能相对放心的拿去服务于生产,支持金融级业务,具备企业级特性保障?
希望Linkis生态成为答案。
期待更多的社区力量,一起推动Linkis生态圈的成长。