更多技術交流、求職機會,歡迎關注字節跳動數據平臺微信公眾號,回復【1】進入官方交流群
Data Catalog是一種元數據管理的服務,會收集技術元數據,并在其基礎上提供更豐富的業務上下文與語義,通常支持元數據編目、查找、詳情瀏覽等功能。目前Data Catalog作為火山引擎大數據研發治理套件DataLeap產品的核心功能之一,經過多年打磨,服務于字節跳動內部幾乎所有核心業務線,解決了數據生產者和消費者對于元數據和資產管理的各項核心需求。
DataLeap作為一站式數據中臺套件,匯集了字節內部多年積累的數據集成、開發、運維、治理、資產、安全等全套數據中臺建設的經驗,助力ToB市場客戶提升數據研發治理效率、降低管理成本。
Data Catalog公有云整體架構
?
Data Catalog支持綜合搜索、血緣分析、庫表管理、元數據采集、備注問答、專題管理、OpenAPI等功能,和DataLeap其他功能模塊(如數據開發、數據集成、數據質量、數據安全等)一起提供了大數據研發和治理場景的一站式解決方案。同時,Data Catalog公有云產品是基于火山引擎提供的數據引擎和云基礎設施來部署和服務的,下面會簡單介紹下我們所依賴和使用的產品和服務:
-
數據引擎:是火山引擎提供的數據分析、數據倉庫和數據湖相關產品,包括ByteHouse/EMR/LAS等產品。通常Data Catalog會從這類系統內采集元并存儲元數據,進行處理加工后,再提供搜索、血緣分析等功能;另外,庫表管理模塊也會依賴這類系統提供對應的接口來做建庫建表等操作。
-
內部公共服務:是火山引擎為支持公司內部產品上公有云提供的若干公共基礎服務,主要作用是方便內部產品能快速在公有云部署,提供和公司內部兼容性比較高的公共服務,降低改造和遷移成本。其中Data Catalog使用較多的包括:API網關、網絡代理、訪問控制、安全認證、監控報警等。
-
基礎服務:這類服務或產品相較于上面說的內部公共服務主要區別是,他們是火山引擎對外售賣的標準云服務,內外部用戶都可使用,且和業界主流云廠商能力是基本對齊的,不過會和公司內部一些類似的基礎服務會有不少差異。Data Catalog主要使用這類基礎服務來進行自身服務的部署運維,并且進行較多的兼容性改造,包括容器部署、網絡打通、內外部CICD和監控報警流程一致性等方面。
-
數據庫和中間件:是和業界主流云廠商對齊的存儲和中間件領域的標準云服務,和公司內部對應組件也會有若干差異,Data Catalog為此也做了多版本的兼容。Data Catalog在元數據存儲上使用到了Hbase/MySQL/ES/Redis,然后在元數據采集和同步場景使用了Kafka,同時用到了日志服務來提高研發運維效率。
Data Catalog公有云遇到的挑戰
Data Catalog經歷了一個從0到1在火山引擎公有云部署并逐步優化和迭代發布10+版本的過程,在這個過程中經歷不少挑戰,下面將介紹其中比較典型的問題以及我們探索并實踐的一些解決方案。
網絡和數據安全
為保證網絡安全和多租戶數據安全,火山引擎上公有云產品部署的環境劃分為“公共服務區”和“售賣區”,同時售賣區又分割為若干私有網絡(即VPC),然后公共服務區和售賣區以及售賣區的VPC之間都是網絡隔離的。
另外,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核心功能,正在逐步對齊業界領先Data Catalog云產品各項能力。
點擊跳轉大數據研發治理套件 DataLeap了解更多
?