From bb6bc38c713527482cffcee9dfa95109839b8186 Mon Sep 17 00:00:00 2001 From: kondo takeshi Date: Sat, 28 Mar 2020 00:01:23 +0900 Subject: [PATCH 01/10] Transrate gRPC --- content/grpc.md | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/content/grpc.md b/content/grpc.md index e6340e4..e9c4509 100644 --- a/content/grpc.md +++ b/content/grpc.md @@ -4,20 +4,19 @@ publishDate: "2019-12-31" categories: ["Traffic Management"] --- -[gRPC](https://grpc.io/) is a communication protocol for services, built on [HTTP/2](https://www.cncf.io/blog/2018/08/31/grpc-on-http-2-engineering-a-robust-high-performance-protocol/). Unlike REST over HTTP/1, which is based on [resources](https://en.wikipedia.org/wiki/Representational_state_transfer), gRPC is based on [Service Definitions](https://grpc.io/docs/guides/concepts/). You specify service definitions in a format called [protocol buffers](https://developers.google.com/protocol-buffers/) ("proto"), which can be serialized into an small binary format for transmission. +[gRPC](https://grpc.io/) はサービス間通信のプロトコルで、[HTTP/2](https://www.cncf.io/blog/2018/08/31/grpc-on-http-2-engineering-a-robust-high-performance-protocol/) 上で動作します。[resources](https://en.wikipedia.org/wiki/Representational_state_transfer) ベースの HTTP/1 上で動作する REST と異なり、gRPC は [Service Definitions](https://grpc.io/docs/guides/concepts/) ベースです。伝達のための小さなバイナリフォーマットへシリアライズすることができる [protocol buffers](https://developers.google.com/protocol-buffers/) ("proto") と呼ばれるフォーマットで service definitions を指定します。 -With gRPC, you can generate boilerplate code from `.proto` files into [multiple programming languages](https://grpc.io/docs/quickstart/), making gRPC an ideal choice for polyglot microservices. +gRPC では、`.proto` ファイルから [multiple programming languages](https://grpc.io/docs/quickstart/) へのボイラープレートコードを生成することができます。このため、gRPC は polyglot microservices のための理想的な選択となるでしょう。 -While gRPC supports some networking use cases like [TLS](https://grpc.io/docs/guides/auth/) and [client-side load balancing](https://grpc.io/blog/loadbalancing/), adding Istio to a gRPC architecture can be useful for collecting telemetry, adding traffic rules, and setting [RPC-level authorization](https://istio.io/blog/2018/istio-authorization/#rpc-level-authorization). Istio can also provide a useful management layer if your traffic is a mix of HTTP, TCP, gRPC, and database protocols, because you can use the same Istio APIs for all traffic types. +gRPC が [TLS](https://grpc.io/docs/guides/auth/) や [client-side load balancing](https://grpc.io/blog/loadbalancing/) のようなユースケースをサポートする一方、それに加えて Istio を gRPC アーキテクチャへ組み込むことはメトリクスの収集、トラフィックルールの追加、[RPC-level authorization](https://istio.io/blog/2018/istio-authorization/#rpc-level-authorization) といった利点があります。すべてのトラフィックタイプに同一の Istio API を使用できるため、トラフィックが HTTP, TCP, gRPC, そして データベースプロトコルの間で混在している場合でも、Istio は 便利な管理レイヤーを追加できます。 -[Istio](https://istio.io/about/feature-stages/#traffic-management) and its data plane proxy, [Envoy](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/other_protocols/grpc#arch-overview-grpc), both support gRPC. Let's see how to manage gRPC traffic with Istio. +[Istio](https://istio.io/about/feature-stages/#traffic-management) とそのデータプレーンプロキシーである [Envoy](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/other_protocols/grpc#arch-overview-grpc) の両方が gRPC をサポートします。Istio を用いてどのように gRPC トラフィックを管理するか見てみましょう。 ![grpc](/images/grpc.png) -Here, we're running two gRPC Services, `client` and `server`. `client` makes an RPC call to the `server`'s `/SayHello` function every 2 seconds. +このように、`client` と `server` の2つの gRPC サービスがあります。`client` は RPC コールを `server` の `/SayHello` function へ2秒ごとに行います。 - -Adding Istio to gRPC Kubernetes services has one pre-requisite: [labeling](https://istio.io/docs/setup/kubernetes/additional-setup/requirements/) your Kubernetes Service ports. The server's port is labeled as follows: +Istio を gRPC Kubernetes サービスへ追加するためには要件があります。Kubernetes の Service ports の [labeling](https://istio.io/docs/setup/kubernetes/additional-setup/requirements/) です。server のポートは以下のようにラベル付けされます。 ```YAML apiVersion: v1 @@ -34,15 +33,15 @@ spec: port: 8080 ``` -Once we deploy the app, we can see this traffic between client and server in a [service graph](https://www.kiali.io/): +アプリケーションをデプロイすると、[service graph](https://www.kiali.io/) で client と server の間のトラフィックを見ることができます。 ![kiali](/images/grpc-kiali.png) -We can also view the server's gRPC traffic metrics in Grafana: +server の gRPC トラフィックメトリクスを Grafana でも見ることができます。 ![](/images/grpc-server-healthy.png) -Then, we can apply an Istio traffic rule to inject a 10-second delay [fault](https://istio.io/docs/tasks/traffic-management/fault-injection/) into `server`. You might apply this rule in a chaos testing scenario, to test the resiliency of this application. +また、10秒の delay [fault](https://istio.io/docs/tasks/traffic-management/fault-injection/) を `server` へ挿入するための Istio のトラフィックルールを適用できます。アプリケーションの回復性をテストするために、カオステストシナリオでこのルールを適用できるかもしれません。 ```YAML apiVersion: networking.istio.io/v1alpha3 @@ -64,11 +63,10 @@ spec: subset: v1 ``` -This causes the client RPC to time out (`Outgoing Request Duration`): +これは client RPC にタイムアウト(`Outgoing Request Duration`)を起こします。 ![](/images/grpc-grafana-client-fault-inject.png) - -To learn more about gRPC and Istio: +gRPC と Istio についてさらに学ぶために: - [Istio docs - Traffic Management](https://istio.io/docs/concepts/traffic-management/#traffic-routing-and-configuration) -- [Blog post - gRPC + Istio + Cloud Internal Load Balancer](https://cloud.google.com/solutions/using-istio-for-internal-load-balancing-of-grpc-services) \ No newline at end of file +- [Blog post - gRPC + Istio + Cloud Internal Load Balancer](https://cloud.google.com/solutions/using-istio-for-internal-load-balancing-of-grpc-services) From e5ced31085a7cb1defcbd47fd5afbf3f6cddf611 Mon Sep 17 00:00:00 2001 From: Takeshi Kondo <10370988+chaspy@users.noreply.github.com> Date: Sat, 28 Mar 2020 02:54:19 +0900 Subject: [PATCH 02/10] Update content/grpc.md --- content/grpc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/grpc.md b/content/grpc.md index e9c4509..b0350b1 100644 --- a/content/grpc.md +++ b/content/grpc.md @@ -4,7 +4,7 @@ publishDate: "2019-12-31" categories: ["Traffic Management"] --- -[gRPC](https://grpc.io/) はサービス間通信のプロトコルで、[HTTP/2](https://www.cncf.io/blog/2018/08/31/grpc-on-http-2-engineering-a-robust-high-performance-protocol/) 上で動作します。[resources](https://en.wikipedia.org/wiki/Representational_state_transfer) ベースの HTTP/1 上で動作する REST と異なり、gRPC は [Service Definitions](https://grpc.io/docs/guides/concepts/) ベースです。伝達のための小さなバイナリフォーマットへシリアライズすることができる [protocol buffers](https://developers.google.com/protocol-buffers/) ("proto") と呼ばれるフォーマットで service definitions を指定します。 +[gRPC](https://grpc.io/) はサービス間通信のプロトコルで、[HTTP/2](https://www.cncf.io/blog/2018/08/31/grpc-on-http-2-engineering-a-robust-high-performance-protocol/) 上で動作します。[resources](https://en.wikipedia.org/wiki/Representational_state_transfer) ベースの HTTP/1 上で動作する REST と異なり、gRPC は [Service Definitions](https://grpc.io/docs/guides/concepts/) ベースです。データの通信や永続化のための小さなバイナリフォーマットへシリアライズすることができる [protocol buffers](https://developers.google.com/protocol-buffers/) ("proto") と呼ばれるフォーマットで service definitions を指定します。 gRPC では、`.proto` ファイルから [multiple programming languages](https://grpc.io/docs/quickstart/) へのボイラープレートコードを生成することができます。このため、gRPC は polyglot microservices のための理想的な選択となるでしょう。 From a26935e1023bbf10cf9572bb559455ae52996a42 Mon Sep 17 00:00:00 2001 From: Takeshi Kondo <10370988+chaspy@users.noreply.github.com> Date: Sat, 28 Mar 2020 02:55:05 +0900 Subject: [PATCH 03/10] Update content/grpc.md --- content/grpc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/grpc.md b/content/grpc.md index b0350b1..b159947 100644 --- a/content/grpc.md +++ b/content/grpc.md @@ -6,7 +6,7 @@ categories: ["Traffic Management"] [gRPC](https://grpc.io/) はサービス間通信のプロトコルで、[HTTP/2](https://www.cncf.io/blog/2018/08/31/grpc-on-http-2-engineering-a-robust-high-performance-protocol/) 上で動作します。[resources](https://en.wikipedia.org/wiki/Representational_state_transfer) ベースの HTTP/1 上で動作する REST と異なり、gRPC は [Service Definitions](https://grpc.io/docs/guides/concepts/) ベースです。データの通信や永続化のための小さなバイナリフォーマットへシリアライズすることができる [protocol buffers](https://developers.google.com/protocol-buffers/) ("proto") と呼ばれるフォーマットで service definitions を指定します。 -gRPC では、`.proto` ファイルから [multiple programming languages](https://grpc.io/docs/quickstart/) へのボイラープレートコードを生成することができます。このため、gRPC は polyglot microservices のための理想的な選択となるでしょう。 +gRPC では `.proto` ファイルから [multiple programming languages](https://grpc.io/docs/quickstart/) へのボイラープレートコードを生成することができます。このため、gRPC は 多言語での microservices のための理想的な選択となるでしょう。 gRPC が [TLS](https://grpc.io/docs/guides/auth/) や [client-side load balancing](https://grpc.io/blog/loadbalancing/) のようなユースケースをサポートする一方、それに加えて Istio を gRPC アーキテクチャへ組み込むことはメトリクスの収集、トラフィックルールの追加、[RPC-level authorization](https://istio.io/blog/2018/istio-authorization/#rpc-level-authorization) といった利点があります。すべてのトラフィックタイプに同一の Istio API を使用できるため、トラフィックが HTTP, TCP, gRPC, そして データベースプロトコルの間で混在している場合でも、Istio は 便利な管理レイヤーを追加できます。 From 51c60ecb23bab40c150516be73143974db03a08e Mon Sep 17 00:00:00 2001 From: Takeshi Kondo <10370988+chaspy@users.noreply.github.com> Date: Sat, 28 Mar 2020 02:57:04 +0900 Subject: [PATCH 04/10] Update content/grpc.md --- content/grpc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/grpc.md b/content/grpc.md index b159947..c825174 100644 --- a/content/grpc.md +++ b/content/grpc.md @@ -8,7 +8,7 @@ categories: ["Traffic Management"] gRPC では `.proto` ファイルから [multiple programming languages](https://grpc.io/docs/quickstart/) へのボイラープレートコードを生成することができます。このため、gRPC は 多言語での microservices のための理想的な選択となるでしょう。 -gRPC が [TLS](https://grpc.io/docs/guides/auth/) や [client-side load balancing](https://grpc.io/blog/loadbalancing/) のようなユースケースをサポートする一方、それに加えて Istio を gRPC アーキテクチャへ組み込むことはメトリクスの収集、トラフィックルールの追加、[RPC-level authorization](https://istio.io/blog/2018/istio-authorization/#rpc-level-authorization) といった利点があります。すべてのトラフィックタイプに同一の Istio API を使用できるため、トラフィックが HTTP, TCP, gRPC, そして データベースプロトコルの間で混在している場合でも、Istio は 便利な管理レイヤーを追加できます。 +gRPC は [TLS](https://grpc.io/docs/guides/auth/) や [client-side load balancing](https://grpc.io/blog/loadbalancing/) のようなユースケースをサポートしています。さらに gRPC のアーキテクチャに Istio を組み込むことはメトリクスの収集、トラフィックルールの追加、[RPC-level authorization](https://istio.io/blog/2018/istio-authorization/#rpc-level-authorization) といった利点があります。すべてのトラフィックタイプに同一の Istio API を使用できるため、トラフィックが HTTP, TCP, gRPC, そして データベースプロトコルの間で混在している場合でも、Istio は 便利な管理レイヤーを追加できます。 [Istio](https://istio.io/about/feature-stages/#traffic-management) とそのデータプレーンプロキシーである [Envoy](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/other_protocols/grpc#arch-overview-grpc) の両方が gRPC をサポートします。Istio を用いてどのように gRPC トラフィックを管理するか見てみましょう。 From c599a317538471f5155fe4d681e229fbe4bcac0b Mon Sep 17 00:00:00 2001 From: Takeshi Kondo <10370988+chaspy@users.noreply.github.com> Date: Sat, 28 Mar 2020 02:59:43 +0900 Subject: [PATCH 05/10] Update content/grpc.md --- content/grpc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/grpc.md b/content/grpc.md index c825174..dc24b9a 100644 --- a/content/grpc.md +++ b/content/grpc.md @@ -14,7 +14,7 @@ gRPC は [TLS](https://grpc.io/docs/guides/auth/) や [client-side load balancin ![grpc](/images/grpc.png) -このように、`client` と `server` の2つの gRPC サービスがあります。`client` は RPC コールを `server` の `/SayHello` function へ2秒ごとに行います。 +このように、`client` と `server` の2つの gRPC サービスがあります。`client` は RPC コールを `server` の `/SayHello` 関数へ2秒ごとに行います。 Istio を gRPC Kubernetes サービスへ追加するためには要件があります。Kubernetes の Service ports の [labeling](https://istio.io/docs/setup/kubernetes/additional-setup/requirements/) です。server のポートは以下のようにラベル付けされます。 From 756bca8c4b2a14a9cf4ae9cfdb2b0ecdda11fc23 Mon Sep 17 00:00:00 2001 From: Takeshi Kondo <10370988+chaspy@users.noreply.github.com> Date: Sat, 28 Mar 2020 03:00:11 +0900 Subject: [PATCH 06/10] Update content/grpc.md --- content/grpc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/grpc.md b/content/grpc.md index dc24b9a..c7b6750 100644 --- a/content/grpc.md +++ b/content/grpc.md @@ -41,7 +41,7 @@ server の gRPC トラフィックメトリクスを Grafana でも見ること ![](/images/grpc-server-healthy.png) -また、10秒の delay [fault](https://istio.io/docs/tasks/traffic-management/fault-injection/) を `server` へ挿入するための Istio のトラフィックルールを適用できます。アプリケーションの回復性をテストするために、カオステストシナリオでこのルールを適用できるかもしれません。 +また、10秒遅延させる [fault](https://istio.io/docs/tasks/traffic-management/fault-injection/) を `server` へ挿入するための Istio のトラフィックルールを適用できます。アプリケーションの回復性をテストするために、カオステストシナリオでこのルールを適用できるかもしれません。 ```YAML apiVersion: networking.istio.io/v1alpha3 From d7fa31d6773c406c73a0e4fe5712bf687709feac Mon Sep 17 00:00:00 2001 From: Takeshi Kondo <10370988+chaspy@users.noreply.github.com> Date: Sat, 28 Mar 2020 03:00:38 +0900 Subject: [PATCH 07/10] Update content/grpc.md --- content/grpc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/grpc.md b/content/grpc.md index c7b6750..3d2b709 100644 --- a/content/grpc.md +++ b/content/grpc.md @@ -63,7 +63,7 @@ spec: subset: v1 ``` -これは client RPC にタイムアウト(`Outgoing Request Duration`)を起こします。 +これにより client RPC にタイムアウト(`Outgoing Request Duration`)を起こします。 ![](/images/grpc-grafana-client-fault-inject.png) From d9d1a4c35866ae526d7821206be5fc2a68be7edd Mon Sep 17 00:00:00 2001 From: kondo takeshi Date: Sun, 5 Apr 2020 04:38:06 +0900 Subject: [PATCH 08/10] Change link for REST to Japanese --- content/grpc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/grpc.md b/content/grpc.md index 3d2b709..02a6060 100644 --- a/content/grpc.md +++ b/content/grpc.md @@ -4,7 +4,7 @@ publishDate: "2019-12-31" categories: ["Traffic Management"] --- -[gRPC](https://grpc.io/) はサービス間通信のプロトコルで、[HTTP/2](https://www.cncf.io/blog/2018/08/31/grpc-on-http-2-engineering-a-robust-high-performance-protocol/) 上で動作します。[resources](https://en.wikipedia.org/wiki/Representational_state_transfer) ベースの HTTP/1 上で動作する REST と異なり、gRPC は [Service Definitions](https://grpc.io/docs/guides/concepts/) ベースです。データの通信や永続化のための小さなバイナリフォーマットへシリアライズすることができる [protocol buffers](https://developers.google.com/protocol-buffers/) ("proto") と呼ばれるフォーマットで service definitions を指定します。 +[gRPC](https://grpc.io/) はサービス間通信のプロトコルで、[HTTP/2](https://www.cncf.io/blog/2018/08/31/grpc-on-http-2-engineering-a-robust-high-performance-protocol/) 上で動作します。[リソース](https://ja.wikipedia.org/wiki/Representational_State_Transfer)ベースの HTTP/1 上で動作する REST と異なり、gRPC は [Service Definitions](https://grpc.io/docs/guides/concepts/) ベースです。データの通信や永続化のための小さなバイナリフォーマットへシリアライズすることができる [protocol buffers](https://developers.google.com/protocol-buffers/) ("proto") と呼ばれるフォーマットで service definitions を指定します。 gRPC では `.proto` ファイルから [multiple programming languages](https://grpc.io/docs/quickstart/) へのボイラープレートコードを生成することができます。このため、gRPC は 多言語での microservices のための理想的な選択となるでしょう。 From 2fa883b661a12e0631cfe689a4c9011675844124 Mon Sep 17 00:00:00 2001 From: kondo takeshi Date: Sun, 5 Apr 2020 04:42:20 +0900 Subject: [PATCH 09/10] Change link for blog about load balancing gRPC to Japanese --- content/grpc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/grpc.md b/content/grpc.md index 02a6060..c407300 100644 --- a/content/grpc.md +++ b/content/grpc.md @@ -69,4 +69,4 @@ spec: gRPC と Istio についてさらに学ぶために: - [Istio docs - Traffic Management](https://istio.io/docs/concepts/traffic-management/#traffic-routing-and-configuration) -- [Blog post - gRPC + Istio + Cloud Internal Load Balancer](https://cloud.google.com/solutions/using-istio-for-internal-load-balancing-of-grpc-services) +- [ブログ - Istio を使用して内部 gRPC サービスを負荷分散する](https://cloud.google.com/solutions/using-istio-for-internal-load-balancing-of-grpc-services?hl=ja) From 52109e1a9ceddfefb5015adde8e3c0aa3b11b53d Mon Sep 17 00:00:00 2001 From: kondo takeshi Date: Sun, 5 Apr 2020 04:43:47 +0900 Subject: [PATCH 10/10] Add query string to show Japanese --- content/grpc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/grpc.md b/content/grpc.md index c407300..4d25a2a 100644 --- a/content/grpc.md +++ b/content/grpc.md @@ -4,7 +4,7 @@ publishDate: "2019-12-31" categories: ["Traffic Management"] --- -[gRPC](https://grpc.io/) はサービス間通信のプロトコルで、[HTTP/2](https://www.cncf.io/blog/2018/08/31/grpc-on-http-2-engineering-a-robust-high-performance-protocol/) 上で動作します。[リソース](https://ja.wikipedia.org/wiki/Representational_State_Transfer)ベースの HTTP/1 上で動作する REST と異なり、gRPC は [Service Definitions](https://grpc.io/docs/guides/concepts/) ベースです。データの通信や永続化のための小さなバイナリフォーマットへシリアライズすることができる [protocol buffers](https://developers.google.com/protocol-buffers/) ("proto") と呼ばれるフォーマットで service definitions を指定します。 +[gRPC](https://grpc.io/) はサービス間通信のプロトコルで、[HTTP/2](https://www.cncf.io/blog/2018/08/31/grpc-on-http-2-engineering-a-robust-high-performance-protocol/) 上で動作します。[リソース](https://ja.wikipedia.org/wiki/Representational_State_Transfer)ベースの HTTP/1 上で動作する REST と異なり、gRPC は [Service Definitions](https://grpc.io/docs/guides/concepts/) ベースです。データの通信や永続化のための小さなバイナリフォーマットへシリアライズすることができる [protocol buffers](https://developers.google.com/protocol-buffers?hl=ja) ("proto") と呼ばれるフォーマットで service definitions を指定します。 gRPC では `.proto` ファイルから [multiple programming languages](https://grpc.io/docs/quickstart/) へのボイラープレートコードを生成することができます。このため、gRPC は 多言語での microservices のための理想的な選択となるでしょう。