資安

談談我對零售雲在雲原生總結與思考

零售雲是阿里三朵業務雲:零售雲、金融雲和政務雲之一,將開闢阿里在電商、零售行業的新藍海,2B快速交付、賦能合作伙伴更快業務增長和節省成本。雲原生是零售雲的最重要的技術底座,雲原生是什麼,會走向哪裡,在零售2B交付的場景上該如何應用,怎麼能夠結合幫助建設零售雲系列產品體系,值得我們的思考和探索,也將有效指導我們接下來幾年的零售雲項目和產品建設。

雲原生定義、阿里巴巴雲原生架構方法論及產品體系

雲原生定義

Cloud Native 翻譯為雲原生,是 Matt Stine 提出的一個概念,它是一個思想的集合,包括 DevOps 、持續交付(Continuous Delivery)、微服務(MicroServices)、敏捷基礎設施(Agile Infrastructure)、康威定律(Conways Law)等,以及根據商業能力對公司進行重組。Cloud Native 既包含技術(微服務,敏捷基礎設施),也包含管理(DevOps,持續交付,康威定律,重組等)。Cloud Native 也可以說是一系列技術、企業管理方法的集合。

雲原生的本質

雲原生本質是以應用為中心,讓應用能最大限度享受到雲計算的紅利。雲原生是雲計算的下一站,雲原生架構是引領未來十年的新一代技術架構。雲原生讓雲計算變得標準、開放、簡單高效、觸手可及。

雲原生應用開發的最佳實踐原則:12-Factor

1、 基準代碼:一份基準代碼(Codebase),多份部署(deploy)

基準代碼和應用之間總是保持一一對應的關係,一份代碼可以部署在開發環境、測試環境、預發環境及產線環境。

多個應用共享一份基準代碼是有悖於 12-Factor 原則的。解決方案如下:

將共享的代碼拆分為獨立的類庫,然後使用依賴管理策略去加載它們。所有部署的基準代碼相同,但每份部署可以使用其不同的版本。比如,開發人員可能有一些提交還沒有同步至預發佈環境;預發佈環境也有一些提交沒有同步至生產環境。但它們都共享一份基準代碼,我們就認為它們只是相同應用的不同部署而已。

2、 依賴——顯式聲明依賴關係(Dependency)

12-Factor 規則下的應用程序不會隱式依賴系統級的類庫。它一定通過依賴清單,確切地聲明所有依賴項。大多數編程語言都會提供一個打包系統,比如 java 使用 maven ,應用依賴了哪些第三方庫,要顯示地定義在 POM 文件裡。

3、 配置:在環境中存儲配置

配置要和代碼完全分離,環境變量可以非常方便地在不同的部署間做修改,卻不動一行代碼。配置主要包括數據庫信息,緩存信息,第三方服務證書,每份部署特有的配置,如域名等信息。

判斷一個應用是否正確地將配置排除在代碼之外,一個簡單的方法,看該應用的基準代碼是否可以立刻開源,而不用擔心會暴露任何敏感的信息。

4、 後端服務:把後端服務當作附加資源

後端服務是指程序運行所需要的通過網絡調用的各種服務,如數據庫,消息系統及緩存系統。

12-Factor 應用的任意部署,都應該可以在不進行任何代碼改動的情況下,進行後端服務的切換,比如將本地 MySQL 數據庫換成第三方服務(例如阿里雲的 RDS)。另外,部署可以按需加載或卸載資源。例如,如果應用的數據庫服務由於硬件問題出現異常,管理員可以從最近的備份中恢復一個數據庫,卸載當前的數據庫,然後加載新的數據庫 。整個過程都不需要修改代碼。

5、 構建->發佈->運行:嚴格分離構建和運行

基準代碼 轉化為一份部署(非開發環境)需要以下三個階段:

構建階段,將代碼倉庫轉化為可執行包的過程。構建時會使用指定版本的代碼,獲取和打包依賴項,編譯成二進制文件和資源文件。

發佈階段,將構建的結果和當前部署所需配置相結合,並能夠立刻在運行環境中投入使用。

運行階段(“運行時”),針對選定的發佈版本,在執行環境中啟動一系列應用程序進程。

每一個發佈版本必須對應一個唯一的發佈 ID,一旦發佈就不可修改,任何的變動都應該產生一個新的發佈版本。另外,發佈管理工具需要能方便的回退至較舊的發佈版本。

6、 進程:以一個或多個無狀態進程運行應用

運行環境中,應用程序通常是以一個和多個進程運行的。12-Factor應用的進程必須無狀態且無共享,任何需要持久化的數據都要存儲在後端服務內,比如數據庫或緩存。

7、 端口綁定:通過端口綁定提供服務

