2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

前 Digg 工程总监 Will Larson 回顾 Digg 的开发实践和流程

  • 2012-08-28
  • 本文字数:2117 字

    阅读完需:约 7 分钟

曾经风靡一时、估值一度达到 2 亿美元的 Digg ,因为两年前一次失败的改版,人气大跌,并失去公众对它的关注,创始人 Kevin Rose 也无奈离开。前不久,更是以 50 万美元的价格被 Betaworks 收购剩余资产(Digg 实际的收购价格为 1600 万美元左右,详见)。

Will Larson 曾经担任 Digg 的工程总监,他在一篇博客中,回顾了Digg 从2010 年5 月到2012 年5 月公司的研发团队架构和流程。

团队架构

一开始,Digg 的组织架构很传统,产品、运维和工程团队各自独立。产品团队只有4 名成员,8 个工程师构成运维团队,QA 有6 个人,研发团队有大约20 人。

研发团队本身分为4 个水平团队:前端、API、平台和基础设施,两个垂直团队:广告、分析。产品团队在功能上掌控垂直团队,与多个水平研发团队协调。

此后,由于人员流失,组织结构变得更为简单。运维团队只有3 个人,工程团队7 个人,广告工程团队4 个人。

代码评审和持续部署等实践

Digg 的核心开发实践让他们的开发人员一度达到 40 个人,后来降到 14 个人。

他们使用 Git 管理源代码, Gerrit 做代码评审。所有的代码都要得到同事的评审和通过,并通过所有的单元测试。

有代码补丁提交到 Gerrit 等待评审时, Jenkins 会自动运行单元测试,并将测试结果更新到 Gerrit 中,也就是说评审代码的人不会浪费时间去看失败的补丁代码,这样的代码也无法进入 Git 代码库中。

一旦 Gerrit 中补丁代码通过测试和评审,它们就会被合并如 Git 的 master 分支, Puppet 会将其自动部署到 alpha 环境中,在其中成功通过集成测试后,这些新的补丁代码会合并到 Git 的生产环境(production)分支。

向生产环境的部署是手工构建 Jenkins 方式完成的,接下来会使用 Puppet 一起部署更新代码。

开始时,他们使用了持续部署的方式向生产环境部署,但是出现一系列问题后,他们决定还是先让人工方式参与进来。

Will 这样说道:

如果我们当时坚持使用持续部署,我们最终会改善我们的测试,使得错误代码很难通过,但在当时,我们觉得投入那么多时间做这个并不值得。

Will 认为这个评审、测试和部署系统是 Digg 当时最重要、最成功的开发流程系统,足以让 40 个人的团队开发出高质量和一致性的代码,也不会让 14 个人的团队被流程拖慢效率。

在不断的实践中,Digg 慢慢涌现出一些新的实践,虽然未经详细研究,但它们确实来自日常实践。

刚开始,他们的单元测试覆盖率非常高,随着团队人员所见,他们写的单元测试就非常少了。虽然没有人明说,但是他们相信:单元测试并不能减少他们遇到的绝大部分问题:在高负载下,生产环境多个组件出现问题,最终导致系统故障;前端呈现问题。此后几年中,单元测试还一直可以提供价值,但是 Selenium 测试在没有人主动维护之后,很快就过时了,而且很快退出舞台。

他们使用 Thrift 定义前端和平台团队之间的接口,因此团队之间的沟通和协调非常直接。

他们很少变更已有 Thrift 接口的行为,如果需要新功能,他们会推出新的接口,更新客户端来使用这些功能,然后移除旧的接口。虽然这个流程貌似奇怪,但是由于他们的前端和后端代码各自独立部署(部署所有的前端或后端服务器只要几分钟),这种做法理智、安全。

新的前端变更只会推送给一部分用户,如果有问题就会禁用。虽然他们一开始想用这种方法来完成新功能的 A/B 测试,但是其最大的价值在于管理版本发布,并从一小部分可信用户那里获得反馈。

在发布可能会影响性能或负载的后端功能时,他们都使用不宕机的方式。

康威定律下的“架构”

在 Will 看来,对比下他们的 v4 版本架构和他们设计这个版本时的组织架构,这基本上就是康威定律(Conway’s Law【注】)的直接表现。

他们当时的构成是:一个 API 团队和一台 API 服务器、一个前端团队和一台前端服务器、一个平台团队和一台后端服务器、一个广告团队和一台广告服务器、由基础设施团队管理的一大堆数据存储,以及一个分析团队使用的 Hadoop 集群。前端团队使用无状态的 PHP、HTML 和 JavaScript 开发,状态和存储由后端服务器管理,消息队列用来处理长时间运行和非事务处理。

