Hago 的 Spark on ACK 實踐

Hago 於 2018 年 4 月上線,是歡聚集團旗下的一款多人互動社交明星產品。Hago 融合優質的匹配能力和多樣化的垂類場景,提供互動遊戲、多人語音、視頻直播、 3D 虛擬形象互動等多種社交玩法,致力於爲用戶打造高效、多樣、最具沉浸式的社交娛樂體驗,在東南亞、中東和南美等地區擁有廣泛的用戶羣。

在技術層面,Hago 提供優秀的自研音視頻技術,實現更加穩定、高效和優質的數字人服務。包括 3D 超寫實模型、真人主播模型製作,虛擬人語音、表情驅動,自然聲音的文字轉語音(TTS),成熟的虛擬直播能力。

長期以來,Hago 都是在 IDC 裏運行大數據任務,以支撐上面的許多產品,從 2022 年開始,Hago 開始將大數據業務遷移上雲,並以 Spark on ACK 的形式來運行,本文主要針對遷移過程進行介紹。

IDC 中遇到的問題

起初,Hago 的 Spark 任務都是跑在 IDC 裏的 Hadoop 集羣裏,當時主要面臨幾個問題:

  • 資源限制問題:當資源不足時,導致任務堆積、排隊
  • 擴容的時效性:集羣擴容邏輯比較複雜,特別是節假日有活動時,往往要提前一週準備擴容
  • 資源利用率問題:Spark 任務有明顯的波峯波谷,波谷的資源浪費明顯
  • 爲了解決上面幾個問題,Hago 決定把大數據業務用雲原生的方式遷移上雲

實施

Spark 項目從 3.1 開始,Spark on Kubernetes 的功能正式 GA。

所以,ACK 作爲託管的 Kubernetes 發行版,提供更高的性能和更強穩定性,自然成爲阿里雲上 Spark 的最佳運行底座,這裏爲了更好的彈性效果,Hago 選擇了 Serverless 版本的 ACK。

ACK Serverless

在 ACK Serverless 集羣中,無需購買節點即可直接部署容器應用,無需對集羣進行節點維護和容量規劃,並且根據應用配置的 CPU 和內存資源量進行按需付費。ACK Serverless 集羣提供完善的 Kubernetes 兼容能力,同時降低了 Kubernetes 使用門檻,用戶更專注於應用程序,而不是管理底層基礎設施。

同時,ACK Serverless 集羣中的 Pod 基於阿里雲彈性容器實例 ECI 運行在安全隔離的容器運行環境中。每個 Pod 容器實例底層通過輕量級虛擬化安全沙箱技術完全強隔離,容器實例間互不影響。

在 Spark 這種大規模業務峯值脈衝和任務調度的場景,ACK Serverless 集羣的彈性優勢也更加明顯,可以在 30s 內交付幾千個 Pod。

但在真正運行之前還有一些問題需要解決:

存算分離

上面提到,Spark 任務對算力的需求不是 7*24 小時的,但是存儲是一直留存的,如果用傳統的方式,在虛擬機上搭建 HDFS 集羣,那就需要常駐大量的算力,也意味着產生大量的浪費。

Hago 選擇存算分離的方案,將數據放在 OSS 裏,通過 OSS-HDFS 服務把數據用 HDFS 接口暴露出來,方便 Spark 任務讀取。

詳情請參閱:OSS-HDFS 服務概述[1]

shuffle service 的選型

shuffle 是 Spark 中最基本的過程之一,同時,shuffle 對於 Spark 應用程序的性能至關重要。Spark 社區提供了默認的 shuffle service[2],但存在一些問題:

  • Spark Shuffle 對本地存儲有依賴,許多計算存儲分離的機型、使用 ECI 的場景下沒有自帶本地盤,需要額外購買和掛載雲盤,性價比和使用效率低
  • Spark 基於 ShuffleTracking 實現了 Dynamic Allocation,但 Executor 回收效率低下

具體表現如下:

  • Shuffle Write 在大數據量場景下會溢出,導致寫放大
  • Shuffle Read 過程中存在大量的網絡小包導致的 Connection reset 問題
  • Shuffle Read 過程中存在大量小數據量的 IO 請求和隨機讀,對磁盤和 CPU 造成高負載
  • 對於 M*N 次的連接數,在 M 和 N 數千的規模下,作業基本無法完成

EMR 推出的 RSS 服務,可以優化上述 Spark Shuffle 方案的問題,完美支持 ACK 環境下的 Dynamic Allocation。

詳情請參閱:EMR Remote Shuffle Service[3]

落地效果

最終落地的架構圖大致如上所示,取得了非常理想的效果:

  • 基本不需要提前準備,擴容只需要 30s
  • 任務不再需要排隊
  • 不需要關心 IDC 的硬件故障問題

相關鏈接:

[1] OSS-HDFS 服務概述

https://help.aliyun.com/zh/oss/user-guide/overview-1

[2] shuffle service

https://github.com/lynnyuan-arch/spark-on-k8s/blob/master/resource-managers/kubernetes/architecture-docs/external-shuffle-service.md

[3] EMR Remote Shuffle Service

https://help.aliyun.com/zh/emr/emr-on-ecs/user-guide/celeborn#task-2184004

作者:華相

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章