雲原生十二要素與用友技術中臺實踐

雲原生12要素
  雲原生十二要素是由Heroku創始人AdamWiggins首次提出並開源,並由衆多經驗豐富的開發者共同完善,這綜合了他們關於SaaS應用幾乎所有的經驗和智慧,是開發此類應用的理想實踐標準。
雲原生12要素  1.基準代碼
  每個可部署app在版本控制系統中都有一個獨立的代碼庫,可以在不同的環境中部署多個實例。
  2.依賴
  App應該使用適當的工具(如Maven、Bundler、NPM)來對依賴進行顯式的聲明,而不該在部署環境中隱式的實現依賴。
  3.配置
  配置或其他隨發佈環境(如部署、staging、生產)而變更的部分應當作爲操作系統級的環境變量注入。
  4.後端服務
  後端服務,例如數據庫、消息代理應視爲附加資源,並在所有環境中同等看待。
  5.構建、發佈、運行
  構建一個可部署的app組件並將它與配置綁定,根據這個組件/配置的組合來啓動一個或者多個進程,這兩個階段是嚴格分離的。
  6.進程
  一個或者多個無狀態進程之間不需要共享任何狀態信息。任何需要的狀態都置於後端服務(例如cache、對象存儲等)。
  7.端口綁定
  該應用程序是獨立的,並通過端口綁定(包括HTTP、負載均衡)導出任何/所有服務。
  8.併發
  併發通常通過水平擴展應用程序進程來實現。
  9.易處理
  通過快速啓動和優雅的終止進程,可以最大程度上的實現魯棒性。這些方面允許快速彈性縮放、部署更改和從崩潰中恢復。
  10.開發/生產等價
  通過保持開發環境、測試環境和生產環境儘可能的相同來實現持續交付和部署。
  11.日誌
  不管理日誌文件,將日誌視爲事件流,允許執行環境通過集中式服務收集、聚合、索引和分析事件。
  12.管理進程
  行政或管理類任務(如數據庫遷移),應該在與app長期運行的相同的環境中一次性完成。
  
技術中臺基於十二要素的實踐

1.基準代碼
  作爲雲原生十二要素的第一條,基準代碼首先指明瞭雲原生模式下的開發原則,而用友技術中臺無論是自身的架構設計還是幫助企業構建企業業務開發上都是以該設計原則爲基準。核心要素有以下幾點:
  首先使用代碼倉庫進行應用代碼的統一管理,這個要求是基礎的,它使得開發的代碼可以通過代碼倉庫管理對應的版本。在用友技術中臺中應用在構建過程中,可以爲每個應用開發配置對應的git代碼倉庫,讓應用開發和代碼倉庫管理有效的連接起來。
在這裏插入圖片描述
  除git代碼倉庫,用友技術中臺支持dockerfile的應用構建方式,這樣使得企業在代碼倉庫的選擇上可以多元化,幾乎可以支持linux下的所有代碼倉庫。
  再次要做到一份基準代碼對應一個應用。如果一份基準代碼可以編譯出多個應用,那麼說明多個應用的代碼是揉在一起的,應該考慮將基準代碼進行拆分,這也是微服務的設計原則的體現之一。在用友技術中臺的每個應用組件也是保證一份代碼對應單一的組件應用,每個組件的關係拓撲如圖所示:
在這裏插入圖片描述
  最後的要點是一份基準代碼可以多份部署,這也是容器所倡導的一次構建在任何地方可以運行的要素之一。在用友技術中臺中應用的基準代碼會以流水線的形式保存起來,每個流水線有對應的版本,使用者可以根據對應的流水線發佈到多個資源池環境和主機上。這樣可以讓使用者在維護好流水線版本的同時,讓一份基準代碼部署到多個環境,並且保證基準代碼的唯一性。在這裏插入圖片描述
  2.依賴
  在不使用雲原生的情況下,如果出現軟件應用的依賴性問題,我們可以通過手動進行處理,比如手動安裝一下依賴庫等。但是在雲原生環境下,往往每天都伴隨大量的構建和發佈工作,所維護的應用也越來越多。這種手動處理的方式已經無法解決這類問題。而使用容器技術可以解決上述的環境依賴問題。通過顯示聲明依賴關係,在dockerfile中將應用和依賴打包成容器鏡像,在用友技術中臺中,它的底層核心就是容器技術,在技術中臺中發佈的應用也是容器化的,我們可以通過在構建的時候使用dockerfile來聲明應用的依賴關係。
