一個優秀的雲原生架構需要注意哪些地方

2021-03-04 高可用架構
本文整理自騰訊雲容器產品,容器解決方案架構團隊的陳浪交在 Techo 開發者大會雲原生專題的分享內容——一個優秀的雲原生架構需要注意哪些地方。本文將會給大家分享雲原生架構的特點和以及實踐過程中的一些注意事項。從CNCF給出的雲原生官方的定義可以看出,雲原生架構其實是一種方法論,沒有對開發語言、框架、中間件等做限制,它是一些先進的設計理念的融合,包括容器、微服務、儘量解耦合、敏捷、容災、頻繁迭代、自動化等。

雲計算發展到今天已經比較成熟了,同時伴隨著開源社區的發展,有個明顯的趨勢就是雲服務商都在努力提供一個平臺無關的服務,也就是雲原生服務,強大如AWS也沒辦法阻擋,這個趨勢的演變也值得探討,由於時間有限,線下有機會可以交流下。由於雲原生技術跟平臺無關,使得用戶可以從適配各個雲服務商中解脫出來,從而更加聚焦在業務本身。方便讓大家對雲服務商的雲原生平臺有一個比較感性的認知,我們一起來看下雲原生服務的層級架構。

最底層是雲服務商的物理機、物理網絡以及物理存儲,之上是虛擬化服務、包括租戶隔離的網絡、計算資源以及分布式存儲。到了這層,雲服務商提供的產品雖然大同小異,但都還是平臺相關的。

關鍵就是在上一層的PaaS服務層,由它來適配各個廠商的計算、網絡、存儲資源,然後對用戶提供統一的訪問接口,具體起來就是雲服務提供商的Kubernetes服務在內部會去對接底層的存儲、計算網絡、再加上標準的mysql、redis等開源服務。這樣用戶對接的就是一個標準接口的PaaS平臺,就為我們的業務從本地開發環境無縫遷移到公有雲、甚至在雲服務商之間遷移、混合雲、跨雲容災等提供了技術前提。

結合以上介紹的背景以及雲原生的定義,我們再總結下什麼是雲原生架構,一個平臺無關的、自動化的、具備容災能力的敏捷的分布式業務系統。

接下來介紹,在構建雲原生服務時,有哪些注意事項以及一些個人的一點思考。

CNCF提供的雲原生的定義對雲原生做了經典概括,下述所講內容也在它的定義範疇之內,包括為什麼要做微服務拆分,為什麼要容器化、如何做CICD、如何避免故障、以及故障發生時我們有哪些應對措施,最後一起交流下如何檢驗我們的系統是否符合雲原生架構。

我們在討論微服務時,其實討論的是一個業務模塊的微服務拆分是否徹底,這決定我們業務模塊能否做到橫向水平擴容、整體能否成為一個分布式系統。比如一個商城系統,庫存服務邏輯變化了是否會影響到商品服務、訂單服務,到雙十一的時候,訂單服務需要大幅擴容,我們能否只擴容一個服務、跟這個服務相關的資料庫表而不影響其它服務。

因此,我們需要儘量減少服務之間的業務邏輯耦合、數據耦合,通過通信來進行數據共享,而不是通過共享數據來進行業務通信,使得我們在做必要的變更時,影響的範圍能降低到最小。

容器是雲原生架構的基礎,這是容器的標準化屬性來決定的,如果不使用容器,CICD、自動擴縮容就沒辦法做,我們不知道這些服務依賴什麼配置、程序如何啟動、如何停止,我們可以基於自身業務特性自己開發一套CICD系統、擴縮容系統,但是不是通用的,無法移植的。

有人說沒有貨櫃就沒有全球化,這裡的容器就是貨櫃,大家想是不是這個道理。容器還有很多優點,首先可以降低成本,K8s知道如何調度把容器到合適的機器上,使得集群節點使用率均衡、並且提高節點的資源使用率,可運維性也上來了。

