Instagram图片服务的装备与技术

本文转载自http://mobile.csdn.net/a/20120406/2804276.html

很多喜欢拍照的iOS用户早就对Instagram爱不释手了(其实本人没用过这小编,哈哈),而Instagram也是在昨天发布了Android版本,和一些拥有更多特效、边框、灯光效果的应用相比,Instagram具有更丰富的社交性、更强的用户粘度以及更快的图片处理速度。每天Instagram都要接受大量来自iOS、Android客户端的各种请求、请求、请求……很多同行十分好奇Instagram是用什么方式以及工具来应对每天大量数据的。Instagram通过技术博客向外界揭示了这个世界一流图片服务商所使用的装备和技术,供开发者进行参考。

Instagram团队称,他们选择系统的首要原则有三条:

  1. 保持简单
  2. 利用现成工具,不用从新开始
  3. 使用已经被普遍认可的稳定的技术

底层

主机选择Amazon EC2(参考http://baike.baidu.com/view/6102577.htm),操作系统选用Ubuntu Natty,原因是Instagram团队发现相比之前版本,Natty在高流量环境下相对更加稳定;load balancing设备使用Amazon’s Elastic Load Balancer,DNS选择Amazon’s Route53(http://aws.amazon.com/route53/);以Amazon High-cpu Extra-Large设备作为应用服务器,运行Django(http://baike.baidu.com/view/962167.htm)来处理应用的请求;使用Gunicorn作为Wsgi server,因为发现Gunicorn配置起来更容易;使用Fabric来部署代码

数据库

采用Postgresql数据库,因为Amazon's network disk system (EBS)无法提供足够的每秒磁盘寻道,所以他们软件磁盘阵列(RAID)中通过mdadm设置EBS驱动器。存储器中的数据处理使用vmtouch,Postgresql实例全部通过Streaming Replication来设置,使用的工具是repmgr;用EBS snapshotting来定期备份系统,使用的工具是ec2-consistent-snapshot数据库文件系统使用XFS,使用快照的时候可以冻结/解冻RAID数组;用Pgbouncer将连接汇总到Postgresql图片数据库采用Amazon S3,CDN选用Amazon CloudFront;采用Redis来作为基于内存亦可持久化的日志型、Key-Value数据库

推送与监视

任务请求使用Gearman,而推送通知则使用pyapns;用Munin显示整个系统各种指标;用Pingdom作为外部监督服务;用PagerDuty处理通知和意外;用Sentry进行Python error报告。

总结起来就是:用已被普遍认可的技术来降低维护成本,将精力尽量花费在自己的核心业务上,所谓“好钢用在刀刃上”。

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...