End-to-End Argument 一种系统设计指南

J. H. Saltzer, D. P. Reed, and D. D. Clark. 1984. End-to-end arguments in system design. ACM Transactions on Computer Systems 2, 4 (Nov. 1984), 277–288.

一些说明

  1. functions:指的是functionality,而非编程中某一具体函数
  2. modules:指的是layers,而非编程语言中的组织架构或库
  3. 分层架构 a layered architectural style
    • 基本思想
      组件(components)以分层的方式从上到下排列,在层 Lₙ 的组件可以向层 Lₘ 的组件发起downcall(n < m)(即上层可以对下层进行调用),通常 Lₙ 会期待从 Lₘ 获得一个响应。
      此外,通过之前注册的callback,层 Lₘ 的组件可以向层 Lₙ 的组件发起upcall。

End-to-End Argument 端到端论证

内容

End-to-End:从一个端点到另一个端点的完整过程,通常涉及整个系统或网络的多个层级。
End-to-End Argument:有些功能只能在应用层“完全且正确地实现”,而在平台层(中间节点或底层系统)实现这些功能则是不可能的。
这种不可能性源于平台层可能只有部分信息——通俗说,平台层缺乏上下文,不像应用层可以拥有完整的信息。
目的是为了优化

Some functions may “completely and correctly be implemented only” on an application level, implementing said functions completely and correctly on a platform level is not possible.
if low levels of the communication system try to accomplish bit-perfect communication, they will probably introduce uncontrolled delays in packet delivery.

主要观点

关键观念是,底层并不需要提供“完美”的可靠性
某些功能应该由需要它的应用程序来实现,而不是由底层系统提供。
中间系统应该保持简单,只提供最基本的服务。
复杂的功能应该放在端点(即应用程序)中实现。

End-to-End Argument 在选择平台层/下层中要提供的功能时,类似于“奥卡姆剃刀”。因为平台层/下层往往在尚未确定调用改平台层/下层的应用之前就被指定,设计师可能会因而倾向于“帮助”用户承担过多的功能。意识到End-to-End Argument可以帮助减少这种想法。

由于下层系统/平台层是许多应用程序共有的,那些不需要该功能的应用程序也会为此买单。
下层系统/平台层可能没有像上层/应用层那样多的信息,因此无法高效地完成工作。

It is probably not important to strive for a negligible error rate at any point below the application level.

奥卡姆剃刀:“如无必要,勿增实体”,提倡在解释任何事情时,应当尽量采用最简单、最直接的假设或实体。

End-to-End Argument 适用于数据包排序packet ordering和循环抑制duplicate suppression。
End-to-End Argument 并不是一个绝对的规则,而是一种guide,有助于应用和协议设计分析。在确定该原则应当应用于哪些端点时,需要小心谨慎。

例子

TCP错误检测

TCP的错误检测和纠正机制就是End-to-End原则的一个典型应用。尽管底层网络可能提供一些错误检测功能,但TCP在端点实现了更全面的错误处理机制。

可靠文件传输

  • 目的:从机器A传输一个文件到机器B,并且不造成损坏
  • 方法:以chunk形式传输
    • 发送方在应用层将数据分割成多个chunks,然后将每个 data chunk 交给平台层传输
    • 接收方在平台层接收chunks,然后上交给应用层进行组装
      文件传输流程
  • 问题:能否只在平台层通过将failure detection和failure mitigation就能“完全且正确”地实现文件传输,还是在应用层也需要进行故障检测和故障缓解?
  • 现实:
    • 平台层通过校验chunk来检测传输情况,通过chunk重传减少失败
    • 应用层通过校验文件并检验文件组装情况,通过文件重传减少失败
    • 如果平台层没有重传限制/超时机制 或 没有应用层介入判断,平台层在每次失败后继续chunk重传就可能陷入无限循环
    • 为了避免无限循环,平台层需要将多次传输失败的情况告诉应用层
    • 只有应用层能实现有意义,完整且全面的故障检测,确定文件传输是否成功并且如何处理

所以,文件传输的failure detection和failure mitigation可以(也应该)在应用层和平台层进行,但只有应用层能确保传输的完整性和正确性。

  • 优化类型:
    • 性能优化:如果应用层检测到文件传输失败,可以重新传输整个文件。而平台层如果检测到某个数据块传输失败,只需重传该数据块,从而避免重传整个文件。
    • 成熟度优化:虽然某些功能只能在应用层完全正确实现,但在平台层重复实现这些功能可以帮助提高正确性。一些复杂且容易出错的功能封装在平台层,可以利用其成熟度,并在应用层"填补空白"。

局限性

虽然End-to-End原则在很多情况下是有效的,但也不是绝对的。在某些情况下,在网络中间层实现某些功能可能更有效(如网络安全、QoS等)。

Tim Moors 对系统设计中端到端的论点进行了批判性的回顾,强调了一些例子,如完整性检查、安全性、路由和拥塞控制已经受到了挑战,功能实现已经被迁移到了更低的层次。

参考

https://web.mit.edu/Saltzer/www/publications/endtoend/endtoend.pdf
https://temporal.io/blog/paper-summary-end-to-end-arguments-in-system-design
https://www.csd.uoc.gr/~hy435/material/moors.pdf
https://aayanand.medium.com/end-to-end-arguments-in-system-design-a0312861370f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值