接下來講下CICD,我們的服務容器化之後,CICD也很方便,圍繞容器,圍繞K8s,代碼變成容器鏡像、鏡像發布到不同環境測試,最後再到線上,藍綠、灰度等策略也很好做。

業務部署後,我們需要有一套問題發現、問題定位的手段,這樣大家才能安心。常用的手段有監控、tracing以及日誌系統。

對於監控,我們需要同時做好基礎監控以及業務監控,容器的CPU、內存、網絡、各種句柄等,業務層面,我們需要監控業務的服務質量,比較常見的就是業務的響應時間、錯誤率等。

通過tracing,我們可以找到具體某個請求在調用鏈路上的瓶頸,比如由於某個服務訪問一個不重要的旁路服務,導致延時增加了50ms,如果沒有tracing,很難發現這樣的問題,同時還可以把資料庫、緩存等中間件服務的訪問信息上報到tracing系統,便於排查一些類似資料庫慢查詢、hot key、 big key引起的問題。

日誌服務就更重要了,無論是性能問題、業務問題的排查都需要相應的日誌,業務容器化後,日誌查詢會更加複雜一些,因為容器不會固定運行在某個主機上,需要把容器的日誌採集到一個中心化的日誌服務,採集容器日誌時,有不同的方案,有的小夥伴選擇使用SDK在業務容器裡直接把日誌打到日誌服務,更多的是日誌先落盤,然後再通過agent採集到後端存儲,如果業務的log都統一輸出到標準輸出,建議部署daemonset的方式統一採集,如果容器的log輸出到某個文件,建議使用sidecar的方式會更靈活。同時建議把進程的啟動停止日誌以及業務日誌分開,在定位容器的啟動失敗等一些關鍵事件時更方便。關於日誌平臺,可以使用雲服務商的日誌服務,也可以自建,根據各自的需求而定。

在設計系統的時候,我們要時刻考慮到,故障是不可避免的,我們隨時要做好故障的預案。

常見的故障有網絡故障、硬體故障、系統故障、業務故障,其中網絡故障需要考慮業務部署的時候是不是要做好分區的隔離,比如可以在多個區做容災和流量切換的機制。對於硬體故障,需要考慮一臺母機掛了以後,能夠結合雲服務商的能力來保證同一個用戶下面的子機儘量打散;同時為避免單點故障,一個服務可以多一個副本,比如虛擬機掛了以後,可以做一定的冗餘。系統軟體建議提供雲服務商提供的系統內核,因為他做了很多優化。業務的故障,我們平時在發布過程中不要一次性馬上把業務發布上去,要流量一點一點逐步發到線上,同時要做好一個預案,假如新版本問題,能否馬上回滾到之前的版本。

融合了上面的一些的設計理念之後,我們的業務系統首先要做一定的冗餘,在多個可用區部署相同的服務,流量可能對外要提供兩個不同的入口,在入口處對流量進行分配,當出現導致網絡隔離的問題時,可以直接從前端進行流量切換,微服務和資料庫也做了拆分,使得每個服務都可以單獨做自動伸縮。整體看來,就是一個比較合理的分布式的業務系統。

關注業務而非基礎設施。這裡給大家講一個發生在我們這裡的一個真實的故事。

有一天一個客戶聯繫到我們說他出十萬塊錢,讓我們幫他們做一個事情,客戶在騰訊上部署了一個K8s生產集群需要升級到更高版本,他們發現K8s集群升級時,集群的容器會重啟一遍,但是對比騰訊雲上提供的TKE集群,從一個版本升級到另外一個版本,容器不需要重啟,對業務來說是無感知的、透明的。

