美團分散式服務通信框架及服務治理系統OCTO

来源:https://www.cnblogs.com/xiexj/archive/2019/02/25/10400319.html
-Advertisement-
Play Games

一、什麼是OCTO 定義: OCTO是美團的分散式服務通信框架及服務治理系統,屬於公司級基礎設施,目前尚未開源。 目標: 為公司所有業務提供統一的服務通信框架,使業務具備良好的服務運營能力,輕鬆實現服務註冊、服務自動發現、負載均衡、容錯、灰度發佈、調用數據可視化等,持續提升服務高可用性、服務運維效率 ...


 一、什麼是OCTO

定義:

    OCTO是美團的分散式服務通信框架及服務治理系統,屬於公司級基礎設施,目前尚未開源。

 

目標:

    為公司所有業務提供統一的服務通信框架,使業務具備良好的服務運營能力,輕鬆實現服務註冊、服務自動發現、負載均衡、容錯、灰度發佈、調用數據可視化等,持續提升服務高可用性、服務運維效率。

 

類比:

    美團點評內部類似的框架還有pigeon(已開源,https://github.com/dianping/pigeon)。OCTO是octopus(章魚)的縮寫,pigeon是鴿子的意思,一個水裡游,一個天上飛,目標大體一致。

    業界同類產品有Dubbo。OCTO的功能因為主要內部用,功能要豐富的多。

 

規模:

    千億級別

    靜兒的老領導17年時做過一個QCon分享,叫《OCTO:千億規模下的服務治理挑戰與實踐》。裡面提到了16年OCTO日調用量已經超過千億,目前這個數字還在高速增長。

 

二、產生背景

階段1 - 垂直應用階段

    這個階段大體相當於目前運用最廣泛的「分層架構」。把業務按照領域劃分(垂直拆分),將一個大應用分成幾個互不相干的小應用。

 

階段2 - 早期分散式階段

    隨著規模的擴大,系統之間需要進一步拆分。將相同的操作抽象出來走服務化來實現復用和整合。這時候就需要使用RPC技術,初期使用HTTP+JSON來實現分散式。

 

這個階段後期問題日益顯現:

- 規範化和標準化差:缺乏強schema約束、需要較多的編碼、調用方的學習和溝通成本高

- 效率低:HTTP協議頭比較重;內部要走CDN、nginx等服務才最終實現端到端的交互;數據傳輸效率低(數據傳輸格式是json,它是文本格式的,比方說一個數字用二進位只占1個位元組,用文本實際上存的是字元串,占3個位元組)。

- 運維成本高:缺乏服務自動註冊發現、依賴人工運維

 

階段3 - 服務治理階段

    這個階段使用了基於thrift的高性能的RPC框架和基於zookeeper(zk)的服務自動註冊發現。引入這些技術帶來的問題:

- 可用性問題:強依賴zk,使用臨時節點,網路抖動會導致不穩定,正常服務被下線;zk出現大規模故障不易進行隔離。

- 未實現全生命周期自動化運維:缺乏數據採集分析、監控報警等運維機制;難以推進規範化、標準化;路由策略單一

 

    為瞭解決上述問題,OCTO應運而生。

 

三、服務治理系統設計特點

整體架構圖如下:

 

 

特點1 - 代理模式優化服務註冊發現

    整體架構圖中的SG_agent(服務治理代理Service Governance Agent)是直接安放在業務(使用OCTO的服務)伺服器上的代理,也就是本地進程。實際承擔服務註冊、服務發現、動態路由解析、負載均衡、配置管理等功能及調用統計上報的應用代理程式。

 

代理模式帶來的好處:

- 標準化:用thrift IDL(介面描述語言Interface description language)提供標準介面,美團技術人人都知道的appkey(服務標識)的概念正是由此而普及。這也是美團內部統一配置中心MtConfig的基礎。

- 策略下移:將原來直接打成jar包讓業務引用的策略放到代理層來實現,可方便的進行策略熱更新,業務代碼不再感知。

- 提升可用性:代理緩存解決了zk掛業務就掛的問題。自身又採用了基於冗餘的高可用設計,整體大幅度提高了可用性。

 

特點2 - 狀態檢查提高可用性

    數據一致性問題一直是分散式系統的要點和難點。對服務註冊發現來說,最重要的數據就是服務的狀態。是否在假死(進程還活著,但是不處理請求,比如正在fullgc)?

    很多團隊是通過「keepalive探針」(心跳)來解決這個問題的。這種技術好處是準確,缺點是高消耗。因為這是業務端主動發起的探測,很多場景下keepalive的IO消耗可能比服務自身還要大。

    OCTO採用的集中式的探測,早期是基於Akka Actor(用於遠程通信的工具,特點是高效)的,通過熱備、數據分析自動水平擴展、Double Check、熔斷等機制,可用性和準確性都在6個9以上。

 

特點3 - 數據驅動

    美團內部非常註重的一點就是「用數據說話」。OCTO的主要數據包括:調用數據、異常調用、調用鏈路信息、全鏈路參數傳遞。數據展示形式包括:監控報警、數據報表、數據視圖。

 

特點4 - 全生命周期

 

 

    美團內部的服務從在“媽媽肚子里”就開始和OCTO打交道。服務註冊、機器申請的信息都要先同步到OCTO。因為OCTO全周期性,所以可以對服務的各個階段數據提供監控和優化方案。比如在發佈部署階段,OCTO利用先禁用節點摘掉流量,讓流量打到別的機器上再下掉此節點,啟動後做服務狀態檢查,檢查通過,再接收流量來實現平滑發佈。

 

特點5 - 周邊生態

    OCTO非常強大,強大在於它不是孤軍奮戰,是各個團隊間的跨團隊合作。這也是它被叫做“八爪魚”的原因之一。

 

    和內核團隊,OCTO進行深度定製,比如鏈接復用、鏈接保護、原生非同步支持。和HULK(容器團隊,參見:歐陽老師的美團點評容器平臺HULK的調度系統)團隊的合作也是日漸緊密。靜兒就是HULK團隊的一員。合作的重要一點就是業界常提到的「流動計算架構」。解決的問題主要是提升業務可用性、資源利用率、深度devOps高效運維。

 

四、總結

用服務進行設計

總是為併發進行設計

--《程式員修煉之道》

 

 相關閱讀:

《程式員修煉之道》解讀1

到底多大才算高併發?


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 繼上篇 "文章" 介紹了Webpack的基本概念,完整流程,以及打包過程中廣播的一些事件的作用,這篇文章主要講生成的chunk文件如何輸出成具體的文件。分同步和非同步兩種情況來分析輸出的文件 。 模塊文件show.js 同步載入 生成的bundle文件 非同步載入 經webpack打包會生成兩個文件0. ...
  • 錯誤消息如圖: 如果你看到此錯誤消息,則說明 v-for 指令的 key值 重覆了,只需修改你的 key值 讓其不會重覆即可。 ...
  • Reverse a String 翻轉字元串 先把字元串轉化成數組,再藉助數組的reverse方法翻轉數組順序,最後把數組轉化成字元串。 你的結果必須得是一個字元串 當你完成不了挑戰的時候,記得開大招'Read-Search-Ask'。 這是一些對你有幫助的資源: Global String Obj ...
  • 效果展示: 源碼:https://github.com/ProsperLee/demo-h5-package ...
  • 背景:easyui在做上下佈局的時候,上面是數據列表,下麵是數據圖表。如下圖 需要在上下麵板右上角加上最大化按鈕,以便可以全屏顯示。邏輯就是當上面點擊最大化時候,隱藏下麵,主意:此時需要將下麵的div標題設置為空字元,否則後果就是列表中間有一道人員能力統計圖標題;當點擊恢復按鈕的時候,展示下麵圖表, ...
  • LieBrother原文 : "行為型模式:策略模式" 十一大行為型模式之五:策略模式。 簡介 姓名 :策略模式 英文名 :Strategy Pattern 價值觀 :集計謀於一身 個人介紹 : Define a family of algorithms,encapsulate each one,a ...
  • 一、前言 什麼是命令模式? 在軟體系統中,“行為請求者”與“行為實現者”通常呈現一種“緊耦合”。但在某些場合,比如要對行為進行“記錄、撤銷/重做、事務”等處理,這種無法抵禦變化的緊耦合是不合適的。在這種情況下,如何將“行為請求者”與“行為實現者”解耦?將一組行為抽象為對象,實現二者之間的松耦合,這就 ...
  • 1.代碼生成器: [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本、處理類、service等完整模塊2.多數據源:(支持同時連接無數個資料庫,可以不同的模塊連接不同數的據庫)支持N個數據源 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...