美團分散式服務通信框架及服務治理系統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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...