Go 語言實現的高性能微服務框架 TarsGo


TarsGo 是一個 Go 語言實現的高性能微服務框架,也是微服務框架 Tars 的 Go 語言實現版本。

多語言支持是 Tars 的一大優勢,在此之前 Tars 已經推出了 C++、Java、PHP、NodeJS 版本。Go 語言的協程並發機制使它非常適用於大規模高並發后端服務器程序開發,同時隨着容器化技術的飛速發展,諸如 Docker、Kubernetes 與 Etcd 等項目興起,使得 Go 語言越來越流行,並成為雲原生的首選語言。Tars 的 Go 語言版本也因此應運而生,此次 Tars-Go 的推出,在大環境整體逐漸走向雲原生的當下,意義非凡。

Tars-Go 整體架構主要可以分為三個部分,如下圖所示:

image

左邊是 tars2go**工具**,tars2go 基於巴科斯范式(BNF),這是一種描述程序語言結構的形式化方法,用來對 Tars 文件進行語法和詞法分析,生成相應的代碼,供客戶端和服務端使用。同時它提供 Tars 協議二進制流的編解碼功能,將二進制包轉成相應的 Go 數據結構。

右邊部分是**package tars,它包含了 Client 和**Server** 兩部分的功能:

Client 由 Servantproxy、Communicator、ObjProxy、adapterproxy 等邏輯結構組成,這些邏輯結構用來管理 servant,obj 對應到的服務端節點的 ip 端口,和 C++ 的邏輯保持一致。底層使用 net.Conn 來建立具體的連接,並用 SendQueue chan 來控制並發數量。Client 還包含一些 Goroutine,用來做特性監控和 stat 監控上報。

Server 使用 package net 的 listener 來管理 TCP 和 UDP 連接,使用多個 Goroutine 進行 accept,並將 accept 之后的 net.Conn 經過 SendQueue chan 交給后端的 Handler 進行處理。Handler 由一堆 woker Goroutine 組成,每個 Goroutine 基於 net.Conn 進行收發包、Tars 協議解碼,並經過 dispatcher(由 tars2go 生成) 來調用用戶的代碼實現,然后將結果編碼成二進制流返回給 Client。Server 也包含一些 Goroutine 實現遠程日志異步上報等功能,防止同步調用阻塞請求。

Tars 協議是一個二進制協議,它是與語言無關的 IDL 語言,由工具自動生成服務端和客戶端代碼,下邊是一個 Tars 協議的示例:

A high performance microservice framework in golang. A linux foundation project. — Read More

Latest commit to the  master branch on 6-19-2021
Download as zip
授權協議:
BSD
開發語言:
Google Go  查看源碼»
操作系統:
跨平台


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM