簡介: 2020年雲棲大會上,好將來AI中臺負責人劉東東,分享了他對AI雲原生的理解與好將來的AI中臺實踐,本文爲演講內容整理。數據庫
AI時代的到來,給企業的底層IT資源的豐富與敏捷提出了更大的挑戰,利用阿里雲穩定、彈性的GPU雲服務器,領先的GPU容器化共享和隔離技術,以及K8S集羣管理平臺,好將來經過雲原生架構實現了對資源的靈活調度,爲其AI中臺奠基了敏捷而堅實的技術底座。安全
在2020年雲棲大會上,好將來AI中臺負責人劉東東,分享了他對AI雲原生的理解與好將來的AI中臺實踐,本文爲演講內容整理。服務器
你們好,我是好將來AI中臺技術負責人劉東東。今天我給你們帶來的演講主題是《好將來AI雲原生的淺談》。個人分享主要分紅四個部分:架構
第一,AI服務對雲原生的挑戰。
第二,AI與雲原生的服務部署。
第三,AI與雲原生的服務治理。
最後想談一談, K8S與Spring Cloud的有機結合。
負載均衡
一、AI服務對雲原生的挑戰
首先,咱們來說一講AI服務對雲原生的挑戰。在雲原生時代,AI服務其中最大的一個特色就是,須要更大的算力支持,以及更強大的一個服務的穩定性。運維
咱們的服務不僅僅只是原來的一個單體服務,如今已經轉入到一個集羣服務。同時對性能的穩定性要求,已經從3個9,開始向5個9發起了挑戰。異步
那麼這些問題,已經再也不是原有的傳統技術架構可以解決的。因此咱們須要一個新的技術架構。分佈式
這個新的技術架構是什麼呢?就是雲原生。ide
咱們來看一看,雲原生對咱們帶來的變化。雲原生帶來的最大變化,我總結爲四個要點和兩大方面。微服務
四大要點分別是,DevOps、持續交付、微服務、容器的四個特色。兩個方面則是服務部署和服務治理。固然,它還有12個要素的總體系統總結。
今天重點來說的是服務部署和服務治理。
在雲原生浪潮下,咱們是如何處理服務部署和服務治理呢?
首先咱們經過AI與雲原生的服務部署,即經過K8S,加上一個資源的虛擬化,資源的池化等技術,解決了AI服務對各類硬件資源的數量級增加需求。
第二個,AI服務與雲原生的服務治理進行有機結合。經過服務治理的技術,包括服務發現、HPA、負載均衡等,解決AI服務對5個9的SLA的需求。
二、AI服務的雲原生部署
第一點談一下是怎麼把AI與雲原生的服務部署結合起來的。
首先看一下,在AI時代下服務部署有哪些特色呢?
第一個就是硬件資源需求與費用增加的一個矛盾。AI服務對於硬件的需求成數量級增加,可是硬件預算並無成數量級增加。
第二,AI服務對硬件的需求是多樣化的。如,對高GPU的需求、高CPU的需求、高內存的需求,甚至還有部分混合的需求。
第三,AI服務對資源的隔離是有需求的。每個AI服務都可以獨立使用這些資源,而且相互之間不會打擾。
第四,AI服務可以對資源池化有要求。AI服務不須要去感知機器的具體配置,一旦將全部的資源進行池化,便可下降資源碎片,提高使用率。
最後一點,AI服務對突發的資源是有請求的。由於流量是不可預知的,企業須要隨時保持,可以隨時擴充資源池的能力。
咱們的解決方案是什麼呢?
首先,咱們使用Docker的虛擬化技術,實現資源的隔離。
而後使用GPU共享技術,將GPU、內存、CPU等資源進行池化,而後將整個資源進行統一的管理。
最後,使用K8S的resources,包括污點(taints)、容忍度(tolerations)等這些技術特性,實現服務的靈活配置。
另外,建議你們要買一些高配置的機器,這些高配置的機器,主要是爲了進一步下降碎片。
固然,還要實現對整個集羣硬件的監控,充分利用ECS能夠各類複雜的時間規則調度特性(下圖的cron是一個基於時間的做業調度任務),應對高峯流量。
接下來,咱們更仔細地看看好將來AI中臺是如何解決這些AI部署問題的。
這個頁面是咱們的一個Node的服務管理,經過這個業務,咱們是能夠清晰看到每個服務器上面的部署狀況,包括資源使用狀況、部署哪些pod、哪些節點等等。
第二個其實是AI中臺的服務部署頁面。咱們是能夠經過壓碼文件,精準地控制每個pod的內存、CPU、GPU的使用。同時,經過污點等技術,讓服務器的多樣化部署獲得知足。
根據咱們的對比實驗,使用雲原生的方式部署對比用戶自行部署,成本大概節省了65%。並且,這樣的優點會隨着AI集羣的增加,在經濟收益上和臨時流量擴容上,將會受益更多。
三、AI與雲原生服務治理
接下來再討論一下AI與雲原生的服務治理。
簡單介紹一下什麼叫微服務?其實微服務,只是服務的一種架構風格,它其實是將單個服務,做爲一整套的小型服務開發,而後每個應用程序都有本身進程去運行,而且經過輕量級的一些,好比說HTTP、API等進行通訊。
這些服務,其實是圍繞着業務自己去構建的,能夠經過自動化的部署等手段去集中管理。同時,經過不一樣的語言去編寫,使用不一樣的存儲資源。
總結起來微服務有哪些特色?
第一,微服務它足夠小,甚至它只能作一件事情。
第二,微服務是無狀態的。
第三,微服務相互之間是相互獨立的,而且它們是面向接口的。
最後,微服務是高度自治的,每一個人只對本身負責。
看到這些微服務的特色以後,再去想想,AI服務與微服務特色,咱們發現,AI服務天生適合微服務。每個微服務,其實本質上只作一件事情。好比OCR,OCR服務,只作OCR服務;ASR,主要作ASR服務。
繼而,每個AI服務的請求都是獨立的。舉個簡單例子,一個OCR請求和另一個OCR請求,在本質上是沒有什麼關聯的。
AI服務對橫向擴容是有天生苛求的。爲何?由於AI服務隊資源的渴求很是大。因而,這種擴容就顯得很是有必要性了。
AI服務之間的依賴性也特別小。好比說像咱們的OCR服務,可能對NLP的服務,或者是對其它的AI服務,可能沒有什麼太大的要求。
全部的AI服務,均可以經過寫申明式的HTTP,甚至API的方式,提供AI能力。
進一步去看一下AI服務,會發現,並不能將全部的AI服務進行微服務化。因而,咱們作了什麼事?
第一,須要將AI服務作成一個無狀態的服務,這些無狀態服務,都是有畜牲化、無狀態、可丟棄,而且不採用任何的一些磁盤或者內存的請求方式,去作一些存儲功能。這樣就可讓服務部署在任何的一個節點,任何一個地方。
固然,並非全部的服務都能作到無狀態。若是它有狀態了怎麼辦呢?咱們會經過配置中心、日誌中心、Redis、MQ,還有SQL等數據庫,存儲這些請求狀態。同時,確保這些組件的高可靠性。
這個就是好將來AI中臺PaaS的總體架構圖。首先能夠看一下最外層是服務接口層。最外層接口層是面向外部提供AI能力的。
平臺層裏最重要的層是服務網關,主要是負責一些動態路由、流量控制、負載均衡、鑑權等。再往下就是咱們的一些服務發現,註冊中心,容錯、配置管理、彈性伸縮等等一些功能。
再下面是業務層,這些業務層就是咱們所說的,一些AI的推理服務。
最下面就是阿里雲給咱們提供的K8S集羣。
也就是說總體的一個架構是,K8S負責服務部署,SpringCloud負責服務治理。
咱們是怎麼經過技術手段來實現剛纔說的一個總體架構圖?
首先是經過Eureka做爲註冊中心,實現分佈式系統的服務發現與註冊。經過配置中心Apoll來管理服務器的配置屬性,而且支持動態更新。網關Gateway,能夠作到隔離內外層的效果。熔斷Hystrix,主要是分爲分時熔斷和數量熔斷,而後保護咱們的服務不被阻塞。
負載均衡加上Fegin操做,能夠實現總體流量的負載均衡,而且將咱們的Eureka相關注冊信息進行消費。消費總線Kafka是異步處理的組件。而後鑑權是經過Outh2+RBAC的方法去作的,實現了用戶的登陸包括接口的鑑權管理,保證安全可靠。
鏈路追蹤,採用的是Skywalking,經過這種APM的一個架構,咱們能夠追蹤每個請求的狀況,便於定位和告警每個請求。
最後日誌系統是經過Filebeat+ES,分佈式收集整個集羣的日誌。
同時咱們也開發了一些本身的服務,好比說部署服務、Contral服務。主要是負責與K8S進行通訊,收集整個K8S集羣裏面服務的服務部署、K8S相關的硬件信息。
而後告警系統是經過Prometheus+Monitor去作的,能夠收集硬件數據,負責資源、業務等相關的告警。
數據服務是主要用於下載,包括數據迴流,而後截取咱們推理場景下的數據狀況。
限流服務是限制每一個客戶的請求和QPS相關功能。
HPA其實是最重要的一個部分。HPA不僅僅只支持內存級別的,或CPU級別的HPA,還支持一些P9九、QPS、GPU等相關規則。
最後是統計服務,主要是用於統計相關調用量,好比請求等。
咱們經過一個統一的控制檯,對AI開發者提供了一站式的解決方案,經過一個平臺解決了所有的服務治理問題,提高了運維的工做自動化,讓原來須要幾我的維護的一個AI服務的狀況,變成了一我的可以作到維護十幾個AI服務。
這個頁面展現的就是服務路由、負載均衡、限流相關的配置頁面。
這個頁面展現的是咱們在接口級別的一些告警,以及部署級別的硬件告警。
這是日誌檢索,包括實時日誌相關功能。
這個是手動伸縮和自動伸縮操做頁面。其中自動伸縮包括CPU、內存級別的HPA,也包括基於相應響應時長制定HPA、定時的HPA。
四、K8S與Spring Cloud的有機結合
最後來聊一下K8S與SpringCloud的有機結合。
能夠看一下這兩張圖。左圖是咱們SpringCloud數據中心到路由的圖。右邊是K8S的service到它的pod的圖。
這兩個圖在結構上是很是接近的。咱們是怎麼作到呢?其實是將咱們的Application與K8S的service進行綁定,也就是說最終註冊到咱們SpringCloud裏面LB的地址,其實是把它轉成了K8S service的地址。這樣就能夠將K8S與SpringCloud結合起來。這是路由級別集合。有了這個集合,就能達到最終的效果
SprigCloud它是一個Java的技術語言站。而AI服務的語言是多樣化的,有C++、Java,甚至有PHP。
爲了實現跨語言,咱們引入了sidecar技術,將AI服務與sidecar經過RPC去通訊,就能夠屏蔽語言的特性。
Sidecar主要的功能有,應用服務發現與註冊、路由追蹤、鏈路追蹤,以及健康檢查。
今天個人演講到此結束,很是感謝各位的聆聽。謝謝你們。
原文連接 本文爲阿里雲原創內容,未經容許不得轉載。