在這裏插入圖片描述
  在dockerfile中可以聲明基礎操作系統鏡像,而RUN的每個層可以是應用運行的對應依賴關係,同時也可以是依賴的環境變量等。
  3.配置
  有些時候開發者往往把代碼和配置文件放置一起,這樣會導致一些問題,比如配置文件得敏感信息像密碼、證書等會被泄露,也不利於代碼在多套環境的區分。隨着配置文件的越來越多,需要一個統一管理環境配置的功能模塊,在用友技術中臺中有單獨的配置管理模塊,方便使用者管理應用的相關配置。
在這裏插入圖片描述
  使用者可以在構建應用的時候提取出應用的配置信息,並且可以更改配置,在應用部署的時候啓用配置。
在這裏插入圖片描述
  4.後端服務
  對於雲原生應用來說,在使用像數據庫、緩存系統和日誌收集等後端服務時,不建議將這些後端服務放到應用本地使用,因爲雲原生應用本身要求是無狀態化的,這樣就要求後端服務不應該放在應用本地。在用友技術中臺中應用可以通過添加變量的方式,配置後端服務,通過這種方式可以使得應用可以橫向擴展,實現容器應用的可靠性和擴展性。
在這裏插入圖片描述
  5.構建、發佈、運行
  在用友技術中臺中構建、發佈、運行主要通過流水線模塊實現,本次構建的數據和歷史信息都會保存在系統中,而且構建出來的容器鏡像具有唯一的tag標識,發佈的唯一性可以具有溯源性並且可以在出現故障時通過標識進行回滾操作。
在這裏插入圖片描述
  在持續集成和持續步驟中,技術中臺將每個環節串連在流水線配置中。CI的英文名稱是Continuous Integration,中文翻譯爲持續集成。CI中,開發人員將會頻繁地向主幹提交代碼,這些新提交的代碼在最終合併到主幹前,需要經過編譯和自動化測試流進行驗證。CD可對應多個英文名稱,持續交付Continuous Delivery和持續部署Continuous Deployment。在持續交付中,每個階段(從代碼更改的合併,到生產就緒型構建版本的交付)都涉及測試自動化和代碼發佈自動化。在流程結束時,運維團隊可以快速、輕鬆地將應用部署到生產環境中或發佈給最終使用的用戶。技術中臺CI/CD的運行效果如下:
在這裏插入圖片描述
  6.進程
  作爲無狀態進程就要求應用進程的內部不要保存狀態信息,而這些進程的狀態信息應該保存在數據庫和分佈式緩存系統中。在用友技術中臺中,每個容器應用的狀態信息都通過kubernetes進行維護,管理端通過kubernetes提供的的API進行調取應用進程的狀態信息,而應用進程的狀態信息會保存在kubernetes的etcd中。這樣避免應用數據的直接共享的模式,方便應用的橫向擴展和解決串行的單點問題。
在這裏插入圖片描述
  7.端口綁定

在雲原生模式下,每個應用都應該可以獨立綁定對應的端口。因爲在雲原生模式下,每個應用都會經歷多次的重新部署、重啓和橫向擴展的操作,而面對這些操作容器應用的對外的URL地址應該保存不變。例如在用友技術中臺中,每個應用都有獨立的負責均衡配置,它是不變的伴隨着應用的整個生命週期。
在這裏插入圖片描述
  同時在每個應用的屬性標籤中,可以爲每個容器應用綁定應用端口,它支持USER模式和HOST模式兩種方式,同時支持TCP和HTTP兩種協議類型。
在這裏插入圖片描述
  8.併發

在雲原生模式下,這裏指的併發更多說的是應用進程的橫向擴展能力,當業務訪問壓力增大的時候,可以實現應用的快速水平擴展。在用友技術中臺中,對應容器應用不但可以實現手動的方式指定實例個數完成應用進程的快速擴縮,也通過自動擴縮來讓技術中臺自動化完成擴縮任務。
在這裏插入圖片描述
  開啓自動擴縮模塊,技術中臺會根據應用實例的實時應用負載水平判斷實例的擴縮個數。
