说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

【企业开源系列】收发一条Twitter推文的背后

HTML文档下载 WORD文档下载 PDF文档下载
7年前的一个创意,成就了如今风靡全世界的社交网络和微博客服务——Twitter。如今Twitter的月活跃用户数达到了2亿多,每天有超过4亿条推文被发送。这一切的背后,是由大量的开源项目在支撑。

Twitter被称为“互联网的短信服务”,允许用户发布不超过140个字的微博客,该创意来自Twitter的联合创始人Jack Dorsey,这个在7年前被分析师称为“有史以来最愚蠢”的创意,不料如今已经成为了风靡全世界的社交网络和微博客服务,月活跃用户达到了2.183亿人,每天有超过4亿条推文(tweet)被发送。

2013年11月7日,Twitter正式在纽约证券交易所上市,发行价26美元,但开盘即大涨73%至45.1美元。

Twitter可以称之为构建于开源项目之上,该公司开源负责人Chris Aniszczyk表示,如果没有开源软件,Twitter将不会存在,用户在移动端和PC端发送和接收的每一条推文都会需要开源软件。

在Twitter公司,当计划开展一个新项目时,工程师会首先衡量需求以及开源项目的能力,并通过定制开源项目来更好地满足需求。正是如此,Twitter才发展如此迅速,并轻松解决了日益飞速扩增的流量和请求。

Twitter所使用的开源项目

Twitter每天需要处理用户发送的推文数超过4亿条,此外还要处理大量的时间线(来自用户关注的人的所有推文),这一工程是相当浩大和复杂的。Twitter使用了大量的开源项目,从各种工具到各种库。如果没有这些开源项目,日常工作将无法正常运作。

下面来看看推文传递的背后都用到了哪些开源项目。

1.  分析和搜索服务

Twitter的搜索服务每天支持超过10亿次的查询,其背后的开源项目包括:

  • Apache Cassandra:一套分布式NoSQL数据库系统,以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型,是一个网络社交云计算方面理想的数据库。该项目最初由Facebook开发,于2008开源并捐赠给Apache基金会。
  • Apache Hadoop:由Apache基金会所开发的分布式系统基础架构,可使应用程序充分利用集群的威力高速运算和存储,用户可以在不了解分布式底层细节的情况下,开发分布式程序。
  • Apache Lucene:一个全文检索引擎工具包,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
  • Apache Pig:一个基于Hadoop的大规模数据分析平台,它提供的类SQL语言称为Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简单的操作和编程接口。

2. 服务器和存储

Twitter需要将每天用户发送的推文存储到数据库,并推送给其他相关的用户。该过程用到的开源项目包括:

  • Linux:主要用于Twitter服务器。
  • Memcached:主要用于Twitter的缓存基础设施,作用是加速动态Web应用程序,减轻数据库负载。
  • Mysql:流行的开源关系型数据库,被Twitter大量用于存储Twitter消息。
  • Node.js:一套用来编写高性能网络服务器的JavaScript工具包,在Twitter中用于队列处理(接收推文并写入数据库),使服务器能处理每个连接而不会阻塞通道。

3.  Twitter工程师的工具箱

  • Apache Subversion:开源的版本控制系统
  • Git:一个分布式的版本控制系统
  • Eclipse:大名鼎鼎的Java IDE。
  • Gerrit:一个基于Web的代码评审和项目管理的工具,主要面向基于Git版本控制系统的项目
  • Jenkins:一个持续集成引擎,主要用于持续、自动地构建/测试软件项目,以及监控一些定时执行的任务
  • RSpec:一个BDD 测试工具

