gslang--ネイティブgolang / RPC説明言語の概要



Gslang Native Golang Rpc Description Language Introduction



上記のように、gslangは基礎となるシリアル化を気にせず、基礎となるネットワーク送信をさらに気にします。コードジェネレーターgslangリアエンドによって決定されるプロトコルのこの部分、コード生成のリアエンドは既知です gs2go -コード生成のgolangリアエンド、および生成されたコードとそれに続く合意 gscluster 定義。
注意すべきこと: gscluster 基になるデータパケット自体によるRPC呼び出しgslangは、特定の状況を参照して説明されます。 これです ファイル。

環境を構築する

  1. インストール gsmake 、Gsmakeがこのツールを紹介します。 ここに
  2. git clone https://github.com/gsdocker/gscluster
  3. cd $ {gsclusterディレクトリ}
  4. gsmake gotest-bench。 ./test2

上記の手順で、基本的なgsdocker / rpcテスト環境を構築します。結果のファイルを観察して、コード* .gs.goを理解できます。
生成された詳細



gscluster RPCプロトコルの詳細

構造体/テーブルのシリアル化

バイナリストリームを書き込む再帰シーケンスによって定義される直接フィールドデータシーケンス。シリアル化/逆シリアル化に完全に依存するタグ/メタデータ情報はありません。
gslangスクリプトへ

基本的なデータ型のシーケンス

  1. インターガータイプ:リトルエンディアンとして記述
  2. 文字列タイプ:[2バイト、後続のコンテンツの長さ] + [UTF-8文字のコンテンツ]
  3. 浮動小数点型:を押します IEEE-754 一連の記憶

RPCパケット

クライアント/マイクロサービスノード間のrpc呼び出しは、gslang形式で定義されたRPCプロトコルのパケット送信にカプセル化されます。
次の形式で記述されます。



// The gscluster rpc package code types enum Code { WhoAmI(0), Accept(1), Reject(2), DHExchange(3), Call(4), Return(5), CER(6), ErrReturn(7) } // The gscluster prc package type define struct Message { Code Code //message Type Content []byte //content data } struct DHExchange { ID string Content string } struct CER { Add bool Type string // service type name Name string // service name ID uint32 // srevice id } struct Param{ Content []byte } struct Return { ID uint16 Service uint32 Params []Param } struct ErrReturn { ID uint16 Service uint32 UUID []byte Code int32 } struct Call { ID uint16 Method uint16 Service uint32 Params []Param }

繰り返しますが、gsclusterrpcプロトコルパケット自体はgslangによって直接定義されます

Structure Call / Returnは、RPC呼び出し要求/応答を実装するために使用されます。

  1. コール番号ID:応答パケットの照合に使用されるRPCパケットシーケンス番号
  2. 電話番号サービス:契約契約番号
  3. 呼び出し番号メソッド:メソッドプロトコル番号
  4. 呼び出し番号パラメータ:パラメータリスト

サービス/契約番号とプロトコルの名前の間のマッピングは、基盤となるフレームワークによって決定されます。



  1. サーバー間のRPC呼び出しは、ネゴシエーションハンドシェイクプロトコルを介して呼び出しの両端によって決定されます
  2. ゲートウェイとクライアント間のRPC呼び出し gscluster GS / GW / GC IIIサービス契約(対応するサーバー/ゲートウェイ/クライアントRPCインターフェース)のみをサポートします。単純なサービス契約番号が手動で割り当てられます。

gscluster

gscluster mico-serviceフレームワークはgolangに実装されています:

  1. 役割ベースの同時実行モデルを使用するサーバー。サーバー側の各クライアントは、オブジェクト文字アクターと1対1で対応します。
  2. サービングノード/クライアント間でRPCプロトコルを介して通信します
  3. 構築されたゲートウェイサービスレイヤーは、SLBなどの負荷分散ベースのアクセステクノロジーをサポートします
  4. 風の全体的なgscluster雲のようなデザイン スカイネット 、しかし、サービスを実装する場合、gsclusterの方が便利です-多くのlua vmを開くよりも、構築されたゴルーチン