12-Factor應用完全自我加載,而不依賴於任何網絡服務器就可以創建一個面向網絡的服務。互聯網應用通過端口綁定來提供服務,並監聽發送至該端口的請求。比如,在線上環境中,請求統一發送至公共域名,然後路由至綁定了端口的網絡進程。

8、 併發:通過進程模型進行擴展

在 12-factor 應用中,進程是一等公民。12-Factor 應用的進程主要借鑑於 unix 守護進程模型 。開發人員可以運用這個模型去設計應用架構,將不同的工作分配給不同的進程類型。例如,HTTP 請求可以交給web進程來處理,而常駐的後臺工作則交由 worker進程負責。

9、 易處理:快速啟動和優雅終止可最大化健壯性

12-Factor 應用的進程是易處理的,即它們可以瞬間開啟或停止。這有利於快速、彈性的伸縮應用,迅速部署變化的代碼或配置,穩健的部署應用。

進程應當追求最小啟動時間,並且一旦接收到終止信號(SIGTERM),可以優雅的終止。進程還應當在面對突然死亡時保持健壯,例如底層硬件故障。無論如何,12-Factor應用都應該可以設計能夠應對意外的、不優雅的終結。

10、 開發環境與線上環境等價:儘可能的保持開發,預發佈,線上環境相同

12-Factor 應用的開發人員應該避免在不同環境間使用不同的後端服務,即使適配器已經可以幾乎消除使用上的差異。這是因為,不同的後端服務意味著會突然出現的不兼容,從而導致測試、預發佈都正常的代碼在線上出現問題。這些錯誤會給持續部署帶來阻力。從應用程序的生命週期來看,消除這種阻力需要花費很大的代價。

11、 日誌:把日誌當作事件流

12-factor 應用本身從不考慮存儲自己的輸出流。不應該試圖去寫或者管理日誌文件。相反,每一個運行的進程都會直接的標準輸出(stdout)事件流。開發環境中,開發人員可以通過這些數據流,實時在終端看到應用的活動。

12、 管理進程:後臺管理任務當作一次性進程運行

一次性管理進程主要指一些管理或維護應用的一次性任務,比如,運行數據遷移,運行一些提交到代碼倉庫的一次性腳本等。它們應該和正常的常駐進程使用同樣的環境。這些管理進程和任何其他的進程一樣使用相同的代碼和配置,基於某個發佈版本運行。後臺管理代碼應該隨其他應用程序代碼一起發佈,從而避免同步問題。

以上了解了 12-Factor 應用原則。在我們學習 K8s 的過程中,個人認為 K8s 結合service mesh 很好的滿足了上面的每條原則。設計 K8s 和 ServiceMesh 的人很偉大,提出 12 原則的 AdamWiggins 很偉大。

阿里巴巴雲原生架構方法論

阿里巴巴雲原生架構設計方法

阿里巴巴獨有的雲原生架構設計方法——ACNA(Alibaba Cloud Native Architecting)如下:

ACNA 是一個 「4+1」 的架構設計流程,「4」 代表架構設計的關鍵視角,包括企業戰略視角、業務發展視角、組織能力視角和雲原生技術架構視角;「1」 表示雲原生架構的架構持續演進閉環。
image.png
值得一提的是,ACNA 除了是一個架構設計方法,也包含了對雲原生架構的評估體系、成熟度衡量體系、行業應用最佳實踐、技術和產品體系、架構原則、實施指導等。

另外,雲原生架構演進是一個持續迭代的過程,每一次迭代都是從企業戰略、業務訴求到架構設計與實施的一個完整閉環,整體關係如下圖:
image.png

阿里巴巴雲原生成熟度模型

由 於 雲 原 生 架 構 包 含 了 6 個 關 鍵 架 構 維 度( 簡 寫 為 SESORA,Service + Elasticity + Serverless + Observability + Resilience + Automation),因此我們先定義關鍵維度的成熟度級別:
image.png
image.png

阿里巴巴雲原生產品體系

阿里巴巴雲原生產品家族包括容器產品家族、微服務產品家族、Serverless 產品家族、Service Mesh 產品家族、消息產品、雲原生數據庫家族、雲原生大數據產品家族等。

1、容器產品家族

image.png

2、微服務產品家族

EDAS(企業分佈式應用服務)是一個面向微服務應用的應用全生命週期 PaaS 平臺,產品全面支持 HSF、Dubbo、Spring Cloud 技術體系,提供 ECS 集群和 K8s 集群的應用開發、部署、監控、運維等全棧式解決方案。

MSE(微服務引擎)是一個面向業界主流開源微服務框架 Spring Cloud、Dubbo 的微服務平臺, 包含治理中心、託管註冊 / 配置中心,一站式的解決方案幫助用戶提升微服務的開發效率和線上穩定性。

ACM(應用配置管理),是一款應用配置中心產品,實現在微服務、DevOps、大數據等場景下的 分佈式配置服務,保證配置的安全合規。

CSB Micro Gateway(微服務網關服務)針對微服務架構下 API 開放的特點,提供能與微服務環 境的治理策略無縫銜接的網關服務,實現高效的微服務 API 開放。

GTS(全局事務服務)用於實現分佈式環境下特別是微服務架構下的高性能事務一致性,可以與多種數據源、微服務框架配合使用,實現分佈式數據庫事務、多庫事務、消息事務、服務鏈路級事務及各種組合。

ARMS(應用實時監控服務 ) 是一款應用性能管理產品,包含前端監控、應用監控和 Prometheus 監控三大子產品,涵蓋了瀏覽器、小程序、APP、分佈式應用和容器環境等性能管理,實現全棧式性能監控和端到端全鏈路追蹤診斷。鏈路追蹤(Tracing Analysis)為分佈式應用的開發者提供了完整的調用鏈路還原、調用請求量統計、 鏈路拓撲、應用依賴分析等工具,能夠幫助開發者快速分析和診斷分佈式應用架構下的性能瓶頸,提高 微服務時代下的開發診斷效率。

PTS(Performance Testing Service)是一款雲化測試工具,提供性能測試、API 調試和監測 等多種能力,緊密結合監控、流控等產品提供一站式高可用能力,高效檢驗和管理業務性能。

3、Serverless 產品家族

image.png
FC(函數計算)是一個事件驅動的全託管 Serverless 計算服務,用戶無需管理服務器等基礎設施, 只需編寫代碼並上傳,函數計算會準備好計算資源,並以彈性、可靠的方式運行業務代碼。

SAE(Serverless 應用引擎)實現了 Serverless 架構 + 微服務架構的完美融合,真正按需使用、按量計費,節省閒置計算資源,同時免去 IaaS 運維,有效提升開發運維效率;SAE 支持 Spring Cloud、Dubbo 和 HSF 等流行的微服務架構。

Serverless 工作流是一個用來協調多個分佈式任務執行的全託管 Serverless 雲服務,致力於簡化開發和運行業務流程所需要的任務協調、狀態管理以及錯誤處理等繁瑣工作,讓用戶聚焦業務邏輯開發。用戶可以用順序、分支、並行等方式來編排分佈式任務,服務會按照設定好的順序可靠地協調任務執行, 跟蹤每個任務的狀態轉換,並在必要時執行用戶定義的重試邏輯,以確保工作流順利完成。

4、Service Mesh產品家族

服務網格(ASM)提供全託管的微服務應用流量管理平臺,兼容 Istio 的同時,支持多個 Kubernetes 集群中應用的統一流量管理,為容器和虛擬機中應用服務提供一致的通信、安全和可觀測能力。

AHAS(應用高可用服務)是專注於提高應用及業務高可用的工具平臺,目前主要提供應用架構探測感知,故障注入式高可用能力評測和流控降級高可用防護三大核心能力,通過各自的工具模塊可以快 速低成本的在營銷活動場景、業務核心場景全面提升業務穩定性和韌性。

5、消息產品家族

消息隊列 RocketMQ 版是阿里雲基於 Apache RocketMQ 構建的低延遲、高併發、高可用、高可 靠的分佈式消息中間件。該產品最初由阿里巴巴自研並捐贈給 Apache 基金會,服務於阿里集團 13 年, 覆蓋全集團所有業務,支撐千萬級併發、萬億級數據洪峰,歷年刷新全球最大的交易消息流轉記錄。

消息隊列 Kafka 版是阿里雲基於 Apache Kafka 構建的高吞吐量、高可擴展性的分佈式消息隊列服 務,廣泛用於日誌收集、監控數據聚合、流式數據處理、在線和離線分析等,是大數據生態中不可或缺 的產品之一,阿里雲提供全託管服務,用戶無需部署運維,更專業、更可靠、更安全。

消息隊列 AMQP 版由阿里雲基於 AMQP 標準協議自研,完全兼容 RabbitMQ 開源生態以及多語 言客戶端,打造分佈式、高吞吐、低延遲、高可擴展的雲消息服務。

微消息隊列 MQTT 版是專為移動互聯網 (MI)、物聯網 (IoT) 領域設計的消息產品,覆蓋互動直播、 金融支付、智能餐飲、即時聊天、移動 Apps、智能設備、車聯網等多種應用場景;通過對 MQTT、 WebSocket 等協議的全面支持,連接端和雲之間的雙向通信,實現 C2C、C2B、B2C 等業務場景之 間的消息通信,可支撐千萬級設備與消息併發,真正做到萬物互聯。

