詳解云原生五大關(guān)鍵技術(shù)

2022-10-03    分類: 網(wǎng)站建設(shè)

詳解云原生五大關(guān)鍵技術(shù)

0、前言

云原生!它終于來了。毫無疑問,云必將是未來數(shù)字世界最重要、也是最必不可少的基礎(chǔ)設(shè)施,每個(gè)程序員都應(yīng)該要了解它,因?yàn)槟愕拇a大概率會(huì)運(yùn)行在云上。接下來,我將以系列專題的形式從云原生的關(guān)鍵技術(shù)、微服務(wù)間通信方式、Serverless 架構(gòu)等方面以淺顯易懂的語言來介紹云領(lǐng)域的相關(guān)知識(shí),目的只有一個(gè):當(dāng)有人再整概念的時(shí)候,不管是干貨還是水貨,我們都能鑒別出來。

1、什么是云原生 詳解云原生五大關(guān)鍵技術(shù)

云原生不是一項(xiàng)具體的技術(shù),它是一種行為方式和設(shè)計(jì)理念。凡是能夠提高云上資源利用率和應(yīng)用交付效率的行為或方式都可以稱之為云原生的。云原生由一系列技術(shù)支撐起來的,代表技術(shù)包括容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式 API。

2、云原生代表技術(shù) 2.1、容器

容器帶來的好處,不用多說,用過的都知道。容器使得應(yīng)用服務(wù)能從底層架構(gòu)中分離出來,實(shí)現(xiàn)了完全的可移植性(在任何操作系統(tǒng)或環(huán)境上運(yùn)行應(yīng)用的能力),當(dāng)應(yīng)用程序有很多獨(dú)立組件構(gòu)成,也可以為每個(gè)組件分配一個(gè)容器。

2.2、微服務(wù)

微服務(wù)是為了解決傳統(tǒng)單體應(yīng)用的缺點(diǎn)而誕生的,它是一種分布式架構(gòu)設(shè)計(jì)理念。它把應(yīng)用程序中的具體功能獨(dú)立出來,抽象為『服務(wù)』。一個(gè)微服務(wù)就是一個(gè)獨(dú)立的實(shí)體,可以獨(dú)立的部署在 PAAS 平臺(tái)上,也可以作為一個(gè)獨(dú)立的進(jìn)程在主機(jī)中運(yùn)行。為了推動(dòng)細(xì)粒度服務(wù)的使用,這些服務(wù)要能協(xié)同工作,每個(gè)服務(wù)都有自己的生命周期。服務(wù)之間可以通過網(wǎng)關(guān) API、RPC(遠(yuǎn)程服務(wù)調(diào)用)、SideCar(后續(xù)文章會(huì)介紹) 等多種方式訪問,修改一個(gè)服務(wù)不會(huì)影響其它服務(wù)。關(guān)于微服務(wù),我之前的文章比較詳細(xì)地介紹過:從單體到微服務(wù),論軟件系統(tǒng)如何逐步地進(jìn)行解耦

2.3、服務(wù)網(wǎng)格

服務(wù)網(wǎng)格(英文名:Service Mesh)是一個(gè)基礎(chǔ)設(shè)施層,用于處理服務(wù)間的通信,云原生應(yīng)用有著復(fù)雜的服務(wù)拓?fù)?,服?wù)網(wǎng)格負(fù)責(zé)在這些拓?fù)渲袑?shí)現(xiàn)請(qǐng)求的可靠傳遞,在實(shí)踐中,服務(wù)網(wǎng)格通常實(shí)現(xiàn)為一組輕量級(jí)的網(wǎng)絡(luò)代理,它們與應(yīng)用程序部署在一起,但對(duì)應(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

詳解云原生五大關(guān)鍵技術(shù)

SideCar 由控制面和數(shù)據(jù)面構(gòu)成,典型代表是istio,其中控制面采用的是envoy

Service Mesh 并不是指一項(xiàng)具體的技術(shù),它是應(yīng)用了某種技術(shù)(比如 SideCar)后呈現(xiàn)的形態(tài)。服務(wù)網(wǎng)格利用容器之間的網(wǎng)絡(luò)設(shè)置來控制或改變應(yīng)用程序中不同組件之間的交互。

詳解云原生五大關(guān)鍵技術(shù)

綠色表示純業(yè)務(wù)應(yīng)用,藍(lán)色就是 SideCar

我們來看一個(gè)具體的例子:

假如你想測(cè)試 Nginx 的新版本,檢查它是否與你的 Web 應(yīng)用兼容。你用新的 Nginx 版本創(chuàng)建了一個(gè)新的容器 (Container2),并從當(dāng)前容器 (Container1) 中復(fù)制了當(dāng)前的 Nginx webserver 配置。但你不想影響組成 web 應(yīng)用的其他微服務(wù)(假設(shè)每個(gè)容器對(duì)應(yīng)一個(gè)單獨(dú)的微服務(wù))—— 就是 MySQL 數(shù)據(jù)庫(kù)、Node.js 前端、負(fù)載均衡器等。

所以使用服務(wù)網(wǎng)格,你可以立即只把 webserver 微服務(wù)改成 Container2(新 Nginx 版本的那個(gè))進(jìn)行測(cè)試。如果確定它不能工作,比如因?yàn)樗鼘?dǎo)致網(wǎng)站出現(xiàn)一些兼容性問題,那么你就調(diào)用服務(wù)網(wǎng)格來快速切換回原來的 Container1。而這一切都不需要對(duì)其他容器進(jìn)行任何配置變更 —— 這些變更對(duì)其他容器是完全透明的。

