【问题标题】:Does Apache Thrift guarantee data integrity?Apache Thrift 是否保证数据完整性?
【发布时间】:2017-02-03 14:10:31
【问题描述】:

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

【问题讨论】:

  • Thrift 建立在具有此类控制的普通网络层 (TCP) 之上。说实话,有时我会实现“我的级别”CRC,但动机是捕捉逻辑错误。
  • "Thrift 建立在普通网络层之上" -- Thrift 不限于 TCP。有些人将它与消息总线系统一起使用,或者将日期序列化为文件。在这个问题的范围内可能是正确的,但不能作为一般性陈述。

标签: c++ thrift checksum data-integrity


【解决方案1】:

不,没有内置错误检测这样的东西。该任务留给开发人员和/或通信堆栈的其他部分。

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

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

【讨论】:

    【解决方案2】:

    Apache Thrift 的层是explained here。错误可能只发生在传输层是一个明智的假设。如果您使用 TCP 或 HTTP(基于 TCP)传输接口,则数据将原封不动地传递,因为这就是 TCP works 的方式。

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

    【讨论】:

    • 数据将原封不动地传递”,除非您发现自己面临 MITM 攻击。那么数据在 TCP 方面仍然没有改变,但是,最终的结果可能仍然不是你想要的。这只是假设可能被打破的一个例子。
    • @JensG 好点。 只是假设可能被打破的一个例子。还有其他例子吗?
    • 如果我们想得够久,我们就会想出一些。 ;-)
    猜你喜欢
    • 2011-09-19
    • 2015-03-10
    • 2013-08-09
    • 2012-05-11
    • 2021-04-28
    • 1970-01-01
    • 2014-01-11
    • 2020-01-27
    • 1970-01-01
    相关资源
    最近更新 更多