騰訊開源微服務架構 Tars,高性能 RPC 開發框架

2020-11-24 開源中國

騰訊微服務架構 Tars 於今日正式開源。

Tars 取名於電影「星際穿越」中的機器人,是支持多語言的高性能 RPC 開發框架和配套一體化的服務治理平臺,可以幫助企業或者用戶以微服務的方式快速構建穩定可靠的分布式應用。據稱,Tars 是騰訊內部使用將近十年的基於微服務的統一應用框架 TAF(Total Application Framework),目前有在100多個業務(如手機瀏覽器、應用寶、手機管家、手機QQ、手機遊戲等)、1.6多萬臺伺服器上運行使用。

平臺特性

  • tars 協議:tars協議採用接口描述語言(Interface description language,縮寫IDL)來實現,它是一種二進位、可擴展、代碼自動生成、支持多平臺的協議,使得在不同平臺上運行的對象和用不同語言編寫的程序可以用PRC遠程調用的方式相互通信交流, 主要應用在後臺服務之間的網絡傳輸協議,以及對象的序列化和反序列化等方面。

  • 調用方式:通過IDL語言協議,可以定義服務提供的接口,並自動生成客戶端和服務端的相關通信代碼,服務端只需實現業務邏輯即可對外提供服務,客戶端通過自動生成的代碼即可調用服務,調用方式支持三種模式:同步調用:客戶端發出調用請求後等待服務返回結果後再繼續邏輯;異步調用:客戶端發出調用請求後繼續其他業務邏輯,服務端返回結果又由回調處理類處理結果;單向調用:客戶端發出調用請求後就結束調用,服務端不返回調用結果。

  • 負載均衡:框架通過名字服務來實現服務的註冊與發現,Client通過訪問名字服務獲取到被調服務的地址信息列表,Client再根據需要選擇合適的負載均衡方式來調用服務,負載均衡支持輪詢、hash、權重等多種方式。

  • 容錯保護:容錯保護通過兩種方式實現:名字服務排除和Client主動屏蔽。

  • 過載保護:為了防止業務因為訪問量突增或伺服器故障造成系統整體的繁忙,進而導致全部服務的不可用,框架內部做相應設計來應對。實現請求隊列,服務調用通過非阻塞方式實現異步系統,從而達到提升系統處理能力的目的。並且對隊列的長度進行監控,當超過某個閥值,則拒絕新的請求。對請求設置超時時間,當請求包從隊列裡讀取出來是判斷請求是否超時,如果超時則不做處理。

  • 消息染色:框架提供了對某服務某接口的特定請求進行染色的能力,染色的消息可以透傳到後面需要訪問的所有服務上,對染色的請求,服務自動把日誌上報到特定的染色日誌伺服器上,使用者只需在染色伺服器上即可分析請求訪問的路徑,方便跟蹤定位問題。

  •  IDC分組:為了加快服務間的訪問速度,建設跨地區、跨機房調用帶來的網絡資源消耗,減少網絡故障帶來的影響,框架提供了跨地區、跨機房,就近接入的功能。

  • SET分組:為了方便對業務服務部署管理進行標準化和容量化,框架提供了Set部署能力,set之間沒有調用關係,互不幹擾,故障隔離,提高運維效率和服務可用性。

  • 數據監控:為了更好反映和監控小到服務進程、大到業務的運行質量情況。

  • 集中配置:對業務配置進行集中管理並且操作web化,使配置修改更容易,通知更及時,配置變更也更安全;對配置變更進行歷史記錄,讓配置可以輕鬆回退到前一版本。配置拉取服務化,服務只需調用配置服務的接口即可獲取到配置文件。

更多詳情

設計思想

Tars 的設計思路是採用微服務的思想對服務進行治理,同時對整個系統的各個模塊進行抽象分層,將各個層次之間相互解耦或者鬆耦合,如下圖:


整體架構


服務交互流程圖


服務結構圖

框架核心的服務端與客戶端實現結構圖如下:


相關焦點

  • 騰訊聯合科大訊飛,TARS 正式支持 Google ProtoBuf
    騰訊今年4月開源的微服務架構 Tars ,是支持多語言的高性能 RPC 開發框架和配套一體化的服務治理平臺,可以幫助企業或者用戶以微服務的方式快速構建穩定可靠的分布式應用,一經推出受到了廣泛關注
  • 開源微服務框架,你知道幾個?
    下邊為大家列舉了當前最為火熱,最常被人提及的開源微服務開發框架,希望對開發者有一定的幫助(點擊項目名,可以直接跳轉介紹頁):Spring Cloud其包含一整套開發框架與管理平臺,兼顧多語言、易用性、高性能與服務治理,理念是讓開發更聚焦業務邏輯,讓運營更高效。
  • 微服務RPC框架選美
    原標題:微服務RPC框架選美 轉載本文需註明出處:EAII企業架構創新研究院(微信號:eaworld),違者必究。如需加入微信群參與微課堂、架構設計與討論直播請直接回復此公眾號:「加群 姓名 公司 職位 微信號」。
  • 搜狗開源srpc:自研高性能通用RPC框架
    另外,接口描述文件支持protobuf和thrift,這意味著用戶不僅可以一鍵遷移基於protobuf或thrift作為IDL的項目,還可以用srpc作為一個性能更優的thrift框架或者brpc框架。
  • gRPC首頁、文檔和下載 - RPC 框架 - OSCHINA - 中文開源技術交流...
    gRPC 是一個高性能、開源和通用的 RPC 框架,面向移動和 HTTP/2 設計。目前提供 C、Java 和 Go 語言版本,分別是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.
  • 騰訊開源高性能 Hybrid 框架 VasSonic
    ­  感謝土豆看科技的投遞­  騰訊近日開源了高性能 Hybrid 框架 VasSonic,用於提升H5頁面首屏速度加速,提高用戶體驗及留存率,48小時內Github Star數突破2000.VasSonic是一個輕量級的高性能的Hybrid框架,專注於提升頁面首屏加載速度,完美支持靜態直出頁面和動態直出頁面,兼容離線包等方案
  • 微服務之RPC簡述
    為實現該目標,RPC 框架需提供一種透明調用機制讓使用者不必顯式的區分本地調用和遠程調用。二、為什麼需要rpc1、分布式部署及微服務當我們的系統訪問量增大、業務增多時,我們會發現一臺單機運行此系統已經無法承受。此時,我們可以將業務拆分成幾個互不關聯的應用,分別部署在各自機器上,以劃清邏輯並減小壓力。
  • 【行業資訊】SOFARPC v5.7.4 發布,螞蟻金服開源 Java RPC 框架
    SOFARPC 是一個高可擴展性、高性能、生產級的 Java RPC 框架。在螞蟻金服 SOFARPC 已經經歷了十多年及五代版本的發展。SOFARPC 致力於簡化應用之間的 RPC 調用,為應用提供方便透明、穩定高效的點對點遠程服務調用方案。
  • 後端工程師,必須搞懂的 RPC 框架
    去年我面試一位高級後端工程師的時候,看他簡歷上寫著「熟練掌握 RPC 框架」,所以我就試探著問了他幾個原理方面的問題,比如,「大概說下 RPC 框架的核心原理」「、描述下序列化部分的邏輯」。但聊了半天,我發現他其實並不熟,他的回答基本都是在告訴我怎麼用,以及怎麼更好地用好這些框架。
  • 騰訊優圖開源深度學習推理框架TNN 助力AI開發降本增效
    騰訊優圖開源深度學習推理框架TNN 助力AI開發降本增效 2020-06-10 16:58:07 來源:中國新聞網 作者:於曉 責任編輯:
  • 雲+社區技術沙龍丨解析騰訊最新開源項目背後的技術棧
    田甜:《Tars 與 GRPC 實戰場景應用》Tars-Go 早期發起人及核心開發成員、騰訊高級工程師田甜在演講中主要分析了 Tars 與 GRPC 的架構體系及框架應用設計,並分享了在 Service Mesh 上的一些探索,為微架構的設計工作提供選型思路與技術參考。
  • 從0 到 1:全面理解 RPC 遠程調用!
    採用RESTful API,客戶端與服務端之間雖然可以獨立開發,但還是存在耦合。比如,客戶端在發送請求的時,必須知道伺服器的地址,且必須保證伺服器正常工作。而 rpc + ralbbimq中間件可以實現低耦合的分布式集群架構。說了這麼多,我們該如何選擇這兩者呢?我總結了如下兩點,供你參考:REST 接口更加規範,通用適配性要求高,建議對外的接口都統一成 REST。
  • 從零開始,徒手擼一個簡單的 RPC 框架,輕鬆搞定!
    所以就想著試試自己實現一個簡單的RPC框架,即鞏固了基礎的知識,也能更加深入的了解RPC原理。當然一個完整的RPC框架包含了許多的功能,例如服務的發現與治理,網關等等。本篇只是簡單的實現了一個調用的過程。傳參出參分析一個簡單請求可以抽象為兩步
  • gRPC 通信框架實現存在數據洩露等安全問題
    gRPC 是一個高性能、開源和通用的 RPC 框架,面向移動和 HTTP/2 設計。目前提供 C、Java 和 Go 語言版本,分別是:grpc, grpc-java, grpc-go.當前企業正在慢慢改用微服務架構來構建面向未來的應用程式,微服務使企業能夠有效管理基礎架構,輕鬆部署更新或改進,並幫助IT團隊的創新和學習。它還可以幫助企業能夠設計出可以輕鬆按需擴展的應用程式,此外,隨著企業轉換架構(從傳統的單片式服務過渡到微服務),出現了在微服務之間進行有效通信的需求。
  • 螞蟻金服高性能 Java RPC 框架 SOFARPC 5.4.4 發布
    新特性改進修復SOFARPC 是一個高可擴展性、高性能、生產級的 Java RPC 框架。在螞蟻金服 SOFARPC 已經經歷了十多年及五代版本的發展。SOFARPC 致力於簡化應用之間的 RPC 調用,為應用提供方便透明、穩定高效的點對點遠程服務調用方案。
  • 騰訊優圖開源深度學習推斷框架TNN - 軟體與服務 - 中國軟體網...
    6月12日消息,騰訊優圖實驗室宣布開源新一代移動端深度學習推理框架TNN。騰訊優圖希望通過底層技術優化幫助用戶實現人工智慧在多個不同平臺的輕量部署落地。據悉,基於TNN,開發者能夠輕鬆將深度學習算法移植到手機端高效的執行,開發出人工智慧 APP,將 AI 帶到指尖。
  • rpc、json Rpc和http區別
    帶索引數組參數的rpc調用--> {"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}<-- {"jsonrpc": "2.0", "result": 19, "id": 1} 2.
  • rpc分布式服務 - CSDN
    第一章聊了【「為什麼要進行服務化,服務化究竟解決什麼問題」】第二章聊了【「微服務的服務粒度選型」】今天開始聊一些微服務的實踐,第一塊,RPC框架的原理及實踐,為什麼說要搞定微服務架構,先搞定RPC框架呢?
  • 小程序聯合騰訊雲推出「雲開發」 騰訊的真實意圖是什麼?
    騰訊也一直在謀求解決這些問題。早在2018年,騰訊雲就聯合微信小程序推出「小程序·雲開發」平臺,希望通過提供一站式開發服務,打通小程序前端與雲資源的鏈路,讓開發者無需管理後端服務架構,就可以擁有各種後端能力,以減輕開發過程中繁雜的後端操作。
  • 五分鐘學後端技術:如何學習Java工程師必須掌握的RPC
    RPC 框架是基於 HTTP 協議實現的,底層使用到了 Netty 框架的支持。Thrift:是 Facebook 的開源 RPC 框架,主要是一個跨語言的服務開發框架。 用戶只要在其之上進行二次開發就行,應用對於底層的 RPC 通訊等都是透明的。不過這個對於用戶來說需要學習特定領域語言這個特性,還是有一定成本的。