写点什么

GitLab 是如何从 Azure 云迁移到谷歌云的?

  • 2019-05-30
  • 本文字数:1828 字

    阅读完需:约 6 分钟

GitLab是如何从Azure云迁移到谷歌云的?

最近GitLab.com刚从Azure迁移到了谷歌云平台(GCP),GitLab 认为新平台能更好地处理关键负载,提供最低的错误率和最高的可用性。网站并没有经历漫长的下线维护时间就完成了迁移工作,而做到这一点背后的关键就是 GitLab 的镜像切换能力。


GitLab 决定迁移到 GCP 的原因之一是希望新平台能提升性能和一致性。GitLab 的 Chrissie Buchanan 还提到,GCP 对 Kubernetes 的支持是另一个显著因素。但将 GitLab 完全转移到 Kubernetes 上来运行的项目被推迟到迁移完成后才继续进行。


GitLab 团队很早就意识到,简单地关掉GitLab.com,将所有数据从 Azure 复制到 GCP,更改 DNS 以指向新服务器,然后重新启动服务这条迁移路线是不可行的。实际上,光是复制大约半 PB 的数据然后验证所有数据是否正确传输就需要漫长的下线维护时间了。。


因此 GitLab 的工程师走了另一条路子:他们加入了一项新功能,将网站镜像到了多个自同步的 GitLab 实例上。平时,这些镜像可以在云服务内分发数据时提升性能和可靠性;而在这次跨云迁移的任务中,团队只要关闭基于 Azure 服务的镜像,然后启用在 GCP 服务上运行的新镜像(也就是故障切换)就可以了。


这项新功能称为 Geo,通过它可以在主服务不下线的前提下迁移 GitLab 的所有数据。所有数据传输完毕后,GitLab 的工程师就开始关闭 Azure 上的镜像,启用 GCP 上的新镜像,然后将后者设置为主镜像。这一过程非常精巧,需要漫长的的迭代、试错过程才能完美实现目标。


InfoQ 采访了 GitLab 联盟副总裁 Brandon Jung 和基础设施工程师 Andrew Newdigate,了解了更多细节。


InfoQ:你们介绍的迁移流程其实很简单直观,核心就是使用镜像解决问题,只有最后的镜像切换步骤麻烦一些。能否介绍一下你们遇到了哪些困难,又是如何解决的呢?


Andrew:举个例子。有一个小问题被我们长期忽视了:

  • GitLab公司在几乎所有工作流程中都用到了GitLab.com,其中故障转移流程在 GitLab.com 上还用 markdown 做成了方案模板。

  • 因为我们是在对暂存实例进行故障转移,而我们的工作流程是在 GitLab.com 的生产实例上运行的,所以后者在前者故障转移期间都是可用的。

  • 结果迁移过程快结束的时候才有人发现,生产实例故障转移的时候是没法在 GitLab.com 上继续展开工作的。

  • 事后看来这是显而易见的问题,但不知何故我们都忽略了它,可能是因为我们太习惯使用自家产品了。

  • 解决方案很简单:我们使用 GitLab 的推送镜像功能在单独的内部 GitLab 实例上维护迁移项目的副本。对 GitLab.com 所做的任何更改都将复制到镜像中。在故障转移期间我们使用这个实例代替生产实例。


InfoQ:GitLab.com 报告说每日错误率和整体服务可用性都有了显著提升。为什么迁移到 GCP 会有这样的效果?


Brandon:GCP 的一致网络是 API 端点性能提升的最大功臣。

Andrew:Brandon 提到了网络这一因素。我还在一篇博文中讨论了其它 5 项因素,而且不是所有因素都是技术层面的。


InfoQ:在这些提升中 Geo 可能带来的贡献有多大?


Andrew:Geo 是一种数据复制和异地镜像解决方案,也能用作灾难恢复方案,但它本身并不能提升 GitLab.com 的可用性。

事实上故障转移完成后我们就在 GitLab.com 上禁用了 Geo。几个月前我们又启用了 Geo,用作异地备份用途。如果发生数据中心层面的重大中断事故,我们就会开始故障转移到备份镜像上,但它平时不会直接接收生产流量。


