什么是 10K 问题?
在 1999 年,Dan Kegel 向网络服务器提出了一个骇人听闻的难题:
是时候让网络服务器去同时应对 10000 个客户端了,你觉得呢?毕竟网络已经变得很普及了。
这就是著名的 C10K 问题。 通过改善操作系统内核和从像 Apache 那样的线程服务器迁移到像 Nginx, Node 这样的事件驱动服务器,工程师们解决了这个 C10K 问题。
但现在我们面临着一个更大的挑战,如果同时应对一千万个连接呢?要解决这个难题,需要些更变革的技术。
在数据中心,服务器管理员们并不需要面对这样的挑战,但根据来自红帽(Red Hat)的 Dave Neary 在最近在 FLOSS Weekly 节目中所说,我们已经跨过了单个系统管理员管理过万台服务器的壁垒。
我们应该忽略这个里程碑事件吗?
绝对不是。这样 200x-2000x 的增长是一个了不起的成就。Dave 回忆说,在九十年代,一个管理员只能管理四五台微软的服务器,一个 Linux 的系统管理员也只能管理 50 到 60 台的服务器。
现在,公司们已经开始用单个系统管理员管理超过 10,000 台的服务器了,这个巨大的改变深刻影响了两样事情:1)IaaS,把数据中心改成弹性的可编程的资源,把操作从基础设施中分离;2)开发操作革命,它强调工具、文化、自动化、度量、资源共享和基础设施的编码;
那么需要怎样才可以令一个系统管理员就可以管理一千万台服务器呢?
谁会知道?当然是谷歌公司了。
James Hamilon说,计算服务器的数量是困难的,微软说,他们有一百万台服务器,然后,谷歌的服务器预计会达到一千万台,所以我们离单个系统管理员管理千万台服务器的日子还有些远;
但是,当这种情况发生时,下面所列就是这些系统的基础:
- 把数据中心当成单独一台计算机那样对待
- 然后,在数据中心内部,在计算机群上部署可复用的多维度多重作业,以便提高机器利用率和节约金钱
- 但这仅仅是一个数据中心,这并不是把你从 十 带到 百万 台服务器。对于千万台的服务器,你必须利用好这些数据中心,所以,你要建一个 Spanner 那样的可以管理百万台机器、几百个数据中心和数万亿个数据项的系统;
- 当然,你还需要建造一个巨型网络系统,把这些数据中心连接在一起;
- 最后,当你真的面临一个系统管理员管理千万台的服务器,你很可能需要付出巨大的精力去做深入的挖掘,使得之前的工作变得有意义。
在高层面来说,单个服务器同时应对千万个连接和单个系统管理员同时管理千万台机器是一样的:可扩展性就是一切。
但在低层面,他们是完全不一样的。处理千万个连接是关于扁平化处理数据,减少层面,单独自己的事情;而管理千万台服务器是关于把智能灌输到更加智慧的层面;这就很像人类身体内部万亿个个体通过自己的小系统共同协作,然后被平衡化和去中心化的大脑所处理。