# 21.3 Atlassian：一个虚拟机群管理系统

http://www.atlassian.com/

在 Atlassian，Go 被用于支持并发的实用程序设计，事实上是用于配置和监控测试服务器。他们为软件开发人员制作开发和协作工具（主要是一个 Java 商店）。他们有一个由虚拟机 (VM) 组成的测试集群，在大量无硬盘主机上运行。它的供应和监控系统是用 Go 编写的；该系统由 3 个部分组成：
- 在每个服务器上运行的代理进程，广播其虚拟机的状态。
- 一个管理程序，听取代理的广播，并在一个虚拟机没有报告时采取行动。
- 一个命令行工具，用于向管理器发布命令。

代理使用协议缓冲区来编码它所读取的状态信息，并通过 UDP 广播这些信息。管理器读取配置文件并为集群中的每个虚拟机启动一个 goroutine。每个 goroutine 监听来自其相应的虚拟机的公告，并发出指令（shell 命令），使其处于正确的状态。

<u>为什么 Go 在这里起作用：</u>每个虚拟机的一个 goroutine 很好地映射到它们的配置。

这个系统也*很容易部署*，因为他们可以运送没有依赖性的二进制文件。

正如 Atlassian 工程师 Dave Cheney 所说：

> “代理程序运行在联网启动的机器上，并且完全从 RAM 中运行。与 JVM 或 Python 的运行时相比，单一的静态二进制文件是一个很大的节省。”

- [目录](directory.md)
- 上一节：[MROffice：一个使用 Go 的呼叫中心网络电话 (VOIP) 系统](21.2.md)
- 下一节：[Camilistore：一个可寻址内容存储系统](21.4.md)