このトピックでは、Cloud-native API Gatewayの組み込みプラグインと、さまざまなプログラミング言語に基づいて開発されたカスタムプラグインのパフォーマンスについて説明します。 パフォーマンスは、リクエストの待ち時間に基づいて評価されます。
組み込みプラグインのパフォーマンス
Cloud-native API Gatewayの組み込みプラグインは、マイクロ秒のレイテンシを提供します。 例えば、キー認証プラグインは、約20マイクロ秒の待ち時間で各要求を処理する。 基本認証プラグインは、約30マイクロ秒のレイテンシで各要求を処理します。
カスタムプラグインのパフォーマンス
次の例では、さまざまなプログラミング言語に基づいて開発された複数のプラグインのパフォーマンスを比較します。 すべてのプラグインを使用して、次の処理ロジックを実装します。リクエストヘッダーは、20回連続して設定され、20回連続して取得され、その後20回連続して削除されます。
C ++ に基づいて開発されたカスタムプラグインのサンプルコード
FilterHeadersStatus PluginContext::onRequestHeaders(uint32_t, bool) { std::string fake_header_key_prefix = "fake_key_"; std::string fake_header_value_prefix = "fake_value_"; // Add 20 headers to request headers for (size_t i = 0; i < 20; i++) { addRequestHeader(fake_header_key_prefix + std::to_string(i), fake_header_value_prefix + std::to_string(i)); } // Check 20 times headers. for (size_t i = 0; i < 20; i++) { getRequestHeader(fake_header_key_prefix + std::to_string(i)); } // remove add headers for (size_t i = 0; i < 20; i++) { removeRequestHeader(fake_header_key_prefix + std::to_string(i)); } return FilterHeadersStatus::Continue; }Golangに基づいて開発されたカスタムプラグインのサンプルコード
func (ctx *httpContext) OnHttpRequestHeaders(numHeaders int, endOfStream bool) types.Action { fake_header_key_prefix := "fake_key_" fake_header_value_prefix := "fake_value_" for i := 0; i < 20; i++ { proxywasm.AddHttpRequestHeader(fake_header_key_prefix+strconv.Itoa(i), fake_header_value_prefix+strconv.Itoa(i)) } for i := 0; i < 20; i++ { proxywasm.GetHttpRequestHeader(fake_header_key_prefix + strconv.Itoa(i)) } for i := 0; i < 20; i++ { proxywasm.RemoveHttpRequestHeader(fake_header_key_prefix + strconv.Itoa(i)) } return types.ActionContinue }Rustに基づいて開発されたカスタムプラグインのサンプルコード
fn on_http_request_headers(&mut self, _: usize, _: bool) -> Action { for i in 0..20 { let key = "fake_key_".to_string() + &i.to_string(); let value = "fake_value_".to_string() + &i.to_string(); self.set_http_request_header(&key, Some(&value)); } for i in 0..20 { let key = "fake_key_".to_string() + &i.to_string(); self.get_http_request_header(&key); } for i in 0..20 { let key = "fake_key_".to_string() + &i.to_string(); self.set_http_request_header(&key, None); } Action::Continue }AssemblyScriptに基づいて開発されたカスタムプラグインのサンプルコード
function onRequestHeaders(a: u32, end_of_stream: bool): FilterHeadersStatusValues { let fake_header_key_prefix: string = "fake_key_"; let fake_header_value_prefix: string = "fake_value_"; for (let i = 0; i < 20; i++) { stream_context.headers.request.add(fake_header_key_prefix + i.toString(), fake_header_value_prefix + i.toString()) } for (let i = 0; i < 20; i++) { stream_context.headers.request.get(fake_header_key_prefix + i.toString()) } for (let i = 0; i < 20; i++) { stream_context.headers.request.remove(fake_header_key_prefix + i.toString()) } return FilterHeadersStatusValues.Continue; }
異なる言語に基づいて開発されたカスタムプラグイン間のパフォーマンス比較
プログラミング言语 | リクエスト遅延の増加 |
C++ | 0.19 ms |
Golang | 0.20 ms |
さび | 0.21 ms |
AssemblyScript | 0.21 ms |
比較結果は、異なるプログラミング言語に基づいて開発されたカスタムプラグインが、要求の待ち時間に関して同様のパフォーマンスを提供することを示しています。