Skip to content

Commit

Permalink
Merge pull request #5 from chaspy/chaspy/grpc
Browse files Browse the repository at this point in the history
Transrate gRPC
  • Loading branch information
sakajunquality authored Apr 5, 2020
2 parents d03c267 + 52109e1 commit 3f68aaf
Showing 1 changed file with 12 additions and 14 deletions.
26 changes: 12 additions & 14 deletions content/grpc.md
Original file line number Diff line number Diff line change
Expand Up @@ -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/) 上で動作します。[リソース](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 を指定します。

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 は 多言語での 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/) のようなユースケースをサポートしています。さらに 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) 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` 関数へ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
Expand All @@ -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:
servergRPC トラフィックメトリクスを 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秒遅延させる [fault](https://istio.io/docs/tasks/traffic-management/fault-injection/) `server` へ挿入するための Istio のトラフィックルールを適用できます。アプリケーションの回復性をテストするために、カオステストシナリオでこのルールを適用できるかもしれません。

```YAML
apiVersion: networking.istio.io/v1alpha3
Expand All @@ -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)
- [ブログ - Istio を使用して内部 gRPC サービスを負荷分散する](https://cloud.google.com/solutions/using-istio-for-internal-load-balancing-of-grpc-services?hl=ja)

0 comments on commit 3f68aaf

Please sign in to comment.