首页 > 解决方案 > gRPC - 截止日期与更改系统时间

问题描述

我的软件在一个系统上运行,该系统的系统时钟由外部服务器任意设置。没有关于 (a) 发生多少时间变化的规则或保证;(b) 这种时间变化多久发生一次。

我的第一个问题:在这种情况下,是否有关于处理截止日期的最佳实践,因为截止日期(截至目前)是绝对时间而不是持续时间?

我的第二个问题:如果我的软件既不关心交付确认也不关心 rpc 调用的返回值,我是否可以安全地将截止日期设置为“现在”甚至过去的某个时间,以便尽快返回 rpc 调用尽可能?即如果截止日期已经过去,是否保证发送 rpc 的传出有效负载?

这并不重要,但我在不同的应用程序中同时使用 .NET 和 gRPC 的 C++ 实现。

标签: grpc

解决方案


根据gRPC 文档,没有单一的直接方法可以确定最佳截止日期。如果您的服务像Greeter 示例一样简单,那么 100 毫秒的截止日期就可以了。但是,如果您的服务很复杂,例如全球分布或必须在数据库中执行大型复杂查询,那么您必须考虑许多因素,例如,

  • 整个系统的端到端延迟,可以是同步的或异步的。
  • 应用程序设计

和许多其他人。有关设置截止日期的推荐方法,请参阅设置截止日期部分。由于系统时钟可以更改为向后或向前,因此截止日期计数已用时间而不是取决于系统时钟。

如果您的软件不关心 rpc 调用的返回值,您可以在不同的线程中进行调用并继续使用常规线程。


推荐阅读