热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【案例】思科的5人DevOps团队是如何打造千万工件级别,5中心持续交付平台的?

这是一个真实的案例。大家都知道,思科是一个大型跨国公司,在全球有3万+开发人员。虽说人多力量大,但有时候并非如此,人多也可能会制造更多混乱。思科公司内部需要管理的工件已经超过千万,语言种

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

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


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


1. 如何支持不同语言的仓库:Maven, Docker, Ruby, NPM,Yum,Debian,并且支持高可用?


2. 如何建立统一的持续交付的流水线,包含 Jenkins,Artifactory,SonarQub?


3. 如何支持思科全球跨产品线(核心交换机,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 Selector),为东西岸的开发者提供了统一入口,就近服务用户。


全球4地部署工件仓库




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



当工件仓库承载了思科每天 TB 级别的下载量,它已经成为了公司的核心资产,DevOps 团队为它做了热备份,也就是图中的SJC-B 数据中心,它作为 SJC-A 的热备份,时刻待命工作,一旦 SJC-A 数据中心宕机,请求会通过 Balancer自动转发到 SJC-B。SJC-A 和 SJC-B 直接的存储通过 Snap Mirror 进行同步,并且使用相同的Oracle 12C数据库存储记录。


此时,RTP做为 整个SJC中心 的热备份,当整个 SJC 都宕掉,GSS 会将全球的流量切换到 RTP 的数据中心。


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



频繁使用虚拟仓库




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


账户系统架构




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


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



成果




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



系统上线之后,为思科带来了巨大的效率提升:


  1. 至今节省了1800小时,之后会更多。

  2. 之前人工发布平均时间90分钟,自动化发布只需2分钟。

  3. 重复发布无需额外工作。再多发布需求也不担心。


恭喜!这个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


任何问题欢迎联系我们:info@jfrogchina.com


关于JFrog

公司成立于2008年,在美国、以色列、法国和西班牙拥有超过200名员工。JFrog 拥有3000多个付费客户,其中知名公司包括如Netflix、思科、谷歌、亚马逊。最近,JFrog 连续第二年被德勤评选为50家增长最快的技术公司之一,还被评为硅谷增长最快的私营企业之一。



推荐阅读
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 对象存储与块存储、文件存储等对比
    看到一篇文档,讲对象存储,好奇,搜索文章,摘抄,学习记录!背景:传统存储在面对海量非结构化数据时,在存储、分享与容灾上面临很大的挑战,主要表现在以下几个方面:传统存储并非为非结 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
  • Flutter 核心技术与混合开发模式深入解析
    本文深入探讨了 Flutter 的核心技术,特别是其混合开发模式,包括统一管理模式和三端分离模式,以及混合栈原理。通过对比不同模式的优缺点,帮助开发者选择最适合项目的混合开发策略。 ... [详细]
  • 在运行于MS SQL Server 2005的.NET 2.0 Web应用中,我偶尔会遇到令人头疼的SQL死锁问题。过去,我们主要通过调整查询来解决这些问题,但这既耗时又不可靠。我希望能找到一种确定性的查询模式,确保从设计上彻底避免SQL死锁。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • 本文详细介绍如何在忘记MySQL服务器密码的情况下进行密码重置,包括具体的步骤和注意事项。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • 本文详细介绍了在 Vue.js 前端框架中集成 vue-i18n 插件以实现多语言支持的方法。通过具体的配置步骤和示例代码,帮助开发者快速掌握如何在项目中实现国际化功能,提升用户体验。同时,文章还探讨了常见的多语言切换问题及解决方案,为开发人员提供了实用的参考。 ... [详细]
  • 在数据库设计中,谨慎使用外键至关重要。本文探讨了九个关键原因,包括数据完整性的维护、性能优化、系统复杂性的管理、数据迁移的灵活性以及对外部系统的依赖性控制。通过深入分析这些因素,可以帮助开发人员和架构师做出更明智的设计决策,确保数据库系统的高效与稳定。 ... [详细]
  • 利用Python与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
author-avatar
默默追寻爱情
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有