译者:

孙小二的其他译作

原文:

朋友买卖:基于Ror,日访问300 000 000PV的facebook插件

- 朋友买卖-基于Ror 每月300 000 000 pv的facebook插件

本周热评

其它收藏服务:

--小组: web 2.0

金牌译作  朋友买卖-基于Ror 每月300 000 000 pv的facebook插件

2844个读者 孙小二 @ yeeyan.com 2008年12月12日 双语对照  原文 字体大小

简介

此文介绍了facebook的朋友买卖应用程序的技术架构,团队介绍,和项目过程中一些技术,管理等问题,很值得做大型2.0项目的团队借鉴。
译者 孙博宇,现工作于 朗玛趋势科技,程序员。

擅长 LAMP 架构应用

个人博客 http://www.sunboyu.cn

 

在短短的三个月时间内,朋友买卖成为facebook前十名的应用,它每秒钟处理200个请求,每月产生300 000 000个page view。在技术上,选择了Ruby on Rails框架,两个兼职程序员,一打服务器,和优秀的架构。

 

架构

Ruby on Rails

CentOS 5(64bit)

Capistrano 升级和重启应用服务器

Memcached

Mysql

Nginx

Starling 分布式队列服务

Softlayer 堡垒主机

Pingdom 站点监视器

LVM 逻辑卷管理器

Dr.Nics Magic Multi-Connections Gem 数据库读写分离

 

当前情况

Facebook十大热门应用

将近600 000活跃用户

每天500000独立用户访问量并保持持续增长

300 000 000 page view 每月

每月300%的稳定增长率

上个月2100 000 000的独立用户

每秒处理200次请求

每月5TB的流量

两个兼职开发者(目前一个全职),一个远程DBA支持

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 营销思想

 

Facebook 成功的把社会关系网络数字化

未来社会关系很重要

Facebook把飞速发展的社会关系放在了互联网上

你的应用创意可以是:社会性的,诱人的,通用的。

社会化的病毒营销

货币化

普遍具有潜力

朋友买卖是个社会,因为你可以买卖你的社会关系

因为它只是一个概念,没有压力并且有点调侃的玩,所以非常有趣

它是公平的因为每个人都是虚拟的,有价钱,而且都想变得有人缘。

每次应用都可能发展一些新的用户

从增长指数上来计算,每个人都能影响1.4个人

每个用户发出好多邀请,查看公告,阅读feed,查看用户资料,和其他的项目

每个频道都能跟踪用户点击,修改,和卸载

 

本节收获

 

扩展性从开始就是facebook的一个方向,他们在一周内就做到每天1000000pv的访问量

Ruby on Rails可扩展

扩展性表现在架构上,关注架构和运营

你需要个好的DBA,好的托管商,合理的硬件

利用cache和高负载的硬件,你不用去做负载的数据库优化

社会关系是真实的,它构建于facebook的用户基础上,而且有非常好的虚拟应用。

大部分问题都是数据库的,数据库服务器,数据库配置,查询,和索引。

用户依然试用VI

 

 

 

 

    

 

 

本文版权所有,未经许可,请勿转载
内容合作请 联系我们

译作评分
5.0
请给出您的评分  提交

更多关于 Facebook 朋友买卖 ROR 开发 ruby 的翻译文章

2条评论

  • 1.

    里子 童生  | 2008年12月12日

    关于架构,有可学习的地方

     
  • 2.

    Bohrium 童生  | 2008年12月25日

    事实上本人十分相忘网页架构方面的学习,尤其是RoR的技术,不过最近学业过于繁重,也就暂时作罢了。能够如此真实的看到了ROR的应用,实在是很感激作者的分享和译者的努力。

     

添加评论

阅读
发现
翻译
合作媒体

Copyright © 2009 yeeyan.com All rights reserved. 京ICP证080457号