談到云原生, 繞不開"容器化"

傳送門
Containers
現(xiàn)在談到云原生, 繞不開“容器”。
在《Cloud Native Patterns》一書中,作者Cornelia Davis指出:“容器是云原生應用的基石”;
云原生基金會將微服務容器化作為云原生旅行的第一步。
很容易就想到將微服務容器化, 過程也很簡單。
將代碼、依賴項和運行時打包到一個稱為容器鏡像的二進制文件中。鏡像存儲在鏡像倉庫,Docker官方維護了Docker Hub鏡像倉庫。
需要時,可以將鏡像轉(zhuǎn)換為可運行的容器實例,該實例可在裝有容器運行時引擎的任何計算機上運行,你可以按需部署任意數(shù)量的容器實例。
下圖顯示了三個微服務在單主機以容器化運行。

每個容器維護自己的依賴關系和運行時,這可能會有所不同,上圖我們看到在同一主機上運行的Product微服務的不同版本。每個容器共享基礎主機操作系統(tǒng),內(nèi)存和處理器的一部分,但彼此隔離。
容器模型遵守“十二要素應用”的Dependencies原則。
要素2指定“每個微服務隔離并打包其自己的依賴項、更改項(不影響整個系統(tǒng))”
容器同時支持Linux和Windows工作負載。
雖然存在多個容器供應商,但Docker已經(jīng)成為打包、部署和運行云原生應用程序的事實標準,Docker占據(jù)了最大的市場份額,該公司一直在推動軟件容器的發(fā)展。
Why containers
容器提供了移植性,并保證在跨環(huán)境時,能輸出一致。通過將所有內(nèi)容封裝進單個程序包,可以將微服務+依賴項與基礎設施隔離。
你可以在安裝Docker運行時引擎的 任何環(huán)境部署同一容器,容器化消除了預先配置環(huán)境的時間開銷 ?(for框架、程序庫文件、和運行時)。
通過共享底層操作系統(tǒng)和主機資源,容器的占用空間比完整的虛擬機小很多,小體積,高密度,在一臺主機上可以運行多個微服務。
容器編排
Docker Api/工具創(chuàng)建鏡像和容器,你還需要工具管理容器。
管理容器的軟件稱為"容器編排器",大規(guī)模使用容器時,容器編排器至關重要。

容器編排器做了什么 ?
| 任務 | 描述 |
|---|---|
| Scheduling | 自動配置、調(diào)度容器實例 |
| Affinity/anti-affinity | 在附近或相距較遠的位置調(diào)配容器,以提高可用性和性能 |
| Health monitoring | 自動探測并修復故障 |
| Failover | 自動將失敗的實例轉(zhuǎn)移到狀況良好的機器 |
| Scaling | 自動增減容器 去匹配預期狀態(tài) |
| Networking | 給容器提供覆蓋網(wǎng)絡 |
| Service Discovery | 容器之間互相發(fā)現(xiàn) |
| Rolling Upgrades | 零停機增量升級,零停機自動回滾 |
容器編排器遵循“十二要素應用程序”中的disposability和concurrency原則。
要素9:強調(diào)“服務實例應該是一次性的,這樣有利于快速啟動(提供可伸縮能力),優(yōu)雅關閉讓系統(tǒng)保持正確狀態(tài)”,
要素8:強調(diào)“服務在大量小的相同進程(副本)上擴展,而不是在可用的功能最強大的計算機上擴展單個大型實例”。
目前市面上存在多個容器編排器,但Kubernetes已成為云原生世界的事實標準,這是一個可移植、可擴展的、開源的、管理容器的平臺。
你可以自建k8s集群,自行調(diào)配和管理k8s資源,這可能很復雜。
Azure云將K8s作為托管服務(AKS),你只需要利用K8s功能,而不需要維護K8s集群。
Azure Kubernets Services在第2章“Scaling Cloud-Native Applications”中詳細介紹。
Ref
https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/definition ??后臺回復?cloud-native,獲取微軟出品《Architecting Cloud Native .NET Apps》PDF ??后臺回復 microservices,獲取微軟出品《.NET Microservices: Architecture for Containerized .NET Applications》PDF


更多干貨及最佳實踐分享
關注并星標我們~。。~