4.  Twitter背后的编程语言和框架

  • OpenJDK:Java的开源版本。Twitter陆续将一些项目从Rails迁移到了Java。
  • Python:一种高效的动态解释型Web编程语言。
  • Ruby和Ruby on Rails:Twitter最初主要由Ruby和Rails开发。
  • Scala:Twitter使用的主要应用编程语言之一,很多Twitter的基础架构都是用Scala编写。
  • Clojure:Clojure是一种运行在Java平台上的Lisp方言,在任何具备Java虚拟机的地方,都可以利用Lisp的强大功能。Twitter的大数据处理系统Storm就是基于Clojure。
  • Drupal:使用PHP语言编写的开源内容管理框架(CMF),由内容管理系统(CMS)和PHP开发框架共同构成。Twitter的开发者社区基于Drupal构建。
  • Sinatra:一个轻量、快速的Ruby开发框架。

5.  Twitter的前端解决方案

  • jQuery:全球使用最广泛的JavaScript框架。
  • Less:一个使用广泛的CSS预处理器,通过简单的语法和变量对CSS进行扩展,可减少很多CSS的代码量。
  • MooTools:一个简洁、模块化、面向对象的开源JavaScript框架,为开发者提供了一个跨浏览器的JS解决方案
  • Zepto.js:一个轻量级的Javascript框架,主要用于移动开发

6.  Twitter服务开发框架

  • TwistedMatrix:一个Python 框架,用来开发非阻塞异步的网络服务和应用程序。
  • Netty:一个异步的、事件驱动的Web应用框架和工具,用于快速开发高性能、高可靠性的网络服务器和客户端程序。Netty目前作为Twitter的核心队列Kestrel的通信模块。
  • Apache Thrift:一个由Facebook开源的远程服务调用框架,采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中创建高效的、无缝的服务。

Twitter公司所开源的项目

Twitter从开源社区中获得了大量的好处,而Twitter也在不断地回馈社区,开源了大量基础设施和工具,使得其他企业和开发者不必重新发明轮子,在这些开源项目的基础上更加快速地实现自己所需。

1.  大数据处理

  • scalding:一个用于Cascading的Scala API。Cascading是一个构建于Hadoop上的API,用来创建复杂和容错数据处理工作流,它抽象了集群拓扑结构和配置,允许开发者快速开发复杂分布式的应用,而不用考虑背后的MapReduce。
  • summingbird:允许开发者以类似于本地Scala或Java的方式编写MapReduce程序,并在大部分著名的分布式MapReduce平台(包括Storm和Scalding)中执行它们。

2.  前端项目

  • Bootstrap:一个用于前端开发的工具包,包含了基本的CSS、HTML组件,包括排版、表单、按钮、表格、网格、导航等。
  • TwUI:针对Mac平台的、支持硬件加速的UI框架,受到了UIKit的启发。
  • typeahead.js:一个快速、全功能的自动完成库
  • hogan.js:一个Mustache模板语言的编译器

3.  后端服务

  • TwitterMysql:Twitter的MySQL分支
  • Parquet:一种Twitter内部供Hadoop使用的列式存储格式,为Hadoop生态系统中的所有项目提供支持高效率压缩的列式数据表达,而且与数据处理框架、数据模型或编程语言无关。
  • Finagle:一个允许开发者使用Java、Scala或其他JVM语言来构建异步RPC服务器和客户端的库,主要用于Twitter的后端服务。
  • iago:一个负载生成器,用来在产品正式发布前做流量负载测试。
  • twemproxy:一个快速、轻量级的memcached和redis代理服务器
  • zipkin:一个分布式的跟踪系统。在Twitter中用于收集各个服务上的监控数据,并提供查询接口。

4.  Twitter基础设施通用库

  • commons:Twitter的Python、JVM公共库
  • util:Twitter的一些可重用的代码库
  • cassovary:一个基于JVM的简单的大图形处理库

5.  收购其他公司后开源的项目

Twitter还收购了一些公司,并将这些公司的软件以开源形式发布。

  • Storm:这是一个类似于Hadoop的实时数据处理框架,最初由BackType开发,后来BackType被Twitter收购,Twitter将Storm作为其实时数据分析系统。
  • Whisper Systems的所有项目:Whisper Systems是一家移动安全初创公司,主要为Android手机和平板用户提供企业级的安全和管理解决方案。Twitter于2011年12月收购该公司,随后宣布将逐步开放Whisper Systems所有软件源代码。

