成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

騰訊IT老兵:云端微服務架構下的運維思考

原創
運維 系統運維
本文圍繞微服務架構的特點與發展趨勢,結合微信業務在微服務架構上的探索、應用、改進與提升,闡述運維如何應對業務在微服務架構環境下的各種挑戰。

【51CTO.com原創稿件】互聯網技術一直在快速演進當中,同時移動互聯網與云時代的來臨,讓微服務架構應運而生。

[[226446]]

2017 年 12 月 1 日-2 日,由 51CTO 主辦的 WOTD 全球軟件開發技術峰會在深圳中州萬豪酒店隆重舉行。

本次峰會以軟件開發為主題,熊普江先生在“微服務與容器技術”專場與來賓分享了"云端微服務架構的運維思考"的主題演講。

本文圍繞微服務架構的特點與發展趨勢,結合微信業務在微服務架構上的探索、應用、改進與提升,闡述運維如何應對業務在微服務架構環境下的各種挑戰。

如今互聯網技術呈現出兩方面的發展趨勢:云化的趨勢和微服務。兩者相結合則更富挑戰性,本次我將以微信為例和大家一起探討。

本次分享分為三個方面:

  • 微服務架構的演進
  • 微服務架構的特點與趨勢
  • 微服務架構運維的解決之道

微服務架構的演進

智能手機在移動互聯網中的快速普及,中國互聯網中心的相關調查表明:通過手機上網的用戶比例已經高達 93% 以上;而整個中國的互聯網滲透比例也已超過六成。

因此,我們所處的移動互聯網時代的開發呈現出如下的特征:

移動互聯時代全面來臨

雖然在工作時仍然離不開電腦,但是我們使用手機來連接互聯網的場景更為頻繁。

由于手機的運算能力有限,手機更多地被用于展示或顯示內容。大量功能化的計算處理顯然需要依賴于云端。所以我們實際上處于一個瘦客戶端的時代。

隨著我們停留在移動互聯網上的時間劇增,大量的數據也隨之產生,特別是相較于傳統 PC 時代,增長了數十倍、乃至數百倍。

這些大量的數據同樣也需要在云端進行處理,因此我們對于云服務的能力也會有一定的要求。

硬件技術發展迅速,服務器性能越來越大。如今硬件的處理能力(特別是 GPU)發展迅速,服務器的處理能力也得到了迅速提升。

這都導致了單個應用或者單個功能模塊很難消耗掉整臺服務器的資源。為了提高多臺服務器的資源利用率,我們需要將多個服務部署到同一臺機器之上。

容器技術興起,輕量協議支持成熟應用

在軟件方面,新興的技術包括:容器、Docker 和諸如 restful 之類的輕量協議,都加快了我們的開發與部署效率。

應用的云化逐漸普及

為了將服務放到云端,我們不再需要去買各種機器,而直接在云上運用各種資源來部署我們的服務。

該領域不僅是互聯網企業的熱點,其他傳統企業,包括一些金融和醫療企業也都在往云端尋求探索方向。

開發模式轉變

傳統的單體式集中開發模式為:前端 Web→管理系統→數據庫→操作系統→底層服務器。

這種從上到下的“縱切”方式勢必導致了對于技術人才、硬件、網絡、軟件、以及技術的大量需求。

這些對于初創型企業來說,會存在全能人才難招、開發復雜、遷移與擴容難度大、無法快速的響應等困難。

因此我們需要在開發和運維方面轉變思路,通過“橫切”將底層資源和中間平臺轉包給 IaaS 和 PaaS 平臺,僅集中精力在前端的業務應用上。

精細化運營轉變

由于越來越多的服務都要經由云端處理,以通過各種容器來實現快速部署與擴展,因此我們必需使用精細運維,來實現對于資源的充分利用。

基于上述移動互聯網時代的開發特征,一種適用于快速變化需求的微服務架構應運而生,同時它也催生了 DevOps 的概念。

它是一種敏捷的開發模式架構,能夠讓我們迅速地實現:編寫規劃→編寫代碼→構建測試→發布上線→部署應用。

近兩年,微服務這個術語漸成熱門詞匯,但它不是一個全新架構,更不是一個包治百病的架構。

那么,微服務架構與單體式架構相比優勢體現在哪?這些優勢又給開發模式、運維帶來哪些挑戰?

微服務架構的特點與趨勢

微服務架構的特點與趨勢如下:

  • 一種架構風格。微服務架構實際上并非一種新的技術或能力,而只是一種架構的風格。它大約出現在 2014 年,但是微信早在 2011 年就開始使用該架構風格和思路進行開發與運維了。
  • 強調服務的顆粒度、敏捷性和健壯性。微服務能夠實現快速地開發、部署、和穩健地運行。
  • 單一、獨立。微服務專注于解決單一問題,因此非常獨立。該獨立性體現在完成某個功能不依賴其他的服務,即如果該服務出錯,并不會影響到其他服務。
  • 解耦,去中心化,組件化封裝。既然相對獨立,那么業務之間就是一種解耦的關系。縱觀整個應用之中的各個服務,雖然重要程度有所區別,但是沒有一個服務必須以微服務為中心,因此它具有去中心化的特點。

為了能在與其他的微服務打交道時使用統一的接口,微服務也會進行各種封裝。

  • 多個微服務組合完成相對復雜的業務系統。我們能夠快速地將各個微服務組合到一起,構建出一個能夠達到特定需求且相對復雜的業務系統。
  • 高性能,高容錯。由于每個服務都相對獨立,就能夠在保持系統穩定的前提下,***地追求每個微服務的性能。在分布式的結構中,單個微服務的出錯(比如硬件出現問題)不會影響到其他的微服務。

另外在多個微服務并存時,同一個服務會有多個正在運行當副本,因此具有高容錯性。

微服務架構解析

微服務架構解析:

  • 適用于構建復雜的應用,通過運用微服務,可以將各種模塊如搭積木一般組合成相對復雜的應用。
  • 分布式,由于各個微服務之間都遵守相同的協議,可以實現多個微服務的分布式部署。
  • 分別部署,由于每個微服務都具有單一且獨立的功能,因此服務模塊的數量顯然是龐大的,光靠人工完全無法實現分開部署。隨著微服務的數量呈幾何基數增長,我們需要用一套自動化的工具來進行快速地部署。
  • 服務組件,微服務一般分為兩種不同的類別:一是基礎模塊或稱公共模塊。如:用戶登錄、推送(Push)服務模塊;另一是功能性模塊,如:實現發消息或發朋友圈的模塊。
  • 微服務的邊界,雖然用的是同一種語言,但是可以進行獨立地開發與測試,因此每個微服務在被發布的時候不會跟其他的微服務共享數據存儲或內存空間。每個微服務都有自己的獨立空間。
  • API 層,如上圖所示,微服務與外界有一個接口層,它們遵守共同的協議進行通信,如 RPC 或 Restful 等,大家可以自由選擇各種技術。
  • 微服務架構的擴展,為了應對未來可能對現有微服務的功能性增加,或是要增加其他業務場景,我們一般不在原有微服務上著手增加,而是新建另一個微服務,并獨立部署。

微服務架構的優勢

微服務架構有如下幾個明顯的優勢:

  • 單個微服務更易理解,方便開發與維護。相比以往,只要定義好了一個微服務,我們在開發、維護和部署時就能方便地理解其功能意圖。
  • 應用解耦、對應用整體應用交付而言,開發迭代更敏捷。我們可以單獨對一個微服務進行升級,而不會影響其他微服務的功能。
  • 技術選擇更加自由,微服務不再需要限定某個統一的技術實現。每個程序員都有自己的技術偏好,有人喜歡 Java,也有人喜歡 PHP 或是 C。
  • 以往大家不得不根據統一技術框架,遵循一致的開發語言。如今每個微服務都可以用不同的語言來實現。
  • 微服務獨立部署,應用更穩定。由于每個微服務都不影響其他的微服務,因此單獨部署會給整體應用帶來更好的穩定性。
  • 架構擴展更容易、更快速。如右圖所示,我們從三個維度進行架構設計。其中 X 軸表示可以放置多個副本;Y 軸是通過分層來擴容服務;而 Z 軸是對服務進行數據分區。
  • 這說明我們的微服務能從 X、Y、Z 三個方向去擴展整體架構。

