1、一級進階
Inceptor數據庫通常以HDFS為底層存儲,所以既然走上層JDBC太慢,我們是否可以走底層數據拷貝以提高速度,只要從存儲層轉移數據,完成后按照表的schema再建一張表就可以了。
根據這種思路,我們在右下角新增了兩個namespace:tdc-jobs負責執行抽取數據,dataplatform作為平臺層的數據中轉區。如下圖所示:
元數據管理組件記錄了表的schema信息,租戶在提交數據申請的時候,任務的描述中就包含了所申請數據所對應的schema。
而數據流轉的過程從簡單的用JDBC實現,改變為:
第一步,工作流借助數據連接器連接到TDH的數據庫,在TDH內執行一條insert overwrite 的sql語句,將數據導出到HDFS集群的某個具體位置;
第二步,工作流引擎會在tdc-job namespace下建立一個任務pod,pod負責將數據從TDH集群get下來,并put到租戶內的HDFS中;
第三步,工作流引擎在租戶內的數據庫中,根據已獲得的schema,對來自TDH的共享數據建立一張外表,最后整個任務完成,發出通知。
這種架構的確比第一種快了很多,但是傳輸跨集群的大文件時速度明顯受限于網絡和IO,能不能再快一點呢?
2、二級進階
答案是可以的。
Hadoop提供了一套非??焖俚目截惙绞?mdash;—distcp,它充分運用集群的分布式能力,通過datanode之間直接通信讀寫,在HDFS集群之間并行的拷貝大量數據。
于是我們利用distcp生成了第三種方案:分別在平臺層的YARN和租戶內的YARN啟動distcp任務(YARN負責管理distcp任務的生命周期),通過兩階段拉取的方式將數據拉入租戶內的HDFS中。
兩階段拉取,是指數據從TDH到二級法人租戶的過程分為兩個階段:首先數據從TDH被拉取到中轉區,然后再從中轉區拉取到租戶。
為什么采用兩階段拉取?原因在于,TDH集群和租戶開啟Kerberos驗證后,它們之間本身是不能互相訪問的,而目前distcp只支持底層的Kerberos互信,因此必須在容器內做相應配置實現平臺層到TDH以及租戶到平臺層的互信(后面會詳細講),否則datanode之間的通信將無法通過認證,所以拉取過程需伴隨互信分為兩個階段。
3、全云化的平臺
以上架構針對的是客戶已經累積了數據并存放在物理集群的情況。特別地,如果是從無到有直接開始搭建云平臺,相比之下就簡單得多,此時可以直接使用平臺層的數據平臺作為數據中心。于是架構圖簡化為如下所示。
認證和權限
前面我們介紹了共享平臺架構的演進歷程,下面來講一下租戶對于的數據訪問控制以及該過程中的身份認證是如何實現的。
1、Guardian基本功能
TDC的安全性由星環的產品安全管家Guardian統一提供保障,它的主要任務是用戶認證和權限管理。Guardian支持多種安全特性,在該共享平臺起重要作用的包括支持Kerberos協議、多粒度的權限控制、域互信。
首先,平臺內的所有服務都開啟Kerberos安全,保證數據加密和服務認證。
其次,Guardian實現插件式的權限管理。每個服務可以定義自己的權限管控,以插件形式和Guardian進行交互,比如可對數據庫Inceptor進行表級、行級、列級的權限控制,并且所有的操作可審計。這對于數據共享平臺十分重要,因為權限控制決定了數據的可訪問性,決定了允許哪些數據從TDH流轉到哪些租戶。
然后是互信功能。互信提供了跨集群的服務認證,突破了此前無法進行集群間Kerberos認證的限制,是實現多集群數據共享的關鍵。注意,Guardian的互信功能只做身份認證,過程會并不會附帶各集群內的權限信息。在涉及部署多個集群的情況下,兩個服務間的互信關系有TWO_WAY trust(服務雙方互信)、OUTGOING trust(單向信任外部服務)和INCOMING trust(單向允許外部服務信任),從而靈活控制多集群之間的數據流動方向。
下面具體介紹Guardian的安全功能如何在數據流轉過程中發揮作用。