1.1 云原生平臺、架構及開發流程
云原生整體概念思路不外乎“統一”二字。這里的“統一”包含三部分內容,分別是統一基礎平臺、統一軟件架構、統一開發流程。
基于統一的基礎平臺、軟件架構以及開發流程,數字化轉型和云化轉型能夠把重心放在業務應用上。從而使得數字化轉型的目標重新回歸到業務應用本身,最終通過云原生來提升業務應用的迭代速度,促進業務創新。
1.1.1 云原生之統一基礎平臺
容器是云原生的標準軟件發布格式。在很多技術資料和書籍上,往往會與虛擬化技術做對比,它們的對比如下。
? KVM等虛擬化技術是在操作系統級別上進行虛擬和隔離,每一個虛擬機都是獨立的操作系統。
? 容器是在同一個操作系統中實現了輕量級的虛擬化。容器本質上是同一個操作系統中的進程隔離,所以它是輕量級的;容器比虛擬機更省資源,資源利用率更高。
容器技術的設計理念很好、作用也很大。容器技術的好處遠不止輕量級的虛擬化;還體現在:它實現了同一個軟件可在不同的平臺上運行。
這個好處是不是很熟悉?這其實就是Java最初流行起來的原因。
二十多年前,一個應用程序只能在一個平臺上運行。在Windows平臺上運行的,就不能在Linux平臺上運行,除非把代碼放在不同的平臺上進行重新編譯。JVM通過在不同的操作系統上仿真出相同的計算機功能,從而實現了同一個Java程序包可以在不同的平臺上正常地運行。Python語言為了實現這一點,開發出了VirtualEnv,把依賴包都隨著程序發布,才解決了多平臺運行的問題。
在全面云化的時代,如果一個應用程序在不同的平臺或操作系統版本中運行都需要重新編譯打包甚至調試,那么這種極度影響效率的情況是不能容忍的。把一個軟件打包成一個容器鏡像,這個容器鏡像在任何環境下都可以運行,所帶來的好處是巨大的。這就是說,容器鏡像統一了軟件包的基礎格式,是一個事實標準。
容器鏡像運行起來是一個一個的程序,如何實現多個程序合成一個大的分布式應用呢?答案很簡單,程序之間互相調用就行。就像傳統的分布式應用,多配置幾臺服務器,一臺服務器裝一個程序,程序之間通過socket或其他協議通信。基于Docker的分布式應用也是如此,區別只是網絡虛擬化了,CPU和內存資源也虛擬化了。
但是永遠不要低估分布式應用的復雜性。假設搭建了一套分布式集群,運行了一套分布式應用,但出現了以下兩個問題:
? 這個集群中的某個機器出故障了(如斷電了、硬盤壞了等),怎么去排查故障,怎么去修復?
? 這個集群中某一部分業務由于訪問量增加,需要擴充支撐能力,怎么擴充?
針對這兩個問題,答案也很簡單。那就是派人過去檢查機器,修復或者重裝;負載過大了,就改應用的架構,上面套上負載均衡性,采用可擴展的架構。這些都是傳統的辦法,這些解決辦法的缺點也很明顯,就是修復太慢、太費人力、成本高、對業務影響大。就如一個網站,等擴展架構都做好了,用戶也就都流失了。
Kubernetes是容器編排系統,它首要的目的就是為了解決上面這個例子里的兩個問題:
? 分布式容器應用的可靠性。在服務器或容器應用出現問題的情況下,自動感知,自動將容器應用在集群內的其他機器里重新運行起來。
? 分布式容器應用的可擴展性。通過啟動相同的容器應用,自動提升應用的負載支撐能力。
結合Kubernetes集群提供的能力,基于容器部署的應用得到了集群化部署能力,可靠性以及可擴展性能力提升。此外Kubernetes集群通過多種底層技術支持了從小規模3臺集群部署,到大規模數千臺直至上萬臺的集群部署規模。這些底層技術包括:分布式一致性高可靠性etcd存儲技術、控制節點和工作節點分離技術,以及標準化的網絡接口和存儲接口等。
總之,基于容器和Kubernetes技術構成了云原生架構下統一的基礎平臺。這個平臺支撐了標準的軟件包發布格式和標準的軟件包運行環境。
1.1.2 云原生之統一軟件架構
在云原生架構體系中,軟件架構都是采用微服務架構。微服務架構的概念是:
微服務是可以獨立部署的、小的、自治的業務組件,業務組件彼此之間通過消息進行交互。微服務的組件可以按需獨立伸縮,具備容錯和故障恢復能力。
由于微服務架構有下面這幾個優勢,已經成為云計算時代應用的標準應用架構。
? 支持快速上線。由于業務組件的自治性和獨立性,新的功能和應用能夠迅速地發布上線,而不用擔心對系統其他功能帶來大范圍的影響。可以通過服務組件重用重組,快速地形成和發布新的應用。
? 支持獨立擴容和恢復。有針對性地對應用中的某些服務進行擴容,解決性能的瓶頸。可以獨立替換或恢復微服務中的某個組件。
快速上線意味著速度和效率;獨立擴容和恢復意味著系統的安全、穩定和可擴展。采用微服務架構體系的應用在開發效率、穩定性、可擴展性上具備了很強的優勢,使其成為云化應用的標準架構。
微服務架構中的核心功能組件包括網關、微服務治理、服務注冊、配置管理、限流和熔斷、負載均衡、自動擴容、自動故障隔離、自動業務恢復、監控和日志組件等。
微服務架構本質上與容器及Kubernetes技術無關。Java體系中的Spring Cloud就提供了諸如網關Zuul組件、Ribbon負載均衡組件、Eureka服務注冊組件、LCM擴容組件、Hystrix業務恢復組件。利用Spring Cloud的能力可以實現一套完善的微服務架構。Spring Cloud被大量的Java開發人員所擁護,這是它的優勢,但是Spring Cloud的劣勢也很突出,那就是限制編程語言和編程技術。
微服務架構設計的關鍵原則見表1-1。
表1-1 微服務架構設計關鍵原則

