背景

这是一个真实的故事。大家都知道,思科是一个大型跨国公司,在全球有3万+开发人员。

虽说人多力量大,但有时候并非如此,人多也可能会制造更多混乱。思科公司内部需要管理的工件已经超过千万,语言种类繁多,并且在每一个软件交付过程中,都需要解析依赖,构建,测试,翻译,发布,这让测试,运维的同学感到头疼不已,每次发布软件则如临大敌,发布周期总是拖得很长。

思科不得不开始思考,如何搭建一个高效的工件交付平台,让全球的开发,测试,运维在这个平台上协作,统一流程,弥补 Dev 和 Ops 之间的鸿沟,让跨全球的工件流转和交付速度更快。想要搭建这样的平台,思科面临以下的问题:

如何支持不同语言的仓库:Maven, Docker, Ruby, NPM,Yum,Debian,并且支持高可用?
如何建立统一的持续交付的流水线,包含 Jenkins,Artifactory,SonarQub?
如何支持思科全球跨产品线(核心交换机,Webex,IOT)的3万多开发人员?

所以思科决定成立专门的DevOps 团队,打造统一持续交付平台,来解决这些问题,服务全球开发者。这个背负巨大使命的 DevOps 团队只有5个人,他们该怎么办?

思科 5人DevOps 团队是怎么做的

从工件仓库管理开始

最开始是单一的 Nexus 实例,后来比较了 Nexus 和 Artifactory,选择了后者。理由很简单,Artifactory 支持的语言更多,而 Nexus 只支持 Maven,而且 Artifactory 在高可用,高并发,多地复制上有更成熟的方案。

最初的Artifactory单节点仓库在美国东岸 RTP(Raleigh)。仓库管理了多种语言开发的工件,开发,测试,运维有了统一的平台来进行工件的传递和交付,在工件的传递过程中会附加每个阶段的元数据,例如,在测试阶段为工件加上测试的结果和地址,在部署阶段为工件加上部署的目标机信息,这样大大减少了团队的沟通成本,提供了发布速度,并且实现了自动化可重复性发布。

两地部署工件仓库

好东西很快被美国西岸(SJC - San Jose)的同事发现了,也要求在西岸有一个工件仓库管理平台,于是有了第二个节点。美国西岸的构建工件会实时复制到美国东岸 ,这样美国东岸的开发者需要使用某个包时,无需从西岸远程下载,而是在东岸本地下载。

然后,DevOps 团队使用思科的GSS(ACE Global Site Service),为东西岸的开发者提供了统一入口,就近服务用户。

全球4地部署工件仓库

有了美国东西岸的成功案例,思科把 Artifactory 节点扩展到了英国,印度。美国东岸的仓库会实时推送工件到英国和印度,进行测试或者翻译,英国和印度的测试结果和翻译产出物也推送回美国。

当工件仓库承载了思科每天 TB 级别的下载量,它已经成为了公司的核心资产,DevOps 团队为它做了热备份,也就是图中的SJC-B 数据中心,它作为 SJC-A 的热备份,时刻待命工作,一旦 SJC-A 数据中心宕机,请求会通过 Balancer自动转发到 SJC-B。

最后全球部署的拓扑图就是这样。

频繁使用虚拟仓库

在主节点创建虚拟仓库,来代理卫星节点的工件。这样主节点的视图里永远能获取到全球所有的工件。

账户系统架构

由于某种原因,思科没有公开构建系统的信息。上图是账户系统的架构图,和底层解耦,完全通过 API 创建 Jenkins,Artifactory,SonarQube 用户。

DevOps 团队构建的账户系统的 UI。

成果

平台底层的Artifactory仓库已经存储了全思科公司的8百万多工件,每天处理1千万次请求,每天的下载量是3TB(15年的数据)。现在思科每天的下载量更大,核心产品线都依赖于这个平台进行交付,实现按需分配资源,自动化上线,全球分发。

系统上线之后,为思科带来了巨大的效率提升:
至今节省了1800小时,之后会更多。
之前人工发布平均时间90分钟,自动化发布只需2分钟。
重复发布无需额外工作。再多发布需求也不担心。
恭喜!这个5人的 DevOps 团队立了大功!

未来计划

思科 DevOps 团队正在调研JFrog Mission Control,计划使用它的 API 来进行全球多地工件仓库的同步,容灾和监控。

参考资料

文中的视频地址:http://www.jfrogchina.com/#home-videos

下载JFrog Artifactory 开源版(代替 Nexus):
http://www.jfrogchina.com/open-source/

下载JFrog Artifactory 企业版(免费试用):
https://www.jfrog.com/artifactory/free-trial/?lang=zh-hans#High-Availability

任何问题欢迎联系我们:[email protected]