grpc 调用时间减少开销
grpc call time reduce overhead
我在 java 应用程序中使用 gRPC(非阻塞存根),两个函数调用之间的响应时间约为 5-8 毫秒。我想减少它。你有什么建议?有可能吗?
gRPC Java 开销通常以微秒(亚毫秒)衡量。如果您看到毫秒级的延迟,一般预期的原因是:
服务延迟为毫秒。在服务器上,测量服务响应所需的时间。许多服务需要几毫秒来处理请求。
网络延迟为毫秒。 运行 ping
从一台主机到另一台主机以获得通信性能的下限。 (如果您有兴趣,netperf tcp_rr 是更好的选择。)
基准测试没有预热 JVM。由于 class 加载发生,第一个 RPC 将非常非常慢。之后,在 JIT 开始编译代码之前,JVM 将使用解释模式一段时间。然后 JIT 将逐步优化代码。因此,请确保有 30 秒以上的持续 RPC 预热期。
Channel
未被重复使用。 DNS 查找、创建网络连接和执行 TLS 握手会增加延迟。但是,如果您对多个 RPC 重用 Channel
s,那么以后的 RPC 将不需要支付这些延迟成本。
我在 java 应用程序中使用 gRPC(非阻塞存根),两个函数调用之间的响应时间约为 5-8 毫秒。我想减少它。你有什么建议?有可能吗?
gRPC Java 开销通常以微秒(亚毫秒)衡量。如果您看到毫秒级的延迟,一般预期的原因是:
服务延迟为毫秒。在服务器上,测量服务响应所需的时间。许多服务需要几毫秒来处理请求。
网络延迟为毫秒。 运行
ping
从一台主机到另一台主机以获得通信性能的下限。 (如果您有兴趣,netperf tcp_rr 是更好的选择。)基准测试没有预热 JVM。由于 class 加载发生,第一个 RPC 将非常非常慢。之后,在 JIT 开始编译代码之前,JVM 将使用解释模式一段时间。然后 JIT 将逐步优化代码。因此,请确保有 30 秒以上的持续 RPC 预热期。
Channel
未被重复使用。 DNS 查找、创建网络连接和执行 TLS 握手会增加延迟。但是,如果您对多个 RPC 重用Channel
s,那么以后的 RPC 将不需要支付这些延迟成本。