写点什么

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

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

关注

评论

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

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

BeeWorks

3 个技巧,让你像技术专家一样解决编码问题

LigaAI

程序人生 技术专家 技术人成长 问题分析及解决 企业号 6 月 PK 榜

从分布式到微服务解密“架构”原理与实战笔记

小小怪下士

Java 程序员 分布式 微服务

当GaussDB遇上了毕昇编译器

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

AIGC时代,设计软件应该做什么?丨AIGC X 企业服务

ToB行业头条

如何理解 REST 和 RPC 之间的差异?

Apifox

程序员 RPC Rest 协议 RPC调用

【零售电商系列】走进亚马逊之自建仓储&物流

小诚信驿站

6 月 优质更文活动

NFTScan | 06.05~06.11 NFT 市场热点汇总

NFT Research

NFT 热点

Web网页端IM产品RainbowChat-Web的v5.0版已发布

JackJiang

网络编程 即时通讯 IM

今年LED显示屏市场趋势

Dylan

商业 广告 娱乐 数字化 LED显示屏

Sentinel熔断降级的规则及实现原理

互联网架构师小马

Java sentinel 熔断降级

参与赢大奖!阿里云机器学习平台PAI助力开发者激发AIGC潜能

阿里云大数据AI技术

阿里云 AIGC

正式启动|2023中国高校计算机大赛—大数据挑战赛火热报名中!

云智慧AIOps社区

大数据 AI 算法 运维 智能运维

分享几款 Mac 上非常好用的的免费软件

搞大屏的小北

数据可视化 数据库工具 截图软件 视屏转 gif 视频号下载

DevEco创建项目时的错误解决

路北路陈

6 月 优质更文活动

对线面试官-线程池(四)

派大星

Java 面试题

源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

“敏捷教练进阶课程”7月22-23日 ·A-CSM认证在线周末班【提前报名特惠】CST导师亲授

ShineScrum

敏捷教练

Java代码性能测试实战之ContiPerf

javalover123

单元测试 性能测试 压测 JUnit Java'

电路板电镀中4种特殊的电镀方法

华秋PCB

经验 电路板 焊接 PCB板 电镀

抓包分析RST信号

蓝胖子的编程梦

TCP Wireshark tcpdump RST 报文 Connection reset

Navicat Premium将关系和实体添加到概念模型的方法

背包客

macos MySQL 数据库 Mac 软件 Navicat Premium

智慧生活垃圾焚烧发电厂Web3D可视化平台

2D3D前端可视化开发

物联网 数字孪生 三维可视化 工业组态 智慧垃圾焚烧发电厂

“数字创新产品课程”7月29-30日 · CSPO认证周末班【提前报名特惠】CST导师亲授

ShineScrum

Win服务器图床配置

路北路陈

6 月 优质更文活动

TCMalloc 技术细节详解

KaiwuDB

KaiwuDB TCMalloc

科兴未来|2023年扬中高层次人才创新创业大赛

科兴未来News

科兴未来|2023”福地句才”海外人才创业大赛

科兴未来News

精耕丝路,智胜全球 | 新华三助力中企跑好“出海”赛道

新消费日报

MySQL 8.0.29 instant DDL 数据腐化问题分析

GreatSQL

greatsql greatsql社区

揭秘Spring依赖注入和SpEL表达式

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

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