应用程序架构考虑的延迟数量级

时间:2009-10-03 13:21:33

标签: architecture latency

是否有一个参考文献列出了通过网络(udp vs tcp / ip),磁盘,内存(顺序/随机访问),进程内和相互之间传输信息所需的时间(相对或绝对值)过程等?

最终我将不得不衡量这些,但我会很感激指向球场的数据。

内存与磁盘并不难找,但我想为其余的数字找到方位。

2 个答案:

答案 0 :(得分:3)

我还没有遇到过类似的事情,我认为除了针对您的特定场景测试之外,没有其他任何方式。 有很多因素可以提供一致的答案: 例如您使用的是什么NIC,他们是在进行TCP校验和卸载,交换结构的性能如何,您使用的是哪些磁盘,它们有多少缓存,您传输了多少数据,大量小数据包或一些大数据包等等。

当你正在谈论RAM访问时间时,你现在谈论的是10-100ns,而硬盘驱动器可能大约需要4-8ms。任何基准测试工具都应该为RAM&硬盘测量

另一方面,UDP对TCP,你真的不能给出任何具体的数字。从理论上讲,UDP应该比TCP快30-50%,因为它缺少ACK的额外跳闸并且具有较小的报头开销,但实际上在很多情况下TCP仅仅因为拥塞控制而优于UDP。此外,使用Nagle的TCP打开了批处理数据包,这也不能与UDP进行公平的比较而不会这样做。

总而言之,真的可以根据您的需求进行自己的测试。即使在运行类似测试的某个人周围存在基准表,但它们可能完全无效且对您的应用程序而言不可重现。硬件堆栈

答案 1 :(得分:0)

给汤姆+1 - 在我看到他的答案之前,这就是我要写的(不太清楚)。

要考虑的另一件事是

  1. 延迟需求与带宽需求

  2. 给定解决方案的可扩展性。 E.g。

    • 升级网络速度有多困难(你需要更换网卡吗?接线?路由器?)与可能规模的大小(100Mb对1Gb)?

    • 升级磁盘速度与速度增加收益有多难?

    E.g。更快的磁盘,具有更大缓存的磁盘,假设您的用例运行于可缓存数据,RAID或其他数据条带化,本地存储与网络存储。

  3. 换句话说,今天你的情况可能表明确切的指标指向磁盘是所有考虑的最佳解决方案,但你很少能将磁盘性能提高10倍,而如果真的需要你可以合理地使用网络。