(續)

由于云原生的核心目的是提升業務應用的迭代速度、促進業務創新,使用微服務架構能夠實現服務間的解耦,使得單個服務能夠獨立地升級和擴展。在云原生環境下,微服務架構是統一的、標準的軟件架構。
1.1.3 云原生之統一開發流程
DevOps是Development(開發)和Operations(運維)的組合,應重視軟件開發人員和運維人員的溝通與合作,通過自動化流程來使得軟件構建、測試、發布更加迅速和可靠。
DevOps與前述的云原生、微服務、容器等技術應用沒有直接的關系。可以說,沒有微服務和容器等技術,一樣可以朝著自動化的構建、測試和發布流程上行進。但是,長久以來,DevOps只是在流程指導上給出了方向,至于落地的方法論和工具鏈,并沒有很成功。只有在CI/CD流程的個別環節上獨立發展出一些比較成功的產品,例如Jenkins及一些自動化測試工具。究其原因,還是在軟件應用基礎架構上,沒有完善的技術支撐和技術體系,軟件的運行環境、軟件的部署和維護流程、軟件的形態和架構千差萬別。DevOps落地需要大量定制化,由此導致對應工具鏈的落地難度很大。
基于容器和Kubernetes的平臺提供了云原生應用的標準發布和運行環境;基于容器的微服務架構定義了云原生應用的標準架構。通過這些技術,對軟件應用在架構、支撐服務和支持組件、基準平臺上都進行了標準化;同時解決了升級,擴容,穩定性,私有云、公有云、混合云統一基礎架構等問題。
微服務架構的重要目標就是快速發布。這就在敏捷文化、自動化工具鏈上對流程提出了高要求。
云原生強調自動化以能夠提升開發效率和運維效率。在這個基礎上,利用DevOps的自動化、協作、敏捷特性,在軟件的開發、測試、部署、運維流程上,提升了開發效率、降低了溝通成本、提升了部署和上線速度。DevOps是云原生應用在開發、測試和發布流程中的必要手段,并且成了云原生應用的標準開發流程。
- Mobile Forensics Cookbook
- Kali Linux CTF Blueprints
- Metasploit Penetration Testing Cookbook(Second Edition)
- 網絡安全應急管理與技術實踐
- Python Penetration Testing Cookbook
- Falco云原生安全:Falco原理、實踐與擴展
- 信息安全導論(第2版)
- 數據要素安全:新技術、新安全激活新質生產力
- 編譯與反編譯技術實戰
- INSTANT Apple Configurator How-to
- Bug Bounty Hunting Essentials
- 黑客攻防從入門到精通:命令版
- Web代碼安全漏洞深度剖析
- 5G網絡安全規劃與實踐
- 黑客攻防從入門到精通:絕招版(第2版)