写点什么

Dropbox 公司的 Go 语言探索之路

  • 2017-07-24
  • 本文字数:2088 字

    阅读完需:约 7 分钟

Tammy 援引 Rob Pike 于 2012 年撰写的《谷歌 Go 语言:专为软件工程服务设计的编程语言》中的说法,解释了 Go 语言为何能够在 Dropbox 公司当中发挥重要作用:

“Go 语言高效、可扩展且极具生产能力。一部分程序员乐于加以运用,但也有一些人认为其难以理解甚至非常无聊。在这篇文章中,我们将解释为什么这些立场本身并不矛盾。Go 语言旨在帮助谷歌公司解决其在软件开发方面面临的各类问题,这意味着其尽管不能算是一种突破性的研究型语言,但仍然成为大型软件工程项目当中的出色工具。” — Rob Pike, 2012

Dropbox 公司拥有庞大的业务规模:

  • 超过 5 亿名用户;
  • 20 万商业客户;
  • 500 PB 用户数据;
  • 数据 EB GO 存储系统。

正因为如此,Dropbox 公司对自身系统、语言以及工程师提出了极高要求。其指导原则与要求包括:

  • 构建高可靠性系统;
  • 构建安全系统;
  • 将可靠性与安全性纳入初始设计;
  • 可靠性需要达到 99.9999999999% (12 个 9);
  • 可用性需要达到 99.99%。

Dropbox公司对Go**** 语言的应用

目前,Dropbox 公司的大部分基础设施以 Go 语言编写而成,具体包括:

  • Go 服务器库拥有 150 名贡献者(来自总计 500 名工程师);
  • Dropbox 公司内超过 15 个团队负责构建及运行 Go 服务;
  • Dropbox 公司内部拥有 130 万行 Go 代码;

另有一部分关键性系统亦由 Go 语言编写而成:

  • RAT: 限速与限流工具。
  • HAT: memcached 的替代方案。
  • AFS: 一套用于替代全局 Zookeeper 的文件系统。
  • Edgestore: 分布式数据库。
  • Bolt: 用于消息收发。
  • DBmanager: 用于对 Dropbox 内超过 6000 套数据库进行自动化管理与监控。
  • “Jetstream”、“Telescope” 、分块路由以及更多……

其中相当一部分都继承自原本的非 Go 系统。

Dropbox**** 公司当初为何选择使用 Go?

Tammy 亦分享了 Dropbox 公司一步步增加 Go 语言使用量的轶闻趣事。

Hack技术周成就Go**** 速率限制器原型设计

在某一年的 Hack 技术周之前,Dropbox 的工程师们计划针对各项服务分别进行限速与限流。因此,一位工程师决定在接下来的 Hack 技术周内构建一项通用服务以实现上述目标——而 RAT 也就此诞生。

RAT 的初始原型设计在 4 天之内即构建完成,并在第 5 天发布了演示。短短几周之后,RAT 的大名在公司内部迅速扩散。另一位 Dropbox 工程师通过电子邮件与 Tammy 团队取得了联系,希望了解其如何在 Python 项目当中使用 RAT。整个整合进程进展顺利,RAT 的采用率不断提高,实用性也快速增强。目前,Dropbox 公司内已经有多个团队在使用 RAT。

DBmanager

Dropbox 公司拥有超过 6000 套数据库,这样的大型系统自然需要自动化管理与监控措施与之配合。事实上,这些数据库随时随地都在进行复制、故障转移以及通过副本进行主体升级等等。

为了管理这一切,Dropbox 公司的一名工程师开发出 DBmanager——这是一套 Web UI,能够帮助管理员快速查看全部 6000 多套数据库中发生的状况。另外,其还能够将状态信息发布至其它系统。

Dropbox公司中的Go**** 版本升级之路

在数百名工程师的配合下,Dropbox 公司小心翼翼地协调着 Go 语言各主要版本的升级工作。不过 Tammy 并没有提到任何由升级带来的问题,这表明整个过程应该相当顺利!

下面来看一些有趣的事实:

  • Dropbox 公司最近刚刚完成生产服务当中由 Go 1.5 到 1.6 版本的升级;
  • 为了追踪升级流程,工作人员创建了一份简单的 Dropbox Paper 文档,同时要求每位服务。

持有者报告进度并在必要时申请帮助。

Dropbox 公司决定在 1.6 版本迁移完成之后(包括各非生产服务),跳过 Go 1.7 并直接升级至 1.8 版本。

Dropbox公司如何引导新晋工程师们使用Go**** 语言

每一位 Dropbox 工程师都需要经历同样严格的 Go 语言培训流程,具体包括:

  • 阅读基础设施拓扑资料、Go 语言风格指南以及 Protobuf 风格指南。
  • 严格但友好的代码审查。
  • 利用 Go 语言构建一款娱乐性质的应用程序(一套应用商店)。
  • 学习利用 Bazel 构建并测试 Go 代码。

经验丰富的工程师大约需要一周时间以完成上述培训。

