上の図分解された SONY のカメラですが、内部のコンポーネントはそれぞれの役割を果たし、得意なことだけを行います。グローバル化した今日の世界では、ほとんどの優れた製品は、より良いサービスや技術を求めて一点で進化しています。
#実際、これはソフトウェア テクノロジについても同様であり、グローバリゼーションの縮図のようなものです。
マイクロサービス 固定された単一の定義はなく、時間の経過とテクノロジーの継続的な進化により、業界は密かに一定のコンセンサスを形成してきました。特徴をまとめると以下のような点が挙げられます。
特定のマイクロサービスは、HTTP などのアーキテクチャ全体にわたる通信プロトコルを通じて相互に情報を転送します。
#マイクロサービスは独立してデプロイできます。
#マイクロサービスは、ビジネスに関する特定の機能を組織します。
#マイクロサービスは、サービスを実装するための言語、データベース、ハードウェア、ソフトウェア環境に限定されません。
サービスは粒度が小さく、メッセージングをサポートし、コンテキストに依存しており、自動化されたプロセスを通じて構築およびリリースされます。
上記の概要から、マイクロサービス間の情報対話は、MSA (マイクロサービス アーキテクチャ) 全体の基礎であり、通信 プロトコルの品質## は、それに基づいて確立されたサービスがシンプル、効率的、安定性、拡張性があり、保守が容易であるかどうかを決定します。製品における究極の具体化は、特に支払いや広告入札など、迅速な対応が必要なサービスのユーザー エクスペリエンスです。 プロトコル バッファー (一般に Protobuf として知られています) はその中で最高のものです。
その理由については、次の記事を参照してください。ここでは詳しく説明しません。
#Protobuf による JSON パフォーマンスの向上 LINK
まず、非常に単純な例を見てみましょう。ログイン リクエストを定義する必要があるとします。このログイン リクエストには、ユーザー名
、パスワード、再試行回数
。このリクエストは、サフィックス .proto
が付いたファイルで定義できます。情報の内容は次のとおりです。 ##
/* LoginRequest represents a login request
* user_name: user name
* password: password
* retry_time: retry times, can not over 3 times */
syntax = "proto3"; // proto3 syntax
option go_package = "pb/request";
message LoginRequest {
string user_name = 1;
string password = 2;
int32 retry_times = 3;
}
proto3 です。 proto2 を使用することもできます。
LoginRequest
メッセージ本文では 3 つの特定のパラメータが定義されており、各パラメータには特定の型と名前が付いています。各フィールドは、次の表で .proto Type として定義できます。また、特定の言語 (Java Go) で使用される最終的な型も表で確認できます。
#.proto タイプ | 注意事項 | Java タイプ | Go Type |
---|---|---|---|
double | double | float64 | |
float | #float | float32 | |
int32 | 可変長エンコーディングを使用します。負の数値をエンコードするには非効率的です。フィールドに負の値が含まれる可能性がある場合は、代わりに sint32 を使用してください。 | #int | int32 |
可変長エンコーディングを使用します。負の数値をエンコードするには非効率的です。フィールドに負の値が含まれる可能性がある場合は、代わりに sint64 を使用してください。 | #long | int64 | |
#可変長エンコーディングを使用します。 | ##int | uint32 | |
uint64 | 可変長エンコーディングを使用します。 | long | uint64 |
sint32 | 可変長エンコーディングを使用します。符号付き int 値。これらは、通常の int32 よりも効率的に負の数値をエンコードします。 #sint64 | 可変長エンコーディングを使用します。符号付き int 値。これらは、通常の int64 よりも効率的に負の数値をエンコードします。 | #fixed32常に 4 バイト。値が 228 より大きい場合が多い場合は、uint32 よりも効率的です。 | #int | uint32 |
fixed64 | 常に 8 バイト。値が 256 より大きいことが多い場合は、uint64 より効率的です。 | long | uint64 |
sfixed32 | 常に 4 バイト。 | int | int32 |
sfixed64 | 常に 8 バイト。 | long | int64 |
ブール | ブール値 | ブール | |
文字列 | 文字列には、常に UTF-8 エンコードまたは 7 ビット ASCII テキストを含める必要があり、232 を超えることはできません。 ##string | bytes | 232 以内の任意のバイト シーケンスを含めることができます。 |
ByteString | []byte | 注释Protobuf 支持 C/C++ 中的两种注释风格
2.2 代码生成Golang 代码生成
Golang 代码使用生成的代码可以直接在项目中使用 func main() { // 创建请求 loginRequest := request.LoginRequest{ UserName: "Gavin.Yang", Password: "92d273941d98a8e1c1bb13ac163f0d4e40c5aa70", RetryTimes: 0} // 序列化 out, err := proto.Marshal(&loginRequest) if err == nil{ fmt.Println(out) } } ログイン後にコピー 以上がマイクロサービス間の通信 -- Protobufの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
関連ラベル:
ソース:Go语言进阶学习
前の記事:fmt.Fprint 関数を使用して、フォーマットされたデータを指定したファイルに書き込みます。ファイルが存在しない場合は、ファイルを作成します。
次の記事:http.Client 関数を使用して、カスタマイズされた HTTP リクエストを送信し、応答ステータス コードと応答コンテンツを取得し、タイムアウトを設定します。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
CSS スタイルがサイトに適用されない
Bootstrap5を使用してWebサイトを作成していますが、index.cssプロパティがindex.htmlに適用されません。サービス カードの上にマウスを移動すると、背景が変...
から 2024-04-06 17:12:23
0
1
336
ナビゲーションバーの下枠のCSS
ナビゲーション バーがあり、リスト内の項目にカーソルを置くと下部に赤い線を追加しましたが、その赤い線をタイトル (例: 「サービス」) の下に移動したいのですが、これを実現する方法...
から 2024-04-06 15:04:41
0
2
347
MERN スタックの検索ボックスとチェックボックスの正規表現フィルター
私は実行しながら学習することで MERN スタックがどのように連携するかを理解しようとしており、bezcoder の次のチュートリアルに従っています: Node.js/Expres...
から 2024-04-06 14:53:12
0
1
425
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
|