??xml version="1.0" encoding="utf-8" standalone="yes"?>
http://www.ciotimes.com/infrastructure/database/a/database200909161049.html
D:本文提出一U改q的数据仓库体系l构Q在数据仓库中添加一个辅助结构作为接收和存储更新数据的暂存库Q直到数据仓库获得空闲周期,加入新的数据和更新必要的视图Q通过试验模拟两种数据仓库l构Q验证了新的模型在设计和性能上的优越性?nbsp;
本文提出一U改q的数据仓库体系l构Q在数据仓库中添加一个辅助结构作为接收和存储更新数据的暂存库Q直到数据仓库获得空闲周期,加入新的数据和更新必要的视图Q通过试验模拟两种数据仓库l构Q验证了新的模型在设计和性能上的优越性?br />
数据仓库中的数据是从多业务处理系l中抽取转换而来的,q些数据源的数据是不断变化的。因此,数据仓库需要更新机制来不断更新和维护,以保证数据的完整和正。同Ӟ数据仓库面向决策支持Q数据仓库的体系l构应努力保证查询和分析的实时性?br />
现在pȝ来庞大,数据源越来越多,l构也越来越复杂Q这使得数据仓库的加载和更新l护工作更加困难Q制定一个数据集成的计划p的时间和_֊也是来多。面对这U情况,开发h员的_֊被调度繁杂的pȝ所占用Q无法集中到制定合理高效的数据集成计划上来。ؓ了ɘq一q程更加自动化,减少人工q预Q我们引入了Z元数据库的工作流ҎQ得整个数据仓库更新处理过E成Z个整体,更加单易行,减轻了开发h员的负担Q从而提高效率?br />
1 数据仓库的更新问?/strong>
Z对决{提供有效的支持Q数据仓库中的数据需要不断地从业务数据库中得到更新。数据更新是指在原有数据仓库基础上,定期捕捉源数据库的变化数据,q加到数据仓库中。数据仓库获得所需更新信息的方法有以下3U:
Q?Q由建立在源数据库上的应用程序提供更C息给数据仓库。这U方法优Ҏ易于执行Q只要对历史遗留pȝ的代码稍加修改,使它提供源数据库中的更新l数据仓库。缺Ҏ遗留pȝ的代码难以提供一个好的^Cؓ数据仓库更新?br />
Q?Q利用日志文件。这U方法的优点是对数据仓库的更C会媄响源数据库,利用日志文g效率很高Q避免了扫描整个数据库。缺Ҏ解析源数据库日志文g有困难,卻I①系l日志文仉常采用软g供应商专有的形式Q而不同供应商之间难于׃nl构信息Q②获得日志文gQ需要系l管理员权限Q③数据库系l不一定都有实施该Ҏ的数据库日志cd?br />
Q?Q前后映象文件的Ҏ。在抽取数据前后Ҏ据库各作一ơ快照,然后比较两幅快照的不同从而确定新数据。这U方法的优点和第2U方法一P快照数据被提供给数据仓库Q或者提供给独立于源数据库和数据仓库的辅助处理器Q来完成快照的比较工作。缺Ҏ快照文g会变得越来越大,D快照的比较工作非常耗时Q占用大量资源,影响性能。数据仓库更新过E牵涉的因素众多而且复杂Q因此,本文的研I只限于源数据已l传递到数据仓库后的数据更新处理?br />
2 改进的数据仓库体pȝ?/strong>
常用的数据仓库体pȝ构如?所C,它集成源数据库的数据Qƈ其存储在数据仓库中Q用L接从数据仓库讉K数据。这个结构简单易行,但它不能及时地自动侦源数据库的更新Q只有当高端应用Ҏ据仓库进行查询时Q才由数据仓库的实体化视囑֯相关的源数据库发动查询,源数据库Ҏ新处理处于被动状态。本文徏议在数据仓库体系l构中添加一个如?所C的更新辅助l构Q来优化数据仓库的性能Q减用h询时间。该l构假定为非易失随机存储器NVRAMQ用它作为数据仓库和数据解释器之间的~冲存储区。辅助结构和源数据库QSDBQ之间的数据是单向的,负责接收由SDB提交到数据解释器的更新数据。辅助结构和数据仓库之间的数据流是双向的Q它向数据仓库提供视囄护的基本数据Q数据仓库的查询和维护请求则在辅助结构中执行完成。有了这个辅助结构,避免了数据仓库在接收数据解释器中数据的同ӞҎ据库表和用户视图执行更新l护。得数据仓库的更新选择在系l空闲时_而不是在新数据由源数据库转换的同时进行。数据仓库用具有周期性,因此必然存在接收更新数据的空闲时间。另外数据仓库可以查询辅助结构获取更新数据,反馈l用L查询。ؓ了防止辅助结构中数据溢出Q设一个机制强制执行更C务,有x据传送到数据仓库?
? 标准数据库仓库模?br />
? 数据仓库的改q模?/strong>
三?YouTube 的架构扩? 四?mixi.jpQ用开源Y件搭建的可扩展SNS|站 五?Technorati的后台数据库架构 六?通过了解MySpace的六ơ重构经?来认识分布式pȝ到底该如何创? 七?从LiveJournal后台发展看大规模|站性能优化Ҏ 八?说说大型高ƈ发高负蝲|站的系l架? 一?web2.0|站常用可用性功能模块分?/p>
Web 2.0|站是指传l的|站构架Q^台、内Ҏ、用戗传播方式等Q{化到以用户ؓ核心的网站构架上来,包括一pd体现web2.0概念的元素、定位和?意。web2.0|站在构架上MC大宗旨,?strong>强大的后台系l和单的前台面
3 改进模型的设计实?/strong>
新模型结构重点在于用h询,pȝ对用h询响应拥有对pȝ其他q程更高的优先权?br />
Q?Q功能结构。来自数据解释器的数据,首先存放在更新辅助结构的数据表中。这些辅助表Q例如烦引)是存储在数据仓库中的表的副本Q但是不h与数据仓库结构相联系的管理能力。它们是用于更新数据仓库的时存储,而不用于用户直接讉K。更C息传送到辅助l构Ӟ首先查辅助结构的I间相对分配l辅助结构的NVRAMI间所占比例。当辅助l构已用空间达到NVRAMI间?5Q,标志溢出Q更新辅助结构自动生成数据包和必要的查询传递给数据仓库。溢出功能触发器是一U安全措施,防止因ؓ更新辅助l构的存储空间满Q不能接收来自数据解释器的数据。操作流Eؓ数据仓库在空闲时间请求更新辅助结构里的数据。数据仓库的pȝh或者数据溢出标志可能会触发更新q程。一旦更新进E被触发Q更新辅助结构生成数据包Qƈ发送给数据仓库Q用于插入到数据仓库表中。数据仓库中相应的数据表和视图被更新Q在更新完成后,事务完成信息q回l辅助结构。然后辅助结构删除时存储表中的相关数据Q从而释攑օ占用的空间?br />
Q?Q处理用h询。数据仓库接到用h询要求后Q系l暂停队列表中除了来自辅助结构的用户查询响应之外的所有队列。仓库应用程序确认用h询,q将一个查询副本立卛_送给更新辅助l构Q辅助结构时内存中可能存有与查询相关的信息。查询先在数据仓库的L据表处理Q查询的l果暂存在时表里,该时表用于存放以后不断U篏的查询结果数据。如果辅助结构里有Q何与查询有用的数据,会被立即提交l数据仓库作为对查询副本的响应。辅助结构响应用h询的数据传输在系l信息通道中有最高优先权Q以保来自数据仓库的信息迅速地被处理,q当前执行的用h询较pȝ查询队列里其他查询最先获得所需数据。如果辅助结构中没有W合用户查询要求的数据,辅助l构提交一个空包作为响应,防止数据仓库I等待,使数据仓库能控制用户查询q程Q确认查询进E的l束。来自辅助结构的数据加入C时表里,然后发给报表Q视囄成器处理成用户可ȝ形式?br />
4 ZXML的中间g模型
改进l构中提供了多种操作W,如投影、选择、连接、ƈ、拆分等。把复杂的数据集成工作分解ؓ很多相对单的步骤,使用户可以灵zd定制自己的数据集成计划,q样也ؓ使用工作方法来调度整个数据集成计划提供了方便,因ؓ工作方法对于这U流E化的处理十分方ѝ用工作流ҎQ来操纵数据的流向,使其从数据源l过预先指定的处理过E流向目标,x据仓库中。工作流ҎM开元数据库的支持。元数据贯穿于数据仓库的整个q程。按照数据库中的定义Q元数据是关于数据的数据。在数据仓库的环境下Q元数据的作用更加重要,׃数据仓库是面向主题的Q所以其元数据的内容也更加丰富。初始阶D|们可以根据元数据库提供的数据源信息,来制定清z计划,执行q个计划Q能完成一ơ数据的抽取转换和加载Q务,把各个数据源中的零散的数据整合到数据仓库中;在维护阶D,把用户在建立数据仓库的初期所制定的计划,主要包括数据库的表信息以及用到的临时表等Q以XML文g的Ş式保存在元数据库中。这栯U了理人员的时_他们的精力可以更多地集中在制定一个合理高效的数据集成计划上,从而提高效率?br />
5 一U更新流实例
以下l出了一个具体的例子来说明改q结构如何处理凋度流E,如图3、图4所C?/p>
? 改进l构的数据集成框?br />
? 计划工作流E?/strong>
?中每一个节炚w是工作流的一个活动,头所指向的是数据的实际向Q从数据源到目标。虚U表C的是控制流。数据流向和控制向基本相同Q重合的没有dQ只是在q操作时不同Q所以用不同的箭头标注出来。本例中Q要把来?个不同数据库的原始表l过一pd的操作如投媄q接{,整合成一张表加蝲到数据仓库中。首先通过ODBCQOLE DB标准或者数据源提供的APIQ把数据从源中抽取出来。然后先投媄?Q再与表2q行q接Q得到的表与?q行qӞ形成一张表Q再q行一些排序筛选,最后加载到目标数据仓库中。要注意的是Q在q行qӞUnionQ操作的2个表必须是列l构相同Q否则要q行回溯Q对2表进行相应的改动处理Q符合Union 的要求后才能l箋处理下去?br />
在改q的模型l构中,投媄QProjectQ、连接(JoinQ、ƈQUnionQ等操作W都对应一个类QClassQ。与此操作符相关的各U处理都装在类的内部。工作流引擎通过工作API接口来调用类内的相关函数Q完成数据集成。下面是?q个数据集成计划的XML文g格式Q我们只x定义zd的部分:
…
…
Ying Liu
<QActivitylnvolve>
SELECT[reader]FROM tablenameWHERE.
…
<QActiVityInvolve>
<Q? -zd的流? ->
转向6<QChoice>
转向7<QChoice>
转向8<QChoice>
l束<QChoice>
<QApp rovalChoices>
<QActivity>
…
<Q? -zd之间的流向定? ->
<QFlowDirection>
其中是定义Unionq个zdQ包括活动的所有者,数据可能向与条件等。是定义一个流向,卛_中的一个箭_标志了箭头的起始zd{。这个文件就可以把我们的计划保存下来Q工作流引擎通过XP2DL解析器来解析q个文gQ来获得最初用户制定的集成计划?br />
触发更新操作的时机。触发更新操作可以有多种方式Q①可以q户驱动,如用户发出命令来q行数据仓库的更斎ͼ②可以时间驱动,如规定在一天当中的某个时刻来更新数据仓库;③还可以用事仉动,如数据源的日志发生改变后Q启动更新操作。触发方式也保存在元数据库中Q可以根据需求灵zd选择最x式?br />
6 l束?/strong>
数据仓库设计和运行过E中Q数据抽取、{换和转蝲ETL是一个重要的问题Q其中,数据更新又是一个关键点。本文讨Z在数据更新过E中Qؓ捕获源数据库更新Q提Z一U改q的数据仓库体系l构Q它使数据的更新较传l结构更快速、便捗ƈ在提出的改进模型基础上,设计了在元数据库指导下,以工作流的方法来调度整个更新q程?/p>
]]>
]]>
web2.0|站常用功能块通常包括以下几大:
1.Tag标签功能?/strong>
Tag(中文叫做"标签") 是一U新的组l和理在线信息的方式。它不同于传l的、针Ҏ件本w的关键字检索,而是一U模p化、智能化的分cR?
|页使用Tag标签的好处:
为页面设|一个或者多个Tag标签可以引导读者阅L多相x章,为别人带L量同理也己带来流量?
可以帮助读者及时了解一些未知的概念和知识点Q提高用户体验?
Tag是h的意志和向的体玎ͼTag可以帮助你找到兴相投的人?
Z以上优势QTag标签代替了传l的分类法,成ؓweb2.0|站使用率最高的功能块(与其说是功能块倒不如说是一U内容导航和内容l织形式Q?
一句话QTag标签是一U更灉|的分cL法,功能在于引导Q特Ҏ无处不在Q体现智能性、模p性和向性?
2.RSS订阅功能?/strong>
RSS是在U共享内容的一U简易方式(也叫聚合内容QReally Simple SyndicationQ。通常在时效性比较强的内容上使用RSS订阅能更快速获取信息,|站提供RSS输出Q有利于让用戯取网站内容的最新更新。网l?用户可以在客L借助于支持RSS的聚合工兯YӞ例如SharpReader,NewzCrawler、FeedDemonQ,在不打开|站内容面?情况下阅L持RSS输出的网站内宏V?
RSS订阅的方式:
订阅到客L软g如周伯通、遨游浏览器RSS阅读、Foxmail RSS阅读{,此方式用者较?
订阅到在UK读(聚合c)门户|站如Google ReaderQYahoo ReaderQ抓虾、Gougou{,省去了安装RSS阅读器的ȝ
订阅到在U单用户聚合器如Lilina{,比较灉|
RSS订阅功能的最大好处是定向投递,也就是说RSS机制更能体现用户的意愿和个性,获取信息的方式也最直接和简单,q是RSS订阅功能备受青睐的一大主要原因?
3.推荐和收藏功能块
说到推荐功能Q不仅web2.0|站在大量用,传统的以cmsq_Z表的内容模式的网站也在大量用,推荐功能主要是指向一些网摘或者聚合类门户|站推荐自己所览到的|页。当Ӟ一U变相的推荐是阅读者的自我收藏行ؓQ在׃n的模式下也能起到推荐的作用?
比较有名的推荐目标有以del.icio.usZ表的|摘cȝ站包括国内比较有名气?65key、和讯网摘、新vivi、天极网摘等。这 里值得一提的是前D|间曾涌现了大批网摘类|站Q但他们坚持zM来的好像没有几个了,推荐使用前面提到的这几个|摘门户Qh气基本上是最旺的?
4.评论和留a功能?/strong>
web2.0参与性,发挥用户的主g用,q里的参与性除了所谓的订阅、推荐功能外更多C现在用户对内容的评h和态度Q这p靠评?功能块来完成。一个典型的web2.0|站或者说一个能体现人气的web2.0|站都会花大量篇q来体现用户的观点和视觉。这里尤其要提到web2.0?的带头老大web blogQ评论功能已l成为博客主Z览者交的主要阵地Q是体现|站人气的最直观因素?
评论功能块应用在博客pȝ中实际上已经和博客内容相分离Q而更好的应用恰恰是一些以点评Z的web2.0|站比如豆瓣、点评网{,q里的评论功能块直接刉了内容也极大地体现了网站的人气Q所以说评论功能块是web2.0|站最有力的武?/strong>?
5.站内搜烦功能?/strong>
搜烦是信息来源最直接的方式之一Q无Z的网站是否打上web2.0的烙华ͼ搜烦对于一个体pd大、内容丰富的大型|站都是非常必要的。Tag 标签在某U程度上起到搜烦的作用,它能够有效聚合以此Tag为关键词的内容,但这U情늚前提是此Tag标签Ҏ览者是可见的,也就是说当Tag标签摆在 览者的眼前时才成立Q而对于那些浏览者想要的信息却没有Tag标签来引导时搜烦是辑ֈ此目的的最好方法?
对于web2.0|站Q站内搜索以标题或者Tag为搜索域都能起到好的效果Q但本h不徏议用内Ҏ索域Q因不符合搜索的高效性原则。同 ӞhH出关键词的内容往往都可以用Tag标签来引|因此使用内容域来搜烦实际上是一U浪Ҏ务器资源的行为,而且搜烦l果的准性将大打折扣?
6.组功能?/strong>
我ؓ什么要把群l作为web2.0|站的功能块来分析呢Q因为群l是web2.0|站的一大特点,也是web2.0所要体现的服务宗旨所在。一 个web2.0|站Q博客也好、播客也好、点评也好,抑或是网摘、聚合门P他们都强调h的参与性。物以类聚、h以群分,每个参与者都有自q兴趣向Q?web2.0|站的另一主要功能是帮助q些人找到同样兴的人ƈ形成一个活跃的体Q这是web2.0|站的根本?
ȝQweb2.0|站倡导的是集体创作、共享资?/strong>Q靠的是人气Q体现的是参与性,一个没有参与性的web2.0|站都不以成ؓ web2.0。以上提到的q几个功能块是以吸引用户参与和引导用户参与为目的的Q真正的web2.0不是什么深奥的东西Q只有一点,那就是如何让览?沸腾h?
二?Flickr的幕后故?/p>
我们都看?Flickr 的成功,而又有多?_英"们了解过 Flickr 背后的过E是多么充满艰险?
Flickr ?strong>?CGI 的动态构?/strong>(呀呀....)Qƈ以一U?.gne 的脚本作?CGI E序语言。不网站制作菜鸟还是高手都会疑惑:gne 是哪U程序语aQ答案:gne 不是一U语aQFlickr 是以极ؓl典?PHP + MySQL 方式实现的,在被 Yahoo 收购服务器搬入美国之前,使用?21 収ͼ69.90.111.101-121Q?Apache/PHP ?Web?3 台图片服务器、另?MySQL 服务器组成的数据库集的服务器数量未知。现在估计用的?Yahoo 的负载均衡系l,对外只有一?Web ?IP 和图片服务器?IP 了?
那ؓ?.php 的文件要Ҏ .gne 呢?以往有大型网站ؓ向后兼容性考虑Q隐藏以E序语言命名的脚本文件扩展名Q比?Baidu 隐藏?.php(哈哈..baidu也是php?q以为是c)QGoogle ?http 服务器是自己写的Q整合了脚本E序Q个别页面是 .py--PythonQ;q有一些网站是Ҏ自己|站名相关的扩展名,?MSN 的群l则?.msnwQ榕树下?.rs?
?Flickr ?gne 是什么意思?我在l基癄?Flickr 条目上找C{案(中文 Flickr 条目上没有写? 。原?GNE ?Game NeverEnding 的羃写,Flickr 的开发?Ludicorp ?2002-2004 q一直在开发这套以 Game NerverEnding 为名U的大型多h在线角色扮演游戏--一?font color="#ff9900">Z览器的 Web 游戏pȝQ个Z为应该就是当q九城的虚拟城市。但是开发近 3 q后该计划不得不破Q最l只发布了一?Beta 版,?Ludicorp 这套系l稍加移植,有?Flickr。呵呵,原来 gne 是一个项目的名称。关?GNE 的一些连接:http://del.icio.us/schee/gne?
早期?Flickr 惛_成在cM聊天室的地方让网友分享、交自q照片Q注重社区Ş式和保护照片不被外部引用Q见徐子?004q的文章Q,可能是看C Hello 的模式吧。但是聪明的 Flickr 团队不久改变了{略Q?strong>淡化了传l的C形式--如聊天室、而加Z现在使其功成名就?Tag l织形式Q一U更自由更随兴更L好玩的大C形式Q或者叫它广义社区吧Q我随便叫的Q可能太学究Q看着别太在意是了。另外,原来照片只能在 Flash 内浏览的限制区除了,q大力推荐用户将照片引用到自q BlogQ这无疑对于挑战传统相册pȝ有决定性意义。减?Flash 后的|页更多地引q了新兴?Ajax 技术,使界面操作变得非?Cool?
q就?Flickr 的历Ԍ清晰地看C他们对于优秀产品的执著。有?strong>技术和l验U篏(q是很必要的)Q加上不断坚持,L一天时来运转,你的产品会成为新潮流的里E碑?
q有一句话要告?Yupoo {:?Flickr x一个有 Tag 功能的在U相册就已经错远了;复制_脓者们惛_然将 Flickr dp粕取其_֍Q结果无关紧要的拿来了,o人激动的优点都去掉了Q结果剩下什么?
三?YouTube的架构扩?/p>
在西雅图扩展性的技术研讨会上,YouTube ?Cuong Do 做了关于 YouTube Scalability 的报告。视频内容在 Google Video 上有(地址)Q可惜国内用L不到?
Kyle Cordes 对这个视频中的内容做了介l。里面有不少技术性的内容。值得分n一下?Kyle Cordes 的介l是本文的主要来?
单的?YouTube 的数据流? "一天的YouTube量相当于发?50亿封电子邮g.", 2006 q中有消息说每?PV 过 1 ?现在? 更夸张了,"每天?0亿次下蝲以及6,5000ơ上?, 真假姑且不论, 的确是超乎寻常的量. 国内的互联网应用,但从数据量来?怕是只有 51.com 有这个规? 但技术上?YouTube 没法子比了.
1.Web服务?/strong>
YouTube Z开发速度的考虑Q?strong>大部分代码都?Python 开发的。Web 服务器有部分?ApacheQ??strong> FastCGI 模式。对于视频内容则?Lighttpd 。据我所知,MySpace 也有部分服务器用 Lighttpd Q但量不大。YouTube ?Lighttpd 最成功的案例?国内?Lighttpd 站点不多Q豆瓣用的比较舒服。by Fenng)
2.视频
视频的羃略图(Thumbnails)l服务器带来了很大的挑战。每个视频^均有4个羃略图Q而每?Web 面上更是有多个Q每U钟因ؓq个带来的磁?IO h太大。YouTube 技术h员启用了单独的服务器组来承担这个压力,q且针对 Cache ?OS 做了部分优化。另一斚wQ羃略图h的压力导?Lighttpd 性能下降。通过 Hack Lighttpd 增加更多?worker U程很大E度解决了问题。而最新的解决Ҏ是v用了 Google ?BigTableQ?q下子从性能、容错、缓存上都有更好表现。看人家q收购的Q好钢用在了刀刃上?
Z冗余的考虑Q每个视频文件放在一l迷?Cluster 上,所?"q你 Cluster" 是一l具有相同内容的服务器。最火的视频攑֜ CDN 上,q样自己的服务器只需要承担一?漏网"的随卌问即可。YouTube 使用单、廉仗通用的硬Ӟq一点和 Google 风格倒是一致。至于维护手D,也都是常见的工具Q如 rsync, SSH {,只不qh家更手熟|了?
3.数据?/strong>
YouTube ?MySQL 存储元数?-用户信息、视频信息什么的。数据库服务器曾l一度遇?SWAP 颠簸的问题,解决办法是删掉了 SWAP 分区! 用?
最初的 DB 只有 10 块硬盘,RAID 10 Q后来追加了一l?RAID 1。够省的。这一?Web 2.0 公司很少有用 Oracle ?我知道的只有 Bebo,参见q里). 在扩展性方面,路线也是和其他站点类|复制Q分?IO。最l的解决之道?分区",q个不是数据库层面的表分区,而是业务层面的分?在用户名字或?ID 上做文章,应用E序控制查找机制)
YouTube 也用 Memcached.
很想了解一下国?Web 2.0 |站的数据信?有谁可以提供一??
四?mixi.jpQ用开源Y件搭建的可扩展SNS|站
Mixi目前是日本排名第三的|站Q全球排?2Q主要提供SNS服务Q日讎ͼ组Q站内消息,评论Q相册等{,是日本最大的SNS|站?Mixi?003q?2月䆾开始开发,q在它的CTO - Batara Kesuma一个h焊,焊了四个月,?004q?月䆾开始上U运行。两个月后就注册?w用户Q日讉K?0wPV。在随后的一q里Q用户增长到?21wQ第二年Q增长到?00w。到今年四月份已l增长到370w注册用户Qƈ且还在以每天1.5w人的注册量增ѝ这些用户中70%是活跃用Pz跃 用户Q三天内臛_d一ơ的用户Q,q_每个用户每周在线旉为将q?个半时?
下面我们来看它的技术架构。Mixi采用开源Y件作为架构的基础QLinux 2.6QApache 2.0QMySQLQPerl 5.8QmemcachedQSquid{等。到目前为止已经?00多台MySQL数据库服务器Qƈ且在以每?0多台的速度增长。Mixi的数据库q?接方式采用的是每ơ查询都q行q接Q而不是持久连接。数据库大多数是以InnoDB方式q行。Mixi解决扩展问题主要依赖于对数据库的切分?
首先q行垂直切分Q按照表的内容将不同的表划分C同的数据库中。然后是水^切分Q根据用LID不同用L内容再划分的不同的数据库中,q?是比较通常的做法,也很用?/strong>划分的关键还是在于应用中的实玎ͼ需要将操作装在在数据层,而尽量不影响业务层。当然完全不改变逻辑层也不可能,q时候最 能检验以前的设计是否CQ如果以前设计的不错Q那创徏q接的时候传个表名,用户IDq去差不多就解决问题了,而以前如果sql代码到处飞,或者数据层?装的不太好的话那q了?
q样做了以后q不能从Ҏ上解决问题,其是对于像mixiq种SNS|站Q页面上往往需要引用大量的用户信息Q好友信息,囄Q文章信息,?表,跨库操作相当多。这个时候就需要发挥memcached的作用了Q用大内存把q些不变的数据全都缓存v来,而当修改时就通知cacheq期Q这样应?层基本上可以解军_部分问题了,只会有很一部分hIK应用层Q用到数据库。Mixi的经验是q_每个面的加载时间在0.02U左叻I当然Ҏ面 大小情况不尽怼Q,可以说明q种做法是行之有效的。Mixi一共在32台机器上有缓存服务器Q每个Cache Server 2G内存Q这些Cache Server与App Server装在一赗因为Cache Server对CPU消耗不大,而有了Cache Server的支_App Server对内存要求也不是太高Q所以可以和q_处,更有效的利用资源?
囄的处理就昑־相对单的多了。对于mixi而言Q图像主要有两部分:一部分是经常要使用到的Q像用户头像Q群l的头像{等Q大概有100?GBQ它们被Squid和CDN所~存Q命中率相对比较高;另一部分是用户上传的大量照片Q它们的个体讉K量相对而言比较,命中率也比较低,使用 Cache不划,所以对于这些照片的{略是直接在用户上传的时候分发到到图片存储服务器上,在用戯问的时候直接进行访问,当然囄的位|需要在数据?中进行记录,不然找不到放在哪台服务器上就郁闷了?
五?Technorati的后台数据库架构
Technorati(现在被阻g, 可能你访问不??Dorion Carroll?2006 MySQL 用户会议上介l了一些关?Technorati 后台数据库架构的情况.
基本情况
目前处理着大约 10Tb 核心数据, 分布在大U?20 台机器上.通过复制, 多增加了 100Tb 数据, 分布?200 台机器上. 每天增长的数?1TB. 通过 SOA 的运? 物理与逻辑的访问相隔离, g消除了数据库的瓶? 值得一提的? 该扩展过E始l是利用普通的g与开源Y件来完成? 毕竟 , Web 2.0 站点都不是烧q? 从数据量来看Q这l对是一个相Ҏ较大?Web 2.0 应用.
Tag ?Technorati 最为重要的数据元素. 爆炸性的 Tag 增长l?Technorati 带来了不的挑战.
2005 q?1 月的时? 只有两台数据库服务器, 一M? C 06 q一月䆾, 已经是一M? 6 ?MyISAM 从数据库用来对付查询, 3 ?MyISAM 用作异步计算.
一些核心的处理Ҏ:
1) Ҏ实体(tags/posttags))q行分区
衡量数据讉KҎQ读和写的^?然后通过不同的维度进行分区.( Technorati 数据更新不会很多, 否则会成为数据库N)
2) 合理利用 InnoDB?MyISAM
InnoDB 用于数据完整?写性能要求比较高的应用. MyISAM 适合q行 OLAP q算. 物尽其用.
3) MySQL复制
复制数据CL据库到辅数据库上,q分布查询与异步计? 另外一个功能是提供冗余Q?如图:
六?通过了解MySpace的六ơ重构经?来认识分布式pȝ到底该如何创?
在每个里E碑Q站点负担都会超q底层系l部分组件的最大蝲P特别是数据库和存储系l。接着Q功能出现问题,用户失声叫。最后,技术团队必Mؓ此修订系l策略?
虽然?005q早期,站点账户数超q?百万后,pȝ架构到目前ؓ止保持了相对E_Q但MySpace仍然在ؓSQL Server支持的同时连接数{方面l攻坚,Benedetto_"我们已经可能把事情做到最??
1.里程一Q?0万̎?/strong>
按Benedetto 的说法,MySpace最初的pȝ很小Q只有两台Web服务器和一个数据库服务器。那时用的是Dell双CPU?G内存的系l?
单个数据库就意味着所有数据都存储在一个地方,再由两台Web服务器分担处理用戯求的工作量。但像MySpace后来的几ơ底层系l修订时 的情况一P三服务器架构很快不堪重负。此后一个时期内QMySpace基本是通过ȝ更多Web服务器来对付用户暴增问题的?
但到?004q早期,MySpace用户数增长到50万后Q数据库服务器也已开始汗浃背?
但和Web服务器不同,增加数据库可没那么简单。如果一个站点由多个数据库支持,设计者必考虑的是Q如何在保证数据一致性的前提下,让多个数据库分担压力?
在第二代架构中,MySpaceq行?个SQL Server数据库服务器?-一个ؓ主,所有的新数据都向它提交Q然后由它复制到其他两个Q另两个全力向用户供l数据,用以在博客和个h资料栏显C。这 U方式在一D|间内效果很好--只要增加数据库服务器Q加大硬盘,可以应对用h和访问量的增加?
2.里程二Q?-2百万账户
MySpace注册数到?百万?百万区间后,数据库服务器开始受制于I/O定w--卛_们存取数据的速度。而当时才?004q中Q距M ơ数据库pȝ调整不过数月。用L提交h被阻塞,像千h乐迷要挤q只能容U_百h的夜MQ站点开始遭?主要矛盾"QBenedetto_q意?着MySpace永远都会d落后于用户需求?
"有h?分钟都无法完成留aQ因此用hL抱怨说|站已经完蛋了?他补充道?
q一ơ的数据库架构按照垂直分割模式设计,不同的数据库服务于站点的不同功能Q如d、用戯料和博客。于是,站点的扩展性问题看似又可以告一D落了,可以歇一阵子?
垂直分割{略利于多个数据库分担访问压力,当用戯求增加新功能ӞMySpace投入新的数据库予以支持它。̎户到?百万后, MySpaceq从存储讑֤与数据库服务器直接交互的方式切换到SANQStorage Area NetworkQ存储区域网l)--用高带宽、专门设计的|络大量磁盘存储设备连接在一P而数据库q接到SAN。这Ҏ施极大提升了pȝ性能、正常运 行时间和可靠性,Benedetto说?
3.里程三Q?百万账户
当用Ll增加到3百万后,垂直分割{略也开始难以ؓl。尽站点的各个应用被设计得高度独立Q但有些信息必须׃n。在q个架构里,每个数据?必须有各自的用户表副?-MySpace授权用户的电子花名册。这意味着一个用h册时Q该条̎戯录必d9个不同数据库上分别创建。但在个别情?下,如果其中某台数据库服务器临时不可到达Q对应事务就会失败,从而造成账户非完全创建,最l导致此用户的该Ҏ务无效?
另外一个问题是Q个别应用如博客增长太快Q那么专门ؓ它服务的数据库就有巨大压力?
2004q中QMySpace面Web开发者称之ؓ"向上扩展"?向外扩展"Q译者注QScale Up和Scale OutQ也U硬件扩展和软g扩展Q的抉择--要么扩展到更大更强、也更昂늚服务器上Q要么部|大量相对便宜的服务器来分担数据库压力。一般来_大型?点們于向外扩展,因ؓq将让它们得以保留通过增加服务器以提升pȝ能力的后路?
但成功地向外扩展架构必须解决复杂的分布式计算问题Q大型站点如Google、Yahoo和Amazon.comQ都必须自行研发大量相关技术?strong>以GoogleZQ它构徏了自q分布式文件系l?/strong>?
另外Q向外扩展策略还需要大量重写原来YӞ以保证系l能在分布式服务器上q行?搞不好,开发h员的所有工作都白?QBenedetto说?
因此QMySpace首先重Ҏ在了向上扩展上,p了大U?个半月时间研I升U到32CPU服务器以理更大数据库的问题。Benedetto_"那时候,q个Ҏ看似可能解决一切问题?如稳定性,更棒的是对现有Y件几乎没有改动要求?
p糕的是Q高端服务器极其昂贵Q是购置同样处理能力和内存速度的多台服务器d的很多倍。而且Q站Ҏ构师预测Q从长期来看Q即便是巨型数据库,最后也会不堪重负,Benedetto_"换句话讲Q只要增长趋势存在,我们最后无论如何都要走上向外扩展的道\?
因此QMySpace最l将目光Ud分布式计架?-它在物理上分布的众多服务器,整体必须逻辑上等同于单台机器。拿数据库来_׃能再?q去那样应用拆分,再以不同数据库分别支持,而必d整个站点看作一个应用。现在,数据库模型里只有一个用戯Q支持博客、个料和其他核心功能的数 据都存储在相同数据库?
既然所有的核心数据逻辑上都l织C个数据库Q那么MySpace必须扑ֈ新的办法以分担负?-昄Q运行在普通硬件上的单个数据库服务器是 无能为力的。这ơ,不再按站点功能和应用分割数据库,MySpace开始将它的用户按每百万一l分Ԍ然后各l的全部数据分别存入独立的SQL Server实例。目前,MySpace的每台数据库服务器实际运行两个SQL Server实例Q也是说每台服务器服务大约2百万用户。Benedetto指出Q以后还可以按照q种模式以更粒度划分架构,从而优化负荷分担?
当然Q还是有一个特D数据库保存了所有̎L名称和密码。用L录后Q保存了他们其他数据的数据库再接服务。特D数据库的用戯虽然庞大Q但它只负责用户dQ功能单一Q所以负药是比较容易控制的?
4.里程四Q?百万??百万账户
2005q早期,账户辑ֈ9百万后,MySpace开始用Microsoft的C#~写ASP.NETE序。C#是C语言的最新派生语aQ吸?了C++和Java的优点,依托于Microsoft .NET框架QMicrosoftY件组件化和分布式计算而设计的模型架构Q。ASP.NET则由~写Web站点脚本的ASP技术演化而来Q是 Microsoft目前L的Web站点~程环境?
可以说是立竿见媄Q?MySpace马上发现ASP.NETE序q行更有效率Q与ColdFusion相比Q完成同样Q务需消耗的处理器能力更。据技术ȝ Whitcomb_C码需?50台服务器完成的工作,如果用ColdFusion则需?46台。Benedettoq指出,性能上升的另一个原?可能是在变换软gq_Qƈ用新语言重写代码的过E中Q程序员复审q优化了一些功能流E?
最l,MySpace开始大规模q移到ASP.NET。即便剩余的部分ColdFusion代码Q也从Cold-Fusion服务器搬C ASP.NETQ因Z们得CBlueDragon.NETQ乔M州阿法利塔New Atlanta Communications公司的品,它能ColdFusion代码自动重新~译到Microsoftq_Q的帮助?
账户辑ֈ1千万ӞMySpace再次遭遇存储瓉问题。SAN的引入解决了早期一些性能问题Q但站点目前的要求已l开始周期性超SAN的I/O定w--卛_从磁盘存储系l读写数据的极限速度?
原因之一是每数据?百万账户的分割策略,通常情况下的可以将压力均分到各台服务器Q但现实q一成不变。比如第七台账户数据库上U后Q仅?天就被塞满了Q主要原因是佛罗里达一个乐队的歌迷疯狂注册?
某个数据库可能因ZQ何原因,在Q何时候遭遇主要负Pq时QSAN中绑定到该数据库的磁盘存储设备簇可能过载?SAN让磁盘I/O能力大幅提升了,但将它们l定到特定数据库的做法是错误的?Benedetto说?
最初,MySpace通过定期重新分配SAN中数据,以让其更为均衡的Ҏ基本解决了这个问题,但这是一个h工过E,"大概需要两个h全职工作?Benedetto说?
长期解决Ҏ是迁Ud虚拟存储体系上,q样Q整个SAN被当作一个巨型存储池Q不再要求每个磁盘ؓ特定应用服务。MySpace目前采用了一U新型SAN讑֤--来自加利尼亚州弗里蒙特?PARdata?
?PAR的系l里Q仍能在逻辑上按定w划分数据存储Q但它不再被l定到特定磁盘或盘,而是散布于大量磁盘。这׃均分数据讉K负荷成ؓ?能。当数据库需要写入一l数据时QQ何空闲磁盘都可以马上完成q项工作Q而不再像以前那样d在可能已l过载的盘阵列处。而且Q因为多个磁盘都有数据副 本,d数据Ӟ也不会SAN的Q何组件过载?
?005q春天̎h辑ֈ1?百万ӞMySpace又启用了新的{略以减d储系l压力,?strong>增加数据~存?-位于Web服务器和数据?服务器之?/strong>Q其唯一职能是在内存中徏立被频繁h数据对象的副本,如此一来,不访问数据库也可以向Web应用供给数据。换句话_100个用戯求同一?资料Q以前需要查询数据库100ơ,而现在只需1ơ,其余都可从缓存数据中获得。当然如果页面变化,~存的数据必M内存擦除Q然后重C数据库获?- 但在此之前,数据库的压力已经大大减轻Q整个站点的性能得到提升?
~存为那些不需要记入数据库的数据提供了驿站Q比如ؓ跟踪用户会话而创建的临时文g--Benedetto坦言他需要在q方面补课,"我是数据库存储狂热分子,因此我L想着万事万物都存到数据库?但将像会话跟t这cȝ数据也存到数据库Q站点将陷入泥沼?
增加~存服务器是"一开始就应该做的事情Q但我们成长太快Q以致于没有旉坐下来好好研I这件事情?Benedetto补充道?
5.里程五Q??百万账户
2005q中期,服务账户数达??百万ӞMySpace切换Cq处于beta试的SQL Server 2005。{换何太急?L看法?005版支?4位处理器。但Benedetto_"q不是主要原因,管q也很重要;主要q是因ؓ我们对内存的?求?支持64位的数据库可以管理更多内存?
更多内存意味着更高的性能和更大的定w。原来运?2位版本的SQL Server服务器,能同时用的内存最多只?G。切换到64位,好像加_了输水的直径。升U到SQL Server 2005?4位Windows Server 2003后,MySpace每台服务器配备了32G内存Q后?006q再ơ将配置标准提升?4G?
意外错误
如果没有对系l架构的历次修改与升U,MySpaceҎ不可能走C天。但是,Z么系l还l常吃撑着了?很多用户抱怨的"意外错误"是怎么引v的呢Q?
原因之一是MySpace对Microsoft的Web技术的应用已经q入qMicrosoft自己也才刚刚开始探索的领域。比?1月,出 SQL Server最大同时连接数QMySpacepȝ崩溃。Benedetto_q类可能引发pȝ崩溃的情况大概三天才会出Cơ,但仍然过于频J了Q以?惹h恼怒。一旦数据库|工Q?无论q种情况什么时候发生,未缓存的数据都不能从SQL Server获得Q那么你必然看C?意外错误'提示?他解释说?
d夏天QMySpace的Windows 2003多次自动停止服务。后来发现是操作pȝ一个内|功能惹的祸--预防分布式拒l服务攻击(黑客使用很多客户机向服务器发起大量连接请求,以致服务?瘫痪Q。MySpace和其他很多顶U大站点一P肯定会经帔R受攻击,但它应该从网l而不是依靠Windows本n的功能来解决问题--否则Q大?MySpace合法用户q接时也会引h务器反击?
"我们׃大约一个月旉LWindows 2003服务器自动停止的原因?Benedetto说。最后,通过Microsoft的帮助,他们才知道该怎么通知服务器:"别开枪,是友军?
紧接着是在d7月某个周日晚上,MySpace总部所在地z杉矶停电,造成整个pȝ停运12时。大型Web站点通常要在地理上分布配|多?数据中心以预防单Ҏ障。本来,MySpaceq有其他两个数据中心以应对突发事Ӟ但Web服务器都依赖于部|在z杉矶的SAN。没有洛杉矶的SANQ?Web服务器除了恳求你耐心{待Q不能提供Q何服务?
Benedetto_L据中心的可靠性通过下列措施保证Q可接入两张不同늽Q另有后备电源和一台储备有30天燃料的发电机。但在这ơ事故中Q不仅两张电|失效,而且在切换到备䆾甉|的过E中Q操作员烧掉了主动力U\?
2007q中QMySpace在另两个后备站点上也了SAN。这对分担负荷大有帮?-正常情况下,每个SAN都能负担三分之一的数据访问量。而在紧急情况下QQ何一个站炚w可以独立支撑整个服务QBenedetto说?
MySpace仍然在ؓ提高E_性奋斗,虽然很多用户表示了够信M能原谅偶现的错误面?
"作ؓ开发h员,我憎恶BugQ它太气Z?Dan Tannerq个31岁的德克萨斯软g工程师说Q他通过MySpace重新联系C高中和大学同学?不过QMySpaceҎ们的用处很大Q因此我们可 以原谅偶发的故障和错误? Tanner_如果站点某天出现故障甚至崩溃Q恢复以后他q是会l用?
q就是ؓ什么Drew在论坛里咆哮Ӟ大部分用户都告诉他应该保持^静,如果{几分钟Q问题就会解决的原因。Drew无法q静Q他写道Q?我已 l两ơ给MySpace发邮Ӟ而它说一时前还是正常的Q现在出了点问题……完全是一堆废话?另一个用户回复说Q?毕竟它是免费的?"Benedetto坦承100%的可靠性不是他的目标?它不是银行,而是一个免费的服务?他说?
换句话说QMySpace的偶发故障可能造成某h最后更新的个h资料丢失Q但q不意味着|站弄丢了用Lp?关键是要认识刎ͼ与保证站Ҏ?能相比,丢失许数据的故障是可接受的?Benedetto说。所以,MySpace甘冒丢失2分钟?时内Q意点数据的危险,在SQL Server配置里g长了"checkpoint"操作--它将待更新数据永久记录到盘--的间隔时_因ؓq样做可以加快数据库的运行?
Benedetto_同样Q开发h员还l常在几个小时内完成构思、编码、测试和发布全过E。这有引入Bug的风险,但这样做可以更快实现?功能。而且Q因行大规模真实试不具可行性,他们的测试通常是在仅以部分z跃用户为对象,且用户对软g新功能和改进不知里的情况下q行的。因Z?上不可能做真实的加蝲试Q他们做的测试通常都是针对站点?
"我们犯过大量错误Q?Benedetto_"但到头来Q我认ؓ我们做对的还是比做错的多?
七?从LiveJournal后台发展看大规模|站性能优化Ҏ
LiveJournal?9q始于校园中的项目,几个人出于爱好做了这样一个应用,以实C下功能:
博客Q论?
C会性网l,扑ֈ朋友
聚合Q把朋友的文章聚合在一?
LiveJournal采用了大量的开源YӞ甚至它本w也是一个开源Y件?
在上U后QLiveJournal实现了非常快速的增长Q?
2004q?月䆾Q?80万注册用戗?
2005q?月䆾Q?80万注册用戗?
2005q?月䆾Q?90万注册用戗?
辑ֈ了每U钟上千ơ的面h及处理?
使用了大量MySQL服务器?
使用了大量通用lg?
二、LiveJournal架构现状概况
三、从LiveJournal发展中学?/strong>
LiveJournal?台服务器发展?00台服务器Q这其中l历了无数的伤痛Q但同时也摸索出了解册些问题的ҎQ通过对LiveJournal的学习,可以让我们避免LJ曄犯过的错误,q且从一开始就对系l进行良好的设计Q以避免后期的痛苦?
下面我们一步一步看LJ发展的脚步?
1、一台服务器
一台别人捐助的服务?强烈ft)QLJ最初就跑在上面Q就像Google开始时候用的破服务器一P值得我们敬。这个阶D,LJ的h以惊人的速度熟悉?Unix的操作管理,服务器性能出现q问题,不过q好Q可以通过一些小修小改应付过厅R在q个阶段里LJ把CGI升CFastCGI?
最l问题出CQ网站越来越慢,已经无法通过优过化来解决的地步,需要更多的服务器,q时LJ开始提供付Ҏ务,可能是想通过q些钱来购买新的服务器,以解军_时的困境?
毫无疑问Q当时LJ存在巨大的单炚w题,所有的东西都在那台服务器的铁皮盒子里装着?
2、两台服务器
用付Ҏ务赚来的钱LJC两台服务器:一台叫做Kenny的Dell 6U机器用于提供Web服务Q一台叫做Cartman的Dell 6U服务器用于提供数据库服务?
LJ有了更大的磁盘,更多的计资源。但同时|络l构q是非常单,每台机器两块|卡QCartman通过内网为Kenny提供MySQL数据库服务?
暂时解决了负载的问题Q新的问题又出现了:
原来的一个单点变成了两个单点?
没有冷备份或热备份?
|站速度慢的问题又开始出CQ没办法Q增长太快了?
Web服务器上CPU辑ֈ上限Q需要更多的Web服务器?
3、四台服务器
又买了两収ͼKyle和StanQ这ơ都?U的,都用于提供Web服务。目前LJ一共有3台Web服务器和一台数据库服务器。这旉要在3台Web服务器上q行负蝲均横?
LJ把Kenny用于外部的网养I使用mod_backhandq行负蝲均横?
然后问题又出CQ?
单点故障。数据库和用于做|关的Web服务器都是单点,一旦Q何一台机器出现问题将D所有服务不可用。虽然用于做|关的Web服务器可以通过保持心蟩同步q速切换,但还是无法解x据库的单点,LJ当时也没做这个?
|站又变慢了Q这ơ是因ؓIO和数据库的问题,问题是怎么往应用里面d数据库呢Q?
4、五台服务器
又买了一台数据库服务器。在两台数据库服务器上用了数据库同?Mysql支持的Master-Slave模式)Q写操作全部针对L据库 Q通过BinlogQ主服务器上的写操作可以q速同步到从服务器上)Q读操作在两个数据库上同时进?也算是负载均横的一U吧)?
实现同步时要注意几个事项Q?
L作数据库选择法处理Q要选一个当前负载轻一点的数据库?
在从数据库服务器上只能进行读操作
准备好应对同步过E中的gq,处理不好可能会导致数据库同步的中断。只需要对写操作进行判断即可,L作不存在同步问题?
5、更多服务器
有钱了,当然要多C服务器。部|后快了没多久,又开始慢了。这ơ有更多的Web服务器,更多的数据库服务器,存在 IO与CPU争用。于是采用了BIG-IP作ؓ负蝲均衡解决Ҏ?
6、现在我们在哪里Q?/strong>
现在服务器基本上够了Q但性能q是有问题,原因出在架构上?
数据库的架构是最大的问题。由于增加的数据库都是以Slave模式d到应用内Q这样唯一的好处就是将L作分布到了多台机器,但这样带来的后果是写操作被大量分发Q每台机器都要执行,服务器越多,费p大,随着写操作的增加Q用于服务读操作的资源越来越?
׃台分布到两台
最l效?
现在我们发现Q我们ƈ不需要把q些数据在如此多的服务器上都保留一份。服务器上已l做了RAIDQ数据库也进行了备䆾Q这么多的备份完全是对资源的费Q属于冗余极端过度。那Z么不把数据分布存储呢Q?
问题发现了,开始考虑如何解决。现在要做的是把不同用L数据分布C同的服务器上q行存储Q以实现数据的分布式存储Q?strong>让每台机器只为相对固定的用户服务Q以实现q的架构和良好的可扩展性?
Z实现用户分组Q我们需要ؓ每一个用户分配一个组标记Q用于标记此用户的数据存攑֜哪一l数据库服务器中。每l数据库׃个master及几 个slavel成Qƈ且slave的数量在2-3収ͼ以实现系l资源的最合理分配Q既保证数据L作分布,又避免数据过度冗余以及同步操作对pȝ资源的过 度消耗?
׃収ͼ一l)中心服务器提供用户分l控制。所有用L分组信息都存储在q台机器上,所有针对用L操作需要先查询q台机器得到用户的组P然后再到相应的数据库l中获取数据?
q样的用h构与目前LJ的架构已l很相像了?
在具体的实现旉要注意几个问题:
在数据库l内不要使用自增IDQ以便于以后在数据库l之间迁UȝP以实现更合理的I/OQ磁盘空间及负蝲分布?
useridQpostid存储在全局服务器上Q可以用自增,数据库组中的相应值必M全局服务器上的gؓ准。全局服务器上使用事务型数据库InnoDB?
在数据库l之间迁Uȝh要万分小心,当迁UL用户不能有写操作?
7、现在我们在哪里
问题Q?
一个全局L务器Q挂掉的话所有用h册及写操作就挂掉?
每个数据库组一个主服务器,挂掉的话q组用户的写操作挂掉?
数据库组从服务器挂掉的话会导致其它服务器负蝲q大?
对于Master-Slave模式的单炚w题,LJ采取了Master-Master模式来解冟뀂所谓Master-Master实际上是人工实现的,q不是由MySQL直接提供的,实际上也是两台机器同时是MasterQ也同时是SlaveQ互相同步?
Master-Master实现旉要注意:
一个Master出错后恢复同步,最好由服务器自动完成?
数字分配Q由于同时在两台机器上写Q有些ID可能会冲H?
解决ҎQ?
奇偶数分配IDQ一台机器上写奇敎ͼ一台机器上写偶?
通过全局服务器进行分?LJ采用的做??
Master-Master模式q有一U用法,q种Ҏ与前一U相比,仍然保持两台机器的同步,但只有一台机器提供服务(d写)Q在每天晚上的时候进行轮换,或者出现问题的时候进行切换?
8、现在我们在哪里
现在插播一条广告,MyISAM VS InnoDB?
使用InnoDBQ?
支持事务
需要做更多的配|,不过值得Q可以更安全的存储数据,以及得到更快的速度?
使用MyISAMQ?
记录日志QLJ用它来记|络讉K日志Q?
存储只读静态数据,_快?
q发性很差,无法同时d数据Q添加数据可以)
MySQL非正常关闭或L时会D索引错误Q需要用myisamchk修复Q而且当访问量大时出现非常频繁?
9、缓?/strong>
d我写q一文章介lmemcachedQ它是由LJ的团队开发的一Ƅ存工P以key-value的方式将数据存储到分布的内存中。LJ~存的数据:
12台独立服务器Q不是捐赠的Q?
28个实?
30GBd?
90-93%的命中率Q用qsquid的h可能知道Qsquid内存加磁盘的命中率大概在70-80%Q?
如何建立~存{略Q?
想缓存所有的东西Q那是不可能的,我们只需要缓存已l或者可能导致系l瓶颈的地方Q最大程度的提交pȝq行效率。通过对MySQL的日志的分析我们可以扑ֈ~存的对象?
~存的缺点?
没有完美的事物,~存也有~点Q?
增大开发量Q需要针对缓存处理编写特D的代码?
理隑ֺ增加Q需要更多h参与pȝl护?
当然大内存也需要钱?
10、Web讉K负蝲均衡
在数据包U别使用BIG-IPQ但BIG-IPq不知道我们内部的处理机Ӟ无法判断由哪台服务器对这些请求进行处理。反向代理ƈ不能很好的vC用,不是已经够快了,是达不到我们想要的效果?
所以,LJ又开发了Perlbal。特点:
快,,可管理的http web 服务?代理
可以在内部进行{?
使用Perl开?
单线E,异步Q基于事Ӟ使用epoll , kqueue
支持Console理与httpq程理Q支持动态配|加?
多种模式Qweb服务器,反向代理Q插?
支持插gQGIF/PNG互换Q?
11、MogileFS
LJ使用开源的MogileFS作ؓ分布式文件存储系l。MogileFS使用非常单,它的主要设计思想是:
文g属于c(cL最的复制单位Q?
跟踪文g存储位置
在不同主Z存储
使用MySQL集群l一存储分布信息
大容易廉L?
到目前ؓ止就q么多了Q更多文档可以在http://www.danga.com/words/扑ֈ。Danga.com?LiveJournal.com的同学们拿这个文参加了两次MySQL ConQ两ơOS ConQ以及众多的其它会议Q无U的把他们的l验分n出来Q值得我们学习。在web2.0时代快速开发得到大家越来越多的重视Q但良好的设计仍是每一个应 用的基础Q希望web2.0们在成长为Top500|站的\上,不要因ؓ架构ȝ了网站的发展?
八?/strong>说说大型高ƈ发高负蝲|站的系l架?/strong>
我在Cernet做过拨号接入q_的搭建,而后在Yahoo3721负蝲搜烦引擎前端q_开发,又在猫扑处理q大型社区猫扑大杂烩的架构升U等 工作Q同时自己接触和开发过不少大中型网站的模块Q因此在大型|站应对高负载和q发的解x案上有一些积累和l验(HOHO..nb man )Q可以和大家一h讨一下?
一个小型的|站Q比如个人网站,可以使用最单的html静态页面就实现了,配合一些图片达到美化效果,所有的面均存攑֜一个目录下Q这L |站对系l架构、性能的要求都很简单,随着互联|业务的不断丰富Q网站相关的技术经q这些年的发展,已经l分到很l的Ҏ面面Q尤其对于大型网站来_所 采用的技术更是涉及面非常q,从硬件到软g、编E语a、数据库、WebServer、防火墙{各个领域都有了很高的要求,已经不是原来单的html静?|站所能比拟的?
大型|站Q比如门L站。在面对大量用户讉K、高q发h斚wQ基本的解决Ҏ集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编E语a、还有高性能的Web容器?/strong>但是除了q几个方面,q没法根本解军_型网站面临的高负载和高ƈ发问题?
上面提供的几个解x\在一定程度上也意味着更大的投入,q且q样的解x\具备瓉Q没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验?
1、HTML静态化
其实大家都知道,效率最高、消耗最的是U静态化的html面Q所以我们尽可能使我们的|站上的面采用静态页面来实现Q这个最单的Ҏ 其实也是最有效的方法。但是对于大量内容ƈ且频J更新的|站Q我们无法全部手动去挨个实现Q?strong>于是出现了我们常见的信息发布pȝCMSQ像我们常访问的各个 门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布pȝ来管理和实现的,信息发布pȝ可以实现最单的信息录入自动生成静态页面,q能具备频道?理、权限管理、自动抓取等功能Q对于一个大型网站来_拥有一套高效、可理的CMS是必不可的?
除了门户和信息发布类型的|站Q对于交互性要求很高的Ccd|站来说Q尽可能的静态化也是提高性能的必要手D,社区内的帖子、文章进行实时的静态化Q有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩是使用了这L{略Q网易社区等也是如此?
同时Qhtml静态化也是某些~存{略使用的手D,对于pȝ中频J用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实玎ͼ 比如论坛中论坛的公用讄信息Q这些信息目前的L论坛都可以进行后台管理ƈ且存储再数据库中Q这些信息其实大量被前台E序调用Q但是更新频率很,可以 考虑这部分内容q行后台更新的时候进行静态化Q这样避免了大量的数据库讉Kh?
2、图片服务器分离
大家知道Q?strong>对于Web服务器来_不管是Apache、IISq是其他容器Q图片是最消耗资源的Q于是我们有必要图片与面q行分离Q这是基 本上大型|站都会采用的策略,他们都有独立的图片服务器Q甚臛_多台囄服务器。这L架构可以降低提供面讉Kh的服务器pȝ压力Qƈ且可以保证系l?不会因ؓ囄问题而崩溃,在应用服务器和图片服务器上,可以q行不同的配|优化,比如apache在配|ContentType的时候可以尽量少支持Q尽 可能的LoadModuleQ保证更高的pȝ消耗和执行效率?
3、数据库集群和库表散?
大型|站都有复杂的应用,q些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓉很快p昄出来Q这时一台数据库很快无法满_用,于是我们需要用数据库集群或者库表散列?
在数据库集群斚wQ很多数据库都有自己的解x案,Oracle、Sybase{都有很好的ҎQ常用的MySQL提供的Master/Slave也是cM的方案,您用了什么样的DBQ就参考相应的解决Ҏ来实施即可?
上面提到的数据库集群׃在架构、成本、扩张性方面都会受到所采用DBcd的限Ӟ于是我们需要从应用E序的角度来考虑改善pȝ架构Q?strong>库表散列 是常用ƈ且最有效的解x?/strong>。我们在应用E序中安装业务和应用或者功能模块将数据库进行分,不同的模块对应不同的数据库或者表Q再按照一定的{略Ҏ?面或者功能进行更的数据库散列,比如用户表,按照用户IDq行表散列,q样p够低成本的提升系l的性能q且有很好的扩展性。sohu的论坛就是采?了这L架构Q?strong>论坛的用户、设|、帖子等信息q行数据库分?/strong>Q然后对帖子、用h照板块和IDq行散列数据库和表,最l可以在配置文g中进行简单的配置 便能让系l随时增加一C成本的数据库q来补充pȝ性能?
4、缓?
~存一词搞技术的都接触过Q很多地方用到缓存。网站架构和|站开发中的缓存也是非帔R要。这里先讲述最基本的两U缓存。高U和分布式的~存在后面讲q?
架构斚w的缓存,对Apache比较熟悉的h都能知道Apache提供了自q~存模块Q也可以使用外加的Squid模块q行~存Q这两种方式均可以有效的提高Apache的访问响应能力?
|站E序开发方面的~存QLinux上提供的Memory Cache是常用的~存接口Q可以在web开发中使用Q比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯׃nQ一些大 型社Z用了q样的架构。另外,在用web语言开发的时候,各种语言基本都有自己的缓存模块和ҎQPHP有Pear的Cache模块QJava更?了,.net不是很熟悉,怿也肯定有?
5、镜?
镜像是大型网站常采用的提高性能和数据安全性的方式Q镜像的技术可以解决不同网l接入商和地域带来的用户讉K速度差异Q比如ChinaNet?EduNet之间的差异就促了很多网站在教育|内搭徏镜像站点Q数据进行定时更新或者实时更新。在镜像的细节技术方面,q里不阐q太深,有很多专业的?成的解决架构和品可选。也有廉L通过软g实现的思\Q比如Linux上的rsync{工兗?
6、负载均?
负蝲均衡是大型|站解决高负药问和大量q发h采用的终极解军_法?
负蝲均衡技术发展了多年Q有很多专业的服务提供商和品可以选择Q我个h接触q一些解x法,其中有两个架构可以给大家做参考?
g四层交换
W四层交换用第三层和第四层信息包的报头信息Q根据应用区间识别业务流Q将整个区间D늚业务分配到合适的应用服务器进行处理。 W四层交?功能p是虚IPQ指向物理服务器。它传输的业务服从的协议多种多样Q有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基 上,需要复杂的载量q法。在IP世界Q业务类型由l端TCP或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCP?UDP端口共同军_?
在硬件四层交换品领域,有一些知名的产品可以选择Q比如Alteon、F5{,q些产品很昂贵,但是物有所|能够提供非常优秀的性能和很灉|的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon搞定了?
软g四层交换
大家知道了硬件四层交换机的原理后Q基于OSI模型来实现的软g四层交换也就应运而生Q这L解决Ҏ实现的原理一_不过性能E差。但是满一定量的压力还是游刃有余的Q有软g实现方式其实更灵z,处理能力完全看你配置的熟悉能力?
软g四层交换我们可以使用Linux上常用的LVS来解冻ILVS是Linux Virtual ServerQ他提供了基于心跳线heartbeat的实时灾隑ֺ对解x案,提高pȝ的鲁性,同时可供了灵zȝ虚拟VIP配置和管理功能,可以同时?_U应用需求,q对于分布式的系l来说必不可?
一个典型的使用负蝲均衡的策略就是,在Y件或者硬件四层交换的基础上搭建squid集群Q这U思\在很多大型网站包括搜索引擎上被采用,q样?架构低成本、高性能q有很强的扩张性,随时往架构里面增减节点都非常容易。这L架构我准备空了专门详l整理一下和大家探讨?
对于大型|站来说Q前面提到的每个Ҏ可能都会被同时用到Q我q里介绍得比较浅显,具体实现q程中很多细节还需要大家慢慢熟悉和体会Q有时一个很的squid参数或者apache参数讄Q对于系l性能的媄响就会很大,希望大家一赯论,辑ֈ抛砖引玉之效?/p>
2、图片服务器分离大家知道Q对于Web服务器来_不管是Apache、IISq是其他容器Q图片是最消耗资源的Q于是我们有必要图片与面q行分离Q这是基本上大型|站都会采用的策略,他们都有独立的图片服务器Q甚臛_多台囄服务器。这L架构可以降低提供面讉Kh的服务器pȝ压力Qƈ且可以保证系l不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以q行不同的配|优化,比如apache在配|ContentType的时候可以尽量少支持Q尽可能的LoadModuleQ保证更高的pȝ消耗和执行效率?
3、数据库集群和库表散列大型网站都有复杂的应用Q这些应用必M用数据库Q那么在面对大量讉K的时候,数据库的瓉很快p昄出来Q这时一台数据库很快无法满_用,于是我们需要用数据库集群或者库表散列。在数据库集方面,很多数据库都有自q解决ҎQOracle、Sybase{都有很好的ҎQ常用的MySQL提供的Master/Slave也是cM的方案,您用了什么样的DBQ就参考相应的解决Ҏ来实施即可。上面提到的数据库集由于在架构、成本、扩张性方面都会受到所采用DBcd的限Ӟ于是我们需要从应用E序的角度来考虑改善pȝ架构Q库表散列是常用q且最有效的解x案。我们在应用E序中安装业务和应用或者功能模块将数据库进行分,不同的模块对应不同的数据库或者表Q再按照一定的{略Ҏ个页面或者功能进行更的数据库散列,比如用户表,按照用户IDq行表散列,q样p够低成本的提升系l的性能q且有很好的扩展性。sohu的论坛就是采用了q样的架构,论坛的用户、设|、帖子等信息q行数据库分,然后对帖子、用h照板块和IDq行散列数据库和表,最l可以在配置文g中进行简单的配置便能让系l随时增加一C成本的数据库q来补充pȝ性能?
4、缓存缓存一词搞技术的都接触过Q很多地方用到缓存。网站架构和|站开发中的缓存也是非帔R要。这里先讲述最基本的两U缓存。高U和分布式的~存在后面讲q。架构方面的~存Q对Apache比较熟悉的h都能知道Apache提供了自q~存模块Q也可以使用外加的Squid模块q行~存Q这两种方式均可以有效的提高Apache的访问响应能力。网站程序开发方面的~存QLinux上提供的Memory Cache是常用的~存接口Q可以在web开发中使用Q比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯׃nQ一些大型社Z用了q样的架构。另外,在用web语言开发的时候,各种语言基本都有自己的缓存模块和ҎQPHP有Pear的Cache模块QJava更多了Q?net不是很熟悉,怿也肯定有?
5、镜像镜像是大型|站帔R用的提高性能和数据安全性的方式Q镜像的技术可以解决不同网l接入商和地域带来的用户讉K速度差异Q比如ChinaNet和EduNet之间的差异就促了很多网站在教育|内搭徏镜像站点Q数据进行定时更新或者实时更新。在镜像的细节技术方面,q里不阐q太深,有很多专业的现成的解x构和产品可选。也有廉L通过软g实现的思\Q比如Linux上的rsync{工兗?
6、负载均衡负载均衡将是大型网站解决高负荷讉K和大量ƈ发请求采用的l极解决办法。负载均衡技术发展了多年Q有很多专业的服务提供商和品可以选择Q我个h接触q一些解x法,其中有两个架构可以给大家做参考?
7、硬件四层交换第四层交换使用W三层和W四层信息包的报头信息,Ҏ应用区间识别业务,整个区间段的业务流分配到合适的应用服务器进行处理。 W四层交换功能就象是?IPQ指向物理服务器。它传输的业务服从的协议多种多样Q有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基上,需要复杂的载量q法。在IP世界Q业务类型由l端TCP或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP端口共同军_。在g四层交换产品领域Q有一些知名的产品可以选择Q比如Alteon、F5{,q些产品很昂贵,但是物有所|能够提供非常优秀的性能和很灉|的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon搞定了
?、Y件四层交换大家知道了g四层交换机的原理后,ZOSI模型来实现的软g四层交换也就应运而生Q这L解决Ҏ实现的原理一_不过性能E差。但是满一定量的压力还是游刃有余的Q有软g实现方式其实更灵z,处理能力完全看你配置的熟悉能力。Y件四层交换我们可以用Linux上常用的LVS来解冻ILVS是Linux Virtual ServerQ他提供了基于心跳线heartbeat的实时灾隑ֺ对解x案,提高pȝ的鲁性,同时可供了灵zȝ虚拟VIP配置和管理功能,可以同时满多种应用需求,q对于分布式的系l来说必不可。一个典型的使用负蝲均衡的策略就是,在Y件或者硬件四层交换的基础上搭建squid集群Q这U思\在很多大型网站包括搜索引擎上被采用,q样的架构低成本、高性能q有很强的扩张性,随时往架构里面增减节点都非常容易。这L架构我准备空了专门详l整理一下和大家探讨。对于大型网站来_前面提到的每个方法可能都会被同时使用刎ͼ我这里介l得比较显Q具体实现过E中很多l节q需要大家慢慢熟悉和体会Q有时一个很的squid参数或者apache参数讄Q对于系l性能的媄响就会很大,希望大家一赯论,辑ֈ抛砖引玉之效?
用squid做web cache serverQ而apache在squid的后面提供真正的web服务。当然用这L架构必须要保证主上大部分都是静态页面。这需要程序员的配合将面在反馈给客户端之前将面全部转换成静态页面?
基本看出sina和sohu对于频道{栏目都用了相同的技术,即squid来监听这些IP?0端口Q而真正的web server来监听另外一个端口。从用户的感觉上来说不会有Q何的区别Q而相对于web server直接和客Lq在一L方式Q这L方式明显的节省的带宽和服务器。用戯问的速度感觉也会更快?
http://www.dbanotes.net/arch/yupoo_arch.html
带宽Q?000M/S (参?
服务器数量:60 台左?
Web服务器:Lighttpd, Apache, nginx
应用服务器:Tomcat
其他QPython, Java, MogileFS 、ImageMagick {?
关于 Squid ?Tomcat
Squid ?Tomcat g?Web 2.0 站点的架构中较少看到。我首先是对 Squid 有点疑问Q对此阿华的解释?目前暂时q没扑ֈ效率?Squid 高的~存pȝQ原来命中率的确很差Q后来在 Squid 前又装了?Lighttpd, Z url ?hash, 同一个图片始l会到同一?squid 去,所以命中率d提高?
对于应用服务器层?TomcatQ现?Yupoo! 技术h员也在逐渐用其他轻量的东西替代,?YPWS/YPFS 现在已经?Python q行开发了?
名次解释Q?
· YPWS--Yupoo Web Server YPWS 是用 Python开发的一个小?Web 服务器,提供基本?Web 服务外,可以增加针对用户、图片、外铄站显C的逻辑判断Q可以安装于M有空闲资源的服务器中Q遇到性能瓉时方便横向扩展?
· YPFS--Yupoo File System ?YPWS cMQYPFS 也是Zq个 Web 服务器上开发的囄上传服务器?
【Updated: 有网友留a质疑 Python 的效率,Yupoo 老大刘^阛_ del.icio.us 上写?"YPWS用Python自己写的Q每台机器每U可以处?94个请? 现在压力几乎都在10Q以??
囄处理?
接下来的 Image Process Server 负责处理用户上传的图片。用的软g包也?ImageMagickQ在上次存储升的同Ӟ对于锐化的比率也调整q了(我个人感觉,效果的确好了很多)?#8221;Magickd“ 是图像处理的一个远E接口服务,可以安装在Q何有I闲 CPU资源的机器上Q类?Memcached的服务方式?
我们知道 Flickr 的羃略图功能原来是用 ImageMagick 软g包的Q后来被雅虎收购后出于版权原因而不用了Q?Q;EXIF ?IPTC Flicke 是用 Perl 抽取的,我是非常 Yupoo! 针对 EXIF 做些文章Q这也是潜在产生受益的一个重炏V?
囄存储?
原来 Yupoo! 的存储采用了盘阵列柜,Z NFS 方式的,随着数据量的增大Q?#8221;Yupoo! 开发部?7q?月䆾开始着手研I一套大定w的、能满 Yupoo! 今后发展需要的、安全可靠的存储pȝ“Q看?Yupoo! pȝ比较有信心,也是满怀期待的,毕竟q要支撑?TB 计算的v量图片的存储和管理。我们知道,一张图片除了原囑֤Q还有不同尺寸的Q这些图片统一存储?MogileFS 中?
对于其他部分Q常见的 Web 2.0 |站必须软g都能看到Q如 MySQL、Memcached 、Lighttpd {。Yupoo! 一斚w采用不少相对比较成熟的开源YӞ一斚w也在自行开发定刉合自己的架构组件。这也是一?Web 2.0 公司所必需要走的一个途径?
非常感谢一?Yupoo! 阿华对于技术信息的分nQ技术是共通的。下一个能爆料是哪?
--EOF--
lighttpd+squidq套~存是放在另外一个机房作为cdn的一个节点用的Q图中没描绘清楚Q给大家带来不便了?
squid前端用lighttpd没用nginxQ主要是用了q么久,没出啥大问题Q所以就没想其他的了?
URL Hash的扩展性的不好,能做的就是不Ld减服务器Q我们目前是5台服务器做一lhash.
我们现在用Python写的Web ServerQ在效率斚wQ我可以l个试数据Q根据目前的讉K日志模拟讉K试的结果是1台ypws,q_每秒处理294个请?加蝲所有的逻辑判断)?
在可靠性上Q还不没具体的数据,目前q行1个多月还没有M异常?
lvs每个节点上都装nginxQ主要是Z反向代理及处理静态内容,不过apache已显得不是那么必需Q准备逐渐L?
我们处理囄都是x的,我们目前半数以上的服务器都装了magickd服务Q用来分担图片处理请求?
http://www.dbanotes.net/review/tailrank_arch.html
每天C千万计的 Blog 内容中,实时的热Ҏ什? Tailrank q个 Web 2.0 Startup 致力于回{这个问题?
专门爆料|站架构?Todd Hoff ?Kevin Burton q行了采ѝ于是我们能了解一?Tailrank 架构的一些信息。每时索引 2400 万的 Blog ?FeedQ内容处理能力ؓ 160-200MbpsQIO 写入大约?0-15MBps。每个月要处?52T 之多的原始数据。Tailrank 所用的爬虫现在已经成ؓ一个独立品:spinn3r?
服务器硬?
目前大约 15 台服务器QCPU ?64 位的 Opteron。每CZ挂两?SATA 盘,?RAID 0。据我所知,国内很多 Web 2.0 公司也用的是cM的方式,SATA 盘容量达Q低廉h|堪称不二之选。操作系l用的是 Debian Linux 。Web 服务器用 Apache 2.0QSquid 做反向代理服务器?
数据?
Tailrank ?MySQL 数据库,联邦数据库Ş式。存储引擎用 InnoDBQ?数据?500GB。Kevin Burton 也指Z MySQL 5 在修了一?多核模式下互斥锁的问?This Bug?)。到数据库的JDBC 驱动q接池用 lbpool 做负载均衡。MySQL Slave 或?Master的复制用 MySQLSlaveSync 来轻村֮成。不q即使这Pq要p 20Q?的时间来折腾 DB?
其他开攄软g
M一套系l都M开合适的 Profiling 工具QTailrank 也不利外Q针?Java E序?Benchmark ?Benchmark4j。Log 工具?Log5j(不是 Log4j)。Tailrank 所用的大部分工具都是开攄?
Tailrank 的一个比较大的竞争对手是 TechmemeQ虽然二者暂时看面向内容的侧重点有所不同。其实,最大的Ҏq是自己Q当需要挖掘的信息量越来越大,如果_ևq及时的呈现l用户内容的成本会越来越高。从现在来看QTailrank 预期目标还差的很远。期待罗马早日徏?br />
YouTube架构学习
关键? YouTube
原文: YouTube Architecture
YouTube发展q速,每天过1亿的视频点击量,但只有很h在维护站点和保伸羃性?
q_
Apache
Python
Linux(SuSe)
MySQL
psycoQ一个动态的Python到C的编译器
lighttpd代替Apache做视频查?
状?
支持每天过1亿的视频点击?
成立?005q??
?006q?月达到每?千万的视频点击量
?006q?月达到每?亿的视频点击?
2个系l管理员Q?个~性Y件架构师
2个Y件开发工E师Q?个网l工E师Q?个DBA
处理飞速增长的量
Java代码
1. while (true)
2. {
3. identify_and_fix_bottlenecks();
4. drink();
5. sleep();
6. notice_new_bottleneck();
7. }
while (true)
{
identify_and_fix_bottlenecks();
drink();
sleep();
notice_new_bottleneck();
}
每天q行该@环多?
Web服务?
1QNetScaler用于负蝲均衡和静态内容缓?
2Q用mod_fast_cgiq行Apache
3Q用一个Python应用服务器来处理h的\?
4Q应用服务器与多个数据库和其他信息源交互来获取数据和格式化html面
5Q一般可以通过d更多的机器来在Web层提高~?
6QPython的Web层代码通常不是性能瓉Q大部分旉d在RPC
7QPython允许快速而灵zȝ开发和部v
8Q通常每个面服务于100毫秒的时?
9Q用psyco(一个类gJIT~译器的动态的Python到C的编译器)来优化内部@?
10Q对于像加密{密集型CPUzdQ用C扩展
11Q对于一些开销昂贵的块使用预先生成q缓存的html
12Q数据库里用行U缓?
13Q缓存完整的Python对象
14Q有些数据被计算出来q发送给各个E序Q所以这些值缓存在本地内存中。这是个使用不当的策略。应用服务器里最快的~存预先计的值发送给所有服务器也花不了多少旉。只需弄一个代理来监听更改Q预计算Q然后发送?
视频服务
1Q花费包括带宽,g和能源消?
2Q每个视频由一个迷你集来hostQ每个视频被过一台机器持?
3Q用一个集意味着Q?
-更多的硬盘来持有内容意味着更快的速度
-failover。如果一台机器出故障了,另外的机器可以l服?
-在线备䆾
4Q用lighttpd作ؓWeb服务器来提供视频服务Q?
-Apache开销太大
-使用epoll来等待多个fds
-从单q程配置转变为多q程配置来处理更多的q接
5Q大部分行的内容移到CDNQ?
-CDN在多个地方备份内容,q样内容ȝhq的Z׃更高
-CDN机器l常内存不Q因为内容太行以致很少有内容进出内存的颠簸
6Q不太流行的内容(每天1-20览ơ数)在许多colo站点使用YouTube服务?
-长尾效应。一个视频可以有多个播放Q但是许多视频正在播放。随机硬盘块被访?
-在这U情况下~存不会很好Q所以花钱在更多的缓存上可能没太大意义?
-调节RAID控制q注意其他低U问?
-调节每台机器上的内存Q不要太多也不要太少
视频服务关键?
1Q保持简单和廉h
2Q保持简单网l\径,在内容和用户间不要有太多讑֤
3Q用常用硬Ӟ昂贵的硬件很难找到帮助文?
4Q用简单而常见的工具Q用构建在Linux里或之上的大部分工具
5Q很好的处理随机查找(SATAQtweaks)
~略图服?
1Q做到高效o人惊奇的?
2Q每个视频大?张羃略图Q所以羃略图比视频多很多
3Q羃略图仅仅host在几个机器上
4Q持有一些小东西所遇到的问题:
-OSU别的大量的盘查找和inode和页面缓存问?
-单目录文仉Ӟ特别是Ext3Q后来移到多分层的结构。内?.6的最q改q可能让Ext3允许大目录,但在一个文件系l里存储大量文g不是个好L
-每秒大量的请求,因ؓWeb面可能在页面上昄60个羃略图
-在这U高负蝲下Apache表现的非常糟p?
-在Apache前端使用squidQ这U方式工作了一D|_但是׃负蝲l箋增加而以p|告终。它让每U?00个请求变?0?
-试使用lighttpd但是׃使用单线E它陷于困境。遇到多q程的问题,因ؓ它们各自保持自己单独的缓?
-如此多的囄以致一台新机器只能接管24时
-重启机器需?-10时来缓?
5Qؓ了解x有这些问题YouTube开始用Google的BigTableQ一个分布式数据存储Q?
-避免文仉题,因ؓ它将文g攉C?
-快,错误容忍
-更低的gq,因ؓ它用分布式多~存Q该~存与多个不同collocation站点工作
-更多信息参考Google ArchitectureQGoogleTalk Architecture和BigTable
数据?
1Q早?
-使用MySQL来存储元数据Q如用户Qtags和描q?
-使用一整个10盘的RAID 10来存储数?
-依赖于信用卡所以YouTubeU用g
-YouTubel过一个常见的革命Q单服务器,然后单master和多read slavesQ然后数据库分区Q然后sharding方式
-痛苦与备份gq。master数据库是多线E的q且q行在一个大机器上所以它可以处理许多工作Qslaves是单U程的ƈ且通常q行在小一些的服务器上q且备䆾是异步的Q所以slaves会远q落后于master
-更新引v~存失效Q硬盘的慢I/OD慢备?
-使用备䆾架构需要花费大量的money来获得增加的写性能
-YouTube的一个解x案是通过把数据分成两个集来传输分Z先次序:一个视频查看池和一个一般的集群
2Q后?
-数据库分?
-分成shardsQ不同的用户指定C同的shards
-扩散d
-更好的缓存位|意味着更少的IO
-Dg减少30%
-备䆾延迟降低?
-现在可以L提升数据库的伸羃?
数据中心{略
1Q依赖于信用卡,所以最初只能用受主机提供商
2Q受主机提供商不能提供伸羃性,不能控制g或用良好的|络协议
3QYouTube改ؓ使用colocation arrangement。现在YouTube可以自定义所有东西ƈ且协定自q契约
4Q??个数据中心加CDN
5Q视频来自Q意的数据中心Q不是最q的匚w或其他什么。如果一个视频够流行则UdCDN
6Q依赖于视频带宽而不是真正的延迟。可以来自Q何colo
7Q图片gq很严重Q特别是当一个页面有60张图片时
8Q用BigTable图片备份到不同的数据中心,代码查看谁是最q的
学到的东?
1QStall for time。创造性和风险性的技巧让你在短期内解决问题而同时你会发现长期的解决Ҏ
2QProioritize。找Z的服务中核心的东西ƈ对你的资源分Z先?
3QPick your battles。别怕将你的核心服务分出厅RYouTube使用CDN来分布它们最行的内宏V创q|络花费太多时间和太多money
4QKeep it simpleQ简单允怽更快的重新架构来回应问题
5QShard。Sharding帮助隔离存储QCPUQ内存和IOQ不仅仅是获得更多的写性能
6QConstant iteration on bottlenecksQ?
-软gQDBQ缓?
-OSQ硬盘I/O
-gQ内存,RAID
7QYou succeed as a team。拥有一个跨条律的了解整个pȝq知道系l内部是什么样的团队,如安装打印机Q安装机器,安装|络{等的h。With a good team all things are possible?br />
http://hideto.javaeye.com/blog/130815
Google架构学习
关键? Google
原文QGoogle Architecture
Google是~性的王者。Google一直的目标是构徏高性能高~性的基础l织来支持它们的产品?
q_
Linux
大量语言QPythonQJavaQC++
状?
?006q大U有450,000台廉h务器
?005qGoogle索引?0亿Web面Q现在没有h知道数目
目前在Google有超q?00个GFS集群。一个集可以有1000或者甚?000台机器。成千上万的机器从运行着5000000000000000字节存储的GFS集群获取数据Q集ȝd吞吐量可以达到每U?0兆字?
目前在Google?000个MapReduceE序Q而且每个月都写成百个新程?
BigTable伸羃存储几十亿的URLQ几癑֍千兆的卫星图片和几亿用户的参数选择
堆栈
Google形象化它们的基础l织Z层架构:
1Q品:搜烦Q广告,emailQ地图,视频Q聊天,博客
2Q分布式pȝ基础l织QGFSQMapReduce和BigTable
3Q计^収ͼ一不同的数据中心里的机器
4Q确保公叔R的h们部|v来开销很小
5Q花Ҏ多的钱在避免丢失日志数据的硬件上Q其他类型的数据则花费较?
可信赖的存储机制GFS(Google File System)
1Q可信赖的~性存储是ME序的核心需求。GFS是Google的核心存储^?
2QGoogle File System - 大型分布式结构化日志文gpȝQGoogle在里面扔了大量的数据
3Qؓ什么构建GFS而不是利用已有的东西Q因为可以自己控制一切ƈ且这个^C别的不一PGoogle需要:
-跨数据中心的高可靠?
-成千上万的网l节点的伸羃?
-大读写带宽的需?
-支持大块的数据,可能Z千兆字节
-高效的跨节点操作分发来减瓶?
4Q系l有Master和Chunk服务?
-Master服务器在不同的数据文仉保持元数据。数据以64MB为单位存储在文gpȝ中。客L与Master服务器交来在文件上做元数据操作q且扑ֈ包含用户需要数据的那些Chunk服务?
-Chunk服务器在盘上存储实际数据。每个Chunk服务器跨?个不同的Chunk服务器备份以创徏冗余来避免服务器崩溃。一旦被Master服务器指明,客户端程序就会直接从Chunk服务器读取文?
6Q一个上U的新程序可以用已有的GFS集群或者可以制作自qGFS集群
7Q关键点在于有够的基础l织来让Z对自qE序有所选择QGFS可以调整来适应个别E序的需?
使用MapReduce来处理数?
1Q现在你已经有了一个很好的存储pȝQ你该怎样处理如此多的数据呢?比如你有许多TB的数据存储在1000台机器上。数据库不能伸羃或者~到q种U别p极大Q这是MapReduce出现的原?
2QMapReduce是一个处理和生成大量数据集的~程模型和相兛_现。用h定一个mapҎ来处理一个键/值对来生成一个中间的?值对Q还有一个reduceҎ来合q所有关联到同样的中间键的中间倹{许多真实世界的d都可以用这U模型来表现。以q种风格来写的程序会自动q行的在一个大量机器的集群里运行。运行时pȝ照顾输入数据划分、程序在机器集之间执行的调度、机器失败处理和必需的内部机器交等l节。这允许E序员没有多ƈ行和分布式系l的l验可以很Ҏ使用一个大型分布式pȝ资源
3Qؓ什么用MapReduceQ?
-跨越大量机器分割d的好方式
-处理机器p|
-可以与不同类型的E序工作Q例如搜索和q告。几乎Q何程序都有map和reducecd的操作。你可以预先计算有用的数据、查询字数统计、对TB的数据排序等{?
4QMapReducepȝ有三U不同类型的服务?
-Master服务器分配用户Q务到Map和Reduce服务器。它也跟tQ务的状?
-Map服务器接收用戯入ƈ在其基础上处理map操作。结果写入中间文?
-Reduce服务器接收Map服务器生的中间文gq在其基上处理reduce操作
5Q例如,你想在所有Web面里的字数。你存储在GFS里的所有页面抛入MapReduce。这在成千上万台机器上同时q行q且所有的调整、工作调度、失败处理和数据传输自动完?
-步骤cM于:GFS -> Map -> Shuffle -> Reduction -> Store Results back into GFS
-在MapReduce里一个map操作一些数据映到另一个中Q生一个键值对Q在我们的例子里是字和字数
-Shuffling操作聚集键类?
-Reduction操作计算所有键值对的综合ƈ产生最l的l果
6QGoogle索引操作道有大U?0个不同的map和reduction?
7Q程序可以非常小Q如20?0行代?
8Q一个问题是掉队者。掉队者是一个比其他E序慢的计算Q它d了其他程序。掉队者可能因为缓慢的IO或者时的CPU不能使用而发生。解x案是q行多个同样的计ƈ且当一个完成后杀L有其他的
9Q数据在Map和Reduce服务器之间传输时被压~了。这可以节省带宽和I/O?
在BigTable里存储结构化数据
1QBigTable是一个大伸羃性、错误容忍、自理的系l,它包含千千兆的内存和1000000000000000的存储。它可以每秒钟处理百万的d
2QBigTable是一个构ZGFS之上的分布式哈希机制。它不是关系型数据库。它不支持join或者SQLcd查询
3Q它提供查询机制来通过键访问结构化数据。GFS存储存储不透明的数据而许多程序需求有l构化数?
4Q商业数据库不能辑ֈq种U别的~性ƈ且不能在成千上万台机器上工作
5Q通过控制它们自己的低U存储系lGoogle得到更多的控制权来改q它们的pȝ。例如,如果它们惌跨数据中心的操作更简单这个特性,它们可以内徏?
6Q系l运行时机器可以自由的增删而整个系l保持工?
7Q每个数据条目存储在一个格子里Q它可以通过一个行key和列key或者时间戳来访?
8Q每一行存储在一个或多个tablet中。一个tablet是一?4KB块的数据序列q且格式为SSTable
9QBigTable有三U类型的服务器:
-Master服务器分配tablet服务器,它跟ttablet在哪里ƈ且如果需要则重新分配d
-Tablet服务器ؓtablet处理dh。当tablet过大小限制(通常?00MB-200MB)时它们拆开tablet。当一个Tablet服务器失败时Q则100个Tablet服务器各自挑选一个新的tablet然后pȝ恢复?
-Lock服务器Ş成一个分布式锁服务。像打开一个tablet来写、Master调整和访问控制检查等都需要互?
10Q一个localityl可以用来在物理上将相关的数据存储在一h得到更好的locality选择
11Qtablet可能的~存在RAM?
g
1Q当你有很多机器时你怎样l织它们来得用和p有效Q?
2Q用非常廉Lg
3QA 1,000-fold computer power increase can be had for a 33 times lower cost if you you use a failure-prone infrastructure rather than an infrastructure built on highly reliable components. You must build reliability on top of unreliability for this strategy to work.
4QLinuxQin-house rack designQPCLQ低端存?
5QPrice per wattage on performance basis isn't getting better. Have huge power and cooling issues
6Q用一些collocation和Google自己的数据中?
其他
1Q迅速更改而不是等待QA
2Q库是构建程序的卓越方式
3Q一些程序作为服务提?
4Q一个基l织处理E序的版本,q样它们可以发布而不用害怕会破坏什么东?
Google来的方?
1Q支持地理位|分布的集群
2Qؓ所有数据创Z个单独的全局名字I间。当前的数据由集分?
3Q更多和更好的自动化数据q移和计?
4Q解军_使用|络划分来做qK区域的备份时的一致性问?例如保持服务即一个集离U维护或׃一些损耗问?
学到的东?
1Q基l织是有竞争性的优势。特别是对Google而言。Google可以很快很廉L推出新服务,q且伸羃性其他h很难辑ֈ。许多公叔R取完全不同的方式。许多公司认为基l织开销太大。Google认ؓ自己是一个系l工E公司,q是一个新的看待Y件构建的方式
2Q跨多个数据中心仍然是一个未解决的问题。大部分|站都是一个或者最多两个数据中心。我们不得不承认怎样在一些数据中心之间完整的分布|站是很需要技巧的
3Q如果你自己没有旉从零开始重新构建所有这些基l织你可以看看Hadoop。Hadoop是这里很多同LL的一个开源实?
4Q^台的一个优Ҏ初开发h员可以在q_的基上快速ƈ且放心的创徏健全的程序。如果每个项目都需要发明同L分布式基l织的轮子,那么你将陷入困境因ؓ知道怎样完成q项工作的h相对较少
5Q协同工作不一直是掷骰子。通过让系l中的所有部分一起工作则一个部分的改进帮助所有的部分。改q文件系l则每个Z中受益而且是透明的。如果每个项目用不同的文gpȝ则在整个堆栈中n受不到持l增加的改进
6Q构理pȝ让你没必要让pȝx。这允许你更Ҏ在服务器之间q资源、动态添加更大的定w、让机器ȝ和优雅的处理升
7Q创建可q化的基l织Qƈ行的执行消耗时间的操作q取较好的Ҏ
8Q不要忽略学院。学院有许多没有转变Z品的好主意。Most of what Google has done has prior art, just not prior large scale deployment.
9Q考虑压羃。当你有许多CPU而IO有限时压~是一个好的选择?
http://blog.daviesliu.net/2006/09/09/010620/
Lighttpd+Squid+Apache搭徏高效率Web服务?
架构原理
Apache通常是开源界的首选Web服务器,因ؓ它的强大和可靠,已经h了品牌效应,可以适用于绝大部分的应用场合。但是它的强大有时候却昑־W重Q配|文件得让h望而生畏,高ƈ发情况下效率不太高。而轻量的Web服务器Lighttpd却是后v之秀Q其静态文件的响应能力q高于ApacheQ据说是Apache?-3倍。Lighttpd的高性能和易用性,以打动我们Q在它能够胜ȝ领域Q尽量用它。Lighttpd对PHP的支持也很好Q还可以通过Fastcgi方式支持其他的语aQ比如Python?
毕竟Lighttpd是轻量的服务器Q功能上不能跟Apache比,某些应用无法胜Q。比如Lighttpdq不支持~存Q而现在的l大部分站点都是用程序生成动态内容,没有~存的话即ɽE序的效率再高也很难满大访问量的需求,而且让程序不停的d同一件事情也实在没有意义。首先,WebE序是需要做~存处理的,x反复使用的数据做~存。即使这样也q不够,单单是启动Web处理E序的代价就不少Q缓存最后生成的静态页面是必不可少的。而做q个?Squid的强,它本是做代理的,支持高效的缓存,可以用来l站点做反向代理加速。把Squid攑֜Apache或者Lighttpd的前端来~存 Web服务器生成的动态内容,而Web应用E序只需要适当地设|页面实效时间即可?
即是大部分内容动态生成的|站Q仍免不了会有一些静态元素,比如囄、JS脚本、CSS{等Q将Squid攑֜Apache或者Lighttp前端后,反而会使性能下降Q毕竟处理HTTPh是Web服务器的强项。而且已经存在于文件系l中的静态内容再在Squid中缓存一下,费内存和硬盘空间。因此可以考虑Lighttpd再放在Squid的前面,构成 Lighttpd+Squid+Apache的一条处理链QLighttpd在最前面Q专门用来处理静态内容的hQ把动态内容请求通过proxy模块转发lSquidQ如果Squid中有该请求的内容且没有过期,则直接返回给Lighttpd。新h或者过期的面h交由Apache中WebE序来处理。经qLighttpd和Squid的两U过滤,Apache需要处理的h大大减,减少了Web应用E序的压力。同时这L构架Q便于把不同的处理分散到多台计算Zq行Q由Lighttpd在前面统一把关?
在这U架构下Q每一U都是可以进行单独优化的Q比如Lighttpd可以采用异步IO方式QSquid可以启用内存来缓存,Apache可以启用MPM {,q且每一U都可以使用多台机器来均衡负载,伸羃性很好?/font>