微服務架構帶來的挑戰

下面是談談引入微服務架構時會碰到的各種挑戰:

  • 開發模式需要相應調整,首先要從“縱切”的開發思維轉變成“橫切”的思維。
  • 跟以往相比,微服務的數量會大幅增加。
  • 數據增多導致了容器的編排、配置與資源的管理更為復雜。相對于過去只需管幾臺機器而言,如今如何搭配和配置各種微服務會變得更復雜。
  • 業務的容量管理變得更加困難,資源利用效率難以提升。以前我們只需要監控某幾臺機器的使用率。
  • 如今,由于容器存在多臺服務器上,就需要對容器里各種服務的資源利用率和容量進行綜合管理,同時對它們的提升難度也更大了。
  • 監控的顆粒度增多,依賴及關聯關系更加復雜。由于微服務的增多,監控的顆粒也相應有所增加。如上圖右側所示,顆粒之間的關聯關系也會變得更加復雜。
  • 在微服務出現故障時,我們要有快速調度的能力,因此調度需要更精細化。

微服務架構下的運維思考

下面是我在微服務架構下的一些運維思考:

  • 容量管理,即:如何在細粒度的狀態下,更有效地管理數量龐大的微服務。
  • 容器編排與配置管理,如何合理地實現容器編排和配置管理?
  • 服務監控,如何有效地監控數量龐大的微服務?
  • 故障恢復與業務調度,出現故障時如何進行業務調度?
  • 快速擴展,由于春節紅包或直播所導致的業務爆炸式增長或觸發時,如何快速擴容?
  • 資源的利用效率,運維人員需要思考如何在保障業務穩定發展的同時,控制好成本不會大幅增長,資源不會出現簡單堆砌。

微服務架構運維的解決之道

下面先以微信為例,講解它使用到微服務架構的地方,接著介紹我們在微服務容量管理方面的具體工作,然后給大家分享在監控部署調度上值得參考的地方,***探討我們在資源利用率上的精細化運營。

微信為什么要微服務云化

自 2011 年誕生以來,微信一直強調使用快速迭代、試錯、糾正的敏捷開發模式,也就是我們常說的“小步快跑”方式。

在微信內部有四個“法器”,分別是:

  • 大系統小做
  • 讓一切可擴展
  • 有基礎的組件
  • 能夠輕松地上線

大系統小做,不僅涉及到將海量系統中的模塊變得更清晰,而且在物理環境中實現分開獨立的部署,以便快速發現問題。

例如:一些公共服務的注冊登錄、LBS 的邏輯、和類似微信的搖一搖等方面,我們都將這些邏輯獨立了出來。

讓一切可擴展,此處強調兩個方面:

  • 網絡協議的擴展。通過向前兼容,以應對將來可能出現的升級。
  • 數據存儲的擴展。傳統的 MySQL 之類的結構化數據存儲,對于后期頻繁增加字段的擴展性并不方便。因此微信采用的是 Key-Value 的非結構化數據結構,以方便存儲上的擴展。

在 2013 年到 2014 年間,微信的微服務模塊數已超過了 5000 個,我們碰到過兩個問題:

  • 如果在一臺硬件能力超強的服務器上只部署一個模塊,則勢必造成資源浪費。因此我們采用了混合部署,在一個服務器上部署多個服務。
  • 多個服務在一臺服務器上搶資源,從而影響了服務的穩定性。因此我們采用了容器隔離。