InfoQ:迁移过程并非易事。GitLab 团队从迁移到 GCP 的经历中学到了什么?


Brandon:总体来说,我们能够成功地从微软 Azure 迁移到谷歌云是我们重视开发和开源的企业文化的功劳。

Brandon:GitLab 迁移到 GCP 后用户就能更容易使用 Kubernetes 了,同时网站的性能、可用性和客户服务水平都得到了提升。

Andrew:GCP 迁移项目是 GitLab 迄今为止开展的最大工程项目之一。它需要整个组织内多个团队之间的协调——包括工程(Geo、CI、计划)团队、QA 团队、基础架构、营销、支持等。这些团队需要协调交付多个工作流。GitLab 有一个非常清晰和成熟的工程交付流程,非常适合我们的远程文化;但我们需要调整并扩展这些流程,以便按时、安全地交付全公司共同参与的项目。由于我们在为 GitLab(产品)做内部测试,因此还能向产品经理提供反馈来改进网站,以使网站能更好地支持大型多团队项目。产品管理团队反应迅速,我们的大部分反馈现已获得网站采纳了。


如果你有兴趣了解 GitLab 迁移到 GCP 过程的详细情况,可参阅我们上面链接的博客文章。


查看英文原文How GitLab Managed to Migrate from Azure to Google Cloud Platform


2019-05-30 08:007756

评论

发布
暂无评论
发现更多内容

边缘计算各领域应用介绍

3DCAT实时渲染

边缘计算

一些前端开发小技巧,超级好用!

秃头小帅oi

商品管理运营最全的名词解释

第七在线

AutoMQ 系统测试体系揭秘

AutoMQ

Java 云计算 云原生 后端 AutoMQ

币安链市值管理机器人功能介绍

开发丨飞机丨 @aivenli

Port:2024 内部开发者门户IDP现状报告

杨振涛

平台工程 内部开发者平台 内部开发者门户

Flink DataStream API 批处理能力演进之路

Apache Flink

大数据 flink 批处理

一键修图拯救五一废片!百度搜索推出AI图片助手

科技热闻

构建下一代去中心化应用:基于BASE链的DApp开发

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

Spring Boot 编写 API 的 10条最佳实践

不在线第一只蜗牛

Java Spring Boot 后端

和鲸科技出席第五届空间数据智能学术会议,执行总裁殷自强受邀发表主题报告

ModelWhale

人工智能 大数据 学术会议

阿里巴巴商品详情API返回值深度解析:电商数据新纪元

技术冰糖葫芦

API boy api 货币化 API 接口 API】 pinduoduo API

软件测试学习笔记丨测试流程管理 jira 系统-测试用例管理

测试人

软件测试

11个Python循环技巧

不在线第一只蜗牛

Python C#

香港虚拟资产现货ETF正式发行,区块链市场再迎历史性时刻

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

构建安全高效的数字货币钱包:开发指南

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

LLM资料大全:文本多模态大模型、垂直领域微调模型、STF数据集、训练微调部署框架、提示词工程等

汀丶人工智能

人工智能 nlp AI大模型 大模型 Prompt工程

和鲸科技闪耀亮相InnoEX2024香港创科展,共话沪港数据合作,引领数据智能革新

ModelWhale

人工智能 大数据 创科展

MO干货 | Matrixone-Operator 设计与实现

MatrixOrigin

数据库 云原生 分布式,

《containerd 系列》了解 containerd 中的 snapshotter,先从 native 开始

公众号:云原生Serverless

云原生 容器化 Containerd

form-data 使用指南:从基础到高级应用

Liam

JavaScript 程序员 前端 后端 Form-data

推荐一款实用的 Python 库——sjvisualizer

伤感汤姆布利柏

2024 Google SEO【全面优化网页体验】

九凌网络

GitLab是如何从Azure云迁移到谷歌云的?_软件工程_Sergio De Simone_InfoQ精选文章