【大数据】Linkis:打通上层应用与底层计算引擎的数据中间件
Linkis:打通上层应用与底层计算引擎的数据中间件
- 1.引言
- 2.背景
- 3.设计初衷
- 4.技术架构
- 5.业务架构
- 6.处理流程
- 7.如何支撑高并发
- 8.用户级隔离度和调度时效性
- 9.总结
Linkis 是微众银行开源的一款 数据中间件,用于解决前台各种工具、应用,和后台各种计算存储引擎间的连接、访问和复用问题。
1.引言
Linkis,一个打通了多个计算存储引擎如 Spark
、TiSpark
、Hive
、Python
和 HBase
等,对外提供统一 REST
/ WebSocket
/ JDBC
接口,提交执行 SQL
、Pyspark
、HiveQL
、Scala
等脚本的数据中间件。
Linkis 基于微服务架构,提供了金融级多租户隔离、资源管控、权限隔离等企业级特性,支持统一变量、UDF、函数、用户资源文件管理,具备高并发、高性能、高可用的大数据作业 / 请求全生命周期管理能力。
2.背景
大数据技术的广泛应用,催生出层出不穷的上层应用和下层计算引擎。
通过引入多个开源组件来实现业务需求,不断更新和丰富大数据平台架构,几乎是现阶段所有企业的通用做法。
如下图所示,当我们的上层应用、工具系统,和底层的计算存储组件越来越多时,整个数据平台的情况就会变成如上图的网状结构。
不断引入新组件来实现业务需求,越来越多的痛点也随之产生:
- 业务需求变化多端,上层组件各具特色,用户使用起来割裂感强烈,学习成本高昂。
- 数据种类繁多,存储和计算非常复杂,一个组件一般只解决一个问题,开发人员必须具备完善的技术栈。
- 新组件的引入,在多租户隔离、用户资源管理、用户权限管理等无法兼容原有数据平台,自上而下的定制化开发,不仅工程浩大,而且重复造轮子。
- 上层应用直接对接底层计算存储引擎,一旦底层环境发生任何改变,都会直接影响业务产品的正常使用。
3.设计初衷
如何提供统一的数据中间件,对接上层应用工具,屏蔽掉底层的各种调用和使用细节,真正做到让业务用户只需关注业务实现,就算底层平台机房扩建、整体搬迁都不受影响,是 Linkis 的设计初衷!
4.技术架构
如上图所示,我们基于 SpringCloud 微服务技术,新建了多个微服务集群,来打造 Linkis 的中间件能力。
每个微服务集群都承担系统的一部分功能职责,我们对其进行了如下明确的划分。如:
- 统一作业执行服务(UJES):一个分布式的 REST / WebSocket 服务,用于接收上层系统提交的各种访问请求。
- 目前支持的计算引擎有:
Spark
、Python
、TiSpark
、Hive
和Shell
等。 - 支持的脚本语言有:
SparkSQL
、Spark Scala
、Pyspark
、R
、Python
、HQL
和Shell
等;
- 目前支持的计算引擎有:
- 资源管理服务(RM): 支持实时管控每个系统和用户的资源使用情况,限制系统和用户的资源使用量和并发数,并提供实时的资源动态图表,方便查看和管理系统和用户的资源。
- 目前已支持的资源类型:
Yarn
队列资源、服务器(CPU 和内存)、用户并发个数等。
- 目前已支持的资源类型:
- 统一存储服务(Storage):通用的 IO 架构,能快速对接各种存储系统,提供统一调用入口,支持所有常用格式数据,集成度高,简单易用。
- 统一上下文服务(CS):统一用户和系统的资源文件(用户脚本、
JAR
、ZIP
、Properties
等),用户、系统、计算引擎的参数和变量统一管理,一处设置,处处自动引用。 - 物料库服务(BML):系统和用户级物料管理,可分享和流转,支持全生命周期自动管理。
- 元数据服务(Database):实时的
Hive
库表结构和分区情况展示。
依赖这些微服务集群的相互协作,我们改善了整个大数据平台对外服务的方式和流程。
5.业务架构
-
Gateway 网关:基于 Spring Cloud Gateway 进行了插件化功能增强,新增了前端 Client 与后台多 WebSocket 微服务 1 1 1 多 N N N 支持,主要用于解析和路由转发用户的请求到指定微服务。
-
统一入口:统一入口是用户某一类引擎作业的 Job 生命周期管理者。从接收作业、作业提交给执行引擎、到作业执行信息反馈给用户,再到作业完成,Entrance 管理了一个作业的全生命周期。
-
引擎管理器:引擎管理器负责管理引擎的全生命周期。负责向资源管理服务申请和锁定资源,并实例化新的引擎,也负责监控引擎的生命状态。
-
执行引擎:执行引擎是真正执行用户作业的微服务,它由引擎管理器启动。为了提升交互性能,执行引擎直接跟统一入口进行交互,实时推送执行的日志、进度、状态和结果集给统一入口。
-
资源管理服务:实时管控每个系统和每个用户的资源使用情况,管理引擎管理器的资源使用和实际负载,限制系统和用户的资源使用量和并发数。
-
Eureka:Eureka 是 Netflix 开发的服务发现框架,SpringCloud 将它集成在其子项目
spring-cloud-netflix
中,以实现 SpringCloud 的服务发现功能。每个微服务都内置了 Eureka Client,可以访问 Eureka Server,实时获得服务发现的能力。
6.处理流程
Linkis 如何处理上层系统提交的一条 SparkSQL?
- 上层系统的用户提交一个 SQL,先经过
Gateway
,Gateway
负责解析用户请求,并路由转发给合适的统一入口Entrance
。 Entrance
会先寻找该系统的该用户是否存在可用的 Spark 引擎服务,如果存在,则直接将请求提交给 Spark 引擎服务。- 不存在可用 Spark 引擎服务,开始通过
Eureka
的服务注册发现功能,拿到所有的引擎管理器列表,通过请求RM
实时获取引擎管理器的实际负载。 Entrance
拿到负载最低的引擎管理器,开始要求引擎管理器启动一个 Spark 引擎服务。- 引擎管理器接收到请求,开始询问
RM
该系统下的该用户,是否可以启动新引擎。 - 如果可以启动,则开始请求资源并锁定;否则返回启动失败的异常给到
Entrance
。 - 锁定资源成功,开始启动新的 Spark 引擎服务;启动成功后,将新 Spark 新引擎返回给
Entrance
。 Entrance
拿到新引擎后,开始向新引擎请求执行 SQL。- Spark 新引擎接收 SQL 请求,开始向
Yarn
提交执行 SQL,并实时推送日志、进度和状态给Entrance
。 Entrance
将获取的日志、进度和状态实时推送给Gateway
。Gateway
回推日志、进度和状态给前端。- 一旦 SQL 执行成功,
Engine
主动将结果集推给Entrance
,Entrance
通知前端拿取结果。
如何保证高实时性
众所周知,Spring Cloud 集成了 Feign
来作为微服务之间的通信工具。
基于 Feign
的微服务之间 HTTP 接口调用,只支持 A 微服务实例根据简单规则随机访问 B 微服务的某个实例。
但 Linkis 的执行引擎,却可以直接主动推送日志、进度和状态给请求它的统一入口,Linkis 是如何做到的?
Linkis 基于 Feign
实现了一套自己的底层 RPC
通信方案。
如上图所示,我们在 Feign
的基础上,封装出了 Sender
和 Receiver
。
Sender
作为发送端直接可用,用户可以指定访问某个微服务实例,也可以随机访问,还支持广播。
Receiver
作为接收端,需要用户实现 Receiver
接口,用于处理真正的业务逻辑即可。
Sender
提供三种访问方式,如下:
-
ask
方法为同步请求响应方法,要求接收端必须同步返回响应。 -
send
方法为同步请求方法,只负责同步将请求发送给接收端,不要求接收端给出答复。 -
deliver
则为异步请求方法,只要发送端的进程不异常退出,在稍后会通过其它线程将请求发送给接收端。
7.如何支撑高并发
Linkis 设计了 5 5 5 大异步消息队列和线程池,Job 每次占用线程不到 1 1 1 毫秒,保证每个统一入口可承接超 10000 10000 10000+ TPS 常驻型 Job 请求。
- 如何提高上层的请求吞吐能力?
Entrance
的 WebSocket 处理器,内置一个处理线程池和处理队列,接收Spring Cloud Gateway
路由转发的上层请求。
- 如何保证不同系统不同用户的执行请求,互相隔离?
Entrance
的 Job 调度池,每个系统的每个用户,都有一个专用线程,保证隔离度。
- 如何保证 Job 执行高效?
- Job 执行池,只用于提交 Job,一旦 Job 提交给了
Engine
端,则立马放入 Job 执行队列,保证每个 Job 占用执行池线程的时间不超过 1 1 1 毫秒。 - RPC 请求接收池,用于接收和处理
Engine
端推来的日志、进度、状态和结果集,并实时更新 Job 的相关信息。
- Job 执行池,只用于提交 Job,一旦 Job 提交给了
- 如何实时将 Job 的日志、进度和状态推给上层系统?
- WebSocket 发送池,专门用于处理 Job 的日志、进度和状态,将信息推给上层系统。
8.用户级隔离度和调度时效性
Linkis 设计了 Scheduler 模块 —— 可智能监控扩展的分组调度消费模块,用于实现 Linkis 的高并发能力。
每个系统的每个用户,都会单独分组,来保证系统级和用户级的隔离度。
每个消费器均有一个独立的监控线程,统计消费器中等待队列的长度、正在执行的事件数量、执行时间的增长比例等指标。
消费器所对应的分组对象,会对这些指标设置阈值和告警比例,一旦某个指标超过阈值,或多个指标间的比例超过限定范围(比如监控到平均执行时间大于分发间隔参数,即认为超过阈值),监控线程就会立即对消费器进行相应的扩展。
扩展时,会充分利用上述的调参过程,具有针对性的调大某个参数,其它参数会自动随之得到扩展。
9.总结
Linkis 作为数据中间件,为实现对下层调用细节的屏蔽,做了许多的尝试和努力。
比如:Linkis 如何实现统一存储服务?Linkis 如何统一 UDF、函数和用户变量?
由于篇幅所限,本文不再详细论述,如您感兴趣,欢迎您访问官网:https://linkis.apache.org
有没有一套真正基于开源,经过金融级生产环境和场景的自研打磨完善,再回到开源社区的数据中间件,让人能相对放心的拿去服务于生产,支持金融级业务,具备企业级特性保障?
我们希望 Linkis 成为答案。
相关文章:

【大数据】Linkis:打通上层应用与底层计算引擎的数据中间件
Linkis:打通上层应用与底层计算引擎的数据中间件 1.引言2.背景3.设计初衷4.技术架构5.业务架构6.处理流程7.如何支撑高并发8.用户级隔离度和调度时效性9.总结 Linkis 是微众银行开源的一款 数据中间件,用于解决前台各种工具、应用,和后台各种…...

权限提升-数据库提权-MSF-UDF提权
权限提升基础信息 1、具体有哪些权限需要我们了解掌握的? 后台权限,网站权限,数据库权限,接口权限,系统权限,域控权限等 2、以上常见权限获取方法简要归类说明? 后台权限:SQL注入,数…...

基于XL32F003单片机的可控硅调光方案
可控硅调光是一种用于调节电源输出电压的技术,被广泛应用于各种场景。它主要通过改变波形的导通角度来调节输出电压的大小,从而实现对照明设备亮度的控制。在照明市场占据了很大的调光市场。 可控硅调光的兼容性强,应用范围广。例如ÿ…...

【ag-grid-vue】列定义(Updating Column Definitions)
列定义一节解释了如何配置列。可以在初始设置列之后更改列的配置。本节介绍如何更新列定义。 添加和删除列 可以通过更新提供给网格的列定义列表来添加和删除列。当设置新列时,网格将与当前列进行比较,并计算出哪些列是旧的(要删除)、哪些列是新的(创建…...

mysql sql_mode数据验证检查
sql_mode 功能 sql_mode 会影响MySQL支持的sql语法以及执行的数据验证检查。通过设置sql_mode ,可以完成不同严格程度的数据校验,有效地保障数据准确性 sql_mode 严格模式 VS 宽松模式 宽松模式 比如,插入的数据不满足 表的数据类型,也可能…...
Prompt召唤 AI “生成”生产力,未来已来
如果说 2023 年的 AI 为世界带来了怎样的改变,那么大模型的狂飙发展, 无疑一马当先。以人机交互为例,“提示词工程师”(又称“AI 召唤师”)成为 21 世纪最脑洞大开的新兴职业,用自然语言写代码、召唤计算机…...
【0day】复现时空智友企业流程化管控系统SQL注入漏洞
目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现 一、漏洞描述 时空智友企业流程化管控系统是一个用于企业流程管理和控制的软件系统。它旨在帮助企业实现流程的规范化、自动化和优化,从而提高工作效率、降低成本并提升管理水平。时空智友企业流程化管控系统存…...
python编程中fft的优缺点,以及如何使用cuda编程,cuda并行运算,信号处理(推荐)
A.python中cuda编程的库主要有: cupy、pycuda 1,区别如下: 支持的GPU平台: PyCUDA:PyCUDA是一个用于在Python中编写CUDA代码的库。它支持NVIDIA的CUDA平台,并提供了与CUDA C/C++接口相似的功能。因此,PyCUDA主要用于与NVIDIA GPU交互的应用。 CuPy:CuPy是一个用于在P…...
统计学补充概念-16-支持向量机 (SVM)
概念 支持向量机(Support Vector Machine,SVM)是一种用于分类和回归的机器学习算法。SVM的主要目标是找到一个最优的超平面,可以将不同类别的数据样本分开,同时使得支持向量(离超平面最近的样本点…...

Python“牵手”天猫商品列表数据,关键词搜索天猫API接口数据,天猫API接口申请指南
天猫平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范,天猫API接口是指通过编程的方式,让开发者能够通过HTTP协议直接访问天猫平台的数据,包括商品信息、店铺信息、物流信息等,从而实现天猫平台…...

SQL 错误 [22007]: ERROR: invalid input syntax for type date: ““
0. 背景 PG数据库一张表有这样一个varchar类型的字段end_date,存储的值是格式化后的年月日日期如 2024-08-10 现在我需要根据当前日期与end_date的差值作为where条件过滤,我的写法 select …… from my_table_name where current_date - cast (end_date as date) >100报错…...

SpringBootWeb案例 Part 2
目录 3. 员工管理 3.1 分页查询 3.1.1 基础分页 3.1.1.1 需求分析 3.1.1.2 接口文档 3.1.1.3 思路分析 3.1.1.4 功能开发 PageBean 3.1.1.5 功能测试 3.1.1.6 前后端联调 3.1.2 分页插件{分页查询-PageHelper插件} 3.1.2.1 介绍 官网: 3.1.2.2 代码实…...

4.14 HTTPS 中 TLS 和 TCP 能同时握手吗?
目录 实现HTTPS中TLS和TCP同时握手的前提: 什么是TCP Fast Open? TLS v1.3 TCP Fast Open TLSv1.3 HTTPS都是基于TCP传输协议实现的,得先建立完可靠得TCP连接才能做TLS握手的事情。 实现HTTPS中TLS和TCP同时握手的前提: 1、…...

游戏开发服务器选型的横向对比
来源一个某乎的作者,貌似来自台湾 上篇介绍了go版本的游戏服务器,这篇介绍下其它语言版本: SkynetkbengineNoahGameFramePomeloPinusET使用的语言C/LuaCCNodejsTypeScriptC#概述云风前辈开源的框架mmo框架server一个快速的、可扩展的、分布…...

【android12-linux-5.1】【ST芯片】HAL移植后配置文件生成报错
根据ST官方源码移植HAL源码后,执行readme指示中的生成配置文件指令时报错ST_HAL_ANDROID_VERSION未定义之类,应该是编译环境参数问题。makefile文件中是自动识别配置的,参数不祥就会报错,这里最快的解决方案是查询确定自己android…...
基于深度神经网络的分类--实现与方法说明
1、分类系统的设计 采用神经网络进行分类需要考虑以下几个步骤: 数据预处理: 将数据特征参数和目标数据整理成合适的输入和输出形式,可以使用过去一段时间的数据作为特征,然后将未来的数据作为输出标签,进行分类问题的…...

Java“牵手”天猫商品快递费用API接口数据,天猫API接口申请指南
天猫平台商品快递费用接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取天猫商品的标题、价格、库存、商品快递费用,宝贝ID,发货地,区域ID,快递费用,月销量、总销量、库存、详情…...

哲讯科技携手无锡华启动SCM定制化项目,共谋数字化转型之路
无锡华光座椅弹簧有限公司启动SCM定制化项目 近日,无锡华光座椅弹簧有限公司顺利举行了SCM定制化项目的启动会。本次启动会作为该项目实施的重要里程碑,吸引了双方项目组核心成员的共同参与,并见证了项目的正式启动。 无锡华光座椅弹簧有限公…...

ModaHub魔搭社区:将图像数据添加至Milvus Cloud向量数据库中
将图像数据添加至向量数据库中 图像分割裁剪完成后,我们就可以将其添加至 Milvus Cloud 向量数据库中了。为了方便上手,本项目中使用了 Milvus Lite 版本,可以在 notebook 中运行 Milvus 实例。接下来,使用 PyMilvus 连接至 Milvus Lite 提供的默认服务器。 这一步骤中,…...

svn下载
Download | VisualSVN for Visual Studio svn下载...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...