Flickr是我个人喜爱的网站之一,也是互联网上最主要的图片共享网站。Flickr网站后台有许多非常复杂的问题需要处理,它们需要处理海量的新增的内容,管理大批的用户,不断保持新的功能特征,与此同时,还要提供一流的性能。它们是如何做到的呢?     Flickr网站的网址是: http://www.flickr.com/ 参考文献 Flickr and PHP(一个早期的文档) LAMP容量规划 Flickr联盟:Flickr网站体系结构指南 来自Flickr网站工程师Cal Henderson所写的文章:如何构建可伸缩web站点 Cal Henderson的谈话记录,在许多幻灯片中陈述对一些web技术的看法 平台 PHP MySQL Shards Memcached高速缓冲层 Squid反向代理(reverse-proxy) Linux(红帽子)操作系统 Smarty模板 Perl脚本语言 使用PEAR进行XML和Email分析 ImageMagick图像处理 Java节点服务程序 Apache服务器 SystemImager部署 Ganglia分布式监控系统 Subcon存储系统配置文件 使用Cvsup来分布和更新文件集 下面附上Flicker站点系统构架

1
统计情况 每天超过4百万请求 Squid高速缓存中大约35M的照片 Squid RAM中大约2M照片 memcached每秒38k个请求(12M) 2 PB原始数据存储器(在星期天消耗大约1.5TB) 每天增加400,000张照片以上
系统结构     关于Flickr站点体系结构的一组图像化的展示,如图一所示,更多关于Flickr站点体系结构的描述,你可以在这个页面查到。进行简单的描述就是: —一对ServerIron —Squid Caches —Net应用程序 —PHP应用程序服务器 —存储管理器 —Master-master碎片 —双树形中心数据库 —Memcached Cluster —大型搜索引擎     双重树形系统结构是一项对MySQL常规配置,通过增加masters,而不是环形体系结构来增加伸缩性。比起需要两倍硬件的master-master安装来说,这种方式你只需要较少的硬件,因此节约了提高网站伸缩性的费用。  系统结构中的中心数据库包括想用户表这样的数据,这个表包括主要的用户信息,主键,和指向用户相关的数据。 对于静态内容使用的专门服务器 研究如何支持Unicode 不要使用共用的结构系统 所有的东西(除了照片)都要存在数据库中 创建一个搜索农场(search farm),复制部分需要进行搜索的数据库 使用横尺度,保证更多所必需的的机器 分析每封邮件,处理用户通过邮件发送的图片。 早期曾经遭受Master-Slave延迟。太多负载会有出现单点故障 保证网站一直开通,不断修复数据等等,不要让网站关闭 进行好的容量规划。获取更多的信息查看文章前面部分的参考文献。 使用统一的方法以便为了以后进行伸缩扩展 碎片:我的一些数据存储在我拥有的磁盘碎片上,但是进行对你的一些评论,存储在你的碎片空间上。如当你对其它人的博客进行评论的时候,这种情况就会发生。 Global Ring:像DNS,你需要知道页面往哪里链接,谁来控制方向。每一个页面的浏览,都要计算当前你的数据在哪里。 PHP 逻辑来连接那些碎片空间,保持数据的一致性(带注释的10行代码) 碎片 —主要数据库的一个小部分 —活动的Master-Master Ring Replication:MySQL 4.1中的小缺点,而在Master-Master—确是光环。ID自动增加能保持有效。 对于新的用户,碎片的分配是一个随机数。     迁移是时不时要发生的,因此你可以删除一些用户。当有很多的照片的时候,你需要均衡。192,000张照片,700,000标签的迁移需要大约3-4分钟。迁移时人工完成的。 移出Cache中的照片拥有帐户,给他们分配一个碎片空间地址。从cache中移出我的信息,将它们加到我的碎片地址中去。     如果当前主机宕机,访问列表中的下一个主句,如果所有的主机宕机,显示一个错误页面。他们不会使用持久性连接。每一个页面加载,都要测试连接。     每个用户的读写都放在一个碎片中。不存在什么复制延迟的事情。     平均请求每个页面,用到 27-35 SQL语句。API访问数据库都是实时的。完成实时处理需求     每秒超过3600个请求,在容量极限范围之内。在高峰期爆发时,会达到两个36000每秒的请求数。 每个碎片能持有400K以上的数据     许多数据存储了两次。举个例子,一个评论关系到评论者和被评论者。评论存储在什么地方?是不是在两个地方都存储了?事务处理机制用来阻止同步数据:打开事务1,写入一些命令,打开事务2,写入一些命令,提交第一个事物后,如果第一个提交,再提交第二个事务。但是这还有存在失败的可能性,可能提交了两次。 硬件: - EMT64 w/RHEL4, 16GB RAM - 6-disk 15K RPM RAID-10. - 2U 逻辑单元。每个碎片空间存储~120GB数据 备份过程:     每天晚上对整个数据库集群进行快照     当在进行复制备份文件时,在复制文件存储中一次写入或者删除几个大的备份文件会损害性能。对图片存储文件进行这种操作时非常坏的主意。     虽然将你所有的数据进行备份很多天使非常耗费资源的,但是这么做是值得的。保持错列的备份时很有用的,特别是当你在几天后发现出现问题的时候。你可以做1,2,10,30天的备份。     图片是存储在文件夹中。当你上传的时候,会处理图片,供给你不同的尺寸选择。元数据和指向文件夹的路径会保存在数据库中。     每个shard max_connections = 40的连接数,或者每个server & shard加起来等于800的连接数。线程高速缓冲器设置为45,因为你不会有超过45个用户同时在活动。 标签     对于传统的关系型数据库管理系统设计,标签是不太适合的。方向规格化或者重型高速缓冲器是唯一的方法来生成标签,一毫秒能产生上百万的标签。 未来的方向:     使用实时BCP,能够运行的更快,因此所有的数据中心一直都能够接受写入信息。所有的资源都是使用中的,没有一个将会在空闲。