如果沒有服務(wù)網(wǎng)格,對(duì)容器來說這項(xiàng)工作將十分繁瑣,因?yàn)檫@涉及到逐一更改所有其他容器上的配置,將它們所包含的服務(wù)從 Container1 指向 Container2,然后在測(cè)試失敗后,將它們?nèi)扛幕貋怼?/p> 2.4、不可變基礎(chǔ)設(shè)施

K8s 中的不可變基礎(chǔ)設(shè)施就是 Pod,容器技術(shù)就是不可變基礎(chǔ)設(shè)施的一種具體實(shí)現(xiàn)。Chad Fowler 于 2013 年提出的一個(gè)很有前瞻性的構(gòu)想:在這種模式中,任何基礎(chǔ)設(shè)施的實(shí)例(包括服務(wù)器、容器等各種軟硬件)一旦創(chuàng)建之后便成為一種只讀狀態(tài),不可對(duì)其進(jìn)行任何更改。如果需要修改或升級(jí)某些實(shí)例,唯一的方式就是創(chuàng)建一批新的實(shí)例以替換。

所以,不可變基礎(chǔ)設(shè)施是一個(gè)自包含、自描述可以完全在不同環(huán)境中遷移的東西。

2.5、聲明式設(shè)計(jì)

Declarative(聲明式設(shè)計(jì))是相對(duì) Imperative 或 Procedural(過程式設(shè)計(jì))而言的。在 Declarative 中,我們描述的是目標(biāo)狀態(tài)(Goal State),而在 Imperative 模式中,我們描述的是一系列的動(dòng)作。這一系列的動(dòng)作如果被正確的順利執(zhí)行,最終結(jié)果是這個(gè)事物達(dá)到了我們期望的目標(biāo)狀態(tài)的。SQL 其實(shí)就是一種常見的聲明式『編程語言』,它能夠讓開發(fā)者自己去指定想要的數(shù)據(jù)是什么。

我們來看下述兩條命令:

docker service create--name nginx --replicas 2 nginx docker service update--image nginx:1.7.9 nginx

用 Docker Swarm 啟動(dòng)了兩個(gè) Nginx 容器實(shí)例。其中,第一條 create 命令創(chuàng)建了這兩個(gè)容器,而第二條 update 命令則把它們『滾動(dòng)更新』變成了一個(gè)新的鏡像。

那么,像上面這樣的創(chuàng)建和更新兩個(gè) Nginx 容器的操作,在 K8s 里是怎么做的呢?

首先,需要在本地編寫一個(gè) 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)建這個(gè) Deployment:

kubectl apply -f nginx.yaml

這樣,Nginx 的 Deployment 就被創(chuàng)建了出來。然后,再修改一下 nginx.yaml 里定義的鏡像:

... spec: containers: - name: nginx image: nginx:1.7.9

在修改完這個(gè) yaml 文件之后,繼續(xù)執(zhí)行如下 kubectl apply 命令:

kubectl apply -f nginx.yaml

這時(shí),K8s 就會(huì)立即觸發(fā)這個(gè) Deployment 的『滾動(dòng)更新』。kubectl apply 相當(dāng)于執(zhí)行了一個(gè)對(duì)原有 API 對(duì)象的 PATCH 操作??偨Y(jié)下:

所謂『聲明式』,指的就是我只需要提交一個(gè)定義好的 API 對(duì)象來『聲明』我所期望的狀態(tài)是什么樣子,具體該怎么操作才能達(dá)到我想要的狀態(tài)由工具內(nèi)部實(shí)現(xiàn);

『聲明式』 API 允許有多個(gè) API 寫端,以 PATCH 的方式對(duì) API 對(duì)象進(jìn)行修改,而無需關(guān)心本地原始 yaml 文件的內(nèi)容。

3、云原生能帶來什么

云原生帶來的好處顯而易見:

敏捷 可靠 高彈性 易擴(kuò)展 故障隔離保護(hù) 不中斷業(yè)務(wù)持續(xù)更新

它能提升研發(fā)效率、加速日常迭代、加速新技術(shù)落地應(yīng)用、方便自動(dòng)化測(cè)試、降低運(yùn)維成本,同時(shí),面向微服務(wù)設(shè)計(jì)和動(dòng)態(tài)資源管理,能夠讓集群資源得到最高效的利用。

分享標(biāo)題:詳解云原生五大關(guān)鍵技術(shù)
當(dāng)前地址:http://www.muchs.cn/news6/201056.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(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)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)