时常会有人来问我,应该加入大厂还是小厂。提问的方式有时候是很具体的,例如说「我有这几家公司的 offer,他们规模不一样,这会对我的职业发展产生什么影响呢?」有时候是很抽象的,就是讨论一下以后找工作到底应该专注于大概是什么规模的公司。我曾经想要写一篇长长的文章,从不同的角度来对比大厂和小厂的区别,最后发现很难完成。现在我决定换一个方法,想到哪里就写到哪里,写完一个具体能进行对比的角度,我就发一篇文章。
在这篇文章里,我想要对比的是大厂和小厂在规模上的本质区别。如果你希望接触到一些特大规模的技术问题,你就只能选择进大厂,因为小厂不会遇到这类问题,也就没有机会让你去接触这类问题。这里有一个很有意思的故事,叫做「数据中心里有朵云」,是个很好的例子。
Facebook 早期跟那个年代的其它公司一样,也是在别人的机房租机位开始的。后来做大了,就有了自建机房的需求。机房需要廉价的土地、电力和制冷,荒漠能够很好的满足这三个需求。Facebook 为了节能,专门设计了利用荒漠低温空气对服务器进行降温的通风系统,一旦发现室外温度比室内空调温度还要低,巨大的风扇就会启动,吸入室外温度更低的空气进来降温。
荒漠通常是零降水的,但有一次傍晚真的下雨了,导致室外气温迅速下降,机房开始从室外吸入冷空气降温。因为刚刚下过雨,室外空气虽然温度低但湿度非常高,进入室内后迅速被服务器温度加热升温。数据中心天花非常高,高温度高湿度的空气自然会往上跑,最终空气中的水分冷却后变成云。据说当时在数据中心的人听着服务器发出霹雳啪啦的火花声音,但没有任何办法去抢救服务器。他们把这次事故描述为「There is a cloud in the data center」。
Facebook 后来学聪明了,不能简单根据室外空气温度来判断是否应该吸入室外空气来降温,还要加上室外空气湿度作为限制条件。这种类型的问题,现在世界上也就只有几家公司能够遇到,因为现在绝大多数互联网公司只需要用别人的云服务,不需要自己拥有物理机器,更不需要自建数据中心。如果你想要接触到这类其它公司都没解决过的前沿问题,那只有大厂能够有足够的规模去触发这类问题,小厂根本触发不了。
类似的问题在 Facebook 其实不少,但也就只有这种规模的公司能遇上。举个例子,Facebook 曾经用 BitTorrent 来部署 web 服务器的更新,因为 web 服务器数量过多(百万级别),向每一台 web 服务器单独上传几个 GB 的编译文件效率太差。更新不是就覆盖几个 PHP 文件吗?为什么是几个 GB 的编译文件?因为 Facebook 那时候使用 HPHP 把 PHP 转译为 C++ 再编译为二进制文件。那为什么 Facebook 要发明 HPHP?因为 PHP 执行效率太差,当时有人根据历史数据进行拟合,发现 18 个月后 Facebook 的用户服务器比(用户总数除以服务器总数)将会下降到 1.0,就算 Facebook 有那么多钱买服务器,世界上也没有那么多机位放服务器,所以必须想办法提升执行效率。
所有这些规模导致的问题都是一环扣一环的,一个发明创造解决了上一个规模导致的问题,同时也带来了机遇给下一个发明创造。这种类型的发明创造只能发生在大厂里,因为小厂触发不了这个级别的规模问题,也没有充足的资源去进行发明创造。