避不开的数据拷贝
今天说点实质性的问题,不谈细节。
从图灵机的基础理论,到冯诺依曼,哈佛架构,再到计算机,不管是服务器还是 PC,一直到计算机网络,不管是广域网还是数据中心,不管是 P2P 还是 C/S,最终这类机器都是 “拖挂” 式结构,也就是说计算部件和为计算部件提供数据的部件是分离的,这就注定数据要不停搬来搬去,从一个地方到另一个地方。
数据不停搬运是通用计算机以及计算机网络的内在属性,从内存在 CPU,从设备到内存,从设备到 CPU,从内存一个地方到另一个地方,从一台机器到另一台机器,不一而足。因为作为通用机器,对数据必须中立,这意味着机器不能内置任何性能偏好的数据。
既然要不停搬运数据,就一定涉及拓扑问题,根据效能优化的结果往往落实到 fullmesh 和星型拓扑,总线型拓扑的中间态。共识是,只要多对多系统,其收敛比一定大于等于 1,这又是一个统计复用系统,收敛比一定大于 1。
收敛比大于 1 的统计复用系统一定会遭遇拥塞,延迟,异构存储墙(比如内存墙)等问题,一个良好的系统一定要用 CAP 定理兜底。幸运的是,从计算机主板到整个互联网,这个底兜住了,人们在此之上致力于各种传输优化, 收效颇丰,但若要极致优化,办法似乎只有一个,就是减少数据搬运,甚至尽量不搬运,主机零拷贝是一个好例子,但网络领域似乎没有这么好的,CDN 勉强算一个。
减少数据搬运的效果要远大于优化拥塞控制,特别对于有低延时需求的场景,在统计意义上,减少传输是减少拥塞延时的唯一方式。统计传输内容,用字典和映射代替拷贝本身,但这种方式始终不入经理们的法眼。
做个类比,哺乳动物非常类似计算机拖挂式结构,而低级昆虫则相反。
哺乳动物通过血液交换气体营养,通过消化系统将食物从嘴处理到肛门,通过神经系统传递信号和指令,所有这些系统的每一次运输都有一个确定的源和目标对,比如口鼻,心脏,细胞,大脑,肌肉,即便这是个缜密的近乎确定性的网络,偶然的血压波动,血脂,血管壁畸变都会引发灾难性后果,比如心梗,脑梗,脑出血,肺栓塞,肌溶解。
与哺乳动物相对的是昆虫,每个体节有独立神经节,可局部决策,反射弧超短。感觉和动作直接耦合,可快速响应,没有大脑或大脑能耗极低,代谢率极低,并且容错率超高,砍断半截还能活。
对比这两类结构,从进化的角度看,哺乳动物类似计算机系统,牺牲了能效和速度,换得了灵活性和适应性,属于通用系统,这启发人们若设计一个高速系统,必须反着来,牺牲灵活性和适应性,换得能效和速度,打造一个专用系统。
同理,做传输优化,不要指望算法自适应,最高效的算法一定是硬编码,事先采集前置信息,写进代码里,对优化最重要的是信息量,是数据而不是算法,不要试图实时探测,不要启发预测,代之要尽可能快地进行反馈。
浙江温州皮鞋湿,下雨进水不会胖。