• 被一位粉丝嫌弃了


    ba925cd5367367e807c3a29cb61449bf.png

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

    我笑了笑:“不能!”

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

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

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

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

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

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

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

    9ac162334d5e7ce7ca6c6eb4fd65a98c.jpeg

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

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

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

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

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

    一切都是未知数!

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

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

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

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

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

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

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

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

    0969df147e3d57dc917549c37539384f.png

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

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

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

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

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

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

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

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

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

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

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

    57835b1de1c3de58a075659dad8cb395.jpeg

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

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

    (完)

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

    240f700e042ee88285146a1707f439dd.png

    feaa10488a62e525cf927eefbf573419.png

    b50e452abd8f6ffffdaef99d491f0923.png

    921d25104c5e50d6f6a1f617fcc3a8be.png

  • 相关阅读:
    数电学习(六、时序逻辑电路)(二)
    【docker-compose 跨节点部署 kafka-kraft SASL用户加密集群】全网最新!
    【Linux线程】一、什么是线程
    C语言| 回文数字
    Codeforces Round #810 (Div. 2) D. Rain (线段树差分)
    如果把网络原理倒过来看,从无到有,一切都清晰了(上)
    uniapp subNvue 写的视频播放
    Redis
    vue实战入门后台篇十:springboot+mybatis实现网站后台-项目整合发布测试
    idea相关配置-----java
  • 原文地址:https://blog.csdn.net/coderising/article/details/126434033