阿里雲消息服務 MNS 是一種高效、可靠、安全、便捷、可彈性擴展的分佈式消息服務 , 能夠幫助應 用開發者在他們應用的分佈式組件上自由的傳遞數據、通知消息,構建鬆耦合系統。

事件總線 EventBridge 是阿里雲提供的一款無服務器事件總線服務,支持阿里雲服務、自定義應用、 SaaS 應用以標準化、中心化的方式接入,並能夠以標準化的 CloudEvents 1.0 協議在這些應用之間路 由事件,幫助用戶輕鬆構建鬆耦合、分佈式的事件驅動架構。

6、數據庫產品家族

PolarDB 是阿里巴巴自主研發的下一代關係型分佈式雲原生數據庫,目前兼容三種數據庫引擎:MySQL、PostgreSQL、高度兼容 Oracle 語法;計算能力最高可擴展至 1000 核以上,存儲容量最高 消息產品家族 雲原生數據庫產品家族 6 7 The Cloud-native Architecture White Paper by Alibaba Cloud 50 可達 100T。PolarDB 經過阿里巴巴雙十一活動的最佳實踐,讓用戶既享受到開源的靈活性與價格,又享受到商業數據庫的高性能和安全性。

PolarDB-X(原 DRDS 升級版)是由阿里巴巴自主研發的雲原生分佈式數據庫,融合分佈式 SQL 引擎 DRDS 與分佈式自研存儲 X-DB,專注解決海量數據存儲、超高併發吞吐、大表瓶頸以及複雜計算效率等數據庫瓶頸難題,歷經各屆天貓雙 11 及阿里雲各行業客戶業務的考驗,助力企業加速完成業務數字化轉型。

7、大數據產品家族

雲原生數據倉庫 AnalyticDB MySQL 版(簡稱 ADB,原分析型數據庫 MySQL 版)是一種支持 高併發低延時查詢的新一代雲原生數據倉庫,全面兼容 MySQL 協議以及 SQL:2003 語法標準,可以對 海量數據進行即時的多維分析透視和業務探索,快速構建企業雲上數據倉庫。產品規格按需可選,基礎 版成本最低,適合 BI 查詢應用;集群版提供高併發數據實時寫入和查詢能力,適用於高性能應用;彈性 模式版本存儲廉價按量計費,適用於 10TB 以上數據上雲場景。

雲原生數據倉庫 AnalyticDB PostgreSQL 版,支持標準 SQL 2003,兼容 PostgreSQL / Greenplum, 高度兼容 Oracle 語法生態;具有存儲計算分離,在線彈性平滑擴容的特點;既支持任意 維度在線分析探索,也支持高性能離線數據處理;是面向互聯網,金融,證券,保險,銀行,數字政務, 新零售等行業有競爭力的數據倉庫方案。

雲原生幾個核心技術和未來發展趨勢

1. 容器

容器作為標準化軟件單元,它將應用及其所有依賴項打包,使應用不再受環境限制,在不同計算環境間快速、可靠地運行。

隨後開源的 Kubernetes,憑藉優秀的開放性、可擴展性以及活躍開發者社區,在容器編排之戰中脫穎而出,成 為分佈式資源調度和自動化運維的事實標準。Kubernetes 屏蔽了 IaaS 層基礎架構的差異並憑藉優良的可移植性, 幫助應用一致地運行在包括數據中心、雲、邊緣計算在內的不同環境。企業可以通過 Kubernetes,結合自身業務特 徵來設計自身雲架構,從而更好支持多雲 / 混合雲,免去被廠商鎖定的顧慮。伴隨著容器技術逐步標準化,進一步促進了容器生態的分工和協同。基於 Kubernetes,生態社區開始構建上層的業務抽象,比如服務網格 Istio、機器學 習平臺 Kubeflow、無服務器應用框架 Knative 等。

Kubernetes 已經成為容器編排的事實標準,被廣泛用於自動部署,擴展和管理容器化應用。Kubernetes 提 供了分佈式應用管理的核心能力:

資源調度:根據應用請求的資源量 CPU、Memory,或者 GPU 等設備資源,在集群中選擇合適的節點來運 行應用;

應用部署與管理:支持應用的自動發佈與應用的回滾,以及與應用相關的配置的管理;也可以自動化存儲卷 的編排,讓存儲卷與容器應用的生命週期相關聯;

自動修復:Kubernetes 可以會監測這個集群中所有的宿主機,當宿主機或者 OS 出現故障,節點健康檢查 會自動進行應用遷移;K8s 也支持應用的自愈,極大簡化了運維管理的複雜性;

服務發現與負載均衡:通過 Service 資源出現各種應用服務,結合 DNS 和多種負載均衡機制,支持容器化 應用之間的相互通信;

彈性伸縮:K8s 可以監測業務上所承擔的負載,如果這個業務本身的 CPU 利用率過高,或者響應時間過長, 它可以對這個業務進行自動擴容。