有基礎的組件,把復雜的邏輯固化下來,成為基礎性軟件。在微信的后臺會有幾種不同的基礎組件,大致包括:

  • Svrkit,Client/Server自動代碼生成框架,實現 10 分鐘搭建內部服務器。
  • LogicServer,邏輯容器:隨時添加新邏輯。
  • OssAgent,監控/統計框架:所見即所得的監控報表。
  • 存儲組件,屏蔽容災/擴容等復雜問題。

微信微服務架構的應用與管理

我們對微信里的各個微服務應用場景進行了定義:

  • 服務布局,就是將用戶運用不同的方法與服務維度進行“切割”和布局。
  • 引入各種容錯機制,如:當服務訪問中斷時,可自動重試;當服務運能不夠時,有過載保護和負載均衡;在必要時,可隨時關閉服務,實現柔性可用。
  • 容量管理與監控。
  • 部署管理與調度。
  • 精細化運營。

我們對微服務也進行了技術分層:

  • 接入層,主要實現對用戶的切分,以識別不同的運營商和不同的地域。
  • 邏輯層,在微信中,微服務被更多地應用在邏輯層。
  • 存儲層,主要應對海量數據,以及獨占資源的情況。

服務布局

微信采用多地自治、園區互備的架構,城市之間的數據是相對獨立的。除了少數賬號全球同步以外,大部分業務都以電子郵件式的服務,各自有自身的環境在流轉和通信。城市間的后備則使用公網的 UDP 通道。

在城市內,使用三園區的架構,每個園區都是一套獨立的系統,從接入、邏輯、存儲每一層都是完全獨立的,并且可以互相為對方提供備份,多園區形成整體服務規模。

在園區內,由多機組成的 set,互為容錯,包含它們的網絡與電力也是獨立的。這樣的服務布局,不僅滿足微服務架構,也考慮了容災能力。

過載保護

過載保護是一個非常核心的微服務架構特性,目的是確保核心服務可用。

它包括三個層次:

  • 服務要有輕重分離。即一個服務里不能既有重的操作,又有輕的操作。
  • 隊列控制。我們通過監控,來了解一個請求在隊列中等待的平均時間,從而決定是否要啟動拒絕或是限流。例如:對超過設定閥值的流量進行限制,確保服務可用。
  • 組合命令式。由于微服務的調用鏈以及層次的增多,后端服務也會有多種。假定后端有兩個服務(A 服務與 B 服務),而前端調用需要依賴于 A、B 服務的組合結果,那么單個 A 或者單個 B 的輕微過載,就可能導致前端服務不可用。

在這種情況下,需要有一個反饋機制。如上圖所示,整個系統基于反饋,把整個拒絕的信息全程傳遞。上圖右側是幾個典型的服務,從一個 CGI 調用一個后臺服務,再調用另一個后臺服務,系統會在 CGI 層面把它的重要程度往下傳。

回到剛才前端調用 A、B 服務的例子,使用這樣一種重要程度的傳遞,就可以直接拒絕那些相同用戶的 20% 的請求,有效地解決單個服務輕微過載的問題。

容量管理

為了在微服務架構下實行較好的容量關系,微信做到了三個前提:

  • 微服務間資源進行隔離管理
  • 微服務的過載有自我保護能力
  • 服務的快速伸縮操作

容量管理是為了更好地進行業務支撐,因此我們構建了需要支撐的業務與其容量之間的模型關系,從而有效地評估出那些有效的微服務所對應的容量。

如上圖所示,下方的灰色線表示實際業務的容量,即業務量,如:請求量、調用量、以及用戶數。

紅色線表示在機器擴容或升級之后的現網容量。綠色線則表示***容量,它比現網容量要高出 20%,以保證只是偶爾被觸發。

當業務需求超過現有容量時,業務就可能出現不穩定或者無法提供服務的情況。而擴容則往往涉及到復雜的數學運算。

因此由于現實中資源的采購、部署與上架存在周期,不大可能完全達到該綠色曲線。

隨著公有云被廣泛地運用,我們基本上能夠實現及時獲取容量資源。當然要保證具有較好的業務支撐的話,應當具有容量的發現能力和適當的處理效率。

