写点什么

GitHub 使用 Spokes 进行跨数据中心复制

  • 2017-10-23
  • 本文字数:875 字

    阅读完需:约 3 分钟

来自 GitHub 的基础设施工程师 Micheal Haggerty 发表了一篇博文,解释他们是如何使用 Spokes 进行跨数据中心复制的。包括如何减少网络往返次数、引入三阶段提交、优化参考更新的性能以及其他各种调优。

Haggerty 解释说,GitHub 通过跨数据中心复制代码仓库来最大化弹性和降低延迟。一旦数据中心发生故障,需要由另一个区域的副本接替工作,为了得到最好的性能,需要为用户提供距离最近的副本。

Spokes 用于复制用户的代码仓库,确保代码仓库之间是同步的。它就像代理一样,在应用层面透明地执行复制任务。Haggerty 说,以前只有距离很近的代码仓库之间才能进行复制作业,后来通过降低延迟和优化参考更新性能等方式解决了这个问题。

之前在进行复制时延迟会不断增加,阻碍了 Spokes 进行参考更新的速度。虽然这对大多数用户来说并不是大问题,但有些 Git 工作流在这方面有很高的要求:

大部分用户不会经常提交代码,但 GitHub 托管着将近 7000 万个代码仓库,有些用户的工作流你根本无法预测到。我们努力让 GitHub 能够应付所以场景,也非常关注一些极端情况。

Haggerty 也解释了 GitHub 内部是如何处理参考更新的。GitHub 基于内部的测试来决定是否合并或 rebase 一个 PR。如果某个分支有多个 PR,每个 PR 都需要通过测试。

减少网络往返次数可以有效降低延迟。GitHub 使用三阶段提交协议来更新副本,同时使用分布式锁来保证更新次序。不过这样需要四个网络往返,成本有点高。他们也在努力确保在等待网络调用结束之前先完成其他的任务。

GitHub 的工程师也参与了 Git 项目,包括处理参考更新的事务机制,该机制基于副本是否有能力执行参考更新来决定是提交还是回滚事务。还有其他一些与参考更新操作相关的改进。

Spokes 使用自定义的校验和来比较副本,如果校验和相同,说明它们包含相同的内容。校验和是通过增量的方式算出来的,并不是每次都从头开始算。

内务(book keep)操作被合并到少量的事务当中,因为有些单次提交操作会造成数百次内务更新,需要耗费三分之一秒的时间。

点击链接阅读博客全文,了解更多细节。

查看英文原文 How GitHub Uses Spokes for Cross Data-Center Replication

2017-10-23 19:001707
用户头像

发布了 322 篇内容, 共 143.3 次阅读, 收获喜欢 148 次。

关注

评论

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

阿里前端智能化技术探索和未来思考

阿里技术

前端 智能化

10份重磅报告 — 展望中国数字经济未来

阿里技术

研究报告

Maven中的scope

六月暴雪飞梨花

maven 开源 技术 8月月更 scope

1对1视频源码——快速实现短视频功能提升竞争力

开源直播系统源码

软件开发 直播系统源码 一对一视频聊天系统

STM32+MPU6050设计便携式Mini桌面时钟(自动调整时间显示方向)

DS小龙哥

8月月更

重磅大咖来袭!阿里云生命科学与智能计算峰会精彩内容剧透

阿里云弹性计算

高性能计算 生命科学 AI制药 智能计算

【LeetCode】设计数字容器系统Java题解

Albert

LeetCode 8月月更

一体化在线政务服务平台,小程序容器技术加速建设步伐

Speedoooo

小程序 小程序容器 政务平台

C++关于函数参数的分析与函数重载进阶教程

CtrlX

c++ 编程语言 后端 cpp 8月月更

kafka_2.13-3.2.0.tgz配置安装

Cjpler

签约计划第三季

开源一夏 | GO语言框架中如何快速集成日志模块

Masters

开源

爆款视频怎么做?这里或许有答案!

博文视点Broadview

OSI 七层模型和TCP/IP模型及对应协议(详解)

Five

TCP/IP TCP协议 8月月更

Gitee图床被屏蔽后,我搭建了一个文件系统并封装成轮子开源!

IT学习日记

Java springboot 签约计划第三季 seaweedfs文件系统 Gitee图床崩了

博云入选Gartner中国DevOps代表厂商

BoCloud博云

云计算 容器 DevOps 云原生 云平台

mysql进阶(二十一)删除表数据与数据库四大特性

No Silver Bullet

MySQL 8月月更 四大特性 表删除

基于微前端qiankun的多页签缓存方案实践

vivo互联网技术

Vue 前端 微前端 qiankun

Geoffrey Hinton:深度学习的下一个大事件

OneFlow

人工智能 神经网络 深度学习

松哥手把手教你在 Vue3 中自定义插件

江南一点雨

Java Vue

SAP 云平台上一种 Low Code Development(低代码开发)解决方案

汪子熙

低代码 云平台 lowcode SAP 8月月更

开源一夏 | 深入理解 Spring Cloud Gateway 的原理

悟空聊架构

开源 Gateway 认证 签约计划第三季

外包学生管理系统架构文档

如何在技术上来保证LED显示屏质量?

Dylan

LED显示屏 led显示屏厂家

转转反爬攻防战

转转技术团队

爬虫

C++引用分析实例与案例刨析及使用场景分析详解

CtrlX

c c++ 后端 程序员进阶 8月月更

阿里云数据存储生态计划发布,助力伙伴数据创新

云桌派

阿里云

流动性质押挖矿系统开发如何制作?单双币系统开发成熟技术

开发微hkkf5566

“纯C”实现——三子棋小游戏

一介凡夫

c 后端、 #开源 8月月更

开源一夏|要有遥不可及的梦想,也要有脚踏实地的本事

坚果

开源 HarmonyOS OpenHarmony 8月月更

你认同这个观点吗?大多数企业的数字化都只是为了缓解焦虑

雨果

数字化转型 数字化

DVWA 通关记录 2 - 命令注入 Command Injection

Todd-Lee

GitHub使用Spokes进行跨数据中心复制_GitHub_Andrew Morgan_InfoQ精选文章