Go语言为Dropbox**** 公司带来哪些收益?又存在哪些不足?

总体而言,Dropbox 公司的 Go 应用之路非常成功。

  • 易于在 Go 语言环境下进行生产。
  • 易于在 Go 语言环境下编写并消费服务。(人们也热衷于此!)
  • Go 语言标准库非常出色。
  • 调试工具(总体上)运作良好。

其中的关键在于,Dropbox 公司并没有费力将 Go 编写成的服务重写为其它语言版本,这表明人们对其相当满意。(有趣的是,Tammy 表示 Dropbox 公司也在部分使用 Rust,但其并不属于 Go 的替代品。)

Dropbox公司在使用Go**** 语言时遇到哪些困难?

Tammy 证实称,Go 语言最大的问题在于处理竞态条件。

  • 数据竞态类 bug 给调试、查询与修复等工作带来挑战。
  • 一部分 Dropbox 工程师特别擅长处理 Go 语言的查询机制,而另一部分工程师则选择发挥自己的专长。
  • Go 数据竞态检测器有时候不起作用。确定这种不起作用的情况非常重要。
  • 必须以审慎的态度设计需要对数据进行并发访问的 Go 程序。

Dropbox 公司重视工程师对于可靠性及持久性的关注度,因此他们亦应当有能力解决上述问题(事实上,这种并发处理问题在任何语言环境下都相当困难)。

查看原文链接: https://about.sourcegraph.com/go/go-reliability-and-durability-at-dropbox-tammy-butow

2017-07-24 19:006189
用户头像

发布了 24 篇内容, 共 10.9 次阅读, 收获喜欢 7 次。

关注

评论

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

实践GoF的23种设计模式:命令模式

华为云开发者联盟

Go 开发 华为云 12 月 PK 榜

线上GC故障:CMSGC太频繁,你知道这是什么鬼?

Java永远的神

程序员 性能优化 JVM java面试 GC

极客时间运维进阶训练营第九周作业

老曹

DataEase单点登录之OIDC

搞大屏的小北

keycloak 单点登录 OIDC

拒绝内卷挖掘境外新蓝海,华为云虚拟专用网络VPN有多特别?

爱科技的水月

京东金融APP-新交互技术“虚拟数字人”赋能世界杯主题营销

京东科技开发者

大数据 前端 Web 交互 虚拟人

贾斯特里尼&布鲁克斯葡萄酒,历经百年的传世经典

联营汇聚

DataEase 做出来好看吗?

搞大屏的小北

数据可视化 大屏可视化 DataEase

一招搞定小白最头疼的数据大屏配色问题!

搞大屏的小北

色彩匹配 大屏配色

微信开放小程序运行SDK,自己的app也能运行小程序

Onegun

微信小程序 小程序容器

华为云连接CC——让多区域协同办公更高效更稳定

秃头也爱科技

有序存储对于高性能的意义

陈橘又青

算法

预测式外呼算法模型的深度应用详解

中关村科金

人工智能 大数据 AI 智能

是不是你在找的推特GIF动图下载方法?!支持苹果安卓双系统使用!

frank

twitter 推特视频下载

国内外开源数据可视化工具对比:DataEase 与 MetaBase 对比

搞大屏的小北

DataEase Metabase 开源数据可视化

【JVM规范】第三章-Java虚拟机编译

四月

Java JVM

同是弹性公网IP,华为云弹性公网IP的优势有哪些?

秃头也爱科技

关于佛萨奇系统开发及原力元宇宙2.0佛萨奇系统开发方案

I8O28578624

使用DataEase分析销售数据有多方便?

搞大屏的小北

数据可视化 销售数据分析 数据展示

全网首发!华为云UCS正式商用

爱科技的水月

弹性公网IP支持多产品灵活绑定或解绑,能为企业提供独立公网IP资源!

秃头也爱科技

vivo 游戏中心低代码平台的提效秘诀

vivo互联网技术

低代码 组件化 配置化 提效

转转实时OLAP分析场景技术选型与应用实践

转转技术团队

OLAP

葡萄酒越贵越好?贾斯特里尼&布鲁克斯刷新你的认知

联营汇聚

HVML 解释器 PurC 0.9.2 发布;持续演进!

hvmlenvoy

编程语言 解释器 HVML

如何接受或拒绝 Excel 中的修订

在下毛毛雨

C# .net Excel 工作表 跟踪修订

想做运维审计大屏?用这个工具就对了!

搞大屏的小北

大屏可视化 运维审计 审计大屏

南京公安研究院与秒云达成生态合作,携手赋能产业智能化发展

MIAOYUN

智慧公安 生态合作

用品质提升品味,贾斯特里尼&布鲁克斯葡萄酒

联营汇聚

让数据说话-中国农业经济发展情况

搞大屏的小北

数据可视化 经济可视化 经济发展

【大屏设计】数据大屏间距那点事-距离产生美

搞大屏的小北

大屏布局 报表布局 看板布局排版

Dropbox公司的Go语言探索之路_语言 & 开发_Quinn Slack_InfoQ精选文章