本文首发于我的公众号 CloudDeveloper(ID: cloud_dev),专注于干货分享,号内有大量书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。
在孙悟空的七十二变中,我觉得最厉害的是分身能力,这也是他百试不得其爽的终极大招,每每都能打得妖怪摸不着北。
集群,学名叫 Cluster,可以翻译为簇、聚类、集群等多种意思,不同的翻译,在技术世界里所表示的意思都不尽相同,但都有一个共同的指向,即群体。集群就是由一组计算机所组成的实体,通常作为一个整体向用户提供资源和服务。
集群的研究和发展离不开人们对高性能计算的追求,像我们熟悉的向量机、对称多处理机、工作站、超级计算机等等都是对高性能计算追求下的产物。
这些系统要么是提高 CPU 的主频和总线带宽来提高系统性能,要么是增加 CPU 个数和内存容量来提高性能,但这些手段对性能的提高都是有限的。有人做过实验,当 CPU 个数超过某一阈值时,系统的性能反而会变差。其主要的瓶颈就在于 CPU 访问内存的带宽并不能随着 CPU 个数的增加而有效增加。
相反,集群系统的性能可扩展能力是线性增长的。我们可以简单通过增加机器数来增加集群的运算能力,相比购买高性能的大型计算机,同等运算能力下,我们可以获得更高的性价比。同时,系统的可靠性也得到了增强。
历史
早在七十年代计算机厂商和研究机构就开始了对集群系统的研究和开发,首先创造性发明集群的是 Seymour Cray(西摩·克雷)—— 超级计算机之父。
Seymour 是一位美国工程师,在 1960 年代,CDC 公司开始涉足高性能计算领域,彼时还是大型机的天下,这些大型机设计非常复杂,生产周期漫长,价格还非常昂贵。于是,当时在 CDC 公司担任总设计师的 Seymour 就决心建造出一台他心目中的高性能计算机。
Seymour 出于工程师的直觉,很快想到并行是提高计算机性能的有效方式。他使用廉价的方式来获得跟大型机一样的运算能力。他将多个普通的处理器连接起来,使它们能够协同工作,这就是高性能计算机的原型。
后来,IBM、HP 等公司学习了 Seymour 的这套架构,高性能计算机开始迅速推广,逐步取代原有的大型机。高性能计算机为当时的登月计划等大型科研项目作出了非常重要的贡献。
然后进入八十年代,在摩尔定律的指导下,CPU 频率不断提高,芯片不断降价,个人计算机强势崛起。苹果、微软等公司借助这股东风成为个人计算机时代的王者。随之而来的就是高性能计算机市场遭到了吞噬,被迫只能退守公司服务器市场。
但很快,随着互联网的普及,高性能计算机又迎来新的一波热潮。互联网上用户量庞大,普通 PC 难以应付如此众多的网络请求,必须要依赖由高性能计算机组成的服务器集群。在 2000 年左右的网络泡沫时期,成就了很多像 Sun 这样的服务器生产商。
如今,IT 行业向云计算冲击,诸如 Google、Apple、Amazon 等很巨头纷纷建立起了自己的数据中心。集群的规模在不断扩大,为海量的数据提高基础设施提供了支撑。根据不同的应用场景,集群也演变出多种形态,比如高性能集群、高可用集群、负载均衡集群等等。
集群元素
集群不是简单的硬件堆叠,而是硬件和软件的结合。从软件上说,集群至少需要:
构建于 TCP/IP 协议上的通信软件,用于集群中节点之间的通信。
一套中心管理软件,用于统一管理集群中节点的资源、任务和容错等等。
这两点比较好理解,集群的规模往往是比较庞大的,对于管理员来说,需要随时能够知晓集群中各节点的业务正常与否,出问题了应该怎么保证业务能够不中断,遇到流量高峰和低谷的时候,又该怎么响应,这些操作如果纯靠人工来完成那必将很惨烈。依靠软件和网络来完成自动化的管理方式,可以将管理员解放出来。当然,以上说的两点是比较宽泛的,用户可以根据自身需求来部署不同的集群元素。
一个比较经典的集群模型当属 Beowulf 集群,它通过一个节点统一将来自网络的请求分配给各个节点进行计算处理。
集群与分布式
集群与分布式像一对孪生兄弟,傻傻分不清楚。在我看来,它们之间没有特别明确的分界线,集群离不开分布式,分布式也需要集群。如果一定要做个区分,可以套用一个比喻来描述两者的区别:
一家餐厅刚开业,由于成本限制招了一个厨师,慢慢地,餐厅生意越做越好,一个厨师已经很难应付过来,于是又招了一个,这两个厨师水平相当,都能做同样的事,两个厨师之间的关系就是集群。两厨师除了炒菜,还要负责洗菜、配菜等等的活,工作负荷已经严重超标,为了让厨师能专心炒菜,把菜做到极致,餐厅又招了配菜师来辅助厨师,厨师和配菜师之间的关系就是分布式。
这个例子比较形象,在网站开发中也有类似的关系,两个全栈工程师之间就是集群的关系,前端工程师和后端工程师之间就属于分布式的关系。
所以,一定要有区分的话就是:集群是一个业务部署在多个服务器上,而分布式是一个业务拆分成多个子业务部署在不同的服务器上。但在实际部署中,为了高性能,需要分布式部署,为了高可用,需要集群部署,这两者都是业务所必须的指标。所以,集群和分布式之间的关系是相互补充的。
虚拟化
随着虚拟化技术的发展,一台服务器可以虚拟出多个虚拟机,对外提供业务,这种方式大大提高了资源的利用率,集群的部署也逐步从物理机过渡到虚拟机,灵活性大大提高。但同时也带来了更多新的研究课题。虚拟化计算、虚拟化存储、虚拟化网络、虚拟化安全等等这些课题共同推动着云计算产业迈出一个又一个的台阶。
数据中心
数据中心是集中存放和运行服务器的地方,是规模最大的集群。随着云计算和大数据概念的风起云涌,Google、Amazon 等这些明星公司幕后的数据中心也开始走入大众的视野。数据中心要求有优秀的架构设计、电路设计、空间设计等等,还要有机制能够应对各种各样的意外,否则一点小小的失误,公司的股价恐怕就要跳水。
地理位置的选择也是数据中心考虑的一个指标,随着绿色数据中心概念的兴起,越来越多人关注数据中心所带来的能源问题和环境问题,选择一个远离市区,并且能利用天然水源和气温的地方,将会为数据中心的建设节约大量的成本。Google 等大公司的数据中心就有意放在高纬度、高海拔的地区,以及有湖泊、河流流经地区,以享受天然的空调和冷却水。
参考
[1] 分布式与集群的区别是什么?
[2] 数据中心网络架构演讲
[3] Linux 高性能计算集群
[4] 高性能计算机传奇
我的公众号 CloudDeveloper(ID: cloud_dev),号内有大量书籍和视频资源,后台回复「1024」即可领取,分享的内容包括但不限于云计算虚拟化、容器、OpenStack、K8S、雾计算、网络、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++ 编程技术等内容,欢迎大家关注。