更多的开源项目:http://twitter.github.io/

Twitter内部的开源氛围

1.  比Google更自由

尽管Google也开源了大量的项目,但是其开源程度并没有Twitter彻底。比如在数据中心方面,Google做了大量的保密工作,而在Twitter公司,这些要开放得多,员工自由实验的空间更大。

在一些大型企业中,所使用的软件或系统是相当固定的,员工需要在该基础设施上开发东西。而据Twitter员工透露,Twitter允许员工尝试新的不同的东西,甚至允许使用不同的语言和开源项目来重构Twitter的一些服务。

之前Google“20%的自由时间”为人津津乐道,如今该福利已经取消了。而在Twitter,每季度公司会举办hackweeks,员工可以拿出一周的时间从事各式各样的项目,这些项目不需要和他们每天的职责相关。

2.  在公司内部培训开源技术

2013年8月,Twitter收购了致力于开源技术培训的Marakana公司,成立了Twitter大学(TwitterUniversity),其目的主要是为内部员工提供更丰富的培训资源,同时也希望吸引更好的工程技术人才加入公司。

Twitter大学将陆续向大众开放,Twitter也将部分教育资源放到了网上。比如scala_school(这是针对Scala编程语言的一系列教程)。

Twitter对开源基金会的支持

Twitter也通过资金和代码赞助了一些开源基金会和组织。

  • Ada Initiative:一个在技术和文化上支持妇女参与开源技术的组织。
  • Apache软件基金会:Twitter工程师也参与贡献了Apache软件基金会的部分项目。
  • Eclipse基金会
  • JCP:Java社区进程,主要负责制定Java规范和标准。
  • Linux基金会:负责协调和推动Linux系统的发展。
  • OIN:Open Invention Network(开放创新网络),一个旨在减轻Linux开发人员受到专利诉讼压力的机构。
  • OpenJDK:Java的开源实现。

总结

Twitter在2011年就专门成立了一个“开源办公室”,用来支持对Twitter至关重要的开源组织。这足以见得开源对于Twitter的重要性。

Twitter公司开源负责人Chris Aniszczyk称,如果在开源社区花费一些精力,将会意识到信息的开放对于整个世界所带来的积极影响,在Twitter,从内到外都保持着开放的心态和浓厚的开源氛围,而且每个员工都有机会参与其中。同时Twitter对开源社区所做出的伟大工作充满感恩,并将一直和开源社区保持健康的关系。

再来看国内,如今一些大型互联网公司也开始重视开源,在使用开源项目构建基础服务的同时,也不忘回馈开源社区。【企业开源系列】后面也将会聚焦国内开源企业,带领大家认识一个全新的国内开源生态。