学到的经验:     不仅仅把你的应用程序看作一个web应用程序。你将会有使用到REST APIs,、SOAP APIs、 RSS feeds、 Atom feeds等;    无界限化。无界限化能够让你的系统更加鲁棒,毫无顾虑的进行升级。    高速缓存。尽量高速缓存和RAM来响应每个请求     抽象化。在数据库,业务逻辑,页面逻辑,页面标签,和表现层之间创建很清晰的抽象层次。在迭代开发中将会很灵活好用。      分层。分层设计能够让开发者处理业务逻辑,而设计者能够进行用户体验页面设计。设计者还能在需要时请求页面逻辑。这两层之间有一个很好的协商。     释放频率。每30分钟一次。     忽略微小性能改善,不成熟的优化将灾难的根源。     应用程序测试。要能轻松的在你的应用程序体系结构机制(如设置标签,负载均衡等)中插入或者移除新的硬件。     忘记基准。对于获得容量的一般观念设置一个基准是很好的,但是,对于规划来说,设置基准并不好,人工测试会提供一个测试结果,对真实情况进行一个测试会是一个更好的方法。 确定最高限额 每个服务器能够达到的最大极限服务是多少? 每个服务器接近到最大极限有多近?这个趋势又是怎么样的?MySQL(disk IO)情况又是怎样的?SQUID (disk IO 或者 CPU )的情况又是怎样的呢?memcached(CPU 或者 network )情况又是如何的? 对用户的使用规律要敏感     与上一年的第一个工作日相比,Flickr网站在今年的第一个工作日会增加20-40%的负载每周日平均要比这一周其它天增加40-50%负载 。对用户指数级的增张要求敏感。更多的用户意味着更多的内容,更多的内容意味着更多的连接,更多的连接意味着更多的请求。 负载高峰备用。要有能够处理高峰负载的计划

