2022-10-03 分類: 網(wǎng)站建設(shè)
云原生!它終于來了。毫無疑問,云必將是未來數(shù)字世界最重要、也是最必不可少的基礎(chǔ)設(shè)施,每個程序員都應(yīng)該要了解它,因為你的代碼大概率會運行在云上。接下來,我將以系列專題的形式從云原生的關(guān)鍵技術(shù)、微服務(wù)間通信方式、Serverless 架構(gòu)等方面以淺顯易懂的語言來介紹云領(lǐng)域的相關(guān)知識,目的只有一個:當有人再整概念的時候,不管是干貨還是水貨,我們都能鑒別出來。
1、什么是云原生云原生不是一項具體的技術(shù),它是一種行為方式和設(shè)計理念。凡是能夠提高云上資源利用率和應(yīng)用交付效率的行為或方式都可以稱之為云原生的。云原生由一系列技術(shù)支撐起來的,代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式 API。
2、云原生代表技術(shù) 2.1、容器容器帶來的好處,不用多說,用過的都知道。容器使得應(yīng)用服務(wù)能從底層架構(gòu)中分離出來,實現(xiàn)了完全的可移植性(在任何操作系統(tǒng)或環(huán)境上運行應(yīng)用的能力),當應(yīng)用程序有很多獨立組件構(gòu)成,也可以為每個組件分配一個容器。
2.2、微服務(wù)微服務(wù)是為了解決傳統(tǒng)單體應(yīng)用的缺點而誕生的,它是一種分布式架構(gòu)設(shè)計理念。它把應(yīng)用程序中的具體功能獨立出來,抽象為『服務(wù)』。一個微服務(wù)就是一個獨立的實體,可以獨立的部署在 PAAS 平臺上,也可以作為一個獨立的進程在主機中運行。為了推動細粒度服務(wù)的使用,這些服務(wù)要能協(xié)同工作,每個服務(wù)都有自己的生命周期。服務(wù)之間可以通過網(wǎng)關(guān) API、RPC(遠程服務(wù)調(diào)用)、SideCar(后續(xù)文章會介紹) 等多種方式訪問,修改一個服務(wù)不會影響其它服務(wù)。關(guān)于微服務(wù),我之前的文章比較詳細地介紹過:從單體到微服務(wù),論軟件系統(tǒng)如何逐步地進行解耦
2.3、服務(wù)網(wǎng)格服務(wù)網(wǎng)格(英文名:Service Mesh)是一個基礎(chǔ)設(shè)施層,用于處理服務(wù)間的通信,云原生應(yīng)用有著復雜的服務(wù)拓撲,服務(wù)網(wǎng)格負責在這些拓撲中實現(xiàn)請求的可靠傳遞,在實踐中,服務(wù)網(wǎng)格通常實現(xiàn)為一組輕量級的網(wǎng)絡(luò)代理,它們與應(yīng)用程序部署在一起,但對應(yīng)用程序透明。
A service mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application. In practice, the service mesh is typically implemented as an array of lightweight network proxies that are deployed alongside application code, without the application needing to be aware.”
- William Morgan
SideCar 由控制面和數(shù)據(jù)面構(gòu)成,典型代表是istio,其中控制面采用的是envoy
Service Mesh 并不是指一項具體的技術(shù),它是應(yīng)用了某種技術(shù)(比如 SideCar)后呈現(xiàn)的形態(tài)。服務(wù)網(wǎng)格利用容器之間的網(wǎng)絡(luò)設(shè)置來控制或改變應(yīng)用程序中不同組件之間的交互。
綠色表示純業(yè)務(wù)應(yīng)用,藍色就是 SideCar
我們來看一個具體的例子:
假如你想測試 Nginx 的新版本,檢查它是否與你的 Web 應(yīng)用兼容。你用新的 Nginx 版本創(chuàng)建了一個新的容器 (Container2),并從當前容器 (Container1) 中復制了當前的 Nginx webserver 配置。但你不想影響組成 web 應(yīng)用的其他微服務(wù)(假設(shè)每個容器對應(yīng)一個單獨的微服務(wù))—— 就是 MySQL 數(shù)據(jù)庫、Node.js 前端、負載均衡器等。
所以使用服務(wù)網(wǎng)格,你可以立即只把 webserver 微服務(wù)改成 Container2(新 Nginx 版本的那個)進行測試。如果確定它不能工作,比如因為它導致網(wǎng)站出現(xiàn)一些兼容性問題,那么你就調(diào)用服務(wù)網(wǎng)格來快速切換回原來的 Container1。而這一切都不需要對其他容器進行任何配置變更 —— 這些變更對其他容器是完全透明的。
如果沒有服務(wù)網(wǎng)格,對容器來說這項工作將十分繁瑣,因為這涉及到逐一更改所有其他容器上的配置,將它們所包含的服務(wù)從 Container1 指向 Container2,然后在測試失敗后,將它們?nèi)扛幕貋怼?/p> 2.4、不可變基礎(chǔ)設(shè)施
K8s 中的不可變基礎(chǔ)設(shè)施就是 Pod,容器技術(shù)就是不可變基礎(chǔ)設(shè)施的一種具體實現(xiàn)。Chad Fowler 于 2013 年提出的一個很有前瞻性的構(gòu)想:在這種模式中,任何基礎(chǔ)設(shè)施的實例(包括服務(wù)器、容器等各種軟硬件)一旦創(chuàng)建之后便成為一種只讀狀態(tài),不可對其進行任何更改。如果需要修改或升級某些實例,唯一的方式就是創(chuàng)建一批新的實例以替換。
所以,不可變基礎(chǔ)設(shè)施是一個自包含、自描述可以完全在不同環(huán)境中遷移的東西。
2.5、聲明式設(shè)計Declarative(聲明式設(shè)計)是相對 Imperative 或 Procedural(過程式設(shè)計)而言的。在 Declarative 中,我們描述的是目標狀態(tài)(Goal State),而在 Imperative 模式中,我們描述的是一系列的動作。這一系列的動作如果被正確的順利執(zhí)行,最終結(jié)果是這個事物達到了我們期望的目標狀態(tài)的。SQL 其實就是一種常見的聲明式『編程語言』,它能夠讓開發(fā)者自己去指定想要的數(shù)據(jù)是什么。
我們來看下述兩條命令:
docker service create--name nginx --replicas 2 nginx docker service update--image nginx:1.7.9 nginx用 Docker Swarm 啟動了兩個 Nginx 容器實例。其中,第一條 create 命令創(chuàng)建了這兩個容器,而第二條 update 命令則把它們『滾動更新』變成了一個新的鏡像。
那么,像上面這樣的創(chuàng)建和更新兩個 Nginx 容器的操作,在 K8s 里是怎么做的呢?
首先,需要在本地編寫一個 Deployment 的 yaml 文件:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - container Port: 80接下來,使用 kubectl apply 命令來創(chuàng)建這個 Deployment:
kubectl apply -f nginx.yaml這樣,Nginx 的 Deployment 就被創(chuàng)建了出來。然后,再修改一下 nginx.yaml 里定義的鏡像:
... spec: containers: - name: nginx image: nginx:1.7.9在修改完這個 yaml 文件之后,繼續(xù)執(zhí)行如下 kubectl apply 命令:
kubectl apply -f nginx.yaml這時,K8s 就會立即觸發(fā)這個 Deployment 的『滾動更新』。kubectl apply 相當于執(zhí)行了一個對原有 API 對象的 PATCH 操作。總結(jié)下:
所謂『聲明式』,指的就是我只需要提交一個定義好的 API 對象來『聲明』我所期望的狀態(tài)是什么樣子,具體該怎么操作才能達到我想要的狀態(tài)由工具內(nèi)部實現(xiàn);
『聲明式』 API 允許有多個 API 寫端,以 PATCH 的方式對 API 對象進行修改,而無需關(guān)心本地原始 yaml 文件的內(nèi)容。
3、云原生能帶來什么云原生帶來的好處顯而易見:
敏捷 可靠 高彈性 易擴展 故障隔離保護 不中斷業(yè)務(wù)持續(xù)更新它能提升研發(fā)效率、加速日常迭代、加速新技術(shù)落地應(yīng)用、方便自動化測試、降低運維成本,同時,面向微服務(wù)設(shè)計和動態(tài)資源管理,能夠讓集群資源得到最高效的利用。
分享標題:詳解云原生五大關(guān)鍵技術(shù)
當前地址:http://jinyejixie.com/news6/201056.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、微信小程序、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容