Kubernetes 的控制平面包含四個主要的組件:API Server、Controller、Scheduler 以及 etcd。如下圖:
image.png

2. 微服務

微服務四代架構演進:

第一代

第一代微服務架構中,應用除了需要實現業務邏輯之外,還需要自行解決上下游尋址、通訊,以及容錯等問題。隨著微服務規模擴大,服務尋址邏輯的處理變得越來越複雜,哪怕是同一編程語言的另一個應用,上述微服務的基礎能力都需要重新實現一遍。
image.png

第二代

第二代微服務架構中,引入了旁路服務註冊中心作為協調者來完成服務的自動註冊和發現。服務之間的通訊以及容錯機制開始模塊化,形成獨立服務框架。但是隨著服務框架內功能日益增多,用不同語言的基礎功能複用顯得十分困難,這也就意味著微服務的開發者被迫被綁定在某種特定語言上,從而違背了微服務的敏捷迭代原則。
image.png

第三代

2016 年出現了第三代微服務架構 - 服務網格,原來被模塊化到服務框架裡的微服務基礎能力,被進一步的從一 個 SDK 演進成為一個獨立進程 - Sidecar。這個變化使得第二代架構中多語言支持問題得以徹底解決,微服務基礎 能力演進和業務邏輯迭代徹底解耦。這個架構就是在雲原生時代的微服務架構 - Cloud Native Microservices,邊車(Sidecar)進程開始接管微服務應用之間的流量,承載第二代中服務框架的功能,包括服務發現、調用容錯,到豐富的服務治理功能,例如:權重路由、灰度路由、流量重放、服務偽裝等。

第四代

近兩年開始,隨著 AWS Lambda 的出現,部分應用開始嘗試利用 Serverless 來架構微服務,這種方式被稱之為第四代微服務架構。在這個架構中,微服務進一步由一個應用簡化為微邏輯(Micrologic),從而對邊車模式提出了更高訴求,更多可複用的分佈式能力從應用中剝離,被下沉到邊車中,例如:狀態管理、資源綁定、鏈路追蹤、事務管理、安全等等。同時,在開發側開始提倡面向 localhost 編程的理念,提供標準 API 屏蔽掉底層資源、服務、 基礎設施的差異,進一步降低微服務開發難度。這個也就是目前業界提出的多運行時微服務架構(Muti-Runtime Microservices)。

OAM

2019 年末,阿里雲聯合微軟共同發佈了 Open Application Model (OAM) 開源項目,其主要目標是解決從 Kubernetes 項目到“以應用為中心”的平臺之間最關鍵環節——標準化應用定義。

OAM 的第一個設計目標就是補充“應用”這一概念,建立對應用和它所需的運維能力定義與描述的標準 規範。換而言之,OAM 既是標準“應用定義”同時也是幫助封裝、組織和管理 Kubernetes 中各種“運維能力”。

OAM 項目的第二個設計目標就是提供更高層級的應用層抽象和以應用關注點分離的定義模型。

相 比 於 傳 統 PaaS 封 閉、 不 能 同“ 以 Operator 為 基 礎 的 雲 原 生 生 態” 銜 接 的 現 狀, 基 於 OAM 和 Kubernetes 構建的現代雲原生應用管理平臺的本質是一個“以應用為中心”的 Kubernetes,保證應用平臺能夠無縫接入整個雲原生生態。同時,OAM 進一步屏蔽掉容器基礎設施的複雜性和差異性,為平臺使用者帶來低心智負擔的、標準化的、一致化的應用管理與交付體驗,讓一個應用描述可以完全不加修改的在雲、邊、端等任何環境下直接交付運行起來。
image.png

無狀態服務Serverless

當 BaaS 雲服務日趨完善時,Serverless 因為屏蔽了服務器的各種運維複雜度,讓開發人員可以將 更多精力用於業務邏輯設計與實現,而逐漸成為雲原生主流技術之一。Serverless 計算包含以下特徵:

全託管的計算服務,客戶只需要編寫代碼構建應用,無需關注同質化的、負擔繁重的基於服務器等基礎設施 的開發、運維、安全、高可用等工作;

通用性,結合雲 BaaS API 的能力,能夠支撐雲上所有重要類型的應用;

自動的彈性伸縮,讓用戶無需為資源使用提前進行容量規劃;

按量計費,讓企業使用成本得有效降低,無需為閒置資源付費。

服務網格Service Mesh

Service Mesh 是分佈式應用在微服務軟件架構之上發展起來的新技術,旨在將那些微服務間的連接、安全、流 量控制和可觀測等通用功能下沉為平臺基礎設施,實現應用與平臺基礎設施的解耦。這個解耦意味著開發者無需關注 微服務相關治理問題而聚焦於業務邏輯本身,提升應用開發效率並加速業務探索和創新。換句話說,因為大量非功能 性從業務進程剝離到另外進程中,Service Mesh 以無侵入的方式實現了應用輕量化。