接收到這個求助之後,我們跟客戶介紹了TKE的技術方案,整個升級過程需要做大量前置校驗工作,並且還要針對不同的K8s版本做patch、以及適配不同的Linux發行版等,這些工作在客戶的環境裡實現起來工作量太大,成本太高。K8s集群的維護是很複雜的,他介於IaaS跟PaaS之間,需要針對Linux內核、K8s內核以及依賴的網絡、存儲、計算資源做大量的優化,才能保證集群穩定、高效運行。對團隊來說,需要招聘業界頂級專家,否則當集群功能異常無法解決,可能造成業務大面積受損。

最後給大家介紹下,其他的業界專家提供的,怎麼從個人的環境裡面的服務遷移到公有雲上,他總結了一些必要的步驟,和上雲的一個成熟度模型,同時還有我們怎麼樣去驗證我們的業務系統是不是一個服務雲原生架構的系統,他提了很多問題,根據這些問題來檢驗我們的系統是否符合雲原生架構。由於演講時間已經超過了預定的15分鐘,這裡就不一條條來過了,感興趣的同學可以下來參考原始的資料,相信大家會有收穫。

我上面講的大部分也是方法論層面的內容,我們的系統從架構上要達到這些目標,這個過程工作量會很大,很複雜,我這裡先拋磚引玉。後面我們的嘉賓會詳細介紹他們在容器化實踐過程中的經驗。謝謝大家!

