git 服务器如何扩展?
How do git servers scale?
流行的版本控制服务器(如 github)可能有大量的流量,需要可扩展和持久的数据存储。我想知道这是如何在后台实现的。
我很少 guesses/assumptions 了解它是如何工作的,但我不确定它们是否 100% 准确:
- 存储库可能存储在磁盘上而不是某些数据库解决方案(因为 git 服务器已经是自给自足的 AFAIK)
- 单个主机来服务整个流量可能是不够的,因此需要一些负载平衡
- 由于需要多台服务器,每台服务器都有自己的存储空间,因此将所有存储库保留在所有服务器中是没有意义的。 (所以我希望每个存储库都映射到一个主机)
- 为了可靠性,服务器可能不是 运行 在单个主机上,而是在实际同步的复制集群上(可能使用 kubernetes 等),并且这些可能与数据库备份一起定期备份。
- 可能有一个主负载均衡器应用程序将请求重定向到适当的集群(因此它知道哪个存储库映射到哪个集群)
另一种可能性是将整个 .git
作为 blob 存储在数据库中,并有一个可扩展的无状态应用程序获取每个请求 .git
,执行操作,再次存储结果并发送response 然而这可能是一个非常低效的解决方案,所以我认为它不太可能是底层机制。
所以我的主要问题是:
- 以上假设是否合理/准确吗?
- 如何实现一个所有 git 请求都定向到适当集群的负载平衡器应用程序? (例如,将存储库与集群 id 和 ip 映射,将其存储在数据库中,并建立一个 nodejs 应用程序,将传入的请求重定向到匹配的集群 ip 工作吗?)
- 如果上述内容不准确,人们将如何实现一个通常可扩展的 git 服务器? (如果有更好的方法)
不需要靠猜测。
对于 GitHub,githubengineering blog 详细说明了他们必须使用什么才能扩展到当前的使用水平。
除了升级 Rails 或删除 JQuery,在前端,他们还有:
- GLB: GitHub’s open source load balancer: At GitHub, we serve tens of thousands of requests every second out of our network edge, operating on GitHub’s metal cloud。
- MySQL High Availability at GitHub:GitHub 使用 MySQL 作为所有非 git 事物的主要数据存储,其可用性对 GitHub 的手术。
- Stretching Spokes:GitHub 的 Spokes 系统存储了 Git 存储库的多个分布式副本。本文讨论了我们如何让 Spokes 复制跨越广泛分离的数据中心。
关于 Kubernetes:
- "Kubernetes at GitHub" (2017)
- "Debugging network stalls on Kubernetes " (2019)
流行的版本控制服务器(如 github)可能有大量的流量,需要可扩展和持久的数据存储。我想知道这是如何在后台实现的。
我很少 guesses/assumptions 了解它是如何工作的,但我不确定它们是否 100% 准确:
- 存储库可能存储在磁盘上而不是某些数据库解决方案(因为 git 服务器已经是自给自足的 AFAIK)
- 单个主机来服务整个流量可能是不够的,因此需要一些负载平衡
- 由于需要多台服务器,每台服务器都有自己的存储空间,因此将所有存储库保留在所有服务器中是没有意义的。 (所以我希望每个存储库都映射到一个主机)
- 为了可靠性,服务器可能不是 运行 在单个主机上,而是在实际同步的复制集群上(可能使用 kubernetes 等),并且这些可能与数据库备份一起定期备份。
- 可能有一个主负载均衡器应用程序将请求重定向到适当的集群(因此它知道哪个存储库映射到哪个集群)
另一种可能性是将整个 .git
作为 blob 存储在数据库中,并有一个可扩展的无状态应用程序获取每个请求 .git
,执行操作,再次存储结果并发送response 然而这可能是一个非常低效的解决方案,所以我认为它不太可能是底层机制。
所以我的主要问题是:
- 以上假设是否合理/准确吗?
- 如何实现一个所有 git 请求都定向到适当集群的负载平衡器应用程序? (例如,将存储库与集群 id 和 ip 映射,将其存储在数据库中,并建立一个 nodejs 应用程序,将传入的请求重定向到匹配的集群 ip 工作吗?)
- 如果上述内容不准确,人们将如何实现一个通常可扩展的 git 服务器? (如果有更好的方法)
不需要靠猜测。
对于 GitHub,githubengineering blog 详细说明了他们必须使用什么才能扩展到当前的使用水平。
除了升级 Rails 或删除 JQuery,在前端,他们还有:
- GLB: GitHub’s open source load balancer: At GitHub, we serve tens of thousands of requests every second out of our network edge, operating on GitHub’s metal cloud。
- MySQL High Availability at GitHub:GitHub 使用 MySQL 作为所有非 git 事物的主要数据存储,其可用性对 GitHub 的手术。
- Stretching Spokes:GitHub 的 Spokes 系统存储了 Git 存储库的多个分布式副本。本文讨论了我们如何让 Spokes 复制跨越广泛分离的数据中心。
关于 Kubernetes:
- "Kubernetes at GitHub" (2017)
- "Debugging network stalls on Kubernetes " (2019)