Service Mesh的典型架構:
image.png
Service A 調用 Service B 的所有請求,都被其下的 Proxy(在 Envoy 中是 Sidecar) 截獲, 代理 Service A 完成到 Service B 的服務發現、熔斷、限流等策略,而這些策略的總控是在 Control Plane 上配置。

行業現狀:Service Mesh 目前在市場仍處於早期採用 (Early adoption) 階段。除 Istio 以外,Google 與 AWS 分別推出了各自的雲服務 Traffic Director、 App Mesh。這兩個 Service Mesh 產品與 Istio 雖有所不同,但與 Istio 同樣地採納了 Envoy 作為數據平面。此外,阿里雲、騰訊雲、華為雲也 都推出了 Service Mesh 產品,同樣採用 Envoy 技術作為數據面並在此基礎上提供了應用發佈、流量管控、APM 等能力。
DevOps

DevOps 就是為了提高軟件研發效率,快速應對變化,持續交付價值的的一系列理念和實踐,其基本思想就是 持續部署(CD),讓軟件的構建、測試、發佈能夠更加快捷可靠,以儘量縮短系統變更從提交到最後安全部署到生產 系統的時間。要實現持續部署(CD),就必須對業務進行端到端分析,把所有相關部門的操作統一考慮進行優化,利用所可用的技術和方法,用一種理念來整合資源。DevOps 理念從提出到現在,已經深刻影響了軟件開發過程。DevOps 提倡打破開發、測試和運維之間的壁壘,利用技術手段實現各個軟件開發環節的自動化甚至智能化,被證實對提高軟件生產質量、安全,縮短軟件發佈週期等都有非常明顯的促進作用,也推動了 IT 技術的發展。

DevOps四大原則:

文化(Culture)---要實施 DevOps,就首先要讓開發和運維人員認識到他們的目標是一致的,只是工作崗位不同,需要共擔責任。這就是 DevOps 需要首先在文化層面解 決的問題。只有解決了認知問題,才能打破不同團隊之間的鴻溝,實現流程自動化,把大家的工作融合成一體。

自動化(Automation)---DevOps 的持續集成的目標就是小步快跑,快速迭代,頻繁發佈。實施 DevOps,首先就要分析已有的軟件開發流程,儘量利用各種工具和平臺,實現開發和發佈過程的自動化。經過多年發展,業界已經有一套比較成熟的工具鏈可以參考和使用,不過具體落地還需因地制宜。

度量(Measurement)---通過數據可以對每個活動和流程進行度量和分析,找到工作中存在的瓶頸和漏洞以及對於危急情況的及時報警等。通過分析,可以對團隊工作和系統進行調整,讓效率改進形成閉環。度量首先要解決數據準確性、完整性和及時性問題,其次要建立正確的分析指標。DevOps 過程考核的標準應該鼓勵團隊更加註重工具的建設,自動化的加速和各個環節優化,這樣才能最大可能發揮度量的作用。

共享(Sharing)--- 要實現真正的協作,還需要團隊在知識層面達成一致。通過共享知識,讓團隊共同進步:可見度 visibility:讓每個人可以瞭解團隊其它人的工作。這樣可以知道是否某一項工作會影響另一部分。通過相互反饋,讓問題儘早暴露。透明性 transparency:讓每個人都明白工作的共同目標,知道為什麼要幹什麼。缺乏透明性就會導致工作安排失調。知識的傳遞 transfer of knowledge :知識的傳遞是為了解決兩個問題,一個是為了避免某個人成為單點,從而導致一個人的休假或離職,就導致工作不能完成。另一個是提高團隊的集體能力,團隊的集體能力要高於個人的能力。

雲原生未來發展趨勢

image.png

趨勢一:無處不在的計算催生新一代容器實現

隨著互聯網的發展到萬物智聯,5G、AIoT 等新技術的湧現,隨處可見的計算需求已經成為現實。針對不同計算場景,容器運行時會有不同需求。KataContainer、Firecracker、gVisor、Unikernel 等新的容器運行時技術層出不窮,分別解決安全隔離性、執行效率和通用性三個不同維度的要求。OCI(Open Container Initiative)標準的出現,使不同技術採用一致的方式進行容器生命週期管理,進一步促進了容器引擎技術的持續創新。其中,我們可以預見以下幾個細分方向的未來趨勢:

基於 MicroVM 的安全容器佔比將逐漸增加,提供更強的安全隔離能力。虛擬化和容器技術的融合,已成為未來重要趨勢。在公共雲上,阿里雲容器服務已經提供了對基於 KataContainer 的阿里雲的袋鼠容器引擎支持,可以運行不可信的工作負載,實現安全的多租隔離。