8个超实用的jQuery技巧攻略 美国国防部战略:大规模、分布式,构建数字化防御体系 针对小白的Python入门教程——Python使用说明书 耗资460亿美元,天价Olympic上广受诟病的监控和4G LSI AIS ASIA首次登陆中国 探讨最新大数据技术 “iOS in the Car”问世 苹果发布集成汽车服务CarPlay Pinterest联合创始人Evan Sharp:视觉网站标配“网格布局”的设计过程 微软Xbox Live或登陆iOS和Android平台 TIOBE 2014年3月编程语言排行榜:F#直逼Top10 Atlassian面向企业客户推出Git Essentials工具 Mt.Gox破产,都是错误编程惹的祸 Jamo创始人揭底AWS,棱镜阴影下的云行业态势 成本、创新、可靠:游戏公司FunPlus选择AWS的三大理由 全透明、可折叠,平板电脑概念机是这样的 插件大集合!开源包管理器Alcatraz迎来Xcode 5更新 Q语言:新型的数据定义语言 非响应式手机网站页面的优化 高薪必备:Hadoop求职者的6大攻略 微软或将于四月发布“返璞归真”的Windows 8.1 Update 1 《近匠》第14期:LiveCode——全民开发工具 美团梁堰波:用SQL-on-Hadoop构建互联网数据仓库与商务智能系统 程序员游戏Style:亚特兰大极客使用机器学习玩转Flappy Bird Gleasy CTO薛珂:成立3年,企业用户2万+,移动办公蕴藏较大发展机遇 Unity Awards展区“点亮”Unity亚洲开发者大会 DevBox:最实用的移动开发辅助工具包 【技术博客推荐】创客程序员设计实现最小物联网系统 MySQL还是NoSQL:开源盛世下的数据库该如何选择 利用Hadoop Streaming处理二进制格式文件 如果没有强大的API,那么还是与OpenStack兼容吧 企业社交工具为何走向衰退? 封闭还是开放?雅虎禁止用户使用Facebook、谷歌ID登录和使用其服务 200分求快速取中值的算法!(thirdapple) Flash Action 如何定时,就像Javascript中的setTimeout()? 保护的问题 用一个关于Printer对象的问题?各位大虾,初来乍到,请多多关照。 请问如何自动提交一个FORM? 请问各位师兄:web开发如何起步?例如使用JSP? 求助! 如何知道电脑中的网卡是什么型号的? 大家请帮忙,兄弟必重谢,分都给了 如何制作含有msdn数据库的安装程序 Web Service服务程序如何增加对SSL的支持? 怎么還可以上網﹐向各位大蝦求救 请问如何自动提交一个FORM? 如何处理并发访问! 如何在网页中打开*.ocx组件?是否能打开? 如果给我再来一次的机会...我还是想说... 求随机数发生器的算法 高手来拿高分!!!!!!!!!求开发自定义服务器控件的好书或代码 那位有ESQL(嵌入SQL)中文资料? 如何select LONG类型的字段? 红帽子里面可以演戏吗? 如何改变 Win me 快捷方式上的小键头图标。 ANY元素不是可以表示“任意”吗?为什么这个不行? 皇帝的新装 求助! 如何知道电脑中的网卡是什么型号的? 在winxp下如何安装winme实现双系统启动 在windows form下,怎样为datagrid添加click事件? 大家说小系统用什么数据库好,别说用ASA,ACCESS 大家好。我是凶宝宝。^_^请多关照!!! 关于date类型的比较 谁有电梯调度程序的源程序? 1000分 关于字符串的问题,请教!!! 那位大侠帮帮我,在VC++如何通过ODBC连接到oracle数据库? 请斑竹给出答案,闲人莫入,谢谢 问一个用法 如何编辑Windows系统中的右键属性菜单(高分) 关于译码器的问题,急!! 请问谁有电梯调度程序的源程序? 1000分 用非BDE控件能不能实现从一个表把数据批量导入另外一个结构相同的表的操作? 怎样才能最快的把一段数据扫描出来?(有难度哦) Resin下怎么配置!一个子目录,是不是在Webapps下建立子目录???应该需要在哪里设置??? 有哪个兄弟给盘点机编过程序(C语言) kwnh,你是谁? 在线帮我测试,来了就有分,10分钟后结帐 请问谁有电梯调度程序的源程序? 怎么样把这个数据窗口的内容另存一下? 关于 getResource 的小问题 如何在两个数据库中进行备份? 一个很普通的问题,关于C/S的一个socket,编译可通过,就是连不上,麻烦各位看一下,急!!! 三层结构? 您见过比这还烂的软件么?新作发布,兼原代码 庆祝本人在csdn注册半周年,放分! my father is very busy ,so he is -------not at home at weekend. A.most B.hardly C.seldom D.mostly答案是D 可我觉得是C (因为可以翻译成 几乎没有时间在家里呀.)哪位可以帮忙解释下.并且说下 D是什么意思 为 莫泊桑短篇小说精 摘抄五百字左右,要快 You must look before you cross the road改为祈使句 given that y=(1+4x)e^-2x show that d^2y/dx^2+2dy/dx+xy=0 I have been loving a man once very much 是什么意思 Did she _____ writing her last book last night?Yes,she spent 2 years on this book. The flu is believed ______byviruses that like to reproduce in the cells insA.causing B.being caused C.to be caused D.to have causedwhy? 求3篇莫泊桑短篇小说600字左右的摘抄 为我起个四个字的英文名.谢谢!我要的是翻译成中文四个字的英文名,谢谢 please meke sure that you have the DirectX是什么意思 children love father christmas very much.对划线部分提问very much 划线 ;了···· 名词和动词构成主动用v-ing被动用v-ed 那是什么语法?具体忘了 make sure that you have installed the Directx 7.0 or aboveer.装手柄驱动出现这个问题,请问怎么解决? Meta Watch 怎么读 with和and的区别和用法 This is the book on which I spent five yuan.在这句话中five yuan做句子中定语从句的什么成分 watch怎么读?是“我吃”还是“我去”!如果是“我吃”那和what的读音有何区别? the beautiful girl这是一个短语这里有多少个单词? 有一个人说我活着不如死了怎么办? 用英文作文介绍童年故事《小红帽》的大概内容70字 with和and的区别是什么?急用 Mismatch Directx 是在玩劲舞团之前遇到的困难 this bus is very big. 改为复数 名词短语,像in danger这样的词.固定搭配 mismatch directX version中文是什么意思? This child is very lovely变复数 with与and的区别.hot tea with honey 与hot tea and honey区别是什么这里的with是什么意思?能不能具体说下with的用法. His father is a_______very busy on Mondays.Does he watch the e_____morning news on TV? 根据句意和单词首字母,填上所缺的单词 This is a p__ of my family 用beautiful、safe、delicious、convenient、fascinating这几个词,造一段简单的话.(用英语!) I just borrowed a book from the library,I'll look(要填的)it quickly this week since后面接的从句里面的动词都是不可延续的吧?比如He has live here since he graduated from college. with和and 的区别是什么,怎么用? He borrowed a book from his teacher a week ago改为同义句He( ) ( ) the book for ( ) ( ) 莫泊桑 两个朋友 读后感不要胖子和瘦子的那个 with和and的区别 求1500字《莫泊桑短篇小说集》读后感, 莫泊桑 项链 读后感1人为什么而活2人生的意义3人生的价值从这3个方面来说说700字左右就OK i ___(borrow) a book from the library last week.i ____(keep)it for two days. when造句造肯定句否定句一般疑问句特殊疑问句 my father sometimes goes to bed very late.改为my father ___ ___ ____ at times 在《菊与刀》中,作者说日本是“历史和世界的负恩者 用aftenoon和when和before和after和when a was和be和finally造句 请用watch closely造三个英语句子 My father often stays up very late and he looks____(health) The book I am reading is ___ I borrowed from the library,A,that B,the one C,which D,whom答案是选B,可我就是弄不明白,that 不是等于the one 都是特指呀? watch的英文 童话故事 英语作文.50.字 中英翻译 i borrowed a book from the library a week ago.变现在完成时为什么 a++nice+watch用英语怎么提问 小红帽童话说明了一个什么道理 did,he,last,where,go,weekend(连词成句) 英语watch The teacher was ___(satisfy) with the result of the experiment. Where did he go last weekend,Shanghai or Nanjing?1 Where did he go last weekend,,Shanghai or Nanjing?Neither,he want go to Taizhou _____.A .too B .as well C .instead of D .instead 谁能告诉我 我活着的意义是什么整天都坐在课堂里 有什么意义吗 选择题___experiment done with his feet remings _____the disabled swimmerA The,about B A,about C An,of D A,of His father is busy,so he’s ____ not at home on Sundays.A.hardly B.mostly C.almost D.most我选C的 几乎不在吗~可答案竟然是BWe had three sets of garden tolls and we seemed to have no use for_____.A.none B.either C.any D.each怎么不是A? 我活着的意义是什么? You must not look out of the window.改为祈使句
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