AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

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

关注

评论

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

一道React面试题把我整懵了

beifeng1996

React

百度前端常见react面试题

beifeng1996

React

前端一面高频vue面试题(边面边更)

bb_xiaxia1998

Vue

NutUI 4.0 正式发布!

京东科技开发者

CSS GitHub UI 轻量化 企业号 2 月 PK 榜

【AI技术分享会第8期】EMNLP 2022 小样本学习论文解读来啦!开年直播好礼相送

阿里云大数据AI技术

人工智能 自然语言处理 深度学习

一个炫酷的头像悬停效果

南城FE

CSS css3 前端 动画 交互设计

React源码分析8-状态更新的优先级机制

goClient1992

React

说说Vue响应式系统中的Watcher和Dep的关系-面试进阶

bb_xiaxia1998

Vue

前端高频手写面试题指南

helloworld1024fd

JavaScript

响应式操作实战

老周聊架构

响应式编程 2月月更

构建有参与感的干系人小组指南(译)

Bruce Talk

Scrum 敏捷开发 Agile

从0到1:健身房私教预约小程序开发笔记

CC同学

私教预约小程序

腾讯前端二面手写面试题

helloworld1024fd

JavaScript

Node.js 应用全链路追踪技术——全链路信息存储

vivo互联网技术

nodejs OpenTracing zipkin

从技术专家到总经理,在不确定中探索和成长

石云升

极客时间 2月月更 技术领导力实战笔记

JavaScript 中获取数组最后一个元素3种方法及性能

devpoint

JavaScript slice 数组操作

2023面试官常考的前端面试题

loveX001

JavaScript

一天梳理完React所有面试考察知识点

beifeng1996

React

高效学 C++|编程实例之计算器

TiAmo

c++ 语言 & 开发 语言设计

管理者既要安定内部,也要团结外部

石云升

极客时间 2月月更 技术领导力实战笔记

京东前端高频react面试题集锦

beifeng1996

React

字节前端二面经典vue面试题(边面边更)

bb_xiaxia1998

Vue

写个JS深拷贝,面试备用

helloworld1024fd

JavaScript

假如面试官要你手写一个promise

helloworld1024fd

JavaScript

从React源码分析看useEffect

goClient1992

React

JS模块化—CJS&AMD&CMD&ES6-前端面试知识点查漏补缺

loveX001

JavaScript

80%的前端开发都答不上来的js异步面试题

loveX001

JavaScript

React源码分析8-状态更新的优先级机制

goClient1992

React

校招前端必会面试题及答案

loveX001

JavaScript

能不能手写Vue响应式?前端面试进阶

bb_xiaxia1998

Vue

我们从 CircleCI 安全事件获得的3个经验教训

SEAL安全

安全 软件供应链 企业号 2 月 PK 榜 端点保护 恶意软件检测

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