envoy源码分析(十二)-- XDS/GRPC

XDS

XDS 现在是cncf的一个标准了。

它是由envoy的xds接口演化出来的 数据面 接口,并且现在还在持续演化中。

https://github.com/cncf/xds

现在它的定义,一部分在 cncf/xds 里,一部分在envoy里,未来会弄到一起。

image

 

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

image

 

分别在代码里,实现这两个函数就可以了: SayHello(), 

client实现这个函数的调用逻辑:

image

 

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

image

 

只需要上述三步,就完成了一个RPC接口的实现。

 

envoy

envoy是client,以ads接口举例,它的实现如下:

定义:envoy/api/envoy/service/discovery/v3/ads.proto

接口名是:StreamAggregatedResources

image

 

接口的调用在这里:

image

 

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

image

 

envoy 有两个grpc实现,一个是envoy自己开发的轻量的,一个是google的库(即上图)。

 

posted on 2026-01-15 19:37  toong  阅读(2)  评论(0)    收藏  举报