git - git 服务器如何扩展?
问题描述
流行的版本控制服务器(如 github)可能具有巨大的流量,需要可扩展且持久的数据存储。我想知道这是如何在后台实现的。
我对它的工作原理几乎没有猜测/假设,但我不确定它们是否 100% 准确:
- 存储库可能存储在磁盘上,而不是一些数据库解决方案(因为 git 服务器已经是自给自足的 AFAIK)
- 单个主机服务整个流量可能是不够的,因此需要一些负载平衡
- 由于需要多台服务器,每台服务器都有自己的存储,因此在所有服务器中保留所有存储库是没有意义的。(所以我希望每个存储库都映射到一个主机)
- 为了可靠性,服务器可能不是在单个主机上运行,而是在实际同步的副本集群上运行(可能使用 kubernetes 等),并且这些可能会与数据库备份一起定期备份。
- 可能有一个主负载均衡器应用程序将请求重定向到适当的集群(因此它知道哪个存储库映射到哪个集群)
另一种可能性是将整个.git
作为 blob 存储在数据库中,并有一个可扩展的无状态应用程序获取.git
每个请求,执行操作,再次存储结果和发送响应但是这可能是一个非常低效的解决方案,所以我认为不太可能成为底层机制。
所以我的主要问题是:
- 上述假设是否有意义/它们是否准确?
- 如何实现一个负载均衡器应用程序,将所有 git 请求都定向到适当的集群?(例如,是否可以使用集群 id&ips 映射存储库,将其存储在数据库中,并建立一个 nodejs 应用程序,将传入请求重定向到匹配的集群 ip 工作?)
- 如果上述内容不准确,人们将如何实现一个可扩展的 git 服务器?(如果有更好的方法)
解决方案
无需依赖猜测。
特别是对于 GitHub,githubengineering 博客详细说明了他们必须使用什么才能扩展到当前的使用水平。
除了升级 Rails 或删除 JQuery,在前端,它们还有:
- GLB:GitHub 的开源负载均衡器:在 GitHub,我们每秒从网络边缘处理数万个请求,在GitHub 的金属云上运行。
- GitHub 的 MySQL 高可用性:GitHub 使用 MySQL 作为所有非 git 事物的主要数据存储,它的可用性对 GitHub 的运营至关重要。
- Stretching Spokes:GitHub 的 Spokes 系统存储了 Git 存储库的多个分布式副本。本文讨论了我们如何让 Spokes 复制跨越广泛分散的数据中心。
关于 Kubernetes:
- “ GitHub 上的 Kubernetes ”(2017 年)
- “在 Kubernetes 上调试网络停滞”(2019 年)
推荐阅读
- ios - 何时重新创建 SwiftUI 中的工作表?
- linux - bash 中的三个左尖括号(`<<<`)是什么意思?
- python - 实现新的 CSS 设计时必须更改 Flask 端口
- javascript - Electron - 你如何撤销会话权限?
- python - 如何在 Python 中将列表从一个类调用到另一个类?
- machine-learning - 关键词文本识别与提取
- python - 为什么一个简单的减法会导致不同的输出?
- ios - 有没有办法同时请求相机权限和照片库权限?
- java - 给定问题标准,是否有比冒泡排序更有效的排序数组形式?
- ios - @EnvironmentObject 不反映在对象中