写点什么

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

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

关注

评论

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

打破信息孤岛,聚道云软件连接器助力企业实现高效管理

聚道云软件连接器

案例分享

低代码,流行的软件开发方式

互联网工科生

软件开发 低代码 JNPF

一文详解静态图和动态图中的自动求导机制

百度Geek说

Python 深度学习 自动求导 autodiff

分享一款轻量化、适合程序员的低代码开发工具

高端章鱼哥

低代码 应用开发 JNPF

Boxy SVG for Mac v4.23.3 免激活版 矢量图编辑器

iMac小白

什么是HTTP长轮询?

百度搜索:蓝易云

Linux 运维 前端 HTTP 云服务器

iOS平台如何实现毫秒级延迟的RTMP|RTSP播放器

音视频牛哥

IOS RTSP播放器 IOS RTMP播放器 RTSP播放器 RTMP播放器 RTMP player

听GPT 讲Rust Tokio源代码(2)

fliter

阿里集团基于Fluid+JindoCache加速大模型训练的实践

阿里技术

阿里 大模型 Fluid JindoCache

【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现

洛神灬殇

性能优化 架构设计 高性能网关 亿级数据 2024年第三十三篇文章

代码手术刀-自定义你的代码重构工具

京东零售技术

Java 源码分析 后端 代码重构

国内唯一!通义灵码入选全球智能编码助手使用率 TOP 榜单

阿里巴巴云原生

阿里云 云原生 通义灵码

解密JavaChassis3:易扩展的多种注册中心支持

华为云开发者联盟

Java 开发 华为云 华为云开发者联盟

2023年12月文章一览

codists

codists

文心一言 VS 讯飞星火 VS chatgpt (195)-- 算法导论14.3 3题

福大大架构师每日一题

福大大架构师每日一题

深度神经网络中的BNN和DNN:基于存内计算的原理、实现与能量效率

申公豹

存内计算

「AI Party」喊你来!百度Create大会4月16-17日在深圳举办

飞桨PaddlePaddle

百度 AI 开发者大会

对话苏光牛:国内数据库市场已进入关键转折点,2024年或是分水岭

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

2024年1月文章一览

codists

Room Arranger for mac v9.8.2.644中文激活版 房屋布局设计软件

iMac小白

快速上手极狐GitLab设计管理功能

极狐GitLab

一起畅玩!幻兽帕鲁服务器华为云搭建教程(Windows 平台)

YG科技

流批一体化数据加工处理之记录过滤

大河

科蓝软件启动鲲鹏原生应用开发合作

彭飞

Shell错误:/bin/bash^M: bad interpreter: No such file or directory

百度搜索:蓝易云

云计算 Linux 运维 windows 云服务器

听GPT 讲Rust Tokio源代码(3)

fliter

Wireshark使用技巧

小齐写代码

亿级流量高并发春晚互动前端技术揭秘

京东科技开发者

代码手术刀-自定义你的代码重构工具

京东科技开发者

深入解析Linux进程内存:VSS、RSS、PSS、USS及查看方式

百度搜索:蓝易云

云计算 Linux 运维 后端 云服务器

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