之路)
從 Jupyter Kernel Gateway 到 Enterprise Gateway一篇文章看懂演進(jìn)之路【免費(fèi)下載鏈接】enterprise_gatewayA lightweight, multi-tenant, scalable and secure gateway that enables Jupyter Notebooks to share resources across distributed clusters such as Apache Spark, Kubernetes and others.項(xiàng)目地址: https://gitcode.com/gh_mirrors/en/enterprise_gateway在 Jupyter 生態(tài)的演進(jìn)史上Jupyter Enterprise Gateway是一道分水嶺它把內(nèi)核只能跑在服務(wù)器本地的舊模式升級(jí)為內(nèi)核可被調(diào)度到分布式集群的新范式。本文將帶你從 Jupyter Kernel Gateway 的起點(diǎn)出發(fā)一步步看懂 Enterprise Gateway 為什么誕生、解決了什么問(wèn)題、又是如何實(shí)現(xiàn)的——即使你剛接觸分布式內(nèi)核網(wǎng)關(guān)也能輕松讀懂這條演進(jìn)之路。起點(diǎn)Jupyter Kernel Gateway 的三大瓶頸Jupyter Kernel Gateway 是 Jupyter 官方推出的輕量級(jí) Web 服務(wù)器它把 Notebook 的 HTTP 請(qǐng)求轉(zhuǎn)發(fā)給本機(jī)內(nèi)核。但在企業(yè)級(jí)、集群化場(chǎng)景下這種本地進(jìn)程模式很快暴露出三個(gè)問(wèn)題擴(kuò)展性差所有內(nèi)核都作為本地進(jìn)程運(yùn)行資源受限于單臺(tái)服務(wù)器。下圖直觀展示了內(nèi)核全部擠在單節(jié)點(diǎn)的典型形態(tài)隨著集群規(guī)模擴(kuò)大可同時(shí)運(yùn)行的內(nèi)核數(shù)量提升極其有限。安全性弱用戶共享相同權(quán)限任何用戶都可能通過(guò)內(nèi)核命令查看、干擾他人進(jìn)程缺乏隔離。多租戶缺失內(nèi)核與服務(wù)器強(qiáng)綁定無(wú)法為不同用戶提供獨(dú)立的資源與權(quán)限邊界。這些瓶頸正是 Jupyter Enterprise Gateway 出現(xiàn)的直接動(dòng)因。演進(jìn)核心從本地內(nèi)核到托管資源作為 Jupyter Kernel Gateway 的后續(xù)項(xiàng)目Jupyter Enterprise Gateway用一句話概括其定位一個(gè)輕量、多租戶、可擴(kuò)展且安全的網(wǎng)關(guān)讓 Jupyter Notebook 可以跨 Apache Spark、Kubernetes 等分布式集群共享資源。它不再是一個(gè)服務(wù)器上跑內(nèi)核而是把內(nèi)核變成托管資源由底層資源管理器如 Hadoop YARN、Kubernetes、Docker Swarm、IBM Spectrum Conductor統(tǒng)一調(diào)度到集群任意節(jié)點(diǎn)。對(duì)比下面這張圖可以看到演進(jìn)后內(nèi)核不再局限于單節(jié)點(diǎn)而是跨節(jié)點(diǎn)分配可同時(shí)運(yùn)行的內(nèi)核數(shù)量隨集群規(guī)模顯著增長(zhǎng)此外Enterprise Gateway 還帶來(lái)了三項(xiàng)關(guān)鍵升級(jí)端到端安全通信客戶端到網(wǎng)關(guān)、網(wǎng)關(guān)到內(nèi)核的通道均加密支持 SSL 與 Kerberos 用戶模擬多用戶支持通過(guò)用戶模擬實(shí)現(xiàn)沙箱隔離不同用戶擁有獨(dú)立權(quán)限邊界持久化會(huì)話內(nèi)核會(huì)話可持久保存支持故障恢復(fù)場(chǎng)景。架構(gòu)剖析Enterprise Gateway 如何做到這一切Enterprise Gateway 的分布式能力建立在三個(gè)核心抽象之上相關(guān)代碼位于enterprise_gateway/services/目錄進(jìn)程代理Process Proxy抽象了內(nèi)核進(jìn)程的生命周期管理。默認(rèn)情況下 Jupyter 假設(shè)內(nèi)核是本地進(jìn)程而 Enterprise Gateway 通過(guò)process_proxy機(jī)制把內(nèi)核進(jìn)程替換為進(jìn)程代理從而支持遠(yuǎn)程內(nèi)核的啟動(dòng)、探測(cè)與銷(xiāo)毀。所有代理類(lèi)都定義在 enterprise_gateway/services/processproxies/ 中其類(lèi)層級(jí)清晰易懂LocalProcessProxy用于本地內(nèi)核RemoteProcessProxy及其子類(lèi)如YarnClusterProcessProxy、KubernetesProcessProxy用于各類(lèi)集群。遠(yuǎn)程內(nèi)核管理器Remote Kernel ManagerRemoteMappingKernelManager與RemoteKernelManager重寫(xiě)了 Jupyter 框架的內(nèi)核啟動(dòng)邏輯見(jiàn) remotemanager.py。內(nèi)核啟動(dòng)器Kernel Launcher負(fù)責(zé)在遠(yuǎn)端創(chuàng)建連接信息、加密回傳、啟動(dòng)內(nèi)核并監(jiān)聽(tīng)中斷請(qǐng)求樣例啟動(dòng)器位于 etc/kernel-launchers/。值得一提的是Enterprise Gateway 的進(jìn)程代理架構(gòu)是可插拔的——支持自帶進(jìn)程代理bring your own process proxy這意味著你完全可以為新的資源管理器編寫(xiě)自定義代理。整個(gè)部署架構(gòu)可以用下面這張圖來(lái)理解客戶端通過(guò) HTTPS/WSS 連接網(wǎng)關(guān)網(wǎng)關(guān)再通過(guò) ZeroMQ 與各工作節(jié)點(diǎn)上的內(nèi)核通信一張表看懂支持的資源管理平臺(tái)資源平臺(tái)對(duì)應(yīng)進(jìn)程代理典型場(chǎng)景Hadoop YARNYarnClusterProcessProxySpark 作業(yè)集群調(diào)度見(jiàn) deploy-yarn-cluster.mdKubernetesKubernetesProcessProxy容器化內(nèi)核與彈性伸縮見(jiàn) deploy-kubernetes.mdDocker Swarm / DockerDockerSwarmProcessProxy/DockerProcessProxy輕量容器集群IBM Spectrum ConductorConductorClusterProcessProxy企業(yè)級(jí)資源管理Spark OperatorSparkOperatorProcessProxyKubernetes 上以 SparkApplication 方式運(yùn)行此外DistributedProcessProxy提供基于 SSH 與輪詢算法round-robin的遠(yuǎn)程主機(jī)分發(fā)能力。你可以在 etc/kernelspecs/ 中看到大量開(kāi)箱即用的內(nèi)核規(guī)格樣例例如spark_python_yarn_cluster、python_kubernetes、spark_scala_kubernetes等它們展示了不同平臺(tái)的內(nèi)核配置寫(xiě)法??焖偕鲜謴膯螜C(jī)到 Kubernetes 的最小路徑對(duì)于新手最快的體驗(yàn)方式是單機(jī)部署安裝 Enterprise Gateway 后把內(nèi)核規(guī)格中的process_proxy指向LocalProcessProxy不寫(xiě)該字段時(shí)默認(rèn)也是本地模式詳見(jiàn) deploy-single.md。如果你的目標(biāo)是集群化最主流的路徑是 Kubernetes準(zhǔn)備kubectl與helm3創(chuàng)建命名空間使用項(xiàng)目自帶的 Helm Chart 安裝模板位于 etc/kubernetes/helm/enterprise-gateway/部署后即可選用python_kubernetes、spark_scala_kubernetes等內(nèi)核規(guī)格啟動(dòng)遠(yuǎn)程內(nèi)核。 小提示集群部署前請(qǐng)確保已安裝 Kubernetes Operator for Apache Spark否則 Spark 相關(guān)內(nèi)核無(wú)法正常調(diào)度。未來(lái)演進(jìn)Kernel Provisioners 時(shí)代演進(jìn)之路并未止步。根據(jù)項(xiàng)目路線圖見(jiàn) roadmap.mdEnterprise Gateway 的 4.0 版本將用Kernel Provisioners取代進(jìn)程代理從而解除對(duì)舊版jupyter_client與jupyter_server的版本限制并支持參數(shù)化內(nèi)核可交互式配置參數(shù)的內(nèi)核。社區(qū)還計(jì)劃實(shí)現(xiàn)高可用HA、管理面板等能力讓分布式內(nèi)核網(wǎng)關(guān)更加成熟易用。結(jié)語(yǔ)從 Jupyter Kernel Gateway 到 Jupyter Enterprise Gateway演進(jìn)的本質(zhì)是把內(nèi)核從服務(wù)器的附屬進(jìn)程升級(jí)為可被集群統(tǒng)一調(diào)度的第一等公民。如果你正面臨多用戶共享計(jì)算集群、Spark/Kubernetes 資源調(diào)度、或者企業(yè)級(jí)安全隔離的需求Enterprise Gateway 就是那條被反復(fù)驗(yàn)證過(guò)的演進(jìn)路徑。想深入源碼不妨從enterprise_gateway/services/processproxies/processproxy.py讀起你會(huì)發(fā)現(xiàn)一條清晰的抽象之路?!久赓M(fèi)下載鏈接】enterprise_gatewayA lightweight, multi-tenant, scalable and secure gateway that enables Jupyter Notebooks to share resources across distributed clusters such as Apache Spark, Kubernetes and others.項(xiàng)目地址: https://gitcode.com/gh_mirrors/en/enterprise_gateway創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考