火山引擎DataLeap的Data Catalog系统公有云实践 (下)

news2024/11/14 16:24:10

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群

Data Catalog公有云遇到的挑战

Data Catalog经历了一个从0到1在火山引擎公有云部署并逐步优化和迭代发布10+版本的过程,在这个过程中经历不少挑战,下面将介绍其中比较典型的问题以及我们探索并实践的一些解决方案。

网络和数据安全

为保证网络安全和多租户数据安全,火山引擎上公有云产品部署的环境划分为“公共服务区”和“售卖区”,同时售卖区又分割为若干私有网络(即VPC),然后公共服务区和售卖区以及售卖区的VPC之间都是网络隔离的。

Data Catalog会依赖一些内部公共服务,这类服务通常都部署在公共服务区,而按照网络和数据安全规范,Data Catalog作为独立云产品需要部署在售卖区独立VPC内,类似的情况Data Catalog依赖的数据中台产品也需部署在独立VPC内,例如EMR、LAS和Bytehouse。另外,Data Catalog对外会提供OpenAPI,外部客户可以通过火山引擎的API网关来访问这些API,但API网关服务是在公共服务区,无法直接访问到Data Catalog服务,基于以上情况,为了正常对外提供服务,我们需要解决网络隔离问题同时还要保证安全性。

