上の図分解された 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 サイトの他の関連記事を参照してください。