问题描述
在使用Git服务时,由于Bitbucket的故障,导致项目进度受到严重影响。用户开始考虑是否可以实现高可用的Git服务,同时希望了解其他选项以备将来之需。用户已经探讨了在GitHub和GitLab上创建多个远程仓库,但关于如何确保代码在两者之间同步而不会让工程师感到繁琐,还有待解决。用户还提到了可能将Git切换到本地托管,因为这在过去的两年中没有像SaaS解决方案那样频繁出现问题。
解决方案
请注意以下操作可能涉及版本差异或需额外配置。
方案1:使用GitLab Geo实现高可用
GitLab Geo是GitLab提供的高可用解决方案,主要用于加速全球分布团队的GitLab使用,但其另一个主要优势是可以将只读的次级服务器轻松升级为主服务器。详情请参考:https://about.gitlab.com/features/gitlab-geo/。但是需要注意的是,如果你完全依赖他人提供的服务,就无法实现真正的高可用。只有在你控制基础设施的情况下才能保证真正的高可用。这也是使用SaaS解决方案的弊端之一,你必须希望其内部运维团队在背后做了良好的实现。因此,不建议使用类似GitHub或GitLab.com的SaaS付费计划。鉴于这个问题已经严重影响了你的团队达到截止日期的能力,你应该考虑自托管的选项。
方案2:自托管Git服务
自托管Git服务是另一种解决方案,可以在一定程度上保证高可用性,你可以将Git解决方案托管在Docker容器中。你可以将文件存储后端设置为类似EFS(Amazon Elastic File System),将数据库托管在Amazon RDS中。尽管我没有尝试过这种设置,但理论上是可行的:将应用程序托管在临时环境中,将文件和数据存储在经过验证的高可用系统中。Amazon的可用性指标非常不错,尽管你仍然需要依赖他人,但整个系统并不是完全不在你的控制之下。如果应用程序的Docker实例意外停止,只需在其他地方重新启动它并更改DNS即可。
方案3:考虑Gitea或Keybase私有Git
你还可以考虑一些其他选项。Gitea是一个自托管Git服务的轻量级解决方案,比GitLab更容易自行托管,如果出现故障你也可以控制。你可以参考:https://gitea.io/en-US/。另一个值得了解的选项是Keybase私有Git,虽然我没有尝试过,也不太了解其工作原理:https://keybase.io/blog/encrypted-git-for-everyone。
不管你选择哪种方案,都要确保进行适当的备份和容灾规划,以确保在发生故障时能够快速恢复,并最大限度地减少项目受到的影响。