我公司销售的系统是多机解决方案的软件。在某些情况下,其中一台机器上有一个UI,另一台机器上有一个后端/API。这些系统进行通信,并且都使用自己的时钟进行各种操作和存储值。
当UI的系统时钟比后端提前30秒或更长时间时,由于将UI的时间戳作为密钥信息发送给REST请求,查询开始出现错误。有一个“什么已经被我更新”的查询,每30秒发生一次,并且desync将导致更新的数据丢失,因为它们在计时窗口之外。
由于我没有任何控制系统,我的软件是安装在,我需要一个解决方案,在我的代码方面。我不能强迫顾客保持他们的时钟同步。
我考虑过的可能解决办法:
有什么想法吗?
发布于 2017-10-24 15:01:25
您最好的选择是在一定程度上重构API。
首先,尽管NTP是个好主意,但您不能保证它在使用中。此外,即使启用了OSs (至少Windows),也可能会拒绝太不同步的数据包,从而防止某些攻击(不过是按分钟计算)。
在处理这样的分布式服务时,口号是“不信任客户端”。这也适用于您实际控制客户端的情况,并不一定意味着客户端正在尝试任何恶意的东西--它只是意味着客户端不是权威的来源。
这应该包括时间戳。
考虑一下;时间戳在这里是个问题,因为您试图使用客户端的时间来查询服务器--但我们不应该信任客户机。相反,我们应该做的是让服务器返回请求处理时间的时间戳,或者数据库最新条目的更新标记,可以在后续查询中使用该时间戳来检索新的更新(初始查询的追溯时间取决于您自己)。
安全地处理并发更新有点困难,这取决于在冲突时应该发生什么。这里与处理以数据库为中心的问题的大多数问题和答案并没有什么不同,我只是想指出,如果您还没有正确地处理或检测情况,您可能需要在API中添加额外的字段。
https://stackoverflow.com/questions/46899668
复制相似问题