多年來,媒體和娛樂行業一直有很多關于基于微服務的新架構的流行語、話題、討論和困惑,例如:最佳實踐,如何從大一統的舊架構遷移、云原生、云就緒。
在這個信息和市場行為的海嘯后是現實,這意味著云和混合云部署必須證明它們真的管用,符合成本效益,易于維護,更重要的是它們響應媒體公司在彈性和定價模式方面的業務要求,等等。

原生云計
與許多計算機科學學科一樣,云原生計算意味著很多東西,但同時也意味著一件東西。我們的觀點是,云原生軟件的設計和構建應該完全按照面向服務的體系架構的原則,每一代新技術都能夠在過去成就的基礎上有更多的抽象化和利用。
我們還信奉另一種重要的理念,包括達到非常高的可用性水平、彈性伸縮能力和無需傳統容量規劃操練就能滿足用戶需求的能力。原生云軟件遵循當時最先進的架構原則——通常被稱為“現代”架構。 隨著行業技術的發展,軟件工具集也應該隨之發展。
云就緒與云原生
將功能豐富的軟件分割為可部署在虛擬化硬件上的單獨設計的功能模塊的傳統概念是一個很有效的想法。當前很多這樣的系統可被我們稱為“云就緒”。只需將它們的本地設施映射到云,就可以很容易地將它們安裝到如AWS等的公有云上。傳統的軟件系統在每次部署時可能需要兩到三個服務器,而云使得這很容易做到。
但效率、可擴展性和靈活性都不如其應有的水平。隨著技術的進步,終端用戶對折衷的容忍度越來越低。公司越來越需要靈活性和能力、即時啟動和大規模、自動化和敏捷性。
而這就是云就緒和云原生的區別。
與硬件無關的基于軟件的架構為一個強大和重要的云就緒主角,而抽象操作系統的想法(使用Docker容器和Kubernetes編排)令其更上一層樓,對每個系統功能開放粒狀API和微服務。這是計算未來所需的。
云原生構件塊:容器
容器不僅像虛擬機那樣抽象硬件,而且定義了一組最佳實踐。這實現響應執行的具體功能的很小組塊中的計算功能,只包括在容器中執行所需的依賴項。它們需要的資源也要比完整的虛擬機少得多,而且只要外露的API是兼容的,就可以獨立地對它們進行升級和管理。
事實上,多年來,計算機科學家一直在構想一個能夠像我們小時候都喜歡的即插即用積木盒子一樣工作的技術世界。商業分析師明白這種想法的機會。
想象一個由《我的世界》沙盒游戲魔法方塊構建的物理世界。通過改變方塊的形狀和功能,然后把它放在你需要的地方,嚴格按照正確的號碼,按比例增加塔樓、道路、橋梁、房屋、大廈、汽車,甚至整個城市,你可以很容易地建造這個世界。
你還可以想象它被快速拆卸,如同一個巨大的移動游樂園開向下一個城鎮。
或者將我們想象中的城市帶入維護模式,通過簡單地移除現有的方塊,放入新方塊,并將舊方塊帶回來進行再利用或處理,從而對社區進行萬無一失的修復和提升。
通過傳統的云就緒軟件,您可以擁有一個非常成功的DevOps團隊,他們精通持續集成和持續部署(CI/CD)。但是,如果你試圖在一個云就緒的軟件系統中擴展某個功能,你會發現需要大量的聯網、存儲和計算的“最低限度的充分部署”——因此,不管需要什么功能,整個系統都必須進行擴展。繼續上面的示例,我們需要6臺服務器來提供一系列功能,包括存儲、轉碼和編輯任務。
例如,如果只需要在處理操作上的擴展,而不是擴展系統提供的其它任何功能,該怎么辦?啟動6臺服務器,即使是虛擬服務器,效率也不高。它產生浪費。這是容器、編排和100%微服務的核心好處。
云原生優勢:消除資源閑置、擴展難題
那需要做什么?應用程序必須以云原生微服務方式完全重構和重建。那么它將能以最佳的的高效方式滿足上述要求。
許多廠家聲稱是云原生的,原因是他們使用AWS S3 Storage的兩個可用區。這不符合我們的定義。
其它廠商展示了一部分構建在Docker上的功能,可以在機器上人工部署。這也不符合我們的定義。
為了提高效率,百分百的系統功能必須暴露在一批顆粒狀、自足的服務中,這些服務可以使用現代容器編排技術(包括Docker和Kubernetes)立即啟動、擴展和關閉。
架構良好的云:AWS的5個支柱
實際上,由云原生服務而引起的敏捷性和能力的確在它們在基礎層的構架方式上引發一些額外和復雜的非功能性要求。
在基礎層次上的架構方式確實引發了一些額外的、復雜的非功能性需求。這意味著什么?云領域的領導者之一是亞馬遜網絡服務,他們對5個核心方面的描述是一個很好的開始,也是Tedial架構方法的靈感來源。這5個方面是:
·卓越運營。滿足業務要求,“開發和運行”工作負載應該交付所要求的商業價值,顯示操作可見性,并持續改進流程和過程。
·安全。保護數據、系統和資產——堅持沒有“可信”起源的理念。
·可靠性。冗余/彈性。正確和一致地履行其功能,包括在某些組件故障的情況下繼續工作(冗余)和自動恢復(彈性)的能力。
·性能效率。在需求不斷變化的條件下,應用程序只使用滿足系統需求的最小計算資源。 更重要的是,它應該適應核心硬件和可用的先進技術提供的新效率,并適當擴展,以在利用率增加的情況下保持商業價值。
·成本優化。系統應該能夠隨時以盡可能低的價格實現商業價值。
這些要求比高性能單模塊軟件(即使是模塊化的軟件)所能滿足的要復雜得多。如果沒有大量的投資,就無法重新構建滿足上述要求的一整套成熟的MAM和工作流程系統。
但是,為使系統功能被認為百分百基于微服務,恰恰必須做出這種投資。
Kubernetes:容器編排的關鍵
利用微服務編排最流行的方式是使用Kubernetes。 Kubernetes提供了一個公共平臺,只需進行最小的適配,就可以在本地及所有公有云(如AWS、谷歌云平臺、微軟Azure等)中部署微服務。
這種方式必須包括:
·先進的技術和操作控制面板。詳盡監測所有微服務,全面衡量資源(硬盤、內存、CPU、網絡和云服務)及其它優化微服務執行和隨著時間的推移降低成本所需的數據的使用情況。
·根據所需的SLA,可以采用各種部署策略,如Blue-Green、Roll-up和Canary。(例如,是否要求零停機時
間?或者需要將升級和維護風險降到最低?)
·自動伸縮:根據不同的標準自動啟動和關閉服務:純IT(磁盤IO、內存)對工作流程參數(排隊操作)。
·安全。輕松使用和重用Kubernetes安全策略和網絡切片。
最后,我們的云原生方式的一些額外特性包括:
·充分利用無服務器計算按需觸發微服務,實現基于事件的定價。
·在一個將再次使用編排打包、自動測試和部署的管道全面實現CI/CD。
· 物理基礎設施不可知: 使用“ 基礎設施即代碼(IaC)”范式。
另一個需要考慮的關鍵特性是解決方案如何與特定的云供應商“綁定”。它可以是云原生的,符合所有期望的架構原則,但非常依賴特定的云供應商服務,這些服務不可能或很難從一個云供應商轉移到另一個云供應商,或者甚至在本地運行。一些公司已經使用這種方法快速切入市場,并擁有一個在云中(但只在一個云中且永遠不會說在本地)完美運行的產品。
為了解決這個問題,廠商必須更進一步,使用可用于或可移植到任何環境的服務,換句話說,不對核心功能使用特定的云供應商服務,并用“基礎設施即代碼(IaC)” 方式定義部署。過去,建立新的基礎設施意味著將物理服務器堆疊起來,配置網線,并將硬件安置在一個有能力的數據中心中。如今,建立一個更高效性能、更低成本高效益、更安全的基礎設施都可以通過使用可被機器讀取的軟件來完成,這些軟件將自動創建所有的微服務、網絡、存儲和所有相關的安全策略。
有許多IaC工具,其中一些也是特定于供應商的,但有一個如Terrform這樣的多重云的工具,它可部署到任何云上且是云不可知的,或甚至是Kubernetes Cluster中的預部署,將避免廠商鎖定,并將保證不會過時。
向前邁進一步:混合云
混合云在微服務部署方面向前邁進了一步,因為它們需要無縫部署于云和本地。為此,實現IaC部署是關鍵,但最重要的是,不同位置的節點是自主的,但從一個點進行管理。從微服務的角度來看,混合云部署必須利用使用云資源和所有編排、升級策略和CI/CD的彈性??偠灾仨氉鳛橐粋€單一的系統工作,其操作服務于在最合適的位置執行的業務需求,優化成本,但不過度復雜化工作流程定義和維護。對于這一方法來說,媒體集成平臺是關鍵。