解决方案:

 

  • 服务部署:为了能够在售卖区部署,经过调研我们选择火山引擎提供的容器服务(VKE)和负载均衡(CLB)来进行基础服务部署和构建,其中CLB提供四层负载均衡能力,容器服务是高性能 Kubernetes 容器集群管理服务。Data Catalog基于容器服务提供的无状态负载(Deployment)、定时任务(CronJob)、服务(Service)等云原生容器管理功能进行基本服务和调度任务部署,同时也使用火山引擎的存储和中间件,以上组件均在同一个VPC内,能够保证网络连通以及数据安全。

  • 网络打通:为解决上文所说的网络隔离问题,经过调研我们使用了公司通用的网络代理服务(PLB/Shuttle),该网络代理可做到网络打通的同时保证四层网络流量的安全,从而达到我们和各依赖方如公共服务(API网关、IAM等、独立部署的云服务(EMR/LAS等)的网络连通目标。

  • 数据安全:火山引擎部署环境做网络隔离,主要是保证安全性,我们虽然使用网络代理打通网络,但是仍需保证各个环节的安全性,考虑到服务间交互都是通过HTTP请求,我们对和外部交互的接口都增加了SSL和双向认证的机制,同时在安全认证方面,我们没有使用Nginx或Java原生的方案,而是借助于火山引擎内部安全服务中的ZTI团队的envoy组件来实现,同时使用sidecar模式和我们后端服务容器集成部署,既降低了服务端部署改造成本,也解耦了服务端业务逻辑和安全认证逻辑。

多租户适配

这里先对多租户相关概念做一些解释:

  • 租户:一个客户、公司、个人开通或购买了火山引擎的云产品,火山引擎就会通知对应的服务提供者,对应云产品会感知到他的开通,这个客户就是这个云产品的一个租户,实际场景可以类比于一个公司是一个租户,不同的公司是不同的租户。

  • 多租户服务:云服务要为多个租户提供服务,需要做到租户隔离,保证各租户的访问控制、数据、服务响应等各方面的使用都是隔离的,彼此互不感知互不影响的。要做到租户隔离,就需要云服务能通过逻辑或物理隔离的方式来将各租户对应数据和访问隔离开来,避免互相影响。

此前,在字节跳动内部实践中不存在多租户场景,所以面向公有云用户服务时,Data Catalog针对支持多租户服务的能力,需要进行专门适配。

解决方案:

Data Catalog在元数据存储层借用了Apache Atlas的设计与实现。Atlas的底层使用JanusGraph做图引擎,JanusGraph是基于Gremlin图查询语义实现的计算引擎,而社区版Atlas不支持多租户场景。我们通过在Atlas上增加JanusGraph Partition Strategy适配,实现存储层租户逻辑隔离。

 

参考以上示例,JanusGraph的Partition Strategy可以支持设置的read/write Partition的value,并保证只读/写指定Partition的数据,从而达到数据隔离,我们将租户信息和Partition Strategy相结合,实现了多租户场景下读写数据的逻辑隔离,保证了数据安全性。

内外部功能一致

Data Catalog在字节跳动内部已打磨多年,产品形态和技术架构比较成熟,但随着公有云部署和ToB产品迭代,因内部外基础服务差异和ToB引入新的使用场景和上下游组件导致内外部产品功能和技术实现的差异也越来越多。

在前几个版本中,我们尝试使用独立的代码分支和版本来支持ToB功能,避免内部新功能对ToB产生影响,但我们发现随着版本差异越来越大,代码和功能的合并和兼容就变得非常困难,在其中一次整体代码合并时,出现了好几千的文件diff和上百处merge conflict,我们花费了一周时间多的时间合并代码和进行多环境测试回归验证,最终完成了合并。功能和代码的不一致已经成为影响研发效率和需求交付进度的很重要因素,必须要进行优化。

解决方案:

我们主要从产品功能和代码版本两方面来处理内外部一致性问题:

产品功能

  • 产品功能的标准化:原则上所有功能都应做到内外部一致,只允许部分功能点的实现区别。我们期望能将各功能都进行标准化,基础模块和通用能力(如元数据模型、搜索、血缘)原则上需保持内外一致,内外部依赖或需求场景差异较大的功能(如元数据接入和采集、库表管理)改造为标准化流程,将差异部分尽量减小,做到只通过配置、插件、版本控制工具等方式就能适配,减少研发和运维成本。

  • 明确的一致性规划:从模块到功能点逐个对比内部外实现情况,制定长期roadmap,明确差异点的支持排期,并提高对齐内部功能的工作优先级,逐步减少差异。

  • 新功能的兼容性:新功能的设计需考虑内外部一致性,包括产品的交互和研发的技术方案都需考虑外部场景并明确兼容方案,原则上对特殊场景定制化功能都需考虑通用场景适配,尽量保持多环境的兼容性。

技术实现

  • 统一的代码分支管理规范:原则上内外部的代码是一致的即统一的分支。具体来说,不管域内外功能都需兼容多环境并在多环境验证才能合并代码,外部如公有云在发版周期中会基于内部主分支代码(如master分支)创建一个新的release-x.x.x分支,进行回归验证和公有云上线,同时线上持续使用release-x.x.x分支以保证线上环境稳定,release-x.x.x分支需定期合回主分支。新的版本会继续基于主分支开发,并持续保持该规范。

  • 明确的发版规划:根据实际情况,内部通常迭代比较敏捷发版频率较快,而外部通常要求稳定性,会定期发版(如每月一个版本),考虑到发版周期的差异,我们会以外部固定周期为标准,细粒度控制需求评估、功能开发、QA测试、回归测试等各环节所在时间段,明确封板时间,降低内外部互相影响。

  • 一致性意识和自动化多环境验证:通过多轮分享和培训在技术团队内部对齐一致性意识,清楚内外部差异点FAQ等,另外,如上所说新功能技术设计方案需明确多环境兼容性。同时,引入自动化的多环境验证环节,尽早发现不兼容或不一致的问题,减少人工判断和测试的成本。

OpenAPI

在DataLeap Beta版本发布之后,有内外部客户在试用,当时就有客户提出OpenAPI的需求,但在Beta版本我们还未支持OpenAPI。公司内部有OpenAPI规范和平台,Data Catalog也借助相关平台实现了内部的OpenAPI,但是ToB场景的公共平台不同且会遇到ToB场景特定的问题(如安全认证、多租户、API开通计费等),需要综合考虑来对外提供解决方案。

解决方案:

如前文介绍,火山引擎内部公共服务有API网关的通用服务(TOP),并有若干API发布规范,Data Catalog调研了该API网关并解决以上核心问题来支持ToB OpenAPI。以下介绍一下主要流程和关注点:

 

API管理

  • Data Catalog借助于API网关管理OpenAPI,包括注册和开通、访问控制、限流等。

  • API规范:火山引擎OpenAPI有明确的参数规范,Data Catalog也需符合该规范,但因内部OpenAPI参数格式不同,需做兼容,考虑到新API的支持成本,借助于Spring的Interceptor和Advice以及定制JSON序列化和反序列化逻辑,实现了自动的参数格式转化,降低API格式兼容的开发成本。

  • 访问控制:火山引擎作为云服务提供商,使用业界规范的AKSK密钥管理规范,API使用者需创建AKSK并通过该信息来访问API才可通过访问控制,而API网关会通过IAM进行鉴权,通过后会给服务提供者也就是API注册者透传用户的身份(如租户ID,用户ID),方便API提供者使用。

  • 安全认证:处理API网关提供的基础鉴权,Data Catalog也增加了更多机制来保障安全性,包括双向认证、租户开通状态检测等。

  • API文档:对于每一个OpenAPI都根据火山引擎规范编写了详细的参数说明,汇总为一个正式API文档,方便用户查阅使用。

API请求流程

  1. 用户或服务通过AKSK访问API,或者通过前端控制台间接访问API。

  2. API网关通过IAM进行鉴权,将识别到的用户身份通过HTTP header透传给服务提供者。

  3. 服务提供者接收到请求并通过HTTP header获取用户身份,进行下一步处理。

总结

火山引擎Data Catalog产品是基于字节跳动内部平台,经过多年打磨业务场景和产品能力,在公有云进行部署和发布,期望帮忙更多外部客户创造数据价值。目前公有云产品已包含内部成熟的产品功能同时扩展若干ToB核心功能,正在逐步对齐业界领先Data Catalog云产品各项能力。文中提及的内容其实还有继续优化的空间,以及随着客户的使用,还有面临一些新的问题,包括多租户性能优化、服务稳定性保障等,火山引擎DataLeap研发团队都在持续探索和解决,期望能更好的支持ToB客户的业务诉求并实现商业价值的同时,提供优质稳定的服务和丰富的扩展能力。

点击跳转大数据研发治理套件 DataLeap了解更多

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/802204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Codeforces Round 888 (Div. 3)(视频讲解全部题目)

[TOC](Codeforces Round 888 (Div. 3)&#xff08;视频讲解全部题目&#xff09;) Codeforces Round 888 (Div. 3)&#xff08;A–G&#xff09;全部题目详解 A Escalator Conversations #include<bits/stdc.h> #define endl \n #define INF 0x3f3f3f3f using namesp…

数据结构:顺序表(C实现)

个人主页 水月梦镜花 个人专栏 C语言 &#xff0c;数据结构 文章目录 一、顺序表二、实现思路1.存储结构2.初始化顺序表(SeqListInit)3.销毁顺序表(SeqListDestroty)4.打印顺序表(SeqListPrint)5.顺序表尾插(SeqListPushBack)and检查容量(SeqListCheckCapacity)6.顺序表头插(Se…

大数据面试题之Elasticsearch:每日三题(六)

大数据面试题之Elasticsearch:每日三题 1. 为什么要使用Elasticsearch&#xff1f;2.Elasticsearch的master选举流程&#xff1f;3.Elasticsearch集群脑裂问题&#xff1f; 1. 为什么要使用Elasticsearch&#xff1f; 系统中的数据&#xff0c;随着业务的发展&#xff0c;时间…

如何创建一个容器并运行docker镜像

文章目录 如何创建一个容器并使用docker镜像docker命令解析nacos启动成功 访问 进入容器&#xff0c;修改配置文件 接上集 CentOS 7安装Docker https://blog.csdn.net/qq_39017153/article/details/131955100 如何创建一个容器并使用docker镜像 还是打开镜像容器官网https://hu…

JS如何获取最近一个月或指定天数的日期,并以数组的形式存储

JS如何获取最近一个月或指定天数的日期,并以数组的形式存储 代码 num为传递的天数 (传递30查最近一个月) get_date(num) {let dateArray []//获取今天日期let myDate new Date()let today myDate.getFullYear() - (myDate.getMonth() 1) "-" myDate.getDate(…

升讯威在线客服系统是如何实现对 IE8 完全完美支持的(怎样从 WebSocket 降级到 Http)【干货】

简介 升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件&#xff0c;宗旨是&#xff1a; 开放、开源、共享。努力打造 .net 社区的一款优秀开源产品。 完整私有化包下载地址 &#x1f4be; https://kf.shengxunwei.com/freesite.zip 当前版本信息 发布…

【unity之IMGUI实践】敌方逻辑封装实现【六】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

技术实力加速企业上云,联想混合云获评专有云优秀案例入选混合云全景图四大方向

7月25-26日&#xff0c;由中国信息通信研究院、中国通信标准化协会联合主办的第十届可信云大会在京顺利召开。大会重磅发布了云计算白皮书&#xff08;2023年&#xff09;、《混合云产业全景图&#xff08;2023&#xff09;》、中国算力服务研究报告、中国云计算发展指数报告等…

Stream流之distinct去重详细用法

前言 distinct方法在Stream流中可以进行集合中的去重操作&#xff0c;但是要按照集合中的数据类型具体来定义。简单数据类型和自定义数据类型操作不同。 简单数据类型 这里以List集合为例&#xff0c;并且集合中数据类型为Integer。简单数据类型直接调用Stream中的distinct方…

抖音短视频seo源码矩阵系统开发

一、前言&#xff1a; 抖音SEO源码矩阵系统开发是一项专为抖音平台设计的SEO优化系统&#xff0c;能够帮助用户提升抖音视频的搜索排名和曝光度。为了确保系统运行正常&#xff0c;需要安装FFmpeg和FFprobe工具。FFmpeg是一个用于处理多媒体数据的开源工具集&#xff0c;而FFpr…

【密码学】三、分组密码的工作模式

分组密码的工作模式 ECB模式CBC模式CFB模式OFB模式CTR模式 电子密码本ECB、密码分组链接模式CBC、密码反馈模式CFB和输出反馈模式OFB、计数器模式CTR ECB模式 它一次对一个64bit长的明文分组加密&#xff0c;而且每次的加密密钥都相同。可以认为有一个非常大的电子密码本&…

在数字化时代,数字孪生能挽回中医的地位嘛?

中医作为中国传统医学的瑰宝&#xff0c;拥有悠久的历史和深厚的文化底蕴。然而&#xff0c;随着现代医学的快速发展&#xff0c;中医面临着许多挑战和困境。在这个数字化时代&#xff0c;数字孪生作为一项前沿技术&#xff0c;是否能为中医行业带来新的希望和机遇呢&#xff1…

制定机器学习规划路线:从入门到专业

文章目录 &#x1f340;第一阶段&#xff1a;入门基础&#x1f340;了解机器学习概念&#x1f340;学习编程和数学基础&#x1f340;探索经典机器学习算法&#x1f340;完成实践项目 &#x1f340;第二阶段&#xff1a;深入学习&#x1f340; 掌握深度学习基础&#x1f340;学习…

无法定位程序输入点:于动态链接库KERNEL32.dll上(未解决)

错误如图&#xff1a; 搜索了一下&#xff0c;说是下载KERNEL32.dll。我在WINDOWS目录下搜索了&#xff0c;实际上这个文件已经存在&#xff1a; 原因猜测&#xff0c;应该是软件本身与系统版本不配套导致的。可能是.NET&#xff1f;C

JAVA课程期末复习学习总结

JAVA课程学习总结 知识点总结 文章目录 JAVA课程学习总结知识点总结Eclipse如何与GitHub连接1.前期准备2.远程建库3.本地操作 常用DOS命令数组正则表达式继承多态向上转型向下转型多态的应用抽象方法 抽象类与接口的异同点不同点&#xff1a;相同点&#xff1a;从设计理念层面…

【MySQL】事务与隔离级别详解

【MySQL】事务 事务的概念为什么要有事务引擎对事务的支持事务的提交方式事务的操作准备正常事务操作&#xff1a;启动、回滚、提交非正常事务总结 事务的隔离级别隔离性隔离级别隔离级别的查看设置隔离级别会话级别全局级别 隔离级别的具体体现读未提交 Read Uncommitted读提交…

本土机器视觉创业企业涌现,深眸科技携手AI+3D视觉勇闯小场景赛道

随着工业自动化技术向智能化方向发展&#xff0c;人工智能实现快速落地&#xff0c;机器视觉应用产品在算力、算法和技术等方面得到持续升级&#xff0c;助力中国机器视觉行业进入高质量发展阶段。 在制造业转型升级、新兴产业发展的过程中&#xff0c;中国作为全球制造中心之…

第十四章:通过迭代挖掘共同物体特征的弱监督语义分割

0.摘要 在图像标签监督下进行弱监督语义分割是一项具有挑战性的任务&#xff0c;因为它直接将高层语义与低层外观相关联。为了弥合这一差距&#xff0c;本文提出了一种迭代的自底向上和自顶向下的框架&#xff0c;交替扩展对象区域和优化分割网络。我们从分类网络产生的初始定位…

新版mmpose训练新版RTMDet/Pose及自定义数据集制作

自定义数据集制作:要求满足目标检测网络和关键点检测网络都可以用其来训练 1. 打开Labelme并导入我们的图像文件夹;2. 用矩形框框出目标检测网络要检测的目标,我们起名叫person;3. 用Creat Point 标记关键点,这里我们只检测人的头和裆两个点。这里教一个小技巧:每一个数据…

Mindar.JS——实现AR图像追踪插入图片或视频

Mindar.JS使用方式 注意&#xff1a;此篇文章需要启动https才可调用相机权限 图像追踪示例 需要用到两个js库 <script src"./js/aframe.min.js"></script><script src"./js/mindar-image-aframe.prod.js"></script>下面看一下标签…