Notebook 是一種支持 REPL 模式的開發(fā)環(huán)境。所謂「REPL」,即「讀取-求值-輸出」循環(huán):輸入一段代碼,立刻得到相應的結果,并繼續(xù)等待下一次輸入。Notebook通常使得探索性的開發(fā)和調試更加便捷,在 Notebook 環(huán)境,用戶可以交互式地在其中編寫你的代碼、運行代碼、查看輸出、可視化數(shù)據(jù)并查看結果,使用起來非常靈活。
在數(shù)據(jù)開發(fā)領域,Notebook 廣泛應用于數(shù)據(jù)清理和轉換、數(shù)值模擬、統(tǒng)計建模、數(shù)據(jù)可視化、構建和訓練機器學習模型等方面。
但是顯然做數(shù)據(jù)開發(fā),只有 Notebook 是不夠的。目前,火山引擎 DataLeap 數(shù)據(jù)研發(fā)平臺提供了任務開發(fā)、發(fā)布調度、監(jiān)控運維等一系列能力,并將 Notebook 作為一種任務類型,加入進 DataLeap 數(shù)據(jù)研發(fā)平臺,使用戶既能擁有 Notebook 交互式的開發(fā)體驗,又能享受一站式大數(shù)據(jù)研發(fā)治理套件提供的便利。
在火山引擎 DataLeap 數(shù)據(jù)研發(fā)平臺,開發(fā)過程圍繞的核心是任務。用戶可以在項目下的任務開發(fā)目錄創(chuàng)建子目錄和任務,像 IDE (集成開發(fā)環(huán)境)一樣通過目錄樹管理其任務。Notebook 也是一種任務類型,用戶可以啟動一個獨立的任務 Kernel 環(huán)境,像開發(fā)其他普通任務一樣使用 Notebook。
圖:火山引擎 DataLeap 數(shù)據(jù)開發(fā) Notebook 任務界面
基于簡化運維成本、降低架構復雜性,以及提高用戶體驗的考慮,2021 上半年,火山引擎 DataLeap研發(fā)人員對整體架構進行了一次改良。新的架構主要做了以下改進,大致簡化為下圖:
1. 移除 JupyterHub(https://jupyterhub.readthedocs.io/en/stable/),將 JupyterLab (https://jupyterlab.readthedocs.io/en/stable/getting_started/overview.html)改為多實例無狀態(tài)常駐服務,并實現(xiàn)對接 火山引擎DataLeap 的多用戶鑒權。
2. 改造原本落在 JupyterLab 本地的數(shù)據(jù)存儲,包括用戶自定義配置、Session 維護和代碼文件讀寫。
3. Enterprise Gateway(EG)支持持久化 Kernel,將 Kernel 遠程環(huán)境元信息持久化在遠端存儲(MySQL)上,使其重啟時可以重連,且 JupyterLab 可以知道某個 Kernel 需要通過哪個 EG(https://jupyter-enterprise-gateway.readthedocs.io/en/latest/) 連接。
圖:火山引擎 DataLeap 下改進版 Notebook 整體架構
架構升級簡化后,整套 Notebook 服務的穩(wěn)定性獲得了極大的提升。由于實現(xiàn)了用戶無感知的升級, DataLeap不僅提升了用戶的使用體驗,運維、算力、人力等成本也得到了極大地降低。
據(jù)了解,Notebook 任務已成為字節(jié)跳動內部使用較為高頻的任務類型。外部用戶可以購買火山引擎 DataLeap,即一站式大數(shù)據(jù)研發(fā)治理套件,開通交互式分析的版本,使用到 DataLeap 的 Notebook 任務。(作者:邵鼎澤)