云计算平台系统资源庞大,一个系统可能有上万台服务器,分布在地球上不同地区的数据中心,系统上同时运行上千种应用。平台系统管理技术可以被用来有效地管理这些服务器,使得这些服务器协同工作,并可以快速发现和恢复系统故障,以保证大规模系统的正常运营。
Google的内部平台管理技术称为博格(Borg),Google一直到2015年才发表了一篇使用Borg进行大规模集群的管理的论文[17],披露了这个核心领域的技术细节。
博格是一个集群管理器,它负责对来自于几千个应用程序所提交的工作进行接收、调试、启动、停止、重启和监控。这些工作将用于不同的服务,运行在不同数量的集群中,每个集群各自都可能包含几万台服务器。博格的目的是让开发者能够不必操心资源管理的问题,让他们专注于自己的工作,并且做到跨多个数据中心的资源利用率最大化。博格的系统架构如图5-18所示。
图5-18 博格的系统架构
图5-18描述的博格的系统架构中包含了以下组件。
1)单元(Cell):将多台机器的集合视为一个单元。单元通常包括一万台服务器,如果有必要,还可以增加。它们各自具有不同的CPU、内存、磁盘容量等。
2)集群(Cluster):一般来说集群包含了一个大型单元,有时也会包含一些用于特定目的的小单元,其中有些单元可以用作测试。一个集群通常来说限制在一个数据中心大楼里,集群中的所有机器都是通过高性能的网络进行连接的。一个网站可以包含多个大楼和集群。
3)工作(Job):工作是一种在单元的边界之内进行执行的活动。这些工作可以附加一些需求信息,如CPU、OS、公开的IP等。工作之间可以互相通信,用户或监控工作也可以通过RPC方式向某个工作发送命令。(www.daowen.com)
4)任务(Task):一个工作可以由一个或多个任务组成,这些任务在同一个可执行进程中运行的。这些任务通常是直接在硬件上运行的,而不是在虚拟环境中运行的,以避免虚拟化的成本。任务的程序是静态链接的,以避免在运行时进行动态链接。
5)配额(Alloc):专门为一个或多个任务所保留的机器资源集。配额能够与运行于其上的任务一起被转移到一个不同的机器上。一个配额集表示为某个工作保留的资源,并且分布在多台机器上。
6)博格代理(Borglet):一个运行在每台机器上的代理。
7)博格主控器(Borgmaster):一个控制器进程,它在单元的级别上运行,并保存着所有博格代理上的状态数据。博格主控器将工作发送到某个队列中执行。博格主控器和它的数据将会进行五次复制,数据将被持久化在一个Paxos存储系统中。所有的博格主控器中有一个引领机。
8)调度器:对队列进行监控,并根据每台机器的可用资源情况对工作进行调度。
博格系统的使用者将向系统提交包含了一个或多个任务的工作,这些任务将共享同样的二进制代码,并在一个单元中执行。每个博格单元由多台机器组成。在这些单元中,博格会组合两种类型的活动:一种是如Gmail、GDocs、BigTable之类的长期运行服务,这些服务的响应延迟很短,最多几百毫秒;另一种是批量处理的工作,它们无须对请求进行即时响应,运行的时间也可能很长,甚至是几天。第一种类型的工作被称为生产(Prod)工作,它们相对于批量工作来说优先级更高,后者被认为非生产环境中的工作。生产工作能够获得一个单元的CPU资源中的70%,并且占用所有CPU数量的大约60%,它们还能够分配到55%的内存,并占用其中的大约85%。在单元中混合不同类型的工作,目的在于尽可能地优化资源的使用情况,能够节约Google在整个数据中心上的成本。
根据论文中所写的内容,某些单元的任务量是每分钟接受1万个新的任务,而一个博格主控器能够使用10~14个CPU内核,以及50GB的内存。一个博格主控器能够实现99.99%的可用性,但即使某个博格主控器或博格代理出现停机状况,任务也能够继续运行。有50%的机器会运行九个或九个以上的任务,而某些机器能够在4500个线程中运行25个任务。任务的启动延迟平均时间是25s,其中的20s用于安装包。这些等待时间的大部分都与磁盘访问有关。
这套系统的主要安全机制是Linux变根监狱(Chroot Jail)以及安全外壳协议(Ssh),通过博格代理进行任务调试的工作。对于运行在GAE或GCE中的外部软件,Google将使用托管的虚拟机,作为一个博格任务在某个KVM进程中运行。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。