相關焦點

  • 分布式系統架構與雲原生—阿里雲《雲原生架構白皮書》導讀
    要理清分布式架構和雲原生的關係,先來歸納一下分布式架構與雲之間的關係,雲一般指的是一個提供資源的平臺,雲計算的本質是按需分配資源和彈性計算,而針對目前數據井噴並隨著物聯網應用的推進仍然接入量在呈指數上升的現狀下,分布式架構是最能夠滿足構建一個合格的雲平臺所應具有特質的架構方式。
  • 架構師成長計劃|如何利用雲原生構建一個企業級高可用架構?
    近幾年,「雲原生」這個詞被提起的頻率正不斷提升,而在新基建帶來的大量資金湧入,以及幾大網際網路巨頭紛紛入局的加持下,2020 雲原生進入了一個空前繁榮的時期。與此同時,在今年 8 月,AWS 推出自己的雲原生資料庫—Amazon Aurora,並成為 AWS 歷史上增長最快的雲服務。
  • 阿里雲發布雲原生架構白皮書 多維度評估雲原生架構成熟度
    7 月 21 日,由阿里雲 20多位雲原生技術專家共同編撰的《雲原生架構白皮書》正式對外發布。作為業界第一本全方位構建雲原生架構規劃與實踐全景圖的白皮書,本書在詳細闡述雲原生架構定義的同時,完整展示雲原生架構應用所需的演進路徑與設計規則,旨在幫助企業更好地理解與應用雲原生架構,助力企業數位化轉型升級。
  • 雲原生需要什麼樣的存儲 QingStor這麼說
    在2020中國數據與存儲峰會現場上,QingStor研發負責人王煜回顧了支撐雲原生架構的存儲所需要的諸多技術方案,也提出了對於雲原生存儲的三點看法,分享了已經落地的雲原生分布式存儲案例。雲計算的發展正是在一步一步的接近這一理想狀態,IaaS虛擬化提升了運維效率,PaaS讓開發人員不需要關注太多基礎架構層面的內容。而現在,關於應用開發、架構管理、運維的種種問題都寄希望於雲原生架構,有賴於容器平臺來解決。
  • 華為雲@ArchSummit2019:新計算架構,雲原生時代IoT 架構設計與Dev...
    同理,當你的網站系統需要承受千萬、億級的訪問的時候,這就涉及到架構師的核心技能:架構設計。無架構,不系統,架構是系統的關鍵。但一個成功的架構要如何煉成呢?7月12日,就在距離深圳第一高樓1公裡的大中華喜來登酒店,ArchSummit全球架構師峰會成功舉辦。
  • 雲原生應用架構轉型不好做?阿里雲這個平臺讓你一步到位!
    1.存量應用與雲原生應用長期並存的整合問題雖然雲原生可以覆蓋絕大部分應用場景,甚至以往比較難解決的問題在雲原生下都可迎刃而解,如營銷場景的應用。但有些應用場景在雲原生下並無決定性優勢,且存在遷移成本,加之傳統應用在系統架構上的約束,這些將導致存量傳統應用將和雲原生應用長期並存。如何整合這兩種應用的研發鏈路,以及基礎設施層面的互聯互通,是雲原生實踐帶來的一個挑戰。
  • 華為雲原生精英沙龍圓滿落幕,行業翹楚論道雲原生
    業務雲化轉型成為了企業創新的牛耳,雲原生成為了當下技術圈的寵兒,「雲原生Cloud Native」高速發展已成為業界共識。那麼雲原生的技術創新有哪些?相關的產業生態熱點話題如何理解?在企業數位化轉型的過程中,雲原生又有哪些成功的實踐經驗呢?華為雲原生技術精英沙龍對此進行了一場精彩的解讀。11月28日下午,華為雲生態夥伴X-Team雲原生技術精英沙龍在北京飯店圓滿落幕。
  • 「架構師專題」雲原生時代,架構師需具備的十大核心能力(上)
    10 年多的工作歷程,讓我有幸經歷了大範圍的技術演變,特別是雲計算和雲原生技術從朦朧到普及,對工程師和架構師的要求也發生了不少變化。趁著自己入職 11 周年的日子,結合我自己在百度的成長曆程,總結下我認為在雲計算特別是雲原生時代,對軟體架構師的核心能力要求,希望幫助大家在通往架構師的路上少走彎路。
  • 雲原生初學者入門必讀
    如果你不需要,也沒有明確定義的命名空間,那麼你的集群將在始終存在的默認命名空間中創建。Kubernetes 運行在節點 (node) 上,節點是集群中的單個機器。如果你有自己的硬體,節點可能對應於物理機器,但更可能對應於在雲中運行的虛擬機。節點是部署你的應用或服務的地方,是 Kubernetes 工作的地方。
  • 應用網易輕舟,德邦快遞核心系統入選雲原生應用十大優秀案例
    近日,在由中國通信標準化協會雲計算標準和開源推進委員會(TC608)主辦的OSCAR開源先鋒日雲原生專場活動上,「雲原生應用十大優秀案例」評選結果正式公布,採用網易輕舟雲原生平臺建設的德邦快遞轉運作業融合系統在眾多案例中脫穎而出,成功入選。這是德邦快速數位化轉型的核心業務系統之一,基於網易輕舟雲原生平臺解決了業務線技術棧割裂、業務響應周期長、資源利用率低、維護困難等問題。
  • 雲原生到底意味著什麼?
    一些與雲原生相關的流行的參照標準,比如微服務,以及更早的宣言,比如12要素應用,可能會讓你得出這樣的結論:雲原生是一種架構風格的描述,其他選擇都是遵從這一架構。這當然有一定的道理,雲原生架構確實存在。然而,為了在雲原生應用上取得成功,企業必須有一個更全面的視角。除了架構和基礎設施決策,還有組織和過程決策。這讓我們認識到一個關鍵問題:技術本身並不能獲得業務成果。
  • 雲原生生態大會Day2,網易數帆Service Mesh與百勝中國中臺架構實踐
    、頭部用戶的雲原生戰略與實踐,剖析雲原生技術帶來的機遇與挑戰,幫助雲原生技術使用者和愛好者加深對技術的理解,同時推進雲原生與企業IT的融合。在大會的第二天,網易數帆輕舟事業部微服務平臺負責人馮常健、網易數帆輕舟事業部資深解決方案架構師王必成與百勝中國系統架構師申海龍,分別介紹了網易數帆和百勝中國雲原生相關的技術實踐與經驗心得。
  • 乘風破浪的雲原生
    為了實現這樣的速度,就需要充分利用雲的強大能力,從雲技術中獲得更高的可用性與可擴展能力,利用雲來提升發布和運維的效率。而要做到這些,不僅僅是基礎設施和平臺的變化,應用也需要做出改變,擯棄傳統的土方法,在架構設計、開發方式、部署維護等各個階段和方面都基於雲的特點來重新設計,從而建設全新的雲化應用,即雲原生應用。
  • 為什麼雲原生+分布式是資料庫的未來?
    節約成本 建立一個數據中心是一項獨立而完備的工程,需要大量的硬體投資,還需要能可靠管理和維護數據中心的訓練有素的運維人員。此外,持續的運維會給你的財務帶來相當大的壓力。而使用雲原生資料庫,則可以以較低的前期成本,獲得一個可擴展的資料庫,實現更優化的資源分配。
  • 衝量網絡|雲原生技術
    雲原生,顧名思義,就是雲與原生兩個部分的結合,雲原生指的是一個靈活的工程團隊,遵循敏捷的研發原則,使用高度自動化的研發工具,開發專門基於並部署在雲基礎設施上的應用,以滿足快速變化的客戶需求。這些應用採用自動化的,可擴展的,和高可用的架構。這個工程團隊通過高效的雲計算現網的運維來提供這一應用服務,並且根據線上反饋對服務進行不斷地改進。
  • 雲原生時代的流量入口:Envoy Gateway
    那麼,優秀「畢業生」Envoy 能否成為雲原生時代下流量入口標準組件?那麼問題來了:同樣是流量入口,在雲原生技術趨勢下,能否找到一個能力全面的技術方案,讓流量入口標準化?總體來說,Envoy 是一個功能與性能都非常優秀的「雙優生」。在實際業務流量入口代理場景下,Envoy 具備先天優勢,可以作為雲原生技術趨勢流量入口的標準技術方案:1.
  • 不確定的2020,與確定的雲原生2.0
    雲原生技術是中國企業應對市場不確定性的關鍵  對今年的全球資本市場而言,2020 年突出一個不確定性。  因此,探索出一個貼合當前市場用戶的產品使用邏輯、符合不斷加速的產品迭代速度、滿足後臺能夠快速擴容、能夠更加快速地洞察用戶需求、可以迅速調整自身產品及服務模式的新型架構設計模式就顯得尤為重要。  而雲作為當前承載萬物生命力的新型基礎設施平臺,改造與優化的重擔,自然落在了雲上。
  • 雲原生攪動數位化轉型戰場 靈雀雲綻露鋒芒
    雲計算市場亦是如此,雲原生已經上位。前不久,戴爾科技峰會(DTF)在業內引起巨大轟動,在這場轟動之中,更加值得注意的是未來就緒企業雲聯盟(FRECO)的擴編。在這次擴編中,有一個名字吸引了大家的目光,那就是:靈雀雲。在FRECO中,靈雀雲作為唯一一家以容器技術為載體的本土PaaS企業入選本聯盟。
  • 雲原生發展趨勢淺談
    只有對應用程式架構進行升級改造,才能構成「雲應用程式」。基於雲化架構的特點,定義一條能夠讓應用最大程度利用雲的能力、發揮雲的價值的最佳路徑成為行業迫切的需求,「雲原生」應運而生。雲原生應運而生,技術範疇漸成體系不同的組織對於雲原生有不同的理解和定義。
  • 雲原生解決了什麼問題?
    雲原生是MattStine根據多年的架構和諮詢經驗總結出來的一個思想集合,隨時間推進不斷完善,囊括了DevOps、持續交付、微服務、容器化等主題。從本質上講,雲原生是隨著虛擬化技術和分布式架構的成熟與普及,以及應用上雲的大趨勢下,讓應用更高效的融合雲技術優勢的一種理念。是應用上雲後,在雲上的開發、部署、維護、架構都徹底基於雲技術而做出迭代,使之具備傳統IT不具備的能力的浪潮。