写点什么

GitHub 是如何改进自身的 DNS 架构的

  • 2017-06-12
  • 本文字数:759 字

    阅读完需:约 2 分钟

据 GitHub 高级架构工程师 Joe Williams撰文介绍,过去数年中,GitHub 一直使用的是一个简单的DNS 架构。虽然它也能适合工作需求,但现在GitHub 已迁移到一个能更好地支持自身规模的新架构。

Williams 提及,很多应用对 DNS 的解析性能或可用性十分敏感,这是 GitHub 采用新的 DNS 处理模型的一个原因。DNS 会导致用户性能降级,甚至无法提供服务。当使用原有的 DNS 架构进行配置和代码更改时,这个问题亟待解决。此外,工程师也难以识别一些故障的导致根源,他们唯一能使用的工具是 tcpdump。除了对上述问题的改进,GitHub 工程师还瞄准于:

  • 增加内部域(Zone)和外部域配置的灵活性。除非做特殊的配置,否则内部域对外是不可见的。同时,从内网的内部就可以访问外部域。
  • 改进缓存节点(Cache)和授权节点(Authority)间的角色隔离。
  • 支持基于部署和基于 API 的工作流,实现更改的自动化。
  • 避免任何外部依赖,改进可靠性。

在 GitHub 设计的架构中,有三种类型的节点:

  • 缓存节点。它部署于各数据中心内,负责向应用提供实时数据,使应用无需跨数据中心。
  • 边缘节点(Edge)。它是各数据中心本地的授权节点,行使网关职责,处理来自缓存节点的请求,并负责域传送(Zone Transfer)。
  • 授权节点。它是 DNS 主服务器,管理来自边缘节点的域交换,并提供创建、修改或删除记录的 HTTP API。

日志功能是 GitHub 新 DNS 架构的另一个改进。GitHub 工程师根据自身需求,选择了对缓存节点使用 Unbound ,边缘节点使用 NSD ,授权节点使用 PowerDNS

前面提到,外部域(github.com)可从内部域(github.net)访问,不需要与外部 DNS 提供商通信。这是使用 Unbound 实现的。此外,Unbound 还支持在内部 DNS 失败时对外部网络的访问。

在 Williams 的帖子中,还给出了更多的技术细节,值得全面一读。

查看英文原文: How GitHub Revamped its DNS Infrastructure

2017-06-12 19:002246
用户头像

发布了 227 篇内容, 共 74.8 次阅读, 收获喜欢 28 次。

关注

评论

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

用测试来学习 Go

baiyutang

golang

Go语言实战之映射的内部实现和基础功能

山河已无恙

golng 3月月更

[ CKS 备考指南 -01 ] 总览(送免费 15% 折扣券)

baiyutang

Kubernetes 运维 k8s 开源文化 CKS

Java面向对象知识点拆分(一)

逆锋起笔

面向对象 java基础 3月月更 Java面向对象

数据预处理和特征选择

云智慧AIOps社区

数据挖掘 机器学习 算法 特征选择 数据预处理

HertzBeat赫兹节拍 v1.0.beta.5 发布,易用友好的监控告警系统

TanCloud探云

Java angular 告警 应用监控 开源监控系统

Java基础系列文章---异常

NoLongerConfused

3月月更

如何保持系统的整洁

蜜糖的代码注释

设计原则 项目开发 3月月更

MySQL系列文章---初识MySQL中的锁

NoLongerConfused

3月月更

人工智能开源录 | 对话OpenI启智社区:智能无处不在,AI开源创新的发展与探索

OpenI启智社区

软件工程 大模型 东数西算 人工智能开源

AI语音处理-文字合成语音功能

DS小龙哥

3月月更

N个技巧,编写更高效 Dockerfile|云效工程师指北

阿里云云效

阿里云 云原生 Dockerfile 部署与维护 构建工具

虎符交易所HOO持续创造今年新高,你的HOO囤够了吗?

区块链前沿News

加密资产 Hoo 虎符交易所 平台币

毕业设计

whoami

毕业总结

miliving

来,2W字+23张图+5W1H分析法帮你彻底拿下缓存

小梁编程汇

缓存 缓存穿透 缓存击穿 缓存并发 缓存服务

全链路压测(六):确认范围和识别风险

老张

性能测试 全链路压测 稳定性保障

轻松应对1亿+月活,《迷你世界》背后有啥黑科技

华为云开发者联盟

分布式数据库 中间件 RDS 迷你世界

RocketMQ系列文章---RocketMQ整体架构

NoLongerConfused

RocketMQ

Redis二三事之事前预防和事中恢复

NoLongerConfused

3月月更

教你如何解决JS/TS里特定String进行拆分然后遍历各个元素

华为云开发者联盟

JavaScript string 遍历 字符串 元素

【ELT.ZIP】OpenHarmony啃论文俱乐部——多维探秘通用无损压缩

ELT.ZIP

OpenHarmony 压缩算法

web前端培训:react高频面试题分享

@零度

前端开发 React

三级等保是最高的吗?有什么用?

行云管家

网络安全 等保 等保2.0

基于CREATE TYPE语法自定义新数据类型

华为云开发者联盟

数据库 数据类型 CREATE TYPE 复合类型

浏览器工作原理和V8引擎

CRMEB

推荐 5 个 yyds 的开源 Python Web 框架

AlwaysBeta

Python django flask tornado Web

网络协议之:socket协议详解之Socket和Stream Socket

程序那些事

网络协议 程序那些事 3月月更 MIME

程序员最讨厌的四件事,它能解决!

博文视点Broadview

昇思MindSpore全场景AI框架 1.6版本,更高的开发效率,更好地服务开发者

Geek_32c4d0

mindspore 昇思 全场景AI框架

小白入门HarmonyOS Connect设备开发的“芯”路历程

HarmonyOS开发者

芯片 HarmonyOS 设备

GitHub是如何改进自身的DNS架构的_架构_Sergio De Simone_InfoQ精选文章