<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          TarsGoGo 語(yǔ)言實(shí)現(xiàn)的高性能微服務(wù)框架

          聯(lián)合創(chuàng)作 · 2023-09-23 12:25

          TarsGo 是一個(gè) Go 語(yǔ)言實(shí)現(xiàn)的高性能微服務(wù)框架,也是微服務(wù)框架 Tars 的 Go 語(yǔ)言實(shí)現(xiàn)版本。

          多語(yǔ)言支持是 Tars 的一大優(yōu)勢(shì),在此之前 Tars 已經(jīng)推出了 C++、Java、PHP、NodeJS 版本。Go 語(yǔ)言的協(xié)程并發(fā)機(jī)制使它非常適用于大規(guī)模高并發(fā)后端服務(wù)器程序開發(fā),同時(shí)隨著容器化技術(shù)的飛速發(fā)展,諸如 Docker、Kubernetes 與 Etcd 等項(xiàng)目興起,使得 Go 語(yǔ)言越來越流行,并成為云原生的首選語(yǔ)言。Tars 的 Go 語(yǔ)言版本也因此應(yīng)運(yùn)而生,此次 Tars-Go 的推出,在大環(huán)境整體逐漸走向云原生的當(dāng)下,意義非凡。

          TarGo 架構(gòu)

          Tars-Go 整體架構(gòu)主要可以分為三個(gè)部分,如下圖所示:

          • 左邊是 tars2go 工具,tars2go 基于巴科斯范式(BNF),這是一種描述程序語(yǔ)言結(jié)構(gòu)的形式化方法,用來對(duì) Tars 文件進(jìn)行語(yǔ)法和詞法分析,生成相應(yīng)的代碼,供客戶端和服務(wù)端使用。同時(shí)它提供 Tars 協(xié)議二進(jìn)制流的編解碼功能,將二進(jìn)制包轉(zhuǎn)成相應(yīng)的 Go 數(shù)據(jù)結(jié)構(gòu)。

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

            • Client 由 Servantproxy、Communicator、ObjProxy、adapterproxy 等邏輯結(jié)構(gòu)組成,這些邏輯結(jié)構(gòu)用來管理 servant,obj 對(duì)應(yīng)到的服務(wù)端節(jié)點(diǎn)的 ip 端口,和 C++ 的邏輯保持一致。底層使用 net.Conn 來建立具體的連接,并用 SendQueue chan 來控制并發(fā)數(shù)量。Client 還包含一些 Goroutine,用來做特性監(jiān)控和 stat 監(jiān)控上報(bào)。

            • Server 使用 package net 的 listener 來管理 TCP 和 UDP 連接,使用多個(gè) Goroutine 進(jìn)行 accept,并將 accept 之后的 net.Conn 經(jīng)過 SendQueue chan 交給后端的 Handler 進(jìn)行處理。Handler 由一堆 woker Goroutine 組成,每個(gè) Goroutine 基于 net.Conn 進(jìn)行收發(fā)包、Tars 協(xié)議解碼,并經(jīng)過 dispatcher(由 tars2go 生成) 來調(diào)用用戶的代碼實(shí)現(xiàn),然后將結(jié)果編碼成二進(jìn)制流返回給 Client。Server 也包含一些 Goroutine 實(shí)現(xiàn)遠(yuǎn)程日志異步上報(bào)等功能,防止同步調(diào)用阻塞請(qǐng)求。

          TarsGo 編程示例

          Tars 協(xié)議是一個(gè)二進(jìn)制協(xié)議,它是與語(yǔ)言無關(guān)的 IDL 語(yǔ)言,由工具自動(dòng)生成服務(wù)端和客戶端代碼,下邊是一個(gè) Tars 協(xié)議的示例:

          struct LoginInfo {
              0 require string sid;
              1 require string code;
          }
          struct ProfileInfo {
              0 require string nick;
              1 require int level;
          }
          interface TestServant   {
              int test(int qq, LoginInfo li, out ProfileInfo pi);
          }
          瀏覽 17
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品人妻无码在线 | 久久久久久黄色视频 | 午夜精品久久久久久久久久久久 | www.xxqepv日逼打炮 | 天堂网地址|