我说的新时代不是指的那个新时代,不要魔怔了
本文实际上是网原的一次作业,也许可以帮到后来人。当作自己更博了
End To End Arguments in system design是极其重要的一篇系统设计论文,其中提出了先进的“端到端”设计理念,即,端到端的可靠通信应通过两个终端的应用层来保证,在底层实现的功能可能是没有价值的,除非对于性能有很高的要求。简而言之,底层负责尽力尽快传输数据,而高层负责可靠性及更多应用。
在文中,作者通过文件传输的例子证明,数据传递的任何一个环节都有可能出问题,保证每一步都可靠的代价太大。为了实现可靠传输,需要一个高于不可靠的网络层的可靠传输协议。这样的做法效率会更好。TCP/IP协议应运而生,就是这一论文思想的重要体现。除了可靠性,还有许多功能应该在高层实现。例如数据加密,只要也必须在终端处进行加密,传输过程中的安全性就可以得到保障,同时减少过程中加解密的overhead。底层应用不了解也不必了解高层的逻辑,也就无法针对它们优化。
每一个系统都是针对需求和成本进行权衡后的结果。我们应当注意到,随着时代发展,虽然互联网的大框架不变,互联互通的功能不变,但是其上的主流应用在进化,我们的需求也在随之变化。
对即时性的保证。随着远程办公在后疫情时代更加普及,人们对在线会议、视频直播的需求增长。我们知道TCP是可靠的传输协议,UDP追求数据的快速到达,但是很多时候,我们需要一个折中,即,在保证可靠性的情况下提高传输速度。于是,KCP协议被设计出来。TCP协议是为流量设计的,它的拥塞控制算法的目的是充分利用带宽。这使得TCP具有加速慢,显著受到丢包率影响的特点。KCP通过选择性重传、非延迟ACK等方法,“以10%-20%带宽浪费的代价换取了比TCP快30%-40%的传输速度”(来自skywind3000/kcp)。诚然,KCP不一定是最佳的解决方案,但是它确实体现出,我们基于旧的需求设计的协议需要更新以适应新的时代。
集中的、有缓存的访问。随着人们消费内容向视频转移,这些视频往往集中于几个网站,这就使得流量极其不平衡,浪费了许多带宽和设备的性能。这是与早期互联网,每台设备之间都要点对点访问的需求是不一样的。目前的解决方案一般是使用CDN对内容进行就近缓存,但是它仍然是一个权宜之计。有一些基于P2P模式的探索正在进行。但是,鉴于目前互联网的流量特征已经与十几年前大为不同,我们应该把这些新的“特征”视为一个基本需求,在设计底层硬件时考虑到它们,才能够在效率、速度上实现显著的进步。
事实上,从软件到硬件是目前科技发展的一个有趣的“逆潮流”。许多应用已经不满足于仅在高层实现功能,而底层相对简陋。应用的发展一定程度上受到硬件阻碍,需要底层硬件一起升级。例如大热的AI芯片、专用计算芯片等,就是针对某一个特定的应用,在底层实现它们,从而获得收益。回到我们更关注的网络层面,以前的操作系统内核负责管理一切网络、储存等,但是逐渐出现了DPDK等直接接管底层的应用程序,以实现加速。
端到端的设计理念是重要的、奠基性的,也是持久的。它极大的促进了互联网的发展,尤其是应用的快速搭建、项目的快速启动。但是随着应用的专一化,底层可以预知上层的需求。所以,底层为上层服务、依上层改进的趋势也不可忽视。