Linkis是微众银行开源的一款数据中间件,用于解决前台各种工具、应用,和后台各种计算存储引擎间的连接、访问和复用问题。
一、引言
Linkis Github repo: https://github.com/WeBankFinTech/Linkis
Linkis,一个打通了多个计算存储引擎如Spark、TiSpark、Hive、Python和HBase等,对外提供统一REST/WebSocket/Java/JDBC等接口,提交执行SQL、Pyspark、HiveQL、Scala等脚本的数据中间件。
Linkis基于微服务架构,提供了金融级多租户隔离、资源管控、权限隔离等企业级特性,支持统一变量、UDF、函数、用户资源文件管理,具备高并发、高性能、高可用的大数据作业/请求全生命周期管理能力。
二、背景
大数据技术的广泛应用,催生出层出不穷的上层应用和下层计算引擎。
通过引入多个开源组件来实现业务需求,不断更新和丰富大数据平台架构,几乎是现阶段所有企业的通用做法。
如下图所示,当我们的上层应用、工具系统,和底层的计算存储组件越来越多时,整个数据平台的情况就会变成如上图的网状结构。
不断引入新组件来实现业务需求,越来越多的痛点也随之产生:
-
业务需求变化多端,上层组件各具特色,用户使用起来割裂感强烈,学习成本高昂。
-
数据种类繁多,存储和计算非常复杂,一个组件一般只解决一个问题,开发和运维人员必须具备完善的技术栈。
-
新组件的引入,在多租户隔离、用户资源管理、用户权限管理等无法兼容原有数据平台,自上而下的定制化开发,不仅工程浩大,而且重复造轮子。
-
上层应用直接对接底层计算存储引擎,一旦底层环境发生任何改变,都会直接影响业务产品的正常使用。
三、Linkis的设计初衷
如何让上层应用和底层计算存储引擎彻底解耦,真正实现上层用户只管具体业务实现,下层运维只管新引擎的引入,其他的诸如高并发、多租户隔离、用户资源管控等和机房搬迁都不受影响的企业级产品能力,全部交由一套统一的中间产品提供,是Linkis数据中间件的设计初衷。
基于Linkis数据中间件,我们重新架构了整个大数据平台对外提供服务的方式和流程。
-
业务应用:想要的服务访问方式:WebSocket/Rest/JDBC/Java SDK/Python SDK,Linkis都有;想要的高级特性:高并发和高可用7*24、限流和分流、资源管控和隔离、用户权限等,Linkis都有。
-
应用层工具:Linkis全线贯通数据研发IDE工具、可视化BI工具和工作流调度工具。让数据研发IDE工具的一段代码,快速且顺畅地实现可视化展示,发布到工作流调度工具进行定时调度,无须顾及代码兼容性、UDF、自定义变量和各种Jar的跨系统使用问题。
-
数据层工具:Linkis统一接入入口,让数据血缘的采集、热点数据的采集从未如此简单。统一建库/建表入口,具备了应用元数据信息的相关库表,才允许被Linkis传递到底层,保证企业元数据的完整性和有效性。查看数据时才脱敏,既满足复杂计算需求,又保证数据的私密性。
-
平台工具:增强平台运维能力,提供统一的错误码和错误描述,错误码直接关联解决方案,让用户自助化解决异常问题。
四、Linkis即将打造的开源生态
作为微众银行大数据平台,经过了数年海量严苛金融业务场景的打磨和验证,表现十分卓越的数据中间件Linkis,我们在其开源之初,就同时筹备开源多个上层大数据工具,将其打造成一个完整的大数据生态。
-
目前已开源的有:数据研发IDE工具Scriptis。
-
即将开源的有:数据可视化BI工具、图形化工作流工具和数据质量工具。
即,Linkis全线贯通Scriptis + 数据可视化BI工具 + 图形化工作流工具为一体的DataWorkis,也将于近期开源。
在一个页面就可以完成脚本研发、可视化展现和工作流定时调度的开源项目,大家不妨保持期待。
更多工具准备开源中,敬请期待!
五、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生态圈的成长。