SGTM!

The processing of the entire request chain will be shorter.
And we don't need to be limited by grpc_gateway

Zexuan Luo <spacewan...@apache.org> 于2022年10月8日周六 19:54写道:
>
> background
>
> 1. Problem to be solved
>
> APISIX uses etcd as the configuration center. etcd has migrated the
> interface to gRPC since v3. However, since there is no project in the
> OpenResty ecosystem that supports gRPC, APISIX can only call the HTTP
> interface of etcd. The HTTP interface of etcd is provided through
> gRPC-gateway. Essentially, etcd runs an HTTP to gRPC proxy at the
> server level, and external HTTP requests will be converted into gRPC
> requests. In practice, we also found some problems with the
> interaction between the HTTP API and the gRPC API. In fact, having a
> gRPC-gateway does not mean that it can perfectly support HTTP access,
> there are some subtle differences here.
>
> 2. The benefits of solving this problem
>
> 2.1 By supporting interacting with etcd via gRPC, APISIX can have
> first-class support from etcd.
> 2.2 Since gRPC shares all the streams in a TCP connection, we can also
> reduce the number of connections rapidly.
> 2.3 The connections can be made more secure by using gRPC directly
>
> Solution
>
> As the gRPC ability requires the grpc-client-nginx-module, we can't
> enable gRPC support when using APISIX on vanilla OpenResty.
> We interact with etcd in the scenes below:
>
> Check and init in the cli mode
>
> We can ship a grpcurl with APISIX, although this will make the packaging 
> tough.
>
> read/write keys in the Admin API
>
> We need to write the gRPC version of core.etcd.set/delete/get/...
>
> Sync conf during the startup
>
> We need to make it possible to send unary call in init_worker_by_lua,
> just like what we have done in the HTTP way (replacing cosocket with
> luasocket). We can do this by introducing a separate blocking
> implementation for unary call in the grpc-client-nginx-module.
>
> Sync conf when running APISIX
>
> There are two kinds of sync: full sync & incremental sync.
> For full sync, we will reimplement readdir API in gRPC.
> For incremental sync, current implementation is based on HTTP long
> poll, so each watch operation will start a new request and have its
> own timeout. When we switch to gRPC, we will use one connection at the
> time. So we need to provide a longer default timeout for the gRPC. We
> also need to reimplement the one-shot watchdir API with the recv call
> in gRPC's server stream.

Reply via email to