Twitter;SNS产品发展途中那些事

2006年创建的twitter已经是如今全球最为火热的sns服务之一,更是微博客这一概念的头号先行者。twitter目前的注册用户数已经超过了一亿,而现在整个twitter团队大约只有180名员工,其中技术工程师占据70到80个左右。巨大的信息流量不断冲击着twitter服务器的上限,而做为一个sns服务,功能的更新也同样不可忽视。对于这样一个发展迅速的服务,我们要如何有效地把握它的发展脉络?在今年的北京qcon大会上,twitter的系统工程师nick kallen来和我们分享twitter技术团队的经验。

nick kallen原本是一位软件咨询师,同时也是rails3框架的基础arel、namedscope、分布式缓存框架cache money和javascript行为驱动开发框架screw.unit等多个开源项目的作者。两年前他应邀解决twitter的可伸缩性问题,并由此加入了twitter的技术团队。对于现在twitter的规模而言,可高效查询的可伸缩式数据模式是最为紧迫的任务之一,而nick现在的主要关注方向之一就是一个通用的分布式数据库。

nick的twitter是@nk。

twitter的发展早期

做为流行度增长最快的sns服务,twitter常常被拿来与2004年创建的facebook作比较。与facebook日益剧增的新功能与新应用形成鲜明对比的是,twitter在诞生之后的三年内一直鲜有新特性的加入,直到最近这一年才逐渐加入了图片支持、地理位置显示等新功能。根据nick的介绍,早期的twitter团队对twitter的定位是以“最小化服务”为目标的,当时团队认为添加新的功能将会对twitter“最小化服务”的定位产生不好的影响。

不过对当时常年被fail whale所纠缠的twitter团队而言,的确也抽不出足够的人力和精力放在开发新功能上面。twitter诞生后的三年时间中,用户数量一直飞速发展,数据量骤然攀升。twitter最开始以lamp架构(linux+apache+mysql+php)创建,这个系统很快便不堪重负。nick十分坦诚的向我们描述了twitter团队早些年的状况:

“系统的可伸缩性一直是如此紧迫的任务,导致我们的工程师们几乎没有什么机会考虑新特性方面的事情。所有的工作就是维持服务运作,以及将其扩展。……在一开始的lamp架构下,通常就是一个mysql主数据库来做垂直伸缩。这当然不是不可伸缩的设计,不过无法满足我们的需求。”

twitter的可伸缩性

在用户接触不到的后台,twitter在四年间其实一直经历着很多改变。比如在应用层,服务器后台处理这一块,twitter在08到09年间使用scala语言重写了后台应用,大大增强了多进程异步处理的能力,提升了性能。

这期间最大的变化,应该就是数据层的变革了。2009年开始掀起的“nosql革命”在web领域造成了极大的反响,twitter也在今年年初开始对其tweets数据类型引进新生的nosql数据库cassandra。而根据nick的介绍,twitter早在一年半之前便开始专注于高效的分布式数据存储解决方案,该方案的重点在于partitioning策略,即数据的分割。

“以前我们将所有的数据和服务存储在一个组件上。而数据分割的做法,就是将数据分割成小块,然后存储在多个组件之上。因为大块的数据被切割成了小块,我们就可以并行的、以小任务的方式完成查询和操作的工作。无论是我们开始发一个推,还是我们开始一个社交图(social graph),还是我们开始一个搜索,每一个主要组件都在过去的一年半中通过不同的策略完成了数据分割。这就是现在twitter可伸缩性的实现。”

近一年多持续增长的时间内,twitter fail whale的出现次数已经降低了很多,应用层与数据层改进可谓是卓有成效。

twitter api与新功能

相比twitter的流量和用户数,现在的twitter技术团队仍然显得人手不那么充足。不过twitter有一个很有意思的地方,就是在于其第三方应用的流行。2009年7月的统计显示twitter的第三方桌面应用、手机应用、web应用和浏览器扩展总数刚刚过万,而截止到现在,这个数量已经超过了十万。虽然twitter的核心功能一直没什么重要改变,但在全世界上万开发者的摆弄之下,这个社交平台显示了惊人的生命力与创新能力。像是twitpic图片存储服务和iphone客户端这种应用都是来自第三方开发者,而这与twitter的开放api是密不可分的。可以说,twitter的大部分活跃和创新都应该归功于它的开放api。

对于twitter api的由来,nick做了一点简单的介绍:

“其实一开始的api开发,就是因为一个以前在twitter的工程师离职去了德国,而他想要把twitter集成到自己的聊天机器人里面。最初的api就是为了这位老兄的小玩具而设计的,不过我们很快就看到,将有更多人使用api来创造更多的东西。因此我们在很早的时候就开始在api上投入精力。”

和facebook一样,twitter对于开发者社区非常关注。twitter刚刚在4月14日和15日举办了twitter开发者大会chirp,刚好在facebook的f8开发者大会之前一周。chirp大会上刚刚公开了twitter开发者网站的上线,相信对于twitter开发者而言是个令人兴奋的消息。

更多的变革

正如同nick所介绍的那样,twitter已经发生了转变。与之前的“最小化”定位不同,twitter已经开始积极的推出新的特性。而对于开发者社区,nick也表示了自己的期待:

 

“开发者社区的一大挑战便是,我们构建的产品核心功能要如何通过api来实现更多的创新——那些我们将不会在核心中包括的创新,而不仅仅是web的一个替代品。程序使用api的方式和人使用网站的方式是有着极大区别的。程序总是不停地问twitter:有更多数据么?有新的信息么?如此这般。不过人是不同的,他们在一天当中的特定时间段查看页面,比如午饭的时候。所以很有意思的是,所有的api使用都很同质化——功能相似,速度很快,重复性强。如何在这种方式下进行高效的访问,是工程师需要思考的问题。而每个用户不同的、不规范的使用习惯,也是另一个需要思考的问题。”

  • Twitter;SNS产品发展途中那些事已关闭评论
    A+
发布日期:2019年07月02日  所属分类:新闻动态