2019 年 6 月 24 日至 26 日, 由 Cloud Native Computing Foundation (CNCF) 主辦的雲原生技術大會 KubeCon + CloudNativeCon + Open Source Summit(上海)即將在中國上海盛裝啓幕。本屆 KubeCon 將吸引來自全世界數千名技術人員參加這次盛會,參與CNCF所有項目和話題的深度探討,以及案例分析,聆聽 CNCF 項目的運維者和用戶的分享。前端
在本次KubeCon上,京東雲將在大會上爲對雲原生感興趣的研發和運維人員帶來《利用延遲加載快速啓動 Docker 容器》的話題分享。後端
看完這些,是否是有點暈了?怎麼那麼多東西啊!安全
爲了讓你們更好地瞭解雲原生,咱們特別開設了「雲原生系列內容」,今天將是該系列內容的最後一篇。不論你以前了不瞭解雲原生或者CNCF,看完這篇內容,但願都能讓你們對於雲原生有着從0到1的全方位深刻了解。服務器
計算機領域每過幾年都會產生一些新的概念出來,網格計算、雲計算、物聯網、微服務、區塊鏈、邊緣計算…… 每個新概念都很難從名稱直接看出來它的含義,因此一開始你們都會問到底什麼是X計算,幾年後再提及X計算你們卻彷佛都知道了,可是若是讓他們解釋一下,大多數人仍是會解釋不清楚。今天聊的主角「雲原生」(Cloud Native)也是同樣。微信
(關於雲原生的定義衆說紛紜,本文的介紹僅表明我的理解,歡迎指正。)網絡
01架構
/ 雲原生是利用雲 /併發
/ 快速交付應用的一種方式 /app
Pivotal公司是雲原生概念的早期推廣者,同時也是Spring框架和Spring Cloud的主要貢獻者,它對雲原生的定義是:框架
「Cloud-native is an approach to building and running applications that exploits the advantages of the cloud computing delivery model.」——雲原生是利用雲交付效率的優點來構建和運行應用的方式。
同時,他還補充道:
「Organizations require a platform for building and operating cloud-native applications and services that automates and integrates the concepts of DevOps, continuous delivery, microservices, and containers.」——組織須要一個平臺來構建和運行雲原生應用,這個平臺要包含DevOps,持續交付,微服務和容器。
簡單總結一下,也就會說雲原生的目的是爲了充分利用雲的能力使應用交付更快。爲了達到這個目的,將用到DevOps、持續交付、微服務和容器等理念和技術。
此外,提起雲原生,業內人士還會提到另外一個詞:雲原生基金會。那麼雲原生和雲原生基金會(Cloud Native Computing Foundation,簡稱CNCF)又是什麼關係呢?
雲原生基金會致力於推廣雲原生計算模式,並維護一個廠商中立的開源生態系統來普惠大衆。雲原生計算使用開源軟件棧來構建微服務,打包爲容器,而且動態編排容器來最大化資源利用。CNCF孵化了軟件容器領域的一個值得關注的Kubernetes項目以及圍繞它的不少其餘項目,而Kubernetes目前已經成爲雲原生應用的重要基石。
因此,雲原生是一種理念和應用交付模式,雲原生基金會是以推廣這種理念和模式,孵化支撐這種模式的開源項目。注意,這裏的「雲」並不特指公有云,而是泛指可動態提供資源的各類平臺。要應用雲原生,會涉及到一些核心的技術:微服務、容器、交付。下面看一下爲何雲原生會強依賴這些技術。
02
/ 微服務、容器、交付 /
微服務簡單來講就是將應用所須要的功能拆分紅一個個小型獨立的軟件服務,即「微服務」。每一個微服務專一於本身的任務,可被獨立部署、更新、伸縮和重啓,同時基於API彼此通信來進行協同工做,以造成大型可伸縮應用程序。微服務最重要的點不是把服務拆的有多小,而是把除了應用自己關注的業務之外的其餘邏輯都拆除出去。應用開發者不用去關心其餘應用在哪裏,不用去實現其餘應用失效了怎麼去重試怎麼容錯的邏輯,不用去爲灰度和AB測試等需求開發代碼,也不須要去實現邏輯來監控應用運行狀態… …應用開發者就只專一於實現業務邏輯。同時,每一個服務要實現的業務邏輯儘量清晰,儘量是高內聚的一組功能。
容器是應用的運行環境,是微服務的最佳載體。運行在容器而不是虛擬機,性能上的優點是一方面,更重要的是關注主體發生了變化。當運行一個虛擬機時,值得關注的主體是這臺虛擬機,裏邊到底有多少種應用、具體是什麼應用這並非重點。而當運行一個容器時,關注點是放在容器中打包的那個應用,應用是整個動做的中心。可是也不能說用了虛擬機就必定不是雲原生,利用虛擬機實現基於雲的快速交付,也是雲原生的另外一種最佳實踐。
交付是將容器中的服務真正用起來的過程。傳統運維關注點在於一個一個的運維動做,而面向交付的運維重點在應用自己。關注的是應用最終須要提供多少個實例或者支持多少併發調用,這些運維的動做不該該是應用的關注點,應該全由底層平臺解決。所以,有了聲明式模型,應用只說須要幾個實例,平臺本身想着怎麼啓動,當有設備故障時怎麼恢復;有了無服務器架構,應用根本不關注實例個數和啓停邏輯,平臺根據調用壓力動態分配計算資源。
之因此不少人一提到雲原生就想到Kubernetes,一方面由於Kubernetes是雲原生基金會孵化的表明做,另一方面也和它的能力有很大關係。做爲市場領先的編排解決方案,Kubernetes正是實現了將應用以容器的方式快速交付,讓應用不用再關注系統和網絡差異,不用再關注部署和伸縮細節,而且具有豐富的生態(如Istio,Envoy,Prometheus,Jaeger等),提供應用的微服務治理能力,解決應用上雲這個難題。
03
/ 構建雲原生的應用 /
知道了什麼是雲原生,那要如何讓應用更好地符合雲原生的交付模式呢?
首先,你須要有一個雲。這個雲不必定是公有云,也能夠是私有云,混合雲,甚至是區塊鏈服務,也能夠是任何其餘形式動態提供資源的平臺。這個雲鬚要具體以下基本能力:管理程序包/容器鏡像/虛機鏡像的能力;彈性將應用經過容器/虛擬機等方式交付的能力;對應用進行靈活的服務治理的能力;對應用的各類狀態進行臨時/永久存儲的能力,以及對應用的安全性提供保障的能力。
其次,你要有用雲的能力,不要在應用裏去實現應該雲平臺提供的功能。有些團隊用雲服務只敢用雲主機和存儲,擔憂使用雲的其餘能力會被這個雲服務綁定。有這個擔憂是對的,可是更好的方式應該是選擇更開放、更兼容的雲產品來使用。例如京東雲的Kubernetes集羣、微服務平臺都是與開源項目徹底兼容的,能夠放心使用,不喜歡了也可隨時切換到本身運維的開源項目上。
同時,你還須要改造你的應用,使之能更好的適用於在各類雲平臺上快速交付。關於雲原生應用該如何設計,Heroku團隊提出的十二要素(Twelve-Factor)提供了不少很是有價值的建議。十二要素包含:
按照十二要素的要求,編碼、開發、構建、運維等操做都須要被清晰界定和規範,應用須要專一在業務邏輯,將部署環境、運行依賴,狀態保存、併發、日誌等問題都交給雲平臺來處理。雲原生應用的開發過程變成:快速響應業務需求開發精簡的應用構建標準包,而後在不一樣的環境以不一樣配置動態部署,運行的各類依賴利用雲平臺解決。按照這些原則去設計本身的應用,應用會更易於使用雲服務提供的標準能力,會更易於實現快速交付,更易於進行靈活擴展。
在十二要素髮布後,Pivotal公司的Kevin Hoffman編寫的Beyond the Twelve-Factor App一書中,又增長了三個新要素做爲補充:
最後,要構建雲原生的應用,下面是在應用研發上線過程當中的一些建議:
代碼裏應該重點關注業務邏輯而不是其餘
代碼儘可能不要有任何狀態,狀態都存到雲服務裏
代碼裏不要有和本應用無關的業務邏輯,它應該在其餘應用裏經過API調用
不要實現用於運維和服務治理和觀測的具體邏輯,要依賴第三方庫和雲服務
不要硬編碼地址等任何配置,這段代碼要運行在不少環境
不要假定這段代碼會部署在什麼地址,會部署幾個實例
不要假定程序永遠不死,要保證單個實例的死去不要影響其餘實例
構建結果是一個總體,不能把構建的代碼部署後再去改動代碼包裏的內容
雲原生聚焦的是如何在IaaS基礎構建之上建立有效的應用平臺,而爲企業級信息應用提供更好的技術環境也正是京東雲的使命。
京東雲,做爲具備強產業屬性的雲智能廠商,在雲原生技術的大量投入來自於自身業務的需求,從電商的前端網站、訂單、結 算、支付、搜索、推薦,到後端的倉儲、配送、客服、售後,以及採銷人員使用的各類業務 系統都面臨史無前例的挑戰。京東幾千個系統,幾萬個應用,每個環節正常工做才能保證 總體業務順利運行。雲原生技術正是承載京東零售科技的技術基石。
通過多年的實踐,京東構建了全球最大的Kubernetes集羣,積累了大量的雲原生開發和運維經驗,而且加入雲原生計算基金會成爲最高等級的白金會員。
做爲社區一員,京東雲也會積極採用CNCF的項目、參與開發貢獻並與其餘成員一同合做共建社區。在即將開始的KubeCon+CloudNativeCon和Open Source Summit(China,2019)活動中,咱們的技術專家在現場將爲你們帶來《利用延遲加載快速啓動 Docker 容器》話題分享,經過京東雲研發的容器鏡像延遲加載技術,優化 Docker 鏡像的加載過程,顯著提升容器的啓動速度。同時,還有京東商城技術專家們帶來的《Kubernetes 中 MySQL 容器的正確大小和自動擴展》、《使用 Vitess 的兩年:京東如何運行全球最大的 Vitess》、《在 Kubernetes 中經濟高效地調度大量容器》 主題演講。
京東雲2016年開始對集團外部提供服務以來,逐漸將集團內部多年積累的雲原生開發和運維能力標準化爲Kubernetes集羣、微服務平臺、Devops、函數服務、雲安全、API網關等上百種標準的雲服務,方便客戶利用京東雲服務的強大能力,快速、安全、高可靠地交付產品。
* 這次大會京東雲展區將繞着「雲原生」和「助力產業互聯網「的主題,展現京東雲在助力企業級信息應用技術環境上的成果。
* 歡迎你們屆時光臨京東雲展區,在深刻了解京東云云原生的同時,還能夠經過參加咱們的互動,得到京東雲神祕禮包哦~
* 2019年 6月24日~26日,2019 KubeCon + CloudNativeCon + Open Source Summit 上海世博中心,京東雲期待與您相見!
點擊「雲原生」瞭解更多信息
關注微信公衆號"京東雲開發者社區",
還有大量 實操文檔可免費與領取