Apache Thrift 是否保证数据完整性?

Does Apache Thrift guarantee data integrity?

Apache Thrift 是否有任何固有的数据完整性检查?它是否保证数据始终保持不变?我正在通过 Thrift 服务发送大量二进制数据,我不确定是否需要实施任何额外的完整性验证,例如 MD5 校验和。

不,没有 built-in 错误检测这样的东西。该任务留给开发人员 and/or 通信堆栈的其他部分。

要问的第一个问题是一个简单的 CRC32 是否足够,或者您是否需要更强大的工具,例如某些 SHA。上端可能是一个完全成熟的加密基础设施,用于签署消息并通过非对称密钥验证真实性。

对于这些用例中的每一个,都有很好的库可用。正如其他人正确指出的那样,如果传输依赖于 TCP,甚至 TLS/SSL 可能就足够了。根本没有必要再次发明那个轮子。而且,如上所述,如果确实有必要,可以很容易地将任务委派给 specialized, custom transport implementation 作为 "layered transport",类似于 TFramedTransport 所做的。

Apache Thrift 的层数是 explained here. It's a sensible assumption that errors could possibly happen only in Transport layer. If you are using TCP or HTTP (which is based on TCP) transport interfaces, data will be delivered unaltered, because that's how TCP works

注意:我假设您不担心您的通信渠道的安全性。如果这样做,TCP 和校验和都无法保护您免受恶意数据更改。在这种情况下,您需要像 SSL/TLS. See: Thrift/SSL.

这样的安全通信隧道