envoy源码分析(十二)-- XDS/GRPC
XDS
XDS 现在是cncf的一个标准了。
它是由envoy的xds接口演化出来的 数据面 接口,并且现在还在持续演化中。
https://github.com/cncf/xds
现在它的定义,一部分在 cncf/xds 里,一部分在envoy里,未来会弄到一起。

XDS由grpc承载。
GRPC
GRPC是通信协议(通信机制), 由http2承载。
grpc传输的是straem,stream里是序列化好的结构化数据。
其序列化与反序列化,支持多种工具,json等。默认是protobuf。
扫盲看这里:https://grpc.io/docs/what-is-grpc/
入门实践(C++):https://grpc.io/docs/languages/cpp/quickstart/
先用 bazel 编译一下grpc库。再用bazel编译里边的example,就可以实验了。
最简用法的代码:
https://github.com/grpc/grpc/blob/master/examples/cpp/helloworld/greeter_client.cc
message的定义,用过protobuf的都比较熟悉了。除此之外,接口的定义也在protobuf里,如下:
叫service:https://github.com/grpc/grpc/blob/master/examples/protos/helloworld.proto#L25

分别在代码里,实现这两个函数就可以了: SayHello(),
client实现这个函数的调用逻辑:

server实现这个函数的运行逻辑:

只需要上述三步,就完成了一个RPC接口的实现。
envoy
envoy是client,以ads接口举例,它的实现如下:
定义:envoy/api/envoy/service/discovery/v3/ads.proto
接口名是:StreamAggregatedResources

接口的调用在这里:

envoy/api/envoy/service/discovery/v3/google_async_client_impl.cc

envoy 有两个grpc实现,一个是envoy自己开发的轻量的,一个是google的库(即上图)。
浙公网安备 33010602011771号