写点什么

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:001633
用户头像

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

关注

评论

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

win版BricsCAD Ultimate2024(2D与3D CAD建模设计) v24.2.05特别版

iMac小白

MoneyPrinterPlus:AI自动短视频生成工具,赚钱从来没有这么容易过

程序那些事

工具 程序那些事 AIGC

UE4/UE5像素流送云推流|程序不稳定、弱网画面糊怎么办?

点量实时云渲染

UE5 像素流送 像素流 像素流送技术 UE4

强大的音频处理软件Celemony Melodyne 5 Studio for mac(多功能音频编辑)v5.4.0.036版

Mac相关知识分享

Mac软件 音频处理 音频工具 音频软件

深入理解Playwright的高级功能和用法

我再BUG界嘎嘎乱杀

Python playwright

全网爆火【MBTI人格测试】是如何实现的?

AppBuilder

Simplemind pro for Mac(mac上的思维导图软件)v2.4.0版

Mac相关知识分享

Mac 办公软件 Mac软件 思维导图软件 思维导图绘制软件

QLab Pro for Mac(音频剪辑软件)v5.4.0版

Mac相关知识分享

音频制作 Mac软件 音频软件 mac下载

京东JD商品sku信息API返回值实践:商品规格数据驱动的供应链优化

技术冰糖葫芦

API Explorer API 接口 pinduoduo API

DeFi(去中心化金融)是什么,DeFi应用有哪些?如何利用它赚钱?

区块链开发团队DappNetWork

DeFi流动性挖矿 NFT链游 区块链开发 交易所源码 dapp合约开发

必不可少的办公软件Microsoft Outlook 2021 LTSC for Macv16.86中文正式版

Mac相关知识分享

办公软件 Mac软件 mac软件下载

以容器方式使用桌面系统

walker12138

TDengine Cloud 正式入驻 Azure Marketplace,服务中国企业出海

TDengine

数据库 tdengine

软件测试学习笔记丨Python 内置库 科学计算

测试人

软件测试

解读surging 的内存过高的原因

不在线第一只蜗牛

内存 .NET 7

win版Serato DJ Pro(专业DJ软件) v3.1.4.890 (x64)特别版

iMac小白

win版Android Studio(安卓开发环境)v2023.3.1.20 特别版

iMac小白

微信多开、消息防撤回工具 WechatTweak for Mac v3.8.8.18中文集成版

Mac相关知识分享

办公软件 Mac软件 mac软件下载 微信多开 微信软件

三维建模软件Rhinoceros 8 for Mac(犀牛8 mac版)v8.8.24163.12482版

Mac相关知识分享

Mac软件 三维建模 mac软件下载

事务中存在多线程,怎么处理?

江南一点雨

Java spring

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