基於軟硬一體設計的機密計算容器開始展露頭角。比如阿里雲安全、系統軟件、容器服務團隊以及螞蟻金服可信原生團隊共同推出了面向機密計算場景的開源容器運行時技術棧 inclavare-containers ,支持基於 Intel SGX 機密計算技術的機密容器實現,如螞蟻金服的 Occlum、開源社區的 Graphene 等 Libary OS。它極大降低了機密計算的技術門檻,簡化了可信應用的開發、交付和管理。

WebAssembly作為新一代可移植、輕量化、應用虛擬機,在IoT,邊緣計算,區塊鏈等場景會有廣泛的應用前景。WASM/WASI 將會成為一個跨平臺容器實現技術。近期 Solo.io 推出的 WebAssembly Hub 就將 WASM 應用通過 OCI 鏡像標準進行統一管理和分發,從而更好地應用在 Istio 服務網格生態中。

趨勢二:雲原生操作系統開始浮現

Kubernetes 已經成為雲時代的操作系統。對比 Linux 與 Kubernetes 的概念模型,他們都是定義了開放的、 標準化的訪問接口;向下封裝資源,向上支撐應用。

image.png

服務網格的技術發展上數據平面與控制平面間的協議標準化是必然趨勢。大體上,Service Mesh 的技術發展圍 繞著“事實標準”去展開——共建各雲廠商共同採納的開源軟件。從接口規範的角度:Istio 採納了 Envoy 所實現的 xDS 協議,將該協議當作是數據平面和控制平面間的標準協議;Microsoft 提出了 Service Mesh Interface(SMI), 致力於讓數據平面和控制平面的標準化做更高層次的抽象,以期為 Istio、Linkerd 等 Service Mesh 解決方案在服務觀測、流量控制等方面實現最大程度的開源能力複用。UDPA(Universal Data Plane API)是基於 xDS 協議而發展起來,以便根據不同雲廠商的特定需求便捷地進行擴展並由 xDS 去承載。

服務註冊發現和配置中心的功能主要致力於解決微服務在分佈式場景下的服務發現和分佈式配置管理兩個核心 問題。隨著雲原生技術的發展,服務發現領域出現了兩個趨勢,一個是服務發現標準化(Istio),一個是服務下沉 (CoreDNS);配置管理領域也有兩個趨勢,一個是標準化(ConfigMap),一個是安全 (Secret)。

趨勢三:Serverless 容器技術逐漸成為市場主流

Serverless 和 容 器 技 術 也 開 始 融 合 得 到 了 快 速 的 發 展。通 過 Serverless 容 器, 一 方 面 根 本 性 解 決 Kubernetes 自身複雜性問題,讓用戶無需受困於 Kubernetes 集群容量規劃、安全維護、故障診斷等運維工作;一方面進一步釋放雲計算能力,將安全、可用性、可伸縮性等需求下沉到基礎設施實現。

趨勢四:動態、混合、分佈式的雲環境將成為新常態

上雲已是大勢所趨,但對於企業客戶而言,有些業務出於對數據主權、安全隱私的考量,會採用混合雲架構。一些企業為了滿足安全合規、成本優化、提升地域覆蓋性和避免雲廠商鎖定等需求,會選擇多個雲廠商。混合雲 / 多雲 架構已成為企業上雲新常態。Gartner 指出," 到 2021,超過 75% 的大中型組織將採用多雲或者混合 IT 戰略。"

阿里雲容器服務 ACK 去年 9 月份發佈了混合雲 2.0 架構,提供了完備的混合雲 Kubernetes 管理能力。
image.png

零售雲基於雲原生體系建設和挑戰

零售雲是雲原生應用實踐的良好土壤

CTO 魯肅提過:阿里經濟體是雲原生技術發展的最好土壤。而零售雲是阿里經濟體重要的一個分支,同時是阿里業務中臺對外輸出建設2B生態的重要戰略方向,所以零售雲無疑是雲原生應用發展實踐的極好土壤。當前,在這半年來實踐和應用了雲原生技術構建了產品-零售雲研發運營平臺(即雲上星環)。

服務化能力:商業能力API,商業能力二次開發SDK
彈性能力:站點PaaS部署發佈規劃建設中
自動化水平:一鍵拉起環境,一鍵部署平臺應用
可觀測性:一鍵日誌查詢和監控運維

零售雲基於雲原生的技術架構:

image.png
零售雲基於雲原生技術體系之上的分層架構:
image.png

零售雲DevOps實踐

研發運營平臺是零售雲的重要的研發、監控和運維一體化平臺,為零售雲業務系統研發提供完整的 DevOps 解決方案。
image.png

