查看原文
其他

被一位粉丝嫌弃了

码农翻身刘欣 码农翻身 2022-10-21


最近有个小伙伴问我:“刘哥,以你的技术能力,能写出一个Nginx吗?”

我笑了笑:“不能!”

他说:“Nginx的原理你不都知道了吗?网上那么多文章和书把源码也扒了个底朝天,我觉得我都能写出来,你怎么不能?”

我说:“你这是假设Nginx已经出现多年,Nginx的底层原理已经成为大路货,它的架构设计已经成为后端程序员津津乐道的话题,成为面试的必备项。”

“更关键的是,” 我补充道,“有现成的架构和源码作为参考,最难的部分已经迈过去了!”

“如果Nginx还没有出现呢?”

“假设你穿越到2002年,在俄罗斯的大型互联网公司Rambler工作,主要做Apache服务器的系统管理。

网站的流量很大,无论你如何折腾Apache,在蜂拥而至的请求面前,Apache都撑不住。

它那种使用一个进程来处理一个请求的方式根本无法解决C10K问题(处理至少10000个并发连接)。


你去Google搜索,但是网上也没有任何解决方案。

你可以向领导报告说这不可能,就此放弃,这也可能是绝大部分人的做法。

你也可以自己写个软件来解决C10K问题,这需要在黑暗中苦苦摸索,因为没有人知道方向,没有人可以给你指导。

解决方案行不行?这条路是不是死胡同?

能不能达到预想的扩展性?性能到底怎么样?稳定性怎么样? 

一切都是未知数!

你觉得你能像Ngnix的作者Igor Sysoev那样实现Ngnix吗?”

小伙伴暂时不理我了,可能是嫌我啰嗦吧。

我想到了一个哥伦布的故事,给他发了过去。

“哥伦布发现了美洲大陆,回国后成为英雄,国内的贵族瞧不起他:这有什么稀罕的,只要坐船出海,谁都能发现那块儿地方。 

在一次宴会上,又有人讥笑他了,哥伦布拿出一个生鸡蛋,问这个人:你能把这个鸡蛋立起来吗?

这个人试了很久也立不起来,沮丧地说这是不可能的事情。

哥伦布拿起鸡蛋的一头,在桌子上一磕,蛋壳破了,鸡蛋也立了起来。

那个人目瞪口呆,哑口无言了。”


小伙伴回复说:“你这从哪儿找到的野史啊..... 不过你想表达的意思我明白了,就是一个东西,看过别人怎么做,知道了底层原理和设计思路   vs   自己从零开始做,没人指导,不知道方向,不知道是不是死胡同,这是完全不同的。”

“对啊,如果说前者的难度是1, 后者的难度就是10 ,甚至100,1000。

你看到了Nginx的实现,觉得底层不就是epoll吗? 

看到了Docker的实现,觉得不就是对namespace,cgroup之类的封装吗?有什么大不了的?

但是把你放在这些软件诞生之前,你大概率是想不到这些实现方式的。”

“嗯,有道理。” 小伙伴说。

我已经感觉到小伙伴已经开始敷衍我了,但是我好为人师的毛病已经让我刹不住车了!

“更有可能的是,你可能连它们要解决的问题都发现不了。 发现一个特定问题是一个分水岭。用创造性的,漂亮的方案解决这个问题是另外一个分水岭。”

“我们大部分人都在第一个分水岭前倒下了,发现不了问题,或者发现了问题而安于现状,最多到网上喷几句。”

“所以,Igor Sysoev是个非常了不起的程序员,他没有进行营销活动,但Ngnix还是凭借闪电般的速度,超强的稳定性,丰富的扩展性获得了全世界用户的青睐,它靠着口碑在互联网界扶摇直上,超越Apache成为新霸主。”

“有一次Igor Sysoev在一个会议上发表演讲,他刚说了一句:大家好,我是Nginx的作者,台下便爆发出如雷的掌声,经久不息。程序员活到这份上,真是值了。”


“哦,对了,不得不说,Nginx的成功也有一定的运气成分,Igor Sysoev正好在恰当的时间发现并解决这个问题,晚了就被别人抢先了......”


“Hello,还在吗  ......”


(完)

点击下方图片,查看更多精彩





您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存