在這裏插入圖片描述
  9.易處理
  在雲原生模式下,易處理主要說的是應用的快速啓動和優雅終止,通過應用的快速啓動和停止,實現業務應用的快速恢復和在故障後的重新部署,是系統集羣健壯性的體現之一。在用友技術中臺中,每個應用是獨立的一個容器,而容器技術的一個重要特性就是可以實現應用進程的快速啓動和停止。同時技術中臺也可以操作每個容器應用的重啓或銷燬的生命狀態。
在這裏插入圖片描述
  10.開發/生產等價

在雲原生模式中,開發和生產環境的等價要求環境的一致性,這樣可以儘可能的避免由於環境不一致導致的一些生產環境的問題。儘量的縮小開發環境和生產環境的差異,可以使得在雲原生環境下每天可以進行成百上千次的構建任務和發佈任務,避免差異性導致的諸多問題。同時這個原則要求開發者不能只關心開發環境的自己的代碼,更要密切關注線上環境代碼的運行狀態,這個也是企業DevOps文化的重要意義。
在這裏插入圖片描述
  在技術中臺中,每個應用構建的操作在流水線中執行,而由於容器鏡像的一致性可以使得無論是開發環境還是生產環境是等價的。同時在開發環境中的容器鏡像可以通過推送鏡像的方式直接發佈到生產環境。
在這裏插入圖片描述
  11.日誌
  在雲原生設計中要求應用日誌應當作爲事件流來處理,允許執行環境通過集中式服務收集、聚合、索引和分析事件。不建議將日誌文件直接輸出到本地文件,而應該以事件流的形式輸出到標準輸出STDOUT和標準錯誤輸入STDERR,然後進行捕獲事件流並轉發到相關分佈式日誌處理系統中。
  在用友技術中臺中的日誌處理過程可以理解爲日誌生命週期的治理過程,分別爲產生、收集、存儲、處理、銷燬這些過程。
在這裏插入圖片描述
  根據雲原生日誌設計原則,在技術中臺中每個容器應用可以將日誌的標準輸出STDOUT和標準錯誤輸入STDERR傳輸給收集端,通過data-log組件收集,具體實現如下:
在這裏插入圖片描述
  日誌與事件:可以在容器應用的日誌與事件選項卡中查詢對應日誌信息。
  實時日誌和歷史日誌:可以分別對實時日誌、歷史日誌兩個維度來查看應用日誌信息。
  關鍵詞檢索功能:可以通過輸入關鍵字按照自己需要檢索對應的日誌信息。
在這裏插入圖片描述
  系統事件:可以在系統事件選項卡中查看容器docker在主機上的運行狀態比如:容器的啓動、停止、pod創建、pod殺掉、鏡像拉取等。
在這裏插入圖片描述
  人員操作:可以在人員操作選項卡中查看平臺用戶對該容器應用的操作,比如應用重啓,實例擴縮、實例強殺等操作。
在這裏插入圖片描述
  彙總應用日誌功能:可以通過選擇對應產品線和產品同時選擇多個應用進行查詢對應的日誌信息。
  查詢歷史日誌信息:可以通過不同的開始時間和結束時間選擇對應時間段內所記錄的日誌信息。
  關鍵詞檢索功能:可以通過輸入關鍵字按照自己需要檢索對應的日誌信息。
  12.進程管理
  在雲原生十二要素中關於進程的管理方式不建議直接通過SSH方式,而開發者經常會執行一些管理或維護應用的計劃任務,比如數據庫管理員需要定期執行SQL更新。在用友技術中臺可以將數據庫的SQL更新操作放置在流水線執行,如下所示:
在這裏插入圖片描述
  將SQL命令通過git代碼倉庫進行版本管理,讓使用者通過技術中臺流水線的能力執行更新SQL的操作,同時可以設置定時執行的策略來觸發流水線更新。
在這裏插入圖片描述
  並且配合技術中臺配置文件的管理功能,將更新腳本寫入配置文件中,方便使用者的更新腳本的變更。
在這裏插入圖片描述
雲原生架構下給企業帶來的優勢
  可以看到用友根據雲原生十二要素理論打造出技術中臺,通過技術中臺可以幫助企業快速擁抱雲原生,通過企業雲原生的技術體系落實,優化自身業務系統,可以更加快速的創新和低成本試錯,給整體架構能力帶來極致彈性,從而更好的服務於業務。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章