PaaS說起來容易做起來難,有哪些技術(shù)難點(diǎn)?
最近幾年很多公司實(shí)現(xiàn)了從VMware等傳統(tǒng)虛擬化到IaaS的轉(zhuǎn)型,很多公司正在或者已經(jīng)建立PaaS平臺。那么從項(xiàng)目研發(fā)角度看,PaaS產(chǎn)品的系統(tǒng)功能應(yīng)該主要涵蓋哪些,又該如何更好的為應(yīng)用研發(fā)人員服務(wù)呢?本文由云計(jì)算專家bryan根據(jù)社區(qū)活動中的分享交流所整理。
一.PaaS 建議的意義何在,能夠給企業(yè)帶來哪些價值?
1. 實(shí)現(xiàn)應(yīng)用運(yùn)行環(huán)境的標(biāo)準(zhǔn)化,提升交付速度:通過容器的鏡像技術(shù)保證開發(fā)測試和生產(chǎn)等諸多標(biāo)準(zhǔn)化,避免因應(yīng)用運(yùn)行環(huán)境不一致帶來的各種故障和問題,同時,通過服務(wù)編排實(shí)現(xiàn)運(yùn)行環(huán)境的自動化運(yùn)維和快速交付,避免傳統(tǒng)方式的應(yīng)用系統(tǒng)運(yùn)行復(fù)雜、交付周期較長等問題;
2. 實(shí)現(xiàn)運(yùn)維過程的高度自動化,降低運(yùn)維成本:PaaS 平臺提供多種自動化運(yùn)維工具管理應(yīng)用集群系統(tǒng),比如智能負(fù)載可以實(shí)時觀測集群節(jié)點(diǎn)的變化并智能修改路由配置,自動伸縮可以實(shí)現(xiàn)不同業(yè)務(wù)負(fù)載下集群規(guī)模的自動調(diào)整等,多種管理功能的自動化減少人工運(yùn)維工作量,節(jié)省運(yùn)維成本;
3. 有效提升基礎(chǔ)資源的管理水平和硬件利用效率:PaaS 平臺資源的容器是基于操作系統(tǒng)的虛擬化,與 IaaS 基礎(chǔ)環(huán)境實(shí)現(xiàn)解耦,平臺自身的實(shí)現(xiàn)多數(shù)是應(yīng)用較廣的開發(fā)框架和標(biāo)準(zhǔn) API,能夠有效提升資源管理水平,有效避免廠商綁定;同時,合理調(diào)整單個操作系統(tǒng)之上容器密度的有效部署,可以更好提升資源使用率,降低硬件采購成本;
4. 有效實(shí)現(xiàn)軟件研發(fā)的技術(shù)路徑統(tǒng)一和把控研發(fā)質(zhì)量:通過運(yùn)行環(huán)境的標(biāo)準(zhǔn)化可真正做到全公司技術(shù)路線的精細(xì)把控,做到統(tǒng)一不同項(xiàng)目組的技術(shù)研發(fā)路線,通過部署工具的統(tǒng)一可以做到 CI/CD 思想的有效落地實(shí)施,有效提升軟件研發(fā)過程的質(zhì)量把控水平;
5. 有效提升公司 IT 架構(gòu)治理:相較于傳統(tǒng)開發(fā)運(yùn)維各司其職的模式,PaaS 能有效實(shí)現(xiàn) devops 思維的落地實(shí)施,推動企業(yè) IT 流程和人員架構(gòu)的企業(yè)治理,更好的提升 IT 部門各個研發(fā)團(tuán)隊(duì)的整體技術(shù)水平,從而更好的響應(yīng)業(yè)務(wù)需求。
二. PaaS 的主要技術(shù)有哪些?企業(yè)如何進(jìn)行建設(shè)?
PaaS 主要以容器云形式實(shí)現(xiàn),容器云依賴容器基礎(chǔ)技術(shù),目前常見的有 Docker 和 garden 兩種類型,其中 BAT、京東、華為和網(wǎng)易等互聯(lián)網(wǎng)公司,還有一些大型商業(yè)銀行更多的選擇 docker 技術(shù),當(dāng)然也不乏 garden 成功案例,但較之 docker 案例相對較少。
獨(dú)木難成林,容器要云化形式提供服務(wù),必須以多個容器形成集群的方式,此時如何管理和調(diào)度集群是一個重要的任務(wù),這個任務(wù)由編排引擎進(jìn)行實(shí)現(xiàn),目前比較流行的有 kubernetes、swarm 等。因此「容器技術(shù)+編排引擎」構(gòu)成了容器云最初始的框架,當(dāng)然要達(dá)到企業(yè)級應(yīng)用還需要做更多企業(yè)級的功能,所以就出現(xiàn)了諸如 openshift、阿里飛天、華為等各種以開源軟件為基礎(chǔ)構(gòu)建的多種產(chǎn)品。
那么企業(yè)在建設(shè)云的過程中需要考慮幾個問題:
1)容器技術(shù)的選擇:盡量選擇市場比較流行的開源社區(qū)和生態(tài)發(fā)展比較完善的技術(shù),編排引擎的框架選擇遵循同樣道理;
2)建設(shè)模式:一種方式是購買產(chǎn)品進(jìn)行企業(yè)落地化定制化,一種方式是基于開源框架自研,兩種方式各有優(yōu)劣,需要結(jié)合企業(yè)自身特點(diǎn)進(jìn)行總體考慮;
3)建設(shè)規(guī)劃:PaaS 的建設(shè)涵蓋很多方面,甚至需要企業(yè)流程和企業(yè) IT 架構(gòu)的梳理和調(diào)整,因此對大中型企業(yè)來講不可能一蹴而就,需要一個循序漸進(jìn)的過程,這也與企業(yè)發(fā)展和自身技術(shù)特點(diǎn)有關(guān)系
三. 容器云的負(fù)載均衡如何選擇?
軟件負(fù)載有硬件 F5 和軟件 HAProxy、nginx 等。F5 的特點(diǎn)是價格貴、性能好,一般在物理機(jī)和虛擬機(jī)化時間做 LB;nginx 是一款 HTTP 服務(wù)器和反向代理服務(wù)器,可以提供 7 層負(fù)載均衡能力,主要應(yīng)用場景有 web 服務(wù)器、反向代理、負(fù)載均衡等
HAProxy 是一款專業(yè)的負(fù)載均衡軟件,可提供 4/7 層負(fù)載均衡,比 nginx 負(fù)載均衡性能好,并發(fā)上也優(yōu)于 nginx。負(fù)載均衡的選擇需要和企業(yè)自身特點(diǎn)和具體業(yè)務(wù)場景相關(guān)聯(lián),在 PaaS 的企業(yè)級產(chǎn)品中更多的選擇 HAproxy
四. PaaS 的日志和監(jiān)控如何進(jìn)行處理?
PaaS 平臺的日志和監(jiān)控和傳統(tǒng)架構(gòu)的管理方式?jīng)]有本質(zhì)區(qū)別。日志的獲取或采用安裝 agent、或采用工具導(dǎo)出,業(yè)界已經(jīng)都有很多成熟的產(chǎn)品和案例可以借鑒;監(jiān)控分兩部分,先要解決「監(jiān)」的問題,同樣也需要利用工具抓取信息,然后解決「控」,要么利用自動化運(yùn)維的模式,要么采用手工的模式,目的其實(shí)一樣,區(qū)別在于成本控制。
PaaS 可以從系統(tǒng)、網(wǎng)絡(luò)、服務(wù)、應(yīng)用監(jiān)控 4 個層面入手:
1. 系統(tǒng)主要指底層基礎(chǔ)資源,如磁盤、CPU、硬件或 IaaS 等基礎(chǔ)資源
2. 網(wǎng)絡(luò)一般采用 SDN 的方式實(shí)現(xiàn),監(jiān)控比較復(fù)雜,主要有連通性、流量、7 層狀態(tài)碼等
3. 服務(wù)主要是指 PaaS 中的各種中間件服務(wù)服務(wù),比如數(shù)據(jù)庫服務(wù)、緩存服務(wù)、web 應(yīng)用服務(wù)等
4. 應(yīng)用監(jiān)控是最上層的也是非常重要的,比如應(yīng)用服務(wù)質(zhì)量、響應(yīng)時間、請求成功率等
五. PaaS 如何更好的實(shí)現(xiàn) CI/CD,實(shí)現(xiàn)應(yīng)用敏捷開發(fā)
PaaS 平臺的一個核心理念是為應(yīng)用提供各種基礎(chǔ)中間件服務(wù)和進(jìn)行應(yīng)用集群的管理。devops 是一種貫徹項(xiàng)目研發(fā)全生命周期的軟件研發(fā)理論,打破傳統(tǒng)的研發(fā)部門和運(yùn)維部門涇渭分明的現(xiàn)象,盡量實(shí)現(xiàn)團(tuán)隊(duì)將研發(fā)和運(yùn)維進(jìn)行統(tǒng)一結(jié)合的模式,這種理念落地實(shí)施需要借助一定工具。CI 是持續(xù)集成,可以實(shí)現(xiàn)代碼自動化的靜態(tài)檢查、動態(tài)檢查、安全檢查和單元測試、集成測試等功能,從而實(shí)現(xiàn)代碼的盡快盡早集成,減少后期發(fā)現(xiàn)問題的概率、降低項(xiàng)目風(fēng)險;CD 是持續(xù)部署或者持續(xù)發(fā)布,這種持續(xù)部署采用自動化工具,能夠有效提高系統(tǒng)環(huán)境的部署效率和升級更新時業(yè)務(wù)的連續(xù)性。
jenkins 可視作一個平臺,在這個平臺中一方面可以用戶定制各種插件,一方面可以將所有的工作以流程化的形式 (pipeline) 串聯(lián)起來。這樣可以將 CI/CD 的思維通過 jenkins 的落地實(shí)施來貫徹執(zhí)行,同時 CI/CD 有多種自動化管理功能,而 PaaS 中的相關(guān)系統(tǒng)部署或者更新升級或者項(xiàng)目研發(fā)過程使用的環(huán)境都可以自動化,于是二者可以很好的進(jìn)行關(guān)聯(lián)。
Devops 理念的落地實(shí)現(xiàn),可通過 jinkins 中配置自動化的 CI/CD 流程,更好的與 PaaS 進(jìn)行深度集成,從而提高軟件研發(fā)效率和軟件研發(fā)質(zhì)量。詳情可以參考鏈接
六. PaaS 的研究過程中有哪些關(guān)鍵技術(shù)點(diǎn)和難點(diǎn),一般市場是如何選擇的?
PaaS 作為一個綜合性的平臺,在以」容器+編排引擎」的基礎(chǔ)上有諸多關(guān)鍵技術(shù)點(diǎn)和難點(diǎn),本次主要以開源框架和一些市場產(chǎn)品為依托,主要講述關(guān)鍵點(diǎn)的實(shí)現(xiàn)
1. 容器技術(shù)的選擇:容器技術(shù)是整個平臺的基石,猶如開發(fā) web 需要選擇開發(fā)語言一樣,目前有 docker 和 garden 兩種主流技術(shù),自研技術(shù)選擇時盡量選擇技術(shù)相對成熟、企業(yè)應(yīng)用案例相對較多、技術(shù)生態(tài)圈發(fā)展更多的技術(shù),一般建議選擇 docker,如果華為的 PaaS 產(chǎn)品初期選擇 garden,目前也已轉(zhuǎn)向了 docker,docker 已經(jīng)成為一種事實(shí)上的標(biāo)準(zhǔn)。
2. 編排引擎的選擇:編排引擎的選擇一般會依賴容器技術(shù)路線的選擇,比如 docker 容器可以選擇 kubernetes、swarm 等框架,garden 可以選擇 cloud foundry,并且僅此選擇。在 BAT、華為、京東等互聯(lián)網(wǎng)公司中,選擇 docker 系的產(chǎn)品更多的選擇了 kubernetes,或許源于此框架出自 google 大家之手
3. 元數(shù)據(jù)存儲的框架選擇:由于整個 PaaS 的元數(shù)據(jù)需要一個高可用的存儲結(jié)構(gòu),以便用作服務(wù)發(fā)現(xiàn)或共享元數(shù)據(jù)配置的相關(guān)元數(shù)據(jù)信息?;?zookeeper 的性能和復(fù)雜性等問題考慮,更多的選擇 etcd 框架進(jìn)行使用,openshift、阿里等產(chǎn)品均采用了此框架
4.PaaS 容器網(wǎng)絡(luò)的選擇:容器的網(wǎng)絡(luò)隔離是 PaaS 資源隔離的一個重要組成部分,每個容器的網(wǎng)絡(luò)多采用內(nèi)部 SDN 網(wǎng)絡(luò),SDN 網(wǎng)絡(luò)的實(shí)現(xiàn)技術(shù)各不相同,一般主要考慮因素是網(wǎng)絡(luò)的性能和網(wǎng)絡(luò)變化的靈活性等因素。開源 kubernetes 采用 flannel 框架,openshift 的產(chǎn)品中考慮到網(wǎng)絡(luò)性能等采用了 open vswitch,京東在經(jīng)過各種研究后采用了基于 BGP 路由方式的 Calico
5.CI/CD 的工具選擇:隨著最近幾年微軟對 docker 技術(shù)的支持力度加大,各種產(chǎn)品,比如 window server 2016、TFS 等逐漸實(shí)現(xiàn)對 docker 的支持。TFS(team foundation server)的產(chǎn)品定位與 jenkins 類似。所以在 CI/CD 的技術(shù)落地過程中可以選擇 TFS 或者 jenkins,不過大家更廣發(fā)的采用 jenkins,并且有研發(fā)能力的均對其進(jìn)行一定程度的插件研發(fā)和定制
6. 日志框架的選擇:在集群環(huán)境中如何管理不同節(jié)點(diǎn)的日志是一個重要的問題,并且目前有一套成熟的解決方案。ElasticSearch+Logstash+Kinana(ELK)已成為一種通用解決方案
7. 負(fù)載均衡的選擇:負(fù)載均衡需要在容器集群的容器成員發(fā)生變化時能夠自動感知和自動修改路由策略,硬件 F5 和軟負(fù)載 HAProxy、Nginx 均可做負(fù)載均衡,鑒于 HAProxy 的靈活性,更多的產(chǎn)品或者企業(yè)落地均選擇了 HAProxy
8. 域名的使用:容器集群中的某個應(yīng)用可以視作一個對外提供的服務(wù),如果采用 IP,一方面不方便記憶,一方面 IP 有可能改變,因此 PaaS 產(chǎn)品多采用泛域名的形式,將對外提供服務(wù)的 IP 地址和域名關(guān)聯(lián)對應(yīng),然后再提供一個 route 記錄對外提供服務(wù)的 IP 地址(frontend)和內(nèi)部集群 IP 地址(backend),這樣就可以實(shí)現(xiàn)從外部域名到內(nèi)部集群 IP 地址的訪問。
PaaS 平臺的建議是一個長期的過程,需要不斷持續(xù)的進(jìn)行迭代優(yōu)化,并且隨著在 PaaS 之上運(yùn)行應(yīng)用系統(tǒng)的增多和使用經(jīng)驗(yàn)的不斷豐富,對 PaaS 平臺會有更多深入的認(rèn)知和體會。因此我們也希望論壇上從事這塊研究和實(shí)踐的朋友能夠更多的進(jìn)行技術(shù)交流,從而加深技術(shù)了解,讓 PaaS 在企業(yè)內(nèi)部更好的發(fā)揮其價值和優(yōu)勢。