他们最不一般的做法,是用基于 gevent 的 Thrift 服务器作为后端服务器,因此在 gevent 和开发 gevent 安全的客户端池上耗费了很多时间。

我可能再也不会用 Thrift 作为 Python 服务器了,因为再也不想维护一个类似的服务器。

他们同时使用 Tonardo 、Apache+ mod_wsgi + Pylons 、gevent 服务器作为后端服务,虽然让 Will 有点不爽,但是在实际工作中,整个团队并没有多大困扰,主要原因是使用了 Jenkins 和 Puppet 来部署系统。

在总结中,Will 认为:

我们的流程和结构还是比较合理的,而且也很有效。如果今天重头来过,我们当然会有不一样的方式,或者要是我们的团队没有那么快减员,或者要是我们没有同时应对那么多技术债务,包括遗留系统、API 和代码契约等等。

Will 还想再谈谈 Digg 的数据库和技术方面的不断扩展,他们用过的技术包括:Cassandra、MySQL、Redis、Memcache、HDFS、Hive、Hadoop、Tornado、Thrift 服务器、PHP、Python、Pylons、Gevent 等等。请关注 InfoQ 中文站的后续报道。

注:

康威定律:Conway’s Law,由计算机科学家 Melvin Conway 在 1968 年提出,其内容是:设计系统的组织,最终产生的设计等同于组织之内、之间的沟通结构。

2012-08-28 21:593328
用户头像

发布了 479 篇内容, 共 180.5 次阅读, 收获喜欢 53 次。

关注

评论

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

数据出境安全必知:22项政策为你指明出境之路!(附下载)

极盾科技

鸿蒙开发案例:垃圾分类

zhongcx

鸿蒙

小试牛刀 - Kubernetes 上搭建 TiDB 集群

TiDB 社区干货传送门

实践案例

Footprint Analytics 现已支持 TRON 链上数据分析

Footprint Analytics

TRONex波场智能合约

五大场景实践 深度解读指标平台业务价值

Aloudata

Apache Seata(incubating) 首个版本重磅发布!

阿里巴巴云原生

Apache 阿里云 云原生

TiCDC 同步 SQL_MODE 相关

TiDB 社区干货传送门

6.x 实践 TiCDC 源码解读

快速过等保2.0的小秘诀!

行云管家

等保 堡垒机 等保测评

枫清科技高雪峰:大模型要成为生产力才有生命力

Fabarta

#人工智能

居家观影T0级装备 非激光电视莫属

极客天地

Next Stack技术联盟成立:打造新一代基础软件技术栈

观测云

next stack

亚马逊详情API接口的获取与应用

科普小能手

API 接口 API 测试 亚马逊API 亚马逊商品详情数据接口 亚马逊商品详情API

探索AI,拥抱未来,欢迎加入魔乐世界!

天翼云开发者社区

人工智能 云计算

案例分析——HyperWorks练习做模型简化

智造软件

案例分析 仿真软件 Hypermesh

运维成本降低 90%,存储成本降低 3 倍:多点利用 TiDB 资源管控功能将 100+ 套 MySQL 集合到一个 TiDB 实践

TiDB 社区干货传送门

性能调优 实践案例 版本升级 数据库架构选型 7.x 实践

区块链行业低迷的原因及未来发展展望

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

重构商业生态:DApp创新玩法与盈利模式的深度剖析

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

SQL-DSL框架之结果集处理

邱学喆

JDBC 类型处理器 配置类

软件测试学习笔记丨Selenium多frame切换

测试人

软件测试

鸿蒙NEXT应用上架与分发步骤详解

威哥爱编程

华为 HarmonyOS Open Harmony HarmonyOS框架 HarmonyOS NEXT

taobao.item_get_desc API返回值中的促销信息与活动标签

技术冰糖葫芦

API 接口 API 测试 API 策略 pinduoduo API

TiDB替换Starrocks:业务综合宽表迁移的性能评估与降本增效决策

TiDB 社区干货传送门

8.x 实践

选择堡垒机供应商需要考虑因素简单分析-行云管家

行云管家

堡垒机 网龄安全

「用户故事」 从 Thanos 到 GreptimeDB,我们实现了 Prometheus 高效长期存储

Greptime 格睿科技

数据库 云原生 数据迁移

对象存储防勒索升级:XEOS 国内首家通过 NBU 对象锁认证

XSKY星辰天合

前Digg工程总监Will Larson回顾Digg的开发实践和流程_Python_郑柯_InfoQ精选文章