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

【企业开源系列】收发一条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对开源社区所做出的伟大工作充满感恩,并将一直和开源社区保持健康的关系。

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

C语言概述-C语言教程 Turbo C 2.0集成开发环境的使用(上)-C语言教程 Turbo C 2.0集成开发环境的使用(下)-C语言教程 程序的灵魂—算法-C语言教程 数据类型、运算符与表达式(上)-C语言教程 数据类型、运算符与表达式(下)-C语言教程 最简单的C语言顺序程序设计-C语言教程 分支结构程序-C语言教程 循环控制-C语言教程 数值数组-C语言教程 字符数组-C语言教程 函数(上)-C语言教程 函数(下)-C语言教程 预处理命令-C语言教程 C语言指针(上)-C语言教程 C语言指针(下)-C语言教程 结构体与共用体-C语言教程 位运算-C语言教程 文件处理-C语言教程 谭浩强C语言教程 C语言创建链表并实现插入、删除数据 C语言中队列Queue的操作 C语言实现堆栈stack操作 C语言建立和遍历二叉树 C语言冒泡排序法演示代码 C语言实现堆排序(Heap Sort) jQuery Ajax以JSON格式传递结果数据 微软称为WP8开发的应用不兼容WP7手机 WP8开发者必读 关于WP8开发者程序开发语言选择倾向的问题 强大的C#随机字符串生成器 现在出了本Jbuilder5的书。有没有谁有这本电子书啊? 高分求树型结构源代码 SDK问题 这句sql有问题吗? 关于驱动程序开发! 在SQL-SERVER中出现数据死锁的情况一般是什么,若是由多个用户同时向数据库更新数据而导致的死锁,解决此问题的办法有那些? 寻找源代码排版软件? 有没有用VC写过短信接收程序,我在接收中文时出现乱码。 请教大虾:用mideaplayer来播放一首歌,如何用progressbar来表示进度? 我想学习驱动程序的开发,请大家帮我推荐几本这方面的书? 编译出错,不解?请高手指点。 能否用Delphi 实现类似东石公司的虚拟光驱系统。 我想学习驱动程序的开发,请大家帮我推荐几本这方面的书? include头文件的问题 急!!!为什么TBlobField 下载时大小受限制,怎么解决? 关于导出动态连接库中的类的问题,不知道这里有没有高手? 一个让我痛苦了n天的问题 关于Hook的一个问题 联合查询如何修改? 获取密码时出错???? my gf photo 我想问一下,java生成的.class文件能不能通过某种工具生成.exe文件? VC中组合框为什么不能下拉? 请问哪有最新的wise for window .net的版本可以下载 "java原型开发"指得是什么开发? 能否用VC++实现类似东石公司的虚拟光驱系统 请问会话Bean和实体Bean的区别在那?能给出例子吗? word文档如何存入SQL SERVER 2000? 请问如何才能在windows 2000 server 上装MTS? 有女朋友而且上网和别的mm聊天的入内签名! 如何显示不同的颜色... 有关网络开发和com的问题,高分征集关注和提供方案! 探讨一下safearray 的使用问题 关于QQ界面的制作? 在主界面中添加一副图片的问题被遮住的问题 有一个EXE执行时,我希望能删除它自己 如何在程序中获取IE当前浏览网页的IP地址或域名地址? 有南京的兄弟吗?我想买《delphi4编程技术内幕》,就是Charlie Calvert那本精华。 如何在工具条上加载图片作为工具条的背景 怎样来写这个数据连接? dbgrid里的赋值问题 Borland自带的ADO例子为什么也出错啊? pb 出现 maximum script size exceeded 保存错误 愿意到上海的软件高手可以来看看,真是没想到 我这里有一个链表类,我怎么在别的文件中使用它呢? CArray的问题? 编译器出问题了! 那里可以找到asp.net的一些原码,现在市面上的书没什么有深度的 修改PING数据包VB能做到么?高手来指点,中级来探讨,初级来学习,分数大大的有~ ;) 请教(qingrun,qingrun等大虾),请指教? weblogic高手请指点!这是不是设置不对造成的? 为什么要确立“事物的正确答案不止一个”的思维方式?作者是用怎样的论证方法来阐明这一事理的? 应用写作复习题求答案一、单项选择题(每题1分,1.迄今所知我国最早的应用文文集是 ( )A.甲骨刻辞 B.钟鼎铭文C.《尚书》 D.《周易》2.我国第一部文体学专论是 ( )A.《文赋}》 B.《 数字电子技术练习题求解答 《事物的答案不止一个》:第三段是怎样确立”事物的答案不止一个“的思维方式的重要性- - 谁有应用写作的题 请问:谁有09年的文秘管理与应用写作形成性考核册作业答案 金属置换反应是不是要前面的活动顺序大于后面的:就好像ZN+CUSO4==·······那换过来可以吗 就是:CU+ZNSO4==````````` 某食堂发生一起食物中毒事件.食堂负责人及时撰写报告,向上级汇报情况.请问该负责人应使用哪一种类型的报告?为什么? 求最新:文秘管理与应用写作作业3和4!一、在一下五个文种中任选两个文种,进行写作练习.1、贺电(或贺信)2、请柬(要求包含“封面”与“内文”两个部分)3、感谢信(或表扬信)4、求职 例如容斥原理,抽屉原理…… 应用写作试卷求答案,二. 1.病文评析:(40分,(答题要求:逐条指出下面两则公文的失误之处,并提出补救措施,不要求重写.)(1)《××××学会会议纪要》时间:××××年×月××日参加人员 求电大09秋行政管理《文秘管理与应用写作》作业本答案急 《事物的正确答案不止一个》论点及论证方法 (1-2x)^7=a0=a1x+a2x^2+……+a7x^7求|a0|+|a1|+|a2|+……+|a7| 化学初三所有化合价! 《事物的正确答案不止一个》的中心论点是什么?2011-12-24 16:23 提问者:爱笑的樱桃小嘴 | 浏览次数:2次到底是“事物的正确答案不止一个”,还是“每个人都应有创造性思维”?好像:“事物 中和1MOL磷酸需要多少MOL的NAOH?书上说1MOL的P2O5与热水形成的酸需6MOL的NAOH中和.这种酸是不是就是磷酸?磷酸不是三元酸吗,为什么需要6MOL? 初三上化学(化合价这节)某金属M的氧化物的相对分子质量为a,对应的氯化物的相对分子质量为b,该金属的化合价为多少?A.+(2b-a)/55B.+(2b-2a)/55C.+(2a-b)/55D.+(2a-2b)/55一个青少年正常情 事物的正确答案不止一个的论点是什么? 求1mol磷酸和2.7mol氢氧化钠的反应方程式 初三常用的化学化合价都有什么啊 接诗句(一首夏天的古诗)仲夏苦夜短,__________________ 如何证明氧气不易溶于水 初三一个化学问题(离子和化合价的区别)RT 为什么要确立事物的正确答案不止一个的思维方式? 有两颗星,设二者的质量分别为m1和m2,相距L,试求出他们角速度的表达式 跪求关于化合价的化学题(初三的) 高中数学八个定理的内容几何里的 双星运动的两物体质量为M1和M2,相距为L, 一道高中八校联考现代文阅读题目,求详解江山如画不知不觉,我们飘进了一个村庄.平静了一天的世界,果真下起了大雪.好雪的爱妻终于如愿以偿了,她兴奋得又叫又跳,想天真的小姑娘,全然忘 将5ml 0.1mol/L的NAOH溶液 ,配置mol/L溶液时,应向原溶液中加水到多少mol配置0.005mol/L 高中数学定理和性质用于证明吗.还是只有定理用于证明 高中语文现代文阅读题有什么高效的解题方法 将5ml 0.1mol/L的NAOH溶液 ,配置0.005mol/L溶液时,应向原溶液中加水到多少mol 用什么除去乙烷中混有的乙烯? 初三化学化合式如何解答化合式 计算化合式 请给例题好吗 谢谢 先将5ml 0.1mol/L的NaOH溶液,配置成0.005mol/L溶液时,应向原溶液中加水( )ml 既可以用来鉴别乙烷和乙烯,又可以用来除去乙烷中混有的乙稀,得到纯净乙烷的方法有什么 初三化学材料总结(金属、复合……)请分别列举初中涉及到的材料并举例F:金属 合金 复合材料 合成材料 为什么金属与金属化合物溶液发生置换反应时,金属化合物必须溶于水 消化不良与电介质有关系吗 6.4克铜与足量浓硫酸反应,求浓硫酸是多少mol. A是一种红棕色金属氧化物 BD是金属单质 J是一种难溶于水的白色化合物 受热后容易发生分解B(高温)~HCI溶液~加热C naoH溶液~I ~HCI溶液~氨水溶液~F(白色沉淀) 空气中~G 音色与介质有关系吗 mol质量是什么概念.1 mol浓硫酸为几克密度为98% 金属化合物的问题.某化学成分是可溶性的碱式碳酸盐的胃酸药物,表示为My(OH)zCO3· 4H2O,其中M代表某金属元素.取该碱式盐若干,逐滴加入某浓度的盐酸使其溶解,当加入盐酸42.5ml时开始产生CO2,加 双星质量为m1,m2.他们之间的距离为L.求双星运行轨道半径r1,r2,以及运行周期TF向心力=Gm1m2/L^2=m1w^2r1=m2w^2r2 r1/r2=m2/m1 r1+r2=L 这些我都懂但我不懂得下面的计算过程,通过以上各式是如何变换得到 r1 高中数学 三角形的定理及证明过程 请论证一个观点:西方思维方式比中国传统思维方式优越400字左右 A星轨道半径为R1,B星轨道半径为R2,两星相距为L.则有R1+R2=L. 现代教育技术考题,电视信号的两种方式,除射频信号外还有( )A.音频信号 B.视频信号C.音、视频信号 D.彩色信号激光唱片上记录的是( )A.听觉信息的磁信号B.听觉信息的模拟信号C.听 尽量是课本之外的, 两颗行星的质量分别为m1和m2,他们绕太阳运动的轨道半径为r1和r2,若M1=M2,R1=4R2,则他们的周期之比是? 有没有谁有《现代教育技术》的试题? 为什么要确立“事物的正确答案不止一个” 两颗行星的质量分别为m1和m2,绕太阳运行的轨道半径分别为r1和r2,若它们只受太阳的引力作用,那么这两颗行星的向心加速度之比为? 这是现代教育技术里面的题目,有没有谁会做的啊,能不能把过程写详细点额,我比较笨额.一只100w的定压式扩音机,输出端子为0v、20v、40v、100v、240v,拟配接12.5w/8欧姆的扬声器两只,16w/4欧姆的扬 正确的答案不止一个 的思维模式有什么弊端 针对它作者提出了什么看法 为什么要确 密度在数值上等于物体质量与体积的比值 这句话对么 什么叫传播手段和途径?什么叫传播规律?是现代教育技术,理论与运用63页的题.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