在實際進行容量評估的時候,可能會碰到如上圖所示的“坑點”:我們可能會將容量誤解為左邊的線性關系。

在某些時候,使用量上升到 60% 之前還是處于線性,可一旦升至 65% 或 80% 時,就會維持那么多且再也上不去了,如右邊的容量模型所示。

所以說容量評估的困難之處就在于:一個應用或一個微服務在使用資源時會受到諸如:CPU、內存、網絡、以及磁盤 I/O 等多種因素的制約。

因此,我們應當去熟悉某個微服務主要消耗資源的關鍵點,以及它與其他資源之間的關系。

針對容量的評估,同樣在微信中引入了壓測。如圖所示,我們有四種模擬測試的方案:

  • 模擬流量到測試環境,它對現網不產生影響。這往往由測試團隊來操作。
  • 真實流量到測試環境,即運用 TCP 協議復制一份流量到測試環境。許多電商經常在一些大促之前,會把一些真實的流量引到測試環境之中,以檢驗系統到底能支撐多久。這往往由運維和開發協同執行。
  • 模擬流量到現網環境,這種并不常見。
  • 真實流量到真實環境,這是在微信中使用最多主要的現網壓測方式。該方法雖然最真實、且對容量的評估也最準確,但也會有***的風險。它可能會引發故障,并考驗我們及時發現故障點的能力。

壓測具有雙面性,好的一面在于:有助于我們發現過去未曾注意的底層問題;不好的一面,則是在出現問題之后,我們可能無法快速地恢復,有時甚至并非將流量撤掉那么簡單。

因為一旦某個服務崩潰了,則需要花時間和精力重新啟動它。因此我們在做真實壓測時,會特別注意上圖所列的三點。

上圖展示了過載保護的機制。當有更多的流量抵達時,過剩的流量會被直接拒絕掉,顯然我們也可籍此測算出其真實的流量大小。

可見過載保護,或稱快速拒絕是在微服務架構下做好容量管理的重要前提。如果沒有該保護,將很難評估現網容量的門限。

微服務監控

微信實現了對于微服務的立體化監控,監控的內容包括:

  • 常規指標,如 CPU、內存、網卡等。
  • 快速拒絕的數量級,通過該數量級,可以進一步評估受影響的用戶量。
  • 耗時方面的精確數據。
  • 調用失敗的次數、重試的次數。

這些在監控上都有一些數據來上報及展現。由于我們監控指標非常多,同時伴隨著微服務的增多,其產生的報警數量也會呈爆炸式增長。因此需要有智慧化的運維,通過 AI 應用去收斂各種報警。

就監控能力而言,我們為每臺機器都部署了 Agent。這些 Agent 的監控粒度比較密集,能夠達到秒級監控。與此同時,它們的數據上報能力也較為迅速。

業務部署與調度

容器的編排是微服務的一個重要方面,不同于 Docker,微信采用的是自研的 svrkit 架構,它參考了 borg/yarn/k8s/mesos 等主流調度系統的特點,該容器調度的微服務覆蓋率超過 80%。

微信的容器調度系統叫做 yard。如上圖下方所示,它分為兩層架構:

  • Resource Manager 和 Node Manager,負責資源管理。
  • Application Master 和 API/Query Server,負責作業管理。

資源管理的監控能夠決定出:在哪個容器中將哪個應用“拉起來”,而在哪個容器里將其“下線”。

雖然該容器編排架構屬于微信自研、且尚未對外開放,但是其調度能力已逐步開放到了騰訊云之上。

騰訊云提供了包括集群管理、資源調度、以及鏡像倉庫等方面的結合。其對應的產品包括 CCS(容器管理)、API 網關、以及分布式微服務的架構管理等。

微服務精細化運營

精細化運營要做到對資源進行“削峰填谷”。通過了解業務的特性,掌握每個業務峰值的不同時間,從而將資源盡可能控制在上圖的藍色線條附近。

