Twitter开发者大会摘要

Twitter开发者大会有关PPT: http://www.slideshare.net/tag/chirp

摘要两篇PPT如下:
一. Scaling Twitter with Cassandra谈如何使用NoSQL数据库Cassandra提高著名Twitter网站性能。

传统方式有三个:
1. MySQL的水平和垂直分区
2. 使用分布式缓存Memcached
3. 通过应用程序管理。

这些方式问题:
1.存在很多单点风险,一台服务器当机,整个应用崩溃
2.硬件密集型
3.人手密集型
4.紧耦合。

Apache Cassandra最初在Facebook使用,它是一个分布式数据库,具备google 大表风格和Amazon Dynamo底层,见NoSQL总结分类

二.Scaling Twitter一文则从硬件网络软件等整体谈Twitter遇到的挑战,以及如何进行可伸缩性设计扩展。并公布了Twitter服务器端主要架构,如下:


三.The Why and How of Scala at Twitter谈了Scala语言在Twitter中应用,为什么使用Scala?Ruby使用在前台,Scala使用在后台。Twitter主要使用Scala来进行服务(提供查询 搜索 社会图保存)建立,隔离组件层。



[该贴被banq于2010-04-19 15:56修改过]

呵呵,不错的文章。多谢banq老师推荐。

Big Data in Real-Time at Twitter Twitter实时大数据

Twitter中的消息原始是用关系数据库实现,建立一个表:有字段id userId text 和createdate,使用memcached作为缓存,实现Master-slaver。

带来的问题是磁盘,超过800G,90%利用率。频繁读写。

然后采取分区,以主键值分层不同表,最后是以时间为顺序分区,当然他们还是碰到问题,比如遭遇MySQL的死锁,还有写通过率问题,通过率throughput和延迟latency是非常重要的两个指标。

提出了在线和离线计算的模型,将一些查询事先计算,要心中对内存中数据层次有一个图谱,提出了timeline时间表。

还有社会图social graph的实现,也就是列出follower跟从粉丝有多少,屏蔽多少,初期使用关系数据表 source_id 和destination_id,将这两个id进行index,带来问题是写通过率.

采取forward和backward两个方向性质的表,根据用户id分区。

在搜索上,他们竟然没有使用lucene,可能Twitter软件人员对Java在行的不多,这点从架构设计可以看出,至少可以避免少走弯路,自己发明轮子。

继续:

NoSQL at Twitter (NoSQL EU 2010)

Twitter一个最大特点就是用户产生大量数据,大概是300G,不知是每秒还是每分钟,一开始使用syslog,但是不可伸缩,会丢失数据。

使用开源scribe,和facebook一样,用来处理collection data,集合数据,每个节点只知道下游写操作者,有层次,可伸缩。

使用apache Hadoop进行存储和分析数据,每天有7TB数据要保存。如果依赖硬盘80MB/S,需要24小时才能写完7TB数。使用hadoop,可以在62秒内对1TB数据排序,有分布式文件系统,基于Mapreduce算法。

twitter的跟从者的社会关系图分析也是一件复杂事情,如果使用关系数据库如MySQL的Join,那得相当长时间,使用select count(*)更是吓人,Hadoop可以将这些分布到不同机器上去并行计算。

数据分析方面,数字一直在滚动,每5分钟有一千二百万,需要计算每个用户的信誉度等等,这些Java(多线程模型)适合吗?“我只想让生活中更少些Java,而不是更多”,sigle-input two stage模型是硬性的,还有更多Java的缺点。

Hadoop已经类似Java形成一个生态系统,hadoop-lzo可以获得更快更高的压缩存储, elephant-bird pig hadoop的api

通过大数据进行快速学习方面,使用pig,pig是一个高层次语言,易于SQL,并解释了为什么使用pig。

pig可以用于:
大数据量的count计数:使用pig通过hadoop实现;
大数据关联:如何区分手机和桌面用户?什么特性用户使用最频繁?搜索建议和完善,
大数据的研究:我们可以从tweet上研究到用户什么信息?他们自己的tweet或跟从者tweet?tweet的树形结构。

PPT最后介绍了HBase等几个NoSQL数据库使用,HBase是一个基于HDFS的可变数据层,容易和MapReduce和pig相连,可以使用HBase实现人搜,将用户数据导入HBase,定期使用MapReduce读取HBase,为scala服务,见
Building Distributed Systems in Scala

他们也比较里哦啊HBase和Cassandra:其实优点决定了缺点(banq按:鲁迅有言:吸取其精华,剔除其糟粕简直是废话,因为精华和糟粕往往是纠缠在一起的,their origins reveal their strengths and weaknesses)。HBase是建立在面向批处理系统,不是为了低延迟目标建立的,Cassandra则是为了获得高性能低延迟建立的。

HBase容易实现输入 输出的批处理工作,Cassandra则不擅长;HBase在namenode中有SPOF,HBase用于数据分析,而Cassandra用于在线实时系统。

FlockDB用于实时分布式 社会关系数据存储,比如谁跟了谁?等等,不优于用户数据挖掘。

使用Cassandra保存所有tweets,可容错,有高的写通过率,twitter是一种最终一致性类型应用,具体见:Scaling Twitter with Cassandra。将Cassandran和mySQL整合,标准的读写操作用MySQL,而动态的读写用Cassandran。


非常感谢 赞一个~

对于未来大量数据的增长,NOSQL或许会成为企业的解决方案..而在现在企业开发模式中.现在,末来,一些应用层的东西在数据库上还是无法实现的.其职责不一样..数据库向分布式开发进军.而应用或许会发展到多核时代...不知banq 老师有什么更好的看法..

这里有一个关于twitter内部使用何种技术的介绍(Hadoop user group May 2010):

Slides:
http://developer.yahoo.net/blogs/hadoop/2010/05/sss.html

Video:
http://www.slideshare.net/hadoopusergroup/yahoo-hadoop-user-group-may-meetup-hbase-and-pig-the-hadoop-ecosystem-at-twitter-dmitriy-ryaboy-twitter

有关Cassandra最大的concern还是scalability。目前大家比较公认的较大的deployment就是facebook的 108 node cluster. fb自己的hbase deployment 还要规模大些(?没有具体数据)。而bigtable 在 google 有个18k 的 cluster.