当前位置:首页 >>技术/软件 >> 2008年12月12日

每月3亿PV的FaceBook朋友买卖插件的架构与数据

推荐者:张磊 (积分 699800) | 原作者:孙小二
此文介绍了facebook的朋友买卖应用程序的技术架构,团队介绍,和项目过程中一些技术,管理等问题,很值得做大型2.0项目的团队借鉴。 译者 孙博宇,现工作于 朗玛趋势科技,程序员。 擅长 LAMP 架构应用 个人博客 http://www.sunboyu.cn 在短短的三个月时间内,朋友买卖成为facebook前十名的应用,它每秒钟处理200个请求,每月产生300 000 000个page view。在技术上,选择了Ruby on Rails框架,两个兼职程序员,一打服务器,和优秀的架构。 架构 l Ruby on Rails l CentOS 5(64bit) l Capistrano 升级和重启应用服务器 l Memcached l Mysql l Nginx l Starling 分布式队列服务 l Softlayer 堡垒主机 l Pingdom 站点监视器 l LVM 逻辑卷管理器 l Dr.Nics Magic Multi-Connections Gem 数据库读写分离 当前情况 l Facebook十大热门应用 l 将近600 000活跃用户 l 每天500000独立用户访问量并保持持续增长 l 300 000 000 page view 每月 l 每月300%的稳定增长率 l 上个月2100 000 000的独立用户 l 每秒处理200次请求 l 每月5TB的流量 l 两个兼职开发者(目前一个全职),一个远程DBA支持 l 4台数据库服务器,6台应用服务器,a staging server, a front end server 六台 4核 8G内存 应用服务器 每个应用服务器建立16个mongrels一共是96个mongrels 系统设计目标: 支撑facebook应用-买卖朋友。 它基于一个波动的金融市场。 目前它是facebook排名前十的热门应用。 Tips:像买卖宠物一样买卖好友!你可以玩弄他,送礼物,或者用来炫耀。精明的投资者会把他的朋友发展成人们的货物,其实这只是满足 为什么做这个系统: 做这个系统更多的是为了测试和了解facebook这个系统 设计系统的时候,在设计,架构和实现方面有什么挑战和创新? 因为作为facebook的应用,每个请求都不能使用缓存页面,因此,它是一个时实行,并且写操作频繁的系统,对数据库优化要求比较高。 如何应付这些挑战? 我们采用memcached作为中间层,每个请求都不直接访问数据库。使用Rail's fragment caching缓存表现层。 系统目前是什么规模? 昨日访问量是500 000个独立用户并且访问量一直在增长。根据统计反馈,本月有 300 000 000 的page view。 带宽使用状况 上月产生了3T的流量,这月最少5T,内容仅仅是一些图标和xhtml/css。 文件数目,图片数目,和数据情况 没有文件,有10 000 000用户信息。只有少量图片。 增长率? Page view由平均3M 每天增长到一个月前的10M每天,之前一个月1M,因此平均300%的月增长率,平均每秒处理200个访问。 用户需要付费么? 全部免费 用户增长率 平均1%,并且以每天3%的速度增长。 上月有多少用户活动了? 通过google的统计,上月有2 100 000 独立用户访问。 系统架构如何做? 首先它构建于非常稳定的Rails集群,而且使用nginx软件运行负载均衡和静态内容的服务。6个应用服务器使用4核CPU8G内存。每个应用服务器运行16个mongrels,一共有96个mongrels。负载均衡直接转向mongrels ports。还有,一个4G的memcache服务器,独立的一台对列服务器。 使用god检测进程。 数据层,使用两台32G内存,4核CPU,4×15K SCSI RAID 10disk 做主从。使用Dr Nic's magic multi-connection's gem产品做读写分离。 现在添加了更多的从属服务器可以获得更高的读效率和冗余。 托管商略。 如何规划架构 在应用层没有做什么,因为功能非常琐碎。在数据库方面,我们只有一个主数据库,尽可能去快速分发。垂直划分数据库提高可用性。 有什么独特的地方可以借鉴? 三个方面: 1、两个开发者之前都没有进行过大规模的Rails开发 2、我们的增长率在Rails开发史上比较少见。 3、几乎没有做缓存,每个请求直接用Rails处理 你们中间学到了什么?你们为什么成功?你们是否希望以后做其他的东西,有什么不想改变的? 我们知道了一个好的托管上,好的硬件,好的DBA都是非常重要的。我们曾经选择Railsmachine,他们是一个非常不错的空间提供商但给我们很大的支持。之后几乎没有碰到过硬件上的问题,而且之用两个小时就平滑切换到了Softlayer上。选择一个好的托管上尤其重要。 另一个重要的事情是可伸缩的架构一贯问题出现在数据库上。首先检查数据库,一般情况下都可以通过数据库服务器,数据库配置,查询,索引来解决。 开始就建立在一个好的托管商。 我们鉴定用Rails,因为这是免费并且可快速开发的程序,实践证明两个小伙在没有充足时间的前提下也顺利开发完成了。 你们的小组如何组成的? 我们有两个Rails程序员,包括我在内。而且招安了曾经兼职远程办公的DBA。 你们一共有多少钱人? 技术方面,两个兼职的,一个全职的,一个远程办公的DBA。 你们现在在哪? 两个全职人员依然在 SOMA area of San Francisco。 这些人的职责? 两个开发者作为创始人,我最早做前端开发和程序开发。有一些经验后我也做网管。创始人Alex非常专注于Rails开发,大部分的应用程序是他开发的。现在我主要做数据库方面的工作。 有什么独特的管理方法? 首先,找到最聪明的人,给最好的待遇,尽其所长。最好的管理是尽其所长,我用这种方法管理公司。我想我经常在这里出问题。 你如使一个分散的团队工作? 有个好的交流工具。远程办公比较痛苦,核心开发还是要在本地,一些DBA之类的事情可以远程。 开发情况 使用Rails,很多缓存采用Chris Wanstrath的方案,数据库连接使用Dr Nic。我们使用VIM作为编辑器。 开发语言 Ruby / Rails 服务器数量 12台服务器 服务器应用情况 4台数据库,6台应用,一台staging server,一台前端机 托管商 Softlayer 服务器操作系统 Centos 5 64bit Web server Nginx 数据库软件 Mysql 5.1 反向代理 Nginx 如何部署 委托Softlayer 存储 NAS备份,SCSI硬盘支撑。 存储容量 5TB 存储如何扩展 Ad-hoc。 我们不关注这块,这是我们的软肋。 存储服务器 Nope 如何处理session 数据库,memcache也许更好 数据库如何规划 目前用的主从。一主多从,使用负载均衡提高读性能。 如何做负载均衡 Nginx 使用何种框架和ajax类库 Rails 是否使用了消息服务 没 使用了何种分布式任务管理系统 Starling(队列管理) 如何处理广告服务 使用eCPM 是否使用了标准的API Nope 团队有多少成员 两个开发 团队的技能情况 Me:前端开发,开发(Rails)。最近专注数据库和高扩展性Rails的开发。 Alex:应用程序开发,前端开发,程序架构设计。 开发环境 Alex使用OSX,我在ubuntu上,我们使用svn进行同步,我用vim编辑器,alex用textmate。 开发进度 逻辑层,测试驱动开发,在应用层,使用迭代开发。 缓存策略 使用memcache no TTL,手工设置过期 是否采用了客户端缓存机制 没 系统管理 如何保证性能 使用Pingdom工具进行网页性能监测。 服务器和网络可用性检测 现在我们用自己的检测工具和Softlay提供的ping检测工具。最近我们开发了 FiveRuns作为服务器监控工具。 如何做网络和服务器性能图标 没有做 如何测试系统 我们分模块测试,然后完善的部分,部署到应用服务器上。 如何做性能分析 分析每条sql语句保证效率。没有测试标准。 如何保证安全 小心 那些特性需要改进/保持 反思和批评。我们会非常谨慎得增加一些特性。 如何做web分析 使用一个成长中的检测工作做病毒检测,也使用了google analytics。 是否做A/B测试 一直在做 数据中心是如何设置的 如何备份和回复系统 LVM,每周做增量备份,每日做基本备份 如何升级软硬件 现在手工来做,除非有新的应用。使用capistrano升级和重启应用服务器。 如何处理主数据库的升级 一般是先切换一个从数据库为主,升级完后再切换回来。 你们的发展计划 不是很好 你们有独立的运营团队么 希望有 是否使用内容分发系统 Nope 盈利模式 CPM,浏览多收入多。也通过虚拟货币盈利。 如何营销你们的产品 口碑。病毒传销。 在算法上有什么独特的地方 Ruby已经非常优秀。我们只需要简单应用。 是否在数据库中存储图片 没有,这样不太好 在前端设计上你们都做了什么 在事情发生之前你不知道会发生什么事情。一旦做过,你会有完备的知识去解决下个问题。 有什么值得关注的好事或者坏事 不可靠的硬件,托管商之间沟通的困难,最重要的事情是选择一个能支持你应用的托管商。(sun补充:好像他们的运维都是idc来做)。另一个重要的事情是商用硬件做一个主从设置能支撑多久,你可以轻松支撑10亿级访问 系统什么时候增加新的扩展 没这个计划,事情来了才去计划。 有什么值得发扬的 Memcache,你可以随意切分你的架构 未来是否要调整架构 我们马上要给用户数据库分区,因为马上就会达到数据库的极限。 Facebook 营销思想 l Facebook 成功的把社会关系网络数字化 l 未来社会关系很重要 l Facebook把飞速发展的社会关系放在了互联网上 l 你的应用创意可以是:社会性的,诱人的,通用的。 l 社会化的病毒营销 l 货币化 l 普遍具有潜力 l 朋友买卖是个社会,因为你可以买卖你的社会关系 l 因为它只是一个概念,没有压力并且有点调侃的玩,所以非常有趣 l 它是公平的因为每个人都是虚拟的,有价钱,而且都想变得有人缘。 l 每次应用都可能发展一些新的用户 l 从增长指数上来计算,每个人都能影响1.4个人 l 每个用户发出好多邀请,查看公告,阅读feed,查看用户资料,和其他的项目 l 每个<
[ 关键词:网站架构 插件 朋友买卖  原文/来源链接 ]


验证码:
                 
1、请不要在评论中发广告,如需增加外链请注册成个人会员试用个人签名与自助广告。
2、把《每月3亿PV的FaceBook朋友买卖插件的架构与数据》推荐给您的好友