本来我想给本文取个《思维定势,创新与情怀》这个题目,后来觉得有点大,恰好昨天跟同事抽烟间隙聊到了bbr算法多么的创新顺带扯到了工业革命中蒸汽机发明以及后来汽车的发明,也吐槽了旧势力的愚昧与无知,所以,题目就跟100多年前的工业革命有关了。
        事情是这样的。
        当蒸汽机刚刚被发明出来时,仅仅是用来驱动水泵的,很快就用到了棉纺织业,但是却迟迟无法用于车辆,直到发明了火车以及后来的汽车。这是为什么?
        工业革命直接来源于水泵抽水这个需求,由于此时英国需要对抗来自印度殖民地棉布的竞争,后来蒸汽机迅速扩展到棉纺织业,这让印度棉布从此退出了市场,也让英国资本家的胃口大开,从此几十年太阳永不落,维多利亚女王在1851年万国工业博览会上高呼:荣光啊,荣光,无尽的荣光!
        但是,即便在1851年工业革命几乎已经完成的英国,道路上的车辆依然是马力驱动的,贵族以乘马车为荣,那为什么工业革命的成果没有用于改造车辆呢?为什么就可以快速用于水泵,纺织机,甚至铁甲舰呢?
        因为无论水泵,纺织机,还是铁甲舰,都是以前没有的东西,或者说以前有,但是在动力方面遇到了瓶颈,人们普遍采用头痛医头脚痛医脚这种策略满足当下的需求即可,在19世纪,不存在任何改造车辆的需求和动机,马车的动力十足,不存在动力问题,甚至后来当第一批汽车造出来时,汽车还一度跑不过马车,所以自然而然没有人会用乱哄哄的冒着黑烟的毫无美感的机器去替代那匹灵性的流线型且健康的马。
        即便是马车真的遇到瓶颈了,人们普遍的思路也是改进马车上,而不是用一个新的东西替换它!人们会想到把蒸汽机装载马上上,这样提供的额外动力会让马不那么累,人们会想到用马来拉铁轨上的火车,蒸汽机只是一个额外的动力补充,直到今天,人们依然用”马力“来度量引擎的动力...甚至直到今天,在车辆造型上,我们实际上依然用的是”改进后的马车“!
        我从网上找了几个图,我们来看一下:

        首先我们要明白,美索不达米亚的人们发明了轮子和车辆,这是几千年以前的事了,后来马拉战车几乎横扫了欧亚大陆,中国的商周时期也是马拉战车风靡的时代,我们来看一下马拉战车:




后来持有铁质武器的步兵和骑兵取代了战车,然而车辆并没有因此而退出历史舞台,一直到近代,马车都是贵族出行的代步工具,我们再来看个图:




然而,即便有几千年的历史,机器最终还是赢了,是该淘汰马的时候了,然而我们可以看到,人们只是把马换成了带有轮子的发动机而已:




我们今天看到的汽车,你会觉得跟马车完全不同,可是它的骨架依然是马车,特别是两驱的车子:




然而并不仅仅是汽车,我们今天看到的几乎所有的车辆都是”改进后的马车“:

三轮车:




拖拉机:




...
但是,除了自行车:




Perfect!自行车是个创举!它用后驱代替了前驱,然后用前轮的陀螺效应代替了马车的三轮或者四轮支架原理来维持平衡,这绝对是个创新。然而自行车的发明却和改进马车无关。
----------------------------------------
人们不是不愿意放弃马车,而是因为人们已经在马上身上投资了几千年,即便是有新的机器可以完全替代马车,人们于情怀上还是过不去,于是人们越是改进马车,越是对其增加了新的投资,最终,现在人们几乎想象不到汽车除了现在这个样子还能长成什么样子...这有点像毒瘾的戒断反应,以吸烟为例,当吸第一口的时候,觉得超级恶心,然而从熄灭它开始,尼古丁的戒断反应开始表现,迫使你不得不再吸一根,如此循环,最终你已经离不开尼古丁了,你想不到没有尼古丁生活会变成什么样子...
----------------------------------------
如果公司在一项技术上投资了3年没有产出,几乎都是会要么继续投资下去,要么完全砍掉,是绝对不会用一个新的技术替换它的,新技术只能作为额外因素融入,而不能作为主导因素替换它,这就是事实,汽车的造型就是典型的例子。
----------------------------------------
对于bbr算法,你觉得它的创举在哪里?
它的创举当然在封闭的反馈系统本身,然而我认为,它最大的创举在于改造了TCP拥塞控制的API,因为只有这样,bbr才不会被别的因素(比如猜测到出现丢包)所掣肘,bbr的patch集中,第14个patch: [v4,net-next,14/16] tcp: new CC hook to set sending rate with rate_sample in any CA state我觉得是最有效的:
This commit introduces an optional new "omnipotent" hook,
....
This function can also be used by a congestion control that prefers
not to use the default cwnd reduction approach (i.e., the PRR
algorithm) during CA_Recovery to control the cwnd and sending rate
during loss recovery.
...

如果没有这个patch,请问bbr算法怎么集成到现有框架中。现有框架中,对于丢包,猜测的既不准确,对其反应又过于激烈,好像发生了什么大事一般(是不是有点像台风预报)!如果没有这个patch,bbr正在高速运行时,只要发现有dubious发现有丢包,窗口计算马上就会被PRR接管,此时bbr也只能无奈。
----------------------------------------

该不该抛弃那匹马呢?自己决定!

----------------------------------------

下雨要不要穿皮鞋?自己决定!

无觅关联推荐,快速提升流量