热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

曾经风靡一时、估值一度达到2亿美元的Digg,因为两年前一次失败的改版,人气大跌,并失去公众对它的关注,创始人KevinRo

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

\u0026#xD;\n

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

\u0026#xD;\n

团队架构

\u0026#xD;\n

4ceef38074598e1c84212bb013e23606.png\

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

2f59717740877efd0573300539fb8bf3.png\

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

361dc7321df661fd2abde7a8f2ff680e.png\

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

Will这样说道:

\u0026#xD;\n
\u0026#xD;\n

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

\u0026#xD;\n
\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

康威定律下的“架构”

\u0026#xD;\n

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

\u0026#xD;\n

60cfa8f87c40346253e7d10ffe4a3bc3.png\

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

在总结中,Will认为:

\u0026#xD;\n

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

\u0026#xD;\n

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

\u0026#xD;\n

注:

\u0026#xD;\n

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


推荐阅读
  • 目录结构如下:Nginx基础知识NginxHTTP服务器的特色及优点Nginx的主要企业功能Nginx作为web服务器的主要应用场景包括:Nginx的安装安装环境 ... [详细]
  • 智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台
    智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台 ... [详细]
  • 导读:很多朋友问到关于入门学什么php框架简单的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
  • 开发网站你需要知晓的部分专用术语
      越来越多的企业和个人都在拥有属于自己的网站门户,首当其冲的就是你得知晓几个网站方面的专业术语,先是中就有好多的客户不明白这些,造成误会是正常的,那不如我们对它有个大致的了解,这样就不容易感觉 ... [详细]
  • SSL协议、TLS协议,使用哪一种更安全?
    在金融银行业,保护机密信息的安全至关重要。由于财务记录完全通过在线数据库维护,因此实施保护客户、银行和金融机构免受黑客攻击的安全功能比以往任何时候都更加重要。安全套接字层(SSL) ... [详细]
  • CentOS8.4 安装PHP7.4.25
    1、下载官网:https:www.php.netdownloads#cdmydata#wgethttps:www.php.netdistributionsphp ... [详细]
  • 6个常见的 PHP 安全性攻击实例和阻止方法_php实例
    这篇文章主要介绍了6个常见的PHP安全性攻击实例和阻止方法,有对这方面感兴趣的小伙伴 ... [详细]
  • 我使用Laravel5时遇到问题.当我运行“phparitsanmigrate”时,我收到了这个错误***************************************A ... [详细]
  • Jenkins自动部署SpringBoot项目实践教程
    Jenkins自动部署SpringBoot项目实践教程-目录1、Jenkins安装2、Jenkins插件安装3、点击添加凭据4、Jenkins环境配置4.1、全局配置4.2、系统配 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
author-avatar
mobiledu2502884633
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有