零售雲基於雲原生的接下來規劃和挑戰

個人觀點,我們需要基於阿里巴巴雲原生架構設計方法論:

一、組織視角

組織上需要從技術、業務和產品體系建設規劃好陣型,進行很好的排兵佈陣,需要更多的各領域的優秀人才加入建設,建議組織上重點需要內部各領域專有人才定向培養,內部同學有可持續發展通道才能留住人才、用好人才,用人做事在零售雲組織體系上尤其重要,而不是做事用人,否則項目就會把整個組織拖垮。

二、企業和業務視角

從 ISV 和客戶視角去看零售雲該怎麼構建產品和快速交付,而云原生技術體系將可以幫助快速構建 2B 生態的產品和技術體系。雲原生技術體系基本可以使用阿里雲的雲產品和技術基礎實施,面對不能滿足的場景需要考慮自建還是共建方式,我的理解是零售雲是業務和產品為導向的, 2B 交付有很多個性化的訴求,阿里雲的雲原生體系更多的是從通用角度考慮,對於個性化和差異化需求,零售雲需要進行補充和擴展雲原生技術/產品體系建設,諸如商業能力客戶側部署發佈不能依賴阿里云云效,服務 SLA 的標準差異化等。

三、雲原生技術架構視角

零售雲當前已經基於阿里雲 Kubernetes(ACK) 構建了零售雲中臺飛鶴版本,零售雲中臺基線版本在建設中。面向明年20家客戶交付,後年 100 家客戶交付,我們需要構建通用的技術底座和產品基線,以通用的技術底座和產品基線進行快速複製分支交付和版本管理,滿足獨立部署交付和 SaaS 交付兩種模式。當前構建獨立部署交付模式,務必需要考慮 SaaS 交付的產品和技術體系,在適當時機需要開始 PaaS 平臺的建設。

容器我們需要堅定的使用 Kubernetes(ACK),結合零售行業的特性,Serverless 不是強需求, ASK 短期可以不用。容器建設上需要考慮多租戶容器邏輯和物理隔離,多租戶容器運行時管理等。

微服務結合零售雲現狀,我們採用了 Dubbo 框架,建議可以走向微服務第三代架構,加強 SideCar 的規劃和建設,諸如多租戶數據隔離、權重路由、灰度路由、流量重放、服務偽裝、流量打標、流量調度、計量管理、計費管理都將是需要重點建設方向,可以架構設計上保證可擴展能力建設,這些能力根據我們前方項目打仗來適度調整優先級。

OAM 方面可以結合阿里雲的進展情況以及零售雲近三年項目交付的場景來看是否需要引入,我們的技術架構是可以支持可擴展這些基礎能力的。

服務網格 ServiceMesh 跟微服務架構聯繫起來,即 SideCar 的規劃和建設(需要看看阿里雲的 SideCar 是否滿足零售雲需求),lstio 可以解決開發人員和運維人員所面臨的從單體應用向分佈式微服務架構轉變的挑戰,部署交付是一個難點和挑戰,Istio 為可擴展性而設計,可以滿足不同的部署需求。

DevOps 是我們建設的一個重點,研發平臺、產品中心、支撐平臺(SideCar可以放在這裡建設)和站點 PaaS ,以及通用的 PaaS 交付平臺建設在中長期的意義非常關鍵,這個產品體系當前還是初步規劃階段,還需要驗證和實踐,建議需要更全面和更深度的探索後進一步完善我們的產品體系,避免產品的重複和來回廢棄折騰建設。商業能力是零售雲對外交付的輸出產物,商業能力建設和商業能力研發平臺建設是重心。當零售雲中臺的開發和版本演進變成一個常規化的easy事,商業能力對外交付變成快速可持續迭代的狀態,那麼我們的產品建設就初成形態了。

低代碼開發也是一個重要方向,期望能夠低成本交付以及客戶低成本開發運維,低代碼開發是非常關鍵,類似 Salesforce 的 Ligthnig 產品的建設,我們需要從多維度去建設,客戶基於商業能力二次開發需要低代碼開發, Maybe 基於元數據驅動建設零售雲產品體系是好的選擇,這個方向需要探索和結合場景實踐,低代碼開發需要根據場景選擇產品,有些場景適合使用紀元,有些場景適合使用 Astore ,有些場景適合使用類似斑馬產品,有些場景適合使用宜搭 Pro/ 宜搭,我們需要有一個底座,需要和雲原生的技術體系結合,然後更好更多的整合產品進來形成一個場景系列解決方案。低代碼開發的思考,我將在另外一篇文章中進行總結和思考。

文中部分內容摘錄自《雲原生架構白皮書》

Leave a Reply

Your email address will not be published. Required fields are marked *