例如:微信的游戲里有一個功能模塊,在凌晨零點的時候開始新發禮品。此時該模塊對于資源的需求會劇增,而同一時刻其他模塊的資源消耗并不多。

因此我們就可以把該游戲發禮品的微服務部署到其他模塊服務器資源之上,從而削除它的峰值,達到了錯峰服務的效果。

我們在許多場景中會用到離線計算,如:各種日志分析、應用數據分析、以及人工智能方面的訓練。

這些都是可以使用到離線計算的業務,多數不需要實時,它們都可以被部署在資源谷底的時候。

微服務的未來演進

我們采用微服務架構之后,有些問題也值得我們去認真思考:

  • 微服務這么多,我們能否延用以往的 CMDB 方式進行有效地管理呢?特別是那些放在公有云端的微服務,如何將它們納入現有的 CMDB 呢?
  • 是否有更好的微服務管理工具,來實現服務可視化、消息跟蹤和智能故障檢測?
  • 是否有微服務的應用商店,來幫助我們快速地開發各種應用?

[[226451]]

熊普江,騰訊公司資深架構師 ,負責公司騰訊云技術、解決方案布道與技術架構評審等工作。騰訊公司級課程講師,GITC 專家顧問,WOT 特約講師,GOPS 金牌講師。自 1997 年涉足互聯網,曾服務美國 Supreme、太平洋網絡、PPTV 等互聯網公司,任網絡運營總監、運維總監等職務。近 20 年互聯網從業背景,對大型網絡架構規劃與建設,海量用戶平臺規劃與運營技術支持,超大規模業務資源規劃與技術架構管理優化有豐富的經驗。

【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2017-06-02 10:17:57

騰訊運維

2016-06-14 10:03:45

運維 架構

2017-07-10 10:21:51

微服務架構運維管理運維平臺架構

2018-05-10 08:18:12

無服務器運維服務器

2017-03-17 19:28:36

深信服

2017-03-20 21:00:50

超融合云計算IT運維

2013-08-08 09:16:38

IT運維信息化

2018-10-24 05:14:11

2013-10-17 10:58:17

IT運維管理運維管理

2015-12-01 14:51:43

2012-08-31 14:00:40

IT運維

2021-07-27 11:31:29

運維架構技術

2025-04-30 05:00:00

批量運維系統

2016-04-15 00:43:13

2020-12-28 12:22:12

微服務架構微服務API

2017-07-17 15:50:17

微服務Docker架構

2021-06-22 18:00:09

微服務架構系統

2012-01-16 13:55:23

2020-10-20 10:46:10

DevOps運維體系

2022-03-02 09:00:00

微服務架構開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 俺去俺来也www色官网cms | 成人免费视频网站 | 久久久久久久久久爱 | 亚洲欧美激情精品一区二区 | 欧美激情国产日韩精品一区18 | 亚洲成人av在线 | 91精品久久久久久久 | 91资源在线观看 | 亚洲免费人成在线视频观看 | 性欧美精品一区二区三区在线播放 | www.中文字幕 | 久久精品久久久久久 | 国产一区二区三区在线 | 亚洲成人高清 | 亚洲免费视频一区 | 日韩在线一区二区三区 | 亚洲免费成人av | 精品成人佐山爱一区二区 | 午夜影院普通用户体验区 | 激情网站在线 | 欧美性生活视频 | 亚洲欧美综合精品久久成人 | 91久久久久久 | 中文在线а√在线8 | 天天操夜夜骑 | 成人在线国产 | 中文字幕四虎 | 亚洲视频免费在线观看 | 黄色毛片在线看 | 一区二区三区国产精品 | 亚洲精品成人在线 | 亚洲vs天堂| 国产91亚洲精品 | 好好的日在线视频 | 夜夜爽99久久国产综合精品女不卡 | 最新中文字幕第一页视频 | 欧美日韩国产精品一区 | 99在线免费观看视频 | 亚洲精品久久久一区二区三区 | 中文字幕一区二区三区精彩视频 | 毛片视频观看 |