Home Resources

End to end argument in system design

End-to-end argument1 在考虑通讯子系统中要实现的功能中提供了类似 奥卡姆剃刀 的作用。

考虑通过网络进行文件传输为例,它包含从源系统读取、拷贝到发送程序、从网络发送、接收、系统写这些步骤,其中每个步骤都可能出错,使用实现良好(给出各种传输保证)的传输层,并不能解决端到端的文件传输可靠性,最终还是需要端到端的校验;事实上,对于文件传输这种应用,端到端的校验是必须的,无论其使用了多么可靠的传输层。

另外,我们可以使用一个并不可靠的传输层,然后在端到端基础上使用简单的重发机制达到文件的可靠传输。不过这并不是说底层优化并不重要,只是这些优化并不是某种“正确性(correctness)”要求,而是工程上基于性能考虑的某种权衡。端到端的失败重发成本很高,底层分包进行校验重发效率当然会高很多。关键论点(the end to end argument)是底层不需要提供完美的解决方案

一旦认识到底层的优化是基于性能考虑的工程上的权衡,那么,这种优化的力度控制就要谨慎。因为如果优化过度,可能对应用系统造成反向优化,这基于两点原因:

  1. 底层子系统被很多应用使用,有些应用可能并不需要这些优化提供的额外保障;
  2. 上层应用对于其所处理问题域知晓的信息比底层子系统更多,它们能更好的做出性能优化。

Footnotes:

Author: lotuc, Published at: 2023-04-02 Sun 00:00, Modified At: 2023-04-02 Sun 17:03 (orgmode - Publishing)