Flickr网站体系结构分析相关推荐

  1. Flickr 网站架构分析

    http://www.itivy.com/ivy/archive/2011/3/7/634351294385186067.html Flickr.com 是网上最受欢迎的照片共享网站之一,还记得那位给 ...

  2. linux中断处理汇编入口,Linux中断处理体系结构分析(一)

    中断也是一种异常,之所以把它单独的列出来,是因为中断的处理与具体的开发板密切相关,除一些必须.共用的中断(比如系统时钟中断.片内外设UART中断)外,必须由驱动开发者提供处理函数.内核提炼出中断处理的 ...

  3. Facebook的体系结构分析---外文转载

    Facebook的体系结构分析---外文转载 From various readings and conversations I had, my understanding of Facebook's ...

  4. 广告投放与管理系统的功能体系结构分析

    本文分析了 广告投放与管理系统 应该具有的功能和体系结构. 阅读对象 网站管理人员,公司决策人员,系统分析开发人员等 恐怕网站管理员谁都有过把广告内容嵌入到web页面的经历.或者,你可能已经听说过或正 ...

  5. linux中断处理体系结构分析(一),Linux中断处理体系结构分析(二)

    1.中断处理的体系结构 我们知道编写设备驱动程序一定要用到中断处理函数,这在驱动程序的编写中,占据很重要的一部分.在响应一个特定的中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interru ...

  6. 金融结算系统的基础业务之账户体系结构分析

    金融系统的基础是结算,结算的核心是账户,账户体系是最基础的也是最重要的部分,而众多的业务也都是围绕账户展开的,要了解现在众多的金融系统(包括互联网金融)就绕不开账户体系. 一.先看一下结算系统的几个抽 ...

  7. 计算机Intel CPU体系结构分析

    前段meldown漏洞事件的影响,那段时间也正好在读Paul的论文关于内存屏障的知识,其中有诸多细节想不通,便陷入无尽的煎熬和冥想中,看了**<计算机系统结构>.<深入理解计算机系统 ...

  8. Linux中断处理体系结构分析(二)

    1.中断处理的体系结构 我们知道编写设备驱动程序一定要用到中断处理函数,这在驱动程序的编写中,占据很重要的一部分.在响应一个特定的中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interru ...

  9. 体系结构分析与设计语言AADL基础

    这是在研究AADL标准过程中,写的笔记,拿出来与大家共享,也请大家多提意见,多多交流. 2001.11,SAE提出航空标准AS5506,即AADL.支持对性能关键系统属性用可扩展的标记符.工具框架和精 ...

  10. 软件体系结构的分析与测试,软件体系结构分析与评价,software architecture analysis and evaluation,音标,读音,翻译,英文例句,英语词典...

    内容提要:虚拟制造技术是由虚拟现实技术支持的新的研究领域,它是用三维的和动态的仿真模型模拟产品设计与制造及其相关的过程.虚拟制造系统是企业集成的一种新方案,本文给出一种基于集成概念的虚拟制造系统的体系 ...

最新文章

  1. 图片上传之后清空_OSS文件上传及OSS与ODPS之间数据连通
  2. 国家电网是“围城”?辞职吗?
  3. 网络协议:TCP可靠传输
  4. 基于Flash的ECC纠错算法基本原理及软件C语言算法和硬件Verilog实现(PPT在主页可下载)
  5. git rebase 两个交叉branch换基
  6. 《Linux内核设计与实现》读书笔记(12)--- 内存管理(2)
  7. MatLab 2016b下载资源
  8. 将iTunes音乐传输到USB驱动器以在汽车中收听
  9. 《吐血整理》-顶级程序员书单集
  10. 什么是静态测试、动态测试、黑盒测试、白盒测试、α测试 β测试?
  11. java论文3000字_一篇文章让你真正了解Java(纯干货)
  12. 按空格键出现锁定计算机页面,租号玩回车键被锁解锁-整个电脑键盘被锁怎么解锁...
  13. photo2cartoon环境搭建-真人头像卡通画-写实
  14. java的数组与Arrays类源码详解
  15. C++简介 C语言编程原理
  16. 史上最全的html标签属性用法对照表
  17. html怎么能调用微信语音,微信录音-微信录音功能新用法!【微信录音】怎么用...
  18. [转]复合信号、S-Video信号、分量信号
  19. 网络媒体教程:采访与写作
  20. taglib.class.php,thinkphp5 taglib标签库自定义

热门文章

  1. Drug Discov. Today | 药物发现中的先进机器学习技术
  2. python格式化百分比输出,如何将浮点数输出为百分数,不需要额外代码的简便方法
  3. 健身用肌酸市场前景分析及行业研究报告
  4. linux报错ora12514,ORA-12514:RMAN连接报错解决
  5. spring boot中mybatisPlus代码生成器源码
  6. Android进程系列1---进程基础
  7. Opencv系列教程(一):Opencv读取指定文件夹图片、视频,调用摄像头
  8. “2019年中国新型城镇化论坛”在京举行
  9. Spring Cloud Alibaba Sentinel(七)受权规则 黑白名单
  10. Springboot:JWT