在 Atlassian,Go 被用于支持并发的实用程序设计,事实上是用于配置和监控测试服务器。他们为软件开发人员制作开发和协作工具(主要是一个 Java 商店)。他们有一个由虚拟机 (VM) 组成的测试集群,在大量无硬盘主机上运行。它的供应和监控系统是用 Go 编写的;该系统由 3 个部分组成:
- 在每个服务器上运行的代理进程,广播其虚拟机的状态。
- 一个管理程序,听取代理的广播,并在一个虚拟机没有报告时采取行动。
- 一个命令行工具,用于向管理器发布命令。
代理使用协议缓冲区来编码它所读取的状态信息,并通过 UDP 广播这些信息。管理器读取配置文件并为集群中的每个虚拟机启动一个 goroutine。每个 goroutine 监听来自其相应的虚拟机的公告,并发出指令(shell 命令),使其处于正确的状态。
为什么 Go 在这里起作用:每个虚拟机的一个 goroutine 很好地映射到它们的配置。
这个系统也很容易部署,因为他们可以运送没有依赖性的二进制文件。
正如 Atlassian 工程师 Dave Cheney 所说:
“代理程序运行在联网启动的机器上,并且完全从 RAM 中运行。与 JVM 或 Python 的运行时相比,单一的静态二进制文件是一个很大的节省。”