<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[IT基础设施杂谈]]></title> 
<link>http://www.it-infra.cn/index.php</link> 
<description><![CDATA[记录实战中的点点滴滴]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[IT基础设施杂谈]]></copyright>
<item>
<link>http://www.it-infra.cn/SSL_Troubleshooting/</link>
<title><![CDATA[SSL排错工具]]></title> 
<author>Luke Lai &lt;lukelai@126.com&gt;</author>
<category><![CDATA[网站系统架构]]></category>
<pubDate>Fri, 20 Feb 2009 14:32:18 +0000</pubDate> 
<guid>http://www.it-infra.cn/SSL_Troubleshooting/</guid> 
<description>
<![CDATA[ 
	作者: Luke Lai &#124; 同意转载, 转载时请以超链接形式标明文章原始出处，谢谢!<br />网址: <a href="SSL_Troubleshooting/">http://www.it-infra.cn/SSL_Troubleshooting/<br /></a><br />Troubleshooting SSL<br /><br /><strong>SSLDUMP</strong>: <a href="http://www.rtfm.com/ssldump" target="_blank">http://www.rtfm.com/ssldump</a><br />&ndash; 提供SSL解密及详细命令<br /><br /><strong>HTTPWATCH</strong>: <a href="http://www.httpwatch.com" target="_blank">http://www.httpwatch.com</a><br />&ndash; 在浏览器中安装为插件<br /><br /><span style="font-size: medium"><br /><strong>SSLDUMP解密前(Application Data)：</strong></span><br /><img class="insertimage" src="attachment.php?fid=17" border="0" /><br /><br /><br /><span style="font-size: medium"><strong>SSLDUMP解密后(Application Data)：<br /></strong></span><img class="insertimage" src="attachment.php?fid=18" border="0" /><br /><br/>Tags - <a href="http://www.it-infra.cn/tags/ssl/" rel="tag">ssl</a>
]]>
</description>
</item><item>
<link>http://www.it-infra.cn/the-secret-of-Myspace/</link>
<title><![CDATA[MySpace的成功秘密]]></title> 
<author>Luke Lai &lt;lukelai@126.com&gt;</author>
<category><![CDATA[网站系统架构]]></category>
<pubDate>Thu, 19 Feb 2009 15:24:57 +0000</pubDate> 
<guid>http://www.it-infra.cn/the-secret-of-Myspace/</guid> 
<description>
<![CDATA[ 
	转自《亿万用户网站MySpace的成功秘密》　◎ 文 / David F. Carr 译 / 罗小平 <br />增长的访问量给社区网络的技术体系带来了巨大挑战。MySpace的开发者多年来不断重构站点软件、数据库和存储系统，以期与自身的成长同步&mdash;&mdash;目前，该站点月访问量已达400亿。绝大多数网站需要应对的流量都不及MySpace的一小部分，但那些指望迈入庞大在线市场的人，可以从MySpace的成长过程学到知识。<br /><p><strong><img class="insertimage" src="attachment.php?fid=15" border="0" width="158" height="43" /><br /><br />用户的烦恼</strong></p><p>Drew，是个来自达拉斯的17岁小伙子，在他的MySpace个人资料页上，可以看到他的袒胸照，看样子是自己够着手拍的。他的好友栏全是漂亮姑娘和靓车的链接，另外还说自己参加了学校田径队，爱好吉他，开一辆蓝色福特野马。</p><p>不过在用户反映问题的论坛里，似乎他的火气很大。&ldquo;赶紧弄好这该死的收件箱！&rdquo;他大写了所有单词。使用MySpace的用户个人消息系统可以收发信息，但当他要查看一条消息时，页面却出现提示：&ldquo;非常抱歉&hellip;&hellip;消息错误&rdquo;。</p><p>Drew的抱怨说明1.4亿用户非常重视在线交流系统，这对MySpace来说是个好消息。但也恰是这点让MySpace成了全世界最繁忙的站点之一。</p><p>11月，MySpace的美国国内互联网用户访问流量首次超过Yahoo。comScore Media Metrix公司提供的资料显示，MySpace当月访问量为387亿，而Yahoo是380.5亿。<br />显然，MySpace的成长太快了&mdash;&mdash;从2003年11月正式上线到现在不过三年。这使它很早就要面对只有极少数公司才会遇到的高可扩展性问题的严峻挑战。事实上，MySpace的Web服务器和数据库经常性超负荷，其用户频繁遭遇&ldquo;意外错误&rdquo;和&ldquo;站点离线维护&rdquo;等告示。包括Drew在内的 MySpace用户经常无法收发消息、更新个人资料或处理其他日常事务，他们不得不在论坛抱怨不停。</p><p>尤其是最近，MySpace可能经常性超负荷。因为Keynote Systems公司性能监测服务机构负责人Shawn White说，&ldquo;难以想象，在有些时候，我们发现20%的错误日志都来自MySpace，有时候甚至达到30%以至40%&hellip;&hellip;而Yahoo、 Salesforce.com和其他提供商用服务的站点，从来不会出现这样的数字。&rdquo;他告诉我们，其他大型站点的日错误率一般就1%多点。</p><p>顺便提及，MySpace在2006年7月24号晚上开始了长达12小时的瘫痪，期间只有一个可访问页面&mdash;&mdash;该页面解释说位于洛杉矶的主数据中心发生故障。为了让大家耐心等待服务恢复，该页面提供了用Flash开发的派克人（Pac-Man）游戏。Web站点跟踪服务研究公司总经理Bill Tancer说，尤其有趣的是，MySpace瘫痪期间，访问量不降反升，&ldquo;这说明了人们对MySpace的痴迷&mdash;&mdash;所有人都拥在它的门口等着放行&rdquo;。现 Nielsen Norman Group 咨询公司负责人、原Sun Microsystems公司工程师，因在Web站点方面的评论而闻名的Jakob Nielsen说，MySpace的系统构建方法显然与Yahoo、eBay以及Google都不相同。和很多观察家一样，他相信MySpace对其成长速度始料未及。&ldquo;虽然我不认为他们必须在计算机科学领域全面创新，但他们面对的的确是一个巨大的科学难题。&rdquo;他说。</p><p>MySpace开发人员已经多次重构站点软件、数据库和存储系统，以满足爆炸性的成长需要，但此工作永不会停息。&ldquo;就像粉刷金门大桥，工作完成之时，就是重新来过之日。&rdquo;（译者注：意指工人从桥头开始粉刷，当到达桥尾时，桥头涂料已经剥落，必须重新开始）MySpace技术副总裁Jim Benedetto说。既然如此，MySpace的技术还有何可学之处？因为MySpace事实上已经解决了很多系统扩展性问题，才能走到今天。</p><p>Benedetto说他的项目组有很多教训必须总结，他们仍在学习，路漫漫而修远。他们当前需要改进的工作包括实现更灵活的数据缓存系统，以及为避免再次出现类似7月瘫痪事件的地理上分布式架构。</p><p><strong>背景知识</strong></p><p><a href="http://lovelaozang.cn/attachment.php?id=304" target="_blank"></a></p><p><br />MySpace目前的努力方向是解决扩展性问题，但其领导人最初关注的是系统性能。</p><p>3年多前，一家叫做Intermix Media（早先叫eUniverse。这家公司从事各类电子邮件营销和网上商务）的公司推出了MySpace。而其创建人是Chris DeWolfe和Tom Anderson，他们原来也有一家叫做ResponseBase的电子邮件营销公司，后于2002年出售给Intermix。据Brad Greenspan（Intermix前CEO）运作的一个网站披露，ResponseBase团队为此获得2百万美金外加分红。Intermix是一家颇具侵略性的互联网商务公司&mdash;&mdash;部分做法可能有点过头。2005年，纽约总检察长Eliot Spitzer&mdash;&mdash;现在是纽约州长&mdash;&mdash;起诉Intermix使用恶意广告软件推广业务，Intermix最后以790万美元的代价达成和解。</p><p>2003年，美国国会通过《反垃圾邮件法》（CAN-SPAM Act），意在控制滥发邮件的营销行为。Intermix领导人DeWolfe和Anderson意识到新法案将严重打击公司的电子邮件营销业务，&ldquo;因此必须寻找新的方向。&rdquo;受聘于Intermix负责重写公司邮件营销软件的Duc Chau说。<br />当时有个叫Friendster的交友网站，Anderson和DeWolfe很早就是它的会员。于是他们决定创建自己的网上社区。他们去除了 Friendster在用户自我表述方面的诸多限制，并重点突出音乐（尤其是重金属乐），希望以此吸引用户。Chau使用Perl开发了最初的 MySpace版本，运行于Apache Web服务器，后台使用MySQL数据库。但它没有通过终审，因为Intermix的多数开发人员对ColdFusion（一个Web应用程序环境，最初由Allaire开发，现为Adobe所有）更为熟悉。因此，最后发布的产品采用ColdFusion开发，运行在Windows上，并使用MS SQL Server作为数据库服务器。<br />Chau就在那时离开了公司，将开发工作交给其他人，包括Aber Whitcomb（Intermix的技术专家，现在是MySpace技术总监）和Benedetto（MySpace现技术副总裁，大概于MySpace上线一个月后加入）。</p><p>MySpace上线的2003年，恰恰是Friendster在满足日益增长的用户需求问题上遭遇麻烦的时期。财富杂志最近的一次采访中，Friendster总裁Kent Lindstrom承认他们的服务出现问题选错了时候。那时，Friendster传输一个页面需要20到30秒，而MySpace只需2到3秒。结果，Friendster用户开始转投MySpace，他们认为后者更为可靠。<br />今天，MySpace无疑已是社区网站之王。社区网站是指那些帮助用户彼此保持联系、通过介绍或搜索、基于共同爱好或教育经历交友的Web站点。在这个领域比较有名的还有最初面向大学生的Facebook、侧重职业交流的LinkedIn，当然还少不了Friendster。MySpace宣称自己是&ldquo;下一代门户&rdquo;，强调内容的丰富多彩（如音乐、趣事和视频等）。其运作方式颇似一个虚拟的夜总会&mdash;&mdash;为未成年人在边上安排一个果汁吧，而显著位置则是以性为目的的约会，和寻找刺激派对气氛的年轻人的搜索服务。</p><p>用户注册时，需要提供个人基本信息，主要包括籍贯、性取向和婚姻状况。虽然MySpace屡遭批评，指其为网上性犯罪提供了温床，但对于未成年人，有些功能还是不予提供的。</p><p>　　MySpace的个人资料页上表述自己的方式很多，如文本式&ldquo;关于本人&rdquo;栏、选择加载入MySpace音乐播放器的歌曲，以及视频、交友要求等。它还允许用户使用CSS（一种Web标准格式语言，用户以此可设置页面元素的字体、颜色和页面背景图像）自由设计个人页面，这也提升了人气。不过结果是五花八门 &mdash;&mdash;很多用户的页面布局粗野、颜色迷乱，进去后找不到东南西北，不忍卒读；而有些人则使用了专业设计的模版（可阅读《Too Much of a Good Thing?》第49页），页面效果很好。</p><p>在网站上线8个月后，开始有大量用户邀请朋友注册MySpace，因此用户量大增。&ldquo;这就是网络的力量，这种趋势一直没有停止。&rdquo;Chau说。</p><p>拥有Fox电视网络和20th Century Fox影业公司的媒体帝国&mdash;&mdash;新闻集团，看到了他们在互联网用户中的机会，于是在2005年斥资5.8亿美元收购了MySpace。新闻集团董事局主席 Rupert Murdoch最近向一个投资团透露，他认为MySpace目前是世界主要Web门户之一，如果现在出售MySpace，那么可获60亿美元&mdash;&mdash;这比 2005年收购价格的10倍还多！新闻集团还惊人地宣称，MySpace在2006年7月结束的财政年度里总收入约2亿美元，而且预期在2007年度，Fox Interactive公司总收入将达到5亿美元，其中4亿来自MySpace。</p><p>　　然而MySpace还在继续成长。12月份，它的注册账户达到1.4亿，而2005年11月时不过4千万。当然，这个数字并不等于真实的用户个体数，因为有些人可能有多个帐号，而且个人资料也表明有些是乐队，或者是虚构的名字，如波拉特（译者注：喜剧电影《Borat》主角），还有像Burger King（译者注：美国最大的汉堡连锁集团）这样的品牌名。</p><p>当然，这么多的用户不停发布消息、撰写评论或者更新个人资料，甚至一些人整天都泡在Space上，必然给MySpace的技术工作带来前所未有的挑战。而传统新闻站点的绝大多数内容都是由编辑团队整理后主动提供给用户消费，它们的内容数据库通常可以优化为只读模式，因为用户评论等引起的增加和更新操作很少。而MySpace是由用户提供内容，数据库很大比例的操作都是插入和更新，而非读取。</p><p>　　浏览MySpace上的任何个人资料时，系统都必须先查询数据库，然后动态创建页面。当然，通过数据缓存，可以减轻数据库的压力，但这种方案必须解决原始数据被用户频繁更新带来的同步问题。</p><p>MySpace的站点架构已经历了5个版本&mdash;&mdash;每次都是用户数达到一个里程碑后，必须做大量的调整和优化。Benedetto说，&ldquo;但我们始终跟不上形势的发展速度。我们重构重构再重构，一步步挪到今天&rdquo;。</p><p>　　尽管MySpace拒绝了正式采访，但Benedetto在参加11月于拉斯维加斯召开的SQL Server Connections会议时还是回答了Baseline的问题。本文的不少技术信息还来源于另一次重要会议&mdash;&mdash;Benedetto和他的老板&mdash;&mdash;技术总监Whitcomb今年3月出席的Microsoft MIX Web开发者大会。</p><p>　　据他们讲，MySpace很多大的架构变动都发生在2004和2005年早期&mdash;&mdash;用户数在当时从几十万迅速攀升到了几百万。</p><p>在每个里程碑，站点负担都会超过底层系统部分组件的最大载荷，特别是数据库和存储系统。接着，功能出现问题，用户失声尖叫。最后，技术团队必须为此修订系统策略。</p><p>　　虽然自2005年早期，站点账户数超过7百万后，系统架构到目前为止保持了相对稳定，但MySpace仍然在为SQL Server支持的同时连接数等方面继续攻坚，Benedetto说，&ldquo;我们已经尽可能把事情做到最好&rdquo;。</p><p></p><p><strong>里程碑一：50万账户</strong><br />按Benedetto 的说法，MySpace最初的系统很小，只有两台Web服务器和一个数据库服务器。那时使用的是Dell双CPU、4G内存的系统。</p><p>　　单个数据库就意味着所有数据都存储在一个地方，再由两台Web服务器分担处理用户请求的工作量。但就像MySpace后来的几次底层系统修订时的情况一样，三服务器架构很快不堪重负。此后一个时期内，MySpace基本是通过添置更多Web服务器来对付用户暴增问题的。</p><p>　　但到在2004年早期，MySpace用户数增长到50万后，数据库服务器也已开始汗流浃背。</p><p>　　但和Web服务器不同，增加数据库可没那么简单。如果一个站点由多个数据库支持，设计者必须考虑的是，如何在保证数据一致性的前提下，让多个数据库分担压力。</p><p>　　在第二代架构中，MySpace运行在3个SQL Server数据库服务器上&mdash;&mdash;一个为主，所有的新数据都向它提交，然后由它复制到其他两个；另两个全力向用户供给数据，用以在博客和个人资料栏显示。这种方式在一段时间内效果很好&mdash;&mdash;只要增加数据库服务器，加大硬盘，就可以应对用户数和访问量的增加。</p><p><strong>里程碑二：1-2百万账户</strong><br />MySpace注册数到达1百万至2百万区间后，数据库服务器开始受制于I/O容量&mdash;&mdash;即它们存取数据的速度。而当时才是2004年中，距离上次数据库系统调整不过数月。用户的提交请求被阻塞，就像千人乐迷要挤进只能容纳几百人的夜总会，站点开始遭遇&ldquo;主要矛盾&rdquo;，Benedetto说，这意味着 MySpace永远都会轻度落后于用户需求。&ldquo;有人花5分钟都无法完成留言，因此用户总是抱怨说网站已经完蛋了。&rdquo;他补充道。</p><p>　　这一次的数据库架构按照垂直分割模式设计，不同的数据库服务于站点的不同功能，如登录、用户资料和博客。于是，站点的扩展性问题看似又可以告一段落了，可以歇一阵子。</p><p>　　垂直分割策略利于多个数据库分担访问压力，当用户要求增加新功能时，MySpace将投入新的数据库予以支持它。账户到达2百万后，MySpace还从存储设备与数据库服务器直接交互的方式切换到SAN（Storage Area Network，存储区域网络）&mdash;&mdash;用高带宽、专门设计的网络将大量磁盘存储设备连接在一起，而数据库连接到SAN。这项措施极大提升了系统性能、正常运行时间和可靠性，Benedetto说。</p><p><strong>里程碑三：3百万账户</strong></p><p>当用户继续增加到3百万后，垂直分割策略也开始难以为继。尽管站点的各个应用被设计得高度独立，但有些信息必须共享。在这个架构里，每个数据库必须有各自的用户表副本&mdash;&mdash;MySpace授权用户的电子花名册。这就意味着一个用户注册时，该条账户记录必须在9个不同数据库上分别创建。但在个别情况下，如果其中某台数据库服务器临时不可到达，对应事务就会失败，从而造成账户非完全创建，最终导致此用户的该项服务无效。</p><p>　　另外一个问题是，个别应用如博客增长太快，那么专门为它服务的数据库就有巨大压力。</p><p>　　2004年中，MySpace面临Web开发者称之为&ldquo;向上扩展&rdquo;对&ldquo;向外扩展&rdquo;（译者注：Scale Up和Scale Out，也称硬件扩展和软件扩展）的抉择&mdash;&mdash;要么扩展到更大更强、也更昂贵的服务器上，要么部署大量相对便宜的服务器来分担数据库压力。一般来说，大型站点倾向于向外扩展，因为这将让它们得以保留通过增加服务器以提升系统能力的后路。</p><p>　　但成功地向外扩展架构必须解决复杂的分布式计算问题，大型站点如Google、Yahoo和Amazon.com，都必须自行研发大量相关技术。以Google为例，它构建了自己的分布式文件系统。</p><p>另外，向外扩展策略还需要大量重写原来软件，以保证系统能在分布式服务器上运行。&ldquo;搞不好，开发人员的所有工作都将白费&rdquo;，Benedetto说。因此，MySpace首先将重点放在了向上扩展上，花费了大约1个半月时间研究升级到32CPU服务器以管理更大数据库的问题。Benedetto说，&ldquo;那时候，这个方案看似可能解决一切问题。&rdquo;如稳定性，更棒的是对现有软件几乎没有改动要求。糟糕的是，高端服务器极其昂贵，是购置同样处理能力和内存速度的多台服务器总和的很多倍。而且，站点架构师预测，从长期来看，即便是巨型数据库，最后也会不堪重负，Benedetto说，&ldquo;换句话讲，只要增长趋势存在，我们最后无论如何都要走上向外扩展的道路。&rdquo;</p><p>因此，MySpace最终将目光移到分布式计算架构&mdash;&mdash;它在物理上分布的众多服务器，整体必须逻辑上等同于单台机器。拿数据库来说，就不能再像过去那样将应用拆分，再以不同数据库分别支持，而必须将整个站点看作一个应用。现在，数据库模型里只有一个用户表，支持博客、个人资料和其他核心功能的数据都存储在相同数据库。</p><p>既然所有的核心数据逻辑上都组织到一个数据库，那么MySpace必须找到新的办法以分担负荷&mdash;&mdash;显然，运行在普通硬件上的单个数据库服务器是无能为力的。这次，不再按站点功能和应用分割数据库，MySpace开始将它的用户按每百万一组分割，然后将各组的全部数据分别存入独立的SQL Server实例。目前，MySpace的每台数据库服务器实际运两个SQL Server实例，也就是说每台服务器服务大约2百万用户。Benedetto指出，以后还可以按照这种模式以更小粒度划分架构，从而优化负荷分担。</p><p>　　当然，还是有一个特殊数据库保存了所有账户的名称和密码。用户登录后，保存了他们其他数据的数据库再接管服务。特殊数据库的用户表虽然庞大，但它只负责用户登录，功能单一，所以负荷还是比较容易控制的。</p><p><strong>里程碑四：9百万到1千7百万账户</strong><br />2005年早期，账户达到9百万后，MySpace开始用Microsoft的C#编写ASP.NET程序。C#是C语言的最新派生语言，吸收了C++和 Java的优点，依托于Microsoft .NET框架（Microsoft为软件组件化和分布式计算而设计的模型架构）。ASP.NET则由编写Web站点脚本的ASP技术演化而来，是 Microsoft目前主推的Web站点编程环境。</p><p>　　可以说是立竿见影，MySpace马上就发现ASP.NET程序运行更有效率，与ColdFusion相比，完成同样任务需消耗的处理器能力更小。据技术总监Whitcomb说，新代码需要150台服务器完成的工作，如果用ColdFusion则需要246台。Benedetto还指出，性能上升的另一个原因可能是在变换软件平台，并用新语言重写代码的过程中，程序员复审并优化了一些功能流程。</p><p>最终，MySpace开始大规模迁移到ASP.NET。即便剩余的少部分ColdFusion代码，也从Cold-Fusion服务器搬到了 ASP.NET，因为他们得到了BlueDragon.NET（乔治亚州阿尔法利塔New Atlanta Communications公司的产品，它能将ColdFusion代码自动重新编译到Microsoft平台）的帮助。</p><p>账户达到1千万时，MySpace再次遭遇存储瓶颈问题。SAN的引入解决了早期一些性能问题，但站点目前的要求已经开始周期性超越SAN的I/O容量&mdash;&mdash;即它从磁盘存储系统读写数据的极限速度。</p><p>原因之一是每数据库1百万账户的分割策略，通常情况下的确可以将压力均分到各台服务器，但现实并非一成不变。比如第七台账户数据库上线后，仅仅7天就被塞满了，主要原因是佛罗里达一个乐队的歌迷疯狂注册。</p><p>某个数据库可能因为任何原因，在任何时候遭遇主要负荷，这时，SAN中绑定到该数据库的磁盘存储设备簇就可能过载。&ldquo;SAN让磁盘I/O能力大幅提升了，但将它们绑定到特定数据库的做法是错误的。&rdquo;Benedetto说。</p><p>最初，MySpace通过定期重新分配SAN中数据，以让其更为均衡的方法基本解决了这个问题，但这是一个人工过程，&ldquo;大概需要两个人全职工作。&rdquo;Benedetto说。</p><p>　　长期解决方案是迁移到虚拟存储体系上，这样，整个SAN被当作一个巨型存储池，不再要求每个磁盘为特定应用服务。MySpace目前采用了一种新型SAN设备&mdash;&mdash;来自加利福尼亚州弗里蒙特的3PARdata。</p><p>在3PAR的系统里，仍能在逻辑上按容量划分数据存储，但它不再被绑定到特定磁盘或磁盘簇，而是散布于大量磁盘。这就使均分数据访问负荷成为可能。当数据库需要写入一组数据时，任何空闲磁盘都可以马上完成这项工作，而不再像以前那样阻塞在可能已经过载的磁盘阵列处。而且，因为多个磁盘都有数据副本，读取数据时，也不会使SAN的任何组件过载。</p><p>　　当2005年春天账户数达到1千7百万时，MySpace又启用了新的策略以减轻存储系统压力，即增加数据缓存层&mdash;&mdash;位于Web服务器和数据库服务器之间，其唯一职能是在内存中建立被频繁请求数据对象的副本，如此一来，不访问数据库也可以向Web应用供给数据。换句话说，100个用户请求同一份资料，以前需要查询数据库100次，而现在只需1次，其余都可从缓存数据中获得。当然如果页面变化，缓存的数据必须从内存擦除，然后重新从数据库获取&mdash;&mdash;但在此之前，数据库的压力已经大大减轻，整个站点的性能得到提升。</p><p>缓存区还为那些不需要记入数据库的数据提供了驿站，比如为跟踪用户会话而创建的临时文件&mdash;&mdash;Benedetto坦言他需要在这方面补课，&ldquo;我是数据库存储狂热分子，因此我总是想着将万事万物都存到数据库。&rdquo;但将像会话跟踪这类的数据也存到数据库，站点将陷入泥沼。</p><p>　　增加缓存服务器是&ldquo;一开始就应该做的事情，但我们成长太快，以致于没有时间坐下来好好研究这件事情。&rdquo;Benedetto补充道。</p><p><strong>里程碑五：2千6百万账户</strong><br />2005年中期，服务账户数达到2千6百万时，MySpace切换到了还处于beta测试的SQL Server 2005。转换何太急？主流看法是2005版支持64位处理器。但Benedetto说，&ldquo;这不是主要原因，尽管这也很重要；主要还是因为我们对内存的渴求。&rdquo;支持64位的数据库可以管理更多内存。</p><p>更多内存就意味着更高的性能和更大的容量。原来运行32位版本的SQL Server服务器，能同时使用的内存最多只有4G。切换到64位，就好像加粗了输水管的直径。升级到SQL Server 2005和64位Windows Server 2003后，MySpace每台服务器配备了32G内存，后于2006年再次将配置标准提升到64G。<br /><strong>意外错误</strong><br />如果没有对系统架构的历次修改与升级，MySpace根本不可能走到今天。但是，为什么系统还经常吃撑着了？很多用户抱怨的&ldquo;意外错误&rdquo;是怎么引起的呢？</p><p>　　原因之一是MySpace对Microsoft的Web技术的应用已经进入连Microsoft自己也才刚刚开始探索的领域。比如11月，超出SQL Server最大同时连接数，MySpace系统崩溃。Benedetto说，这类可能引发系统崩溃的情况大概三天才会出现一次，但仍然过于频繁了，以致惹人恼怒。一旦数据库罢工，&ldquo;无论这种情况什么时候发生，未缓存的数据都不能从SQL Server获得，那么你就必然看到一个&lsquo;意外错误&rsquo;提示。&rdquo;他解释说。</p><p>　　去年夏天，MySpace的Windows 2003多次自动停止服务。后来发现是操作系统一个内置功能惹的祸&mdash;&mdash;预防分布式拒绝服务攻击（黑客使用很多客户机向服务器发起大量连接请求，以致服务器瘫痪）。MySpace和其他很多顶级大站点一样，肯定会经常遭受攻击，但它应该从网络级而不是依靠Windows本身的功能来解决问题&mdash;&mdash;否则，大量 MySpace合法用户连接时也会引起服务器反击。</p><p>&ldquo;我们花了大约一个月时间寻找Windows 2003服务器自动停止的原因。&rdquo;Benedetto说。最后，通过Microsoft的帮助，他们才知道该怎么通知服务器：&ldquo;别开枪，是友军。&rdquo;</p><p>　　紧接着是在去年7月某个周日晚上，MySpace总部所在地洛杉矶停电，造成整个系统停运12小时。大型Web站点通常要在地理上分布配置多个数据中心以预防单点故障。本来，MySpace还有其他两个数据中心以应对突发事件，但Web服务器都依赖于部署在洛杉矶的SAN。没有洛杉矶的SAN，Web服务器除了恳求你耐心等待，不能提供任何服务。</p><p>Benedetto说，主数据中心的可靠性通过下列措施保证：可接入两张不同电网，另有后备电源和一台储备有30天燃料的发电机。但在这次事故中，不仅两张电网失效，而且在切换到备份电源的过程中，操作员烧掉了主动力线路。</p><p>2007年中，MySpace在另两个后备站点上也建设了SAN。这对分担负荷大有帮助&mdash;&mdash;正常情况下，每个SAN都能负担三分之一的数据访问量。而在紧急情况下，任何一个站点都可以独立支撑整个服务，Benedetto说。</p><p>MySpace仍然在为提高稳定性奋斗，虽然很多用户表示了足够信任且能原谅偶现的错误页面。&ldquo;作为开发人员，我憎恶Bug，它太气人了。&rdquo;Dan Tanner这个31岁的德克萨斯软件工程师说，他通过MySpace重新联系到了高中和大学同学。&ldquo;不过，MySpace对我们的用处很大，因此我们可以原谅偶发的故障和错误。&rdquo; Tanner说，如果站点某天出现故障甚至崩溃，恢复以后他还是会继续使用。</p><p>这就是为什么Drew在论坛里咆哮时，大部分用户都告诉他应该保持平静，如果等几分钟，问题就会解决的原因。Drew无法平静，他写道，&ldquo;我已经两次给 MySpace发邮件，而它说一小时前还是正常的，现在出了点问题&hellip;&hellip;完全是一堆废话。&rdquo;另一个用户回复说，&ldquo;毕竟它是免费的。&rdquo;Benedetto坦承 100%的可靠性不是他的目标。&ldquo;它不是银行，而是一个免费的服务。&rdquo;他说。</p><p>换句话说，MySpace的偶发故障可能造成某人最后更新的个人资料丢失，但并不意味着网站弄丢了用户的钱财。&ldquo;关键是要认识到，与保证站点性能相比，丢失少许数据的故障是可接受的。&rdquo;Benedetto说。所以，MySpace甘冒丢失2分钟到2小时内任意点数据的危险，在SQL Server配置里延长了&ldquo;checkpoint&rdquo;操作&mdash;&mdash;它将待更新数据永久记录到磁盘&mdash;&mdash;的间隔时间，因为这样做可以加快数据库的运行。</p><p>Benedetto说，同样，开发人员还经常在几个小时内就完成构思、编码、测试和发布全过程。这有引入Bug的风险，但这样做可以更快实现新功能。而且，因为进行大规模真实测试不具可行性，他们的测试通常是在仅以部分活跃用户为对象，且用户对软件新功能和改进不知就里的情况下进行的。因为事实上不可能做真实的加载测试，他们做的测试通常都是针对站点。</p><p>&ldquo;我们犯过大量错误，&rdquo;Benedetto说，&ldquo;但到头来，我认为我们做对的还是比做错的多。&rdquo;<br /></p><br/>Tags - <a href="http://www.it-infra.cn/tags/myspace/" rel="tag">myspace</a>
]]>
</description>
</item><item>
<link>http://www.it-infra.cn/images-servers-optimization/</link>
<title><![CDATA[轻掠Web 图片服务器]]></title> 
<author>Luke Lai &lt;lukelai@126.com&gt;</author>
<category><![CDATA[网站系统架构]]></category>
<pubDate>Thu, 19 Feb 2009 15:10:07 +0000</pubDate> 
<guid>http://www.it-infra.cn/images-servers-optimization/</guid> 
<description>
<![CDATA[ 
	<p>本文转自:<span style="color: #0082ff"><a href="http://www.dbanotes.net/web/web_image_server.html" class="permalink"><span style="color: #0082ff">http://www.dbanotes.net/web/web_image_server.html</span></a><span style="color: #000000"> </span></span><br />现在很多中小网站(尤其是 Web 2.0 站点) 都允许用户上传图片，如果前期没有很好的规划，那么随着图片文件的增多，无论是管理还是性能上都带来很多问题。就自己的一点理解，抛砖引玉，以期能引出更具价值的信息。</p><h4>事关图片的存储</h4><p>把图片存储到什么介质上? 如果有足够的资金购买专用的图片服务器硬件或者 NAS 设备，那么简单的很；如果有能力自己开发单独存储图片的文件系统，那么也不用接着往下看了。</p><p>如果上述条件不具备，只想在普通的硬盘上存储，首先还是要考虑一下物理硬盘的实际处理能力。是 7200 转的还是 15000 转的，实际表现差别就很大。是选择 ReiserFS 还是 Ext3 ，怎么也要测试一下吧? 创建文件系统的时候 Inode 问题也要加以考虑，选择合适大小的 inode size ，在空间和速度上做取舍，同时防患于未然，注意单个文件系统下文件个数别达到极限。</p><h4>独立，独立的服务器</h4><p>无论从管理上，还是从性能上看，只要有可能，尽量部署独立的图片服务器。这几乎成为常识了(不过在我做过面向 Web 的项目之前就这个问题也被人笑话过)。具备独立的图片服务器或者服务器集群后，在 Web 服务器上就可以有针对性的进行配置优化。比如采用传说中<a href="http://www.dbanotes.net/arch/douban_web_server.html"><span style="color: #0082ff">更有效率的 Lighttpd</span></a> 。</p><p>如果不想在几台机器间同步所有图片，只用 NFS 模式共享一下即可。注意软、硬连接可能带来的问题，以及 NFS 特定的传输速度。</p><h4>独立，独立的域名</h4><p>如果大部分 Web 页面必须要载入很多图片，那么需要注意 IE 浏览器的<a href="http://blogs.msdn.com/ie/archive/2005/04/11/407189.aspx"><span style="color: #0082ff">连接数</span></a>问题(参见对该问题的<a href="http://blog.s135.com/read.php/332.htm"><span style="color: #0082ff">测试</span></a>)。</p><p>前几天有个朋友在线上问我，&rdquo;一些大网站，图片服务器为什么都用另外一个域名? 比如yahoo.com 图片服务器用了 yimg.com 的域名?&rdquo; ，粗糙一点的答案：除了管理方便，便于CDN 同步处理，上面说的 IE 连接数限制也是个考虑因素吧(其他原因我也不知，有请 Yahoo！的同学发言) 【还有一个我没考虑到的是 Cookie 的因素，参加楼下<a href="http://www.paulgao.com.cn/"><span style="color: #0082ff">高春辉</span></a>的留言】<br /><br /><span style="font-size: small"><strong><br />雅虎 Web 优化 14 条</strong></span></p><p>关于雅虎 YSlow 工具倡导的<a href="http://developer.yahoo.com/performance/rules.html"><span style="color: #0082ff"> 优化 14 条规则</span></a>，建议每个 Web 维护人员必须倒背如流，当然也应该辩证来看&ndash;介绍这 14 条规则的页面本身也只能得到 70 多分&hellip;其中的第九条和上面说的独立域名之间多少有些矛盾。实际情况要根据自己的 Benchmark 与具体需求而确定了。</p><h4>有效利用客户端 Cache</h4><p>很多网站的 UI 设计人员为了达到某些视觉效果，会在一些用户需要频繁访问的页面模块上应用大量的图片。这样的情况，<a href="http://yuiblog.com/blog/2007/01/04/performance-research-part-2/"><span style="color: #0082ff">研究表明</span></a>，对于用户粘度比较高的站点， 在Web 服务器上对这一类对象设置 <a href="http://developer.yahoo.com/performance/rules.html#expires"><span style="color: #0082ff">Expires Header</span></a> 就是十分有必要的，大量带宽就这么节省下来，费用也节省了下来。顺便说一下，对于验证码这样的东西，要加个简单的规则过滤掉。</p><h4>服务器端的 Cache</h4><p>在国内，CDN 也是有钱才能玩得起。而类似 Amazon S3 这样的一揽子存储服务，国内还没有出现。所以，充分利用服务器端的 Cache 也是有必要的。Squid 作为反向代理服务器，缓冲图片效果应该说尚可，新浪技术团队贡献的 <a href="http://code.google.com/p/ncache/"><span style="color: #0082ff">Ncache</span></a> 据评测，效果更佳。</p><h4>高解析图片问题</h4><p>如果网站存在大量高解析度的图片，那么有必要考虑部署 <a href="http://iipimage.sourceforge.net/"><span style="color: #0082ff">IIPImage</span></a> 或者类似的软件。</p><h4>运营问题</h4><p>很多比较有规模的网站对于用户上传的图片不做任何处理，结果页面上还能看到很多 BMP 格式的图片(个人觉得任何网站出现 BMP 格式的图片都是可耻的)&hellip;这完全是运营上的策略之误了。找个程序员投入一点时间写个图片处理模块，对那些&rdquo;截屏&rdquo;得来的图片做个转换，投入成本可能远比存储上的开销小，而用户再访问该图片，质量未必能有什么损失，浏览速度无疑好多了。哪种处理方式更让人接受，不言而喻。</p><br /><br/>Tags - <a href="http://www.it-infra.cn/tags/%25E5%259B%25BE%25E7%2589%2587%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8/" rel="tag">图片服务器</a>
]]>
</description>
</item><item>
<link>http://www.it-infra.cn/Nginx_php_arch/</link>
<title><![CDATA[Web2.0初创公司的福音(Nginx+PHP+MySQL)]]></title> 
<author>Luke Lai &lt;lukelai@126.com&gt;</author>
<category><![CDATA[网站系统架构]]></category>
<pubDate>Wed, 11 Feb 2009 14:44:48 +0000</pubDate> 
<guid>http://www.it-infra.cn/Nginx_php_arch/</guid> 
<description>
<![CDATA[ 
	写在前面，本文转载张宴同学的，这篇文章写得相当不错，图文并茂，非常仔细，我只截取了前言方案的介绍，具体配置需要与时俱进，具体还请跟进张宴的原文，谢谢，另外我个人觉得Nginx还有一个很大用途是可以分流Crawler的流量，这对于数据库压力比较大的动态网页尤其实用，通过一定的逻辑（如同一源IP地每秒请求大于XXX的流量导到另外一普通WEB服务器+普通数据库，正常用户及大搜索引擎VIP待遇，垃圾Crawler导向普通性能的服务免得拖跨主服务）<br /><br />[文章作者：张宴 本文版本：v4.12 最后修改：<span style="color: #ff0000">2009.01.17</span> 转载请注明原文链接：<a href="http://blog.s135.com/post/366.htm" target="_blank"><span style="color: #4f6371">http://blog.s135.com/post/366.htm</span></a>]<br /><br />　　前言：本文是我撰写的关于搭建&ldquo;Nginx + PHP（FastCGI）&rdquo;Web服务器的第4篇文章。本系列文章作为国内最早详细介绍 Nginx + PHP 安装、配置、使用的资料之一，为推动 Nginx 在国内的发展产生了积极的作用。这是一篇关于Nginx 0.7.x系列版本的文章，安装、配置方式与第3篇文章相差不大，但配置参数有不同。Nginx 0.7.x系列版本虽然为开发版，但在很多大型网站的生产环境中已经使用。<br /><br />　　<img class="insertimage" src="attachment.php?fid=12" border="0" width="150" height="50" /><a href="http://www.s135.com/post/attachment/200806/nginx.png" target="_blank"></a><br /><br />　　<a href="http://www.nginx.net/" target="_blank"><span style="color: #4f6371">Nginx</span></a> (&quot;engine x&quot;) 是一个高性能的 HTTP 和反向代理服务器，也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的，它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。<br /><br />　　Nginx 超越 Apache 的高性能和稳定性，使得国内使用 Nginx 作为 Web 服务器的网站也越来越多，其中包括<a href="http://blog.sina.com.cn/" target="_blank"><span style="color: #4f6371">新浪博客</span></a>、<a href="http://v.sina.com.cn/" target="_blank"><span style="color: #4f6371">新浪播客</span></a>、<a href="http://news.163.com/" target="_blank"><span style="color: #4f6371">网易新闻</span></a>等门户网站频道，<a href="http://www.6.cn/" target="_blank"><span style="color: #4f6371">六间房</span></a>、<a href="http://www.56.com/" target="_blank"><span style="color: #4f6371">56.com</span></a>等视频分享网站，<a href="http://www.discuz.net/" target="_blank"><span style="color: #4f6371">Discuz!官方论坛</span></a>、<a href="http://www.newsmth.net/" target="_blank"><span style="color: #4f6371">水木社区</span></a>等知名论坛，<a href="http://www.douban.com/" target="_blank"><span style="color: #4f6371">豆瓣</span></a>、<a href="http://www.yupoo.com/" target="_blank"><span style="color: #4f6371">YUPOO相册</span></a>、<a href="http://www.hainei.com/" target="_blank"><span style="color: #4f6371">海内SNS</span></a>、<a href="http://www.xunlei.com/" target="_blank"><span style="color: #4f6371">迅雷在线</span></a>等新兴Web 2.0网站。<br /><br /><br /><hr /><br />　　Nginx 的官方中文维基：<a href="http://wiki.codemongers.com/NginxChs" target="_blank"><span style="color: #4f6371">http://wiki.codemongers.com/NginxChs</span></a><br /><br /><span style="color: #4f6371"><hr /><br /></span>　　在高并发连接的情况下，Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。根据我的测试结果，Nginx 0.7.30 + PHP 5.2.8 (FastCGI) 可以承受3万以上的并发连接数，相当于同等环境下Apache的10倍。<br /><br />　　根据我的经验，4GB内存的服务器+Apache（prefork模式）一般只能处理3000个并发连接，因为它们将占用3GB以上的内存，还得为系统预留1GB的内存。我曾经就有两台Apache服务器，因为在配置文件中设置的MaxClients为4000，当Apache并发连接数达到3800时，导致服务器内存和Swap空间用满而崩溃。<br /><br />　　而这台 Nginx 0.7.30 + PHP 5.2.8 (FastCGI) 服务器在3万并发连接下，开启的10个Nginx进程消耗150M内存（15M*10=150M），开启的64个php-cgi进程消耗1280M内存（20M*64=1280M），加上系统自身消耗的内存，总共消耗不到2GB内存。如果服务器内存较小，完全可以只开启25个php-cgi进程，这样php-cgi消耗的总内存数才500M。<br /><br />　　在3万并发连接下，访问Nginx 0.7.30 + PHP 5.2.8 (FastCGI) 服务器的PHP程序，仍然速度飞快。下图为Nginx的状态监控页面，显示的活动连接数为28457（关于Nginx的监控页配置，会在本文接下来所给出的Nginx配置文件中写明）：<br /><br />　　<img class="insertimage" src="attachment.php?fid=13" border="0" width="294" height="180" /><a href="http://www.s135.com/post/attachment/200712/nginx_status.png" target="_blank"></a><br /><br />　　我生产环境下的两台Nginx + PHP5（FastCGI）服务器，跑多个一般复杂的纯PHP动态程序，单台Nginx + PHP5（FastCGI）服务器跑PHP动态程序的处理能力已经超过&ldquo;<span style="color: #ff0000">700次请求/秒</span>&rdquo;，相当于每天可以承受6000万（700*60*60*24=60480000）的访问量（<a href="http://www.s135.com/post/read.php/334.htm" target="_blank"><span style="color: #4f6371">更多信息见此</span></a>），而服务器的系统负载也不高：<br /><br />　　<img class="insertimage" src="attachment.php?fid=14" border="0" width="540" height="245" /><br /><a href="http://www.s135.com/post/attachment/200803/nginx_php_la.gif" target="_blank"></a><br /><br/>Tags - <a href="http://www.it-infra.cn/tags/nginx/" rel="tag">nginx</a>
]]>
</description>
</item><item>
<link>http://www.it-infra.cn/Ultradns_vs_IP_Anycast/</link>
<title><![CDATA[UltraDNS的灵魂--IP Anycast]]></title> 
<author>Luke Lai &lt;lukelai@126.com&gt;</author>
<category><![CDATA[网站系统架构]]></category>
<pubDate>Tue, 10 Feb 2009 14:47:01 +0000</pubDate> 
<guid>http://www.it-infra.cn/Ultradns_vs_IP_Anycast/</guid> 
<description>
<![CDATA[ 
	<p>作者: Luke Lai &#124; 同意转载, 转载时请以超链接形式标明文章原始出处，谢谢!<br />网址: <a href="Ultradns_vs_IP_Anycast/">http://www.it-infra.cn/Ultradns_vs_IP_Anycast/</a><br /><br />今天又收到Ultradns发过来的每月Intenet infrastructure的邮件，其中有条挺有意思的，是关于IP Anycast，中文翻译应该叫IP任播吧。曾经跟Ultradns相关的技术经理沟通过Ultradns的架构，感觉那哥们跟偏重于商务，技术都是美国那边控制着，包括在中国建点也是美国那边直派技术人员过来，其实Ultradns的技术还是挺牛。<br /><br />听说销售最好的业务员没有比较最差的业务员多打几个电话，这里可以看得出来，销售最牛的业务员一定有自己实现的方法，一定跟其它的业务员有区别。随着对Ultradns的了解，觉得Ultradns还是真有自己的一套。它的基础架构跟一般我们从书中上学到的DNS架构完全不一样。其中就是核心架构IP Anycast + BGP。<br /><br />关于IP Anycast简单解释Neustart公司这么说的：<br /><div class="quote"><div class="quote-title">引用</div><div class="quote-content">IP Anycast is one of the key tenets of the UltraDNS Managed DNS Service. Simply put, it is the ability to advertise the same public IP addresses out of multiple machines. This capability is usually combined with the Border Gateway Protocol (BGP). </div></div>大概的意思是IP Anycast可以把好多台机器整成一个公网IP地址，然后通过BGP宣告给运营商。<br /><div class="quote"><div class="quote-title">引用</div><div class="quote-content">When combined with IP Anycast, it may be used to route packets to the closest, most available instance of a service, such as DNS. In the event of a node outage, BGP route announcements are automatically updated (the address for that node is withdrawn as a viable destination) and traffic is redirected to the next closest topological node. </div></div>通过宣告路由给运营商实现客户端就近访问，以及节点失败后，服务自动转移等功能。<br /><br /></p><p><div class="quote"><div class="quote-title">引用</div><div class="quote-content">DNS is ideally suited to the use of an IP Anycast infrastructure because the vast majority of DNS queries are sent using the User Datagram Protocol (UDP) as its transport mechanism. UDP is a best effort protocol and as such cannot guarantee delivery. By using IP Anycast to bring the answer for a DNS query closer to the end user, it becomes far more likely that the query will reach its destination and be responded to quickly.</div></div>相信大家都看得懂这小段英文，这几句看起来非常轻松，个人觉得它一直是通过千锤百练出来，我说的不是语法文法，而是Ultradns在基础架构设计上走过路，以及对DNS深刻的认识，我相信这其中肯定有不少汗水或者泪水。意思很简单，IP Anycast最佳的应用环境就是DNS，一般DNS查询走的都是UDP协议，IP Anycast 结合 BGP的为DNS全球冗余及加速提供天然的条件。<br /><br />UltraDNS在五大洲已经搭建14个公共节点，虽然在国外鼎鼎大名,但在中国没有什么名气。我想也是跟UltraDNS的基础架构有一定的关系，这种架构第一要求拥有自己的公网IP地址段。第二要跟该国家的主要运营商有BGP广播。目前国内运营部不像国外那么好商谈，坐地起价，漫天要价，而且BGP震荡且不提供任何SLA保证。呵呵，Ultradns也正是因为这种架构&ldquo;枷锁&rdquo;在中国难以到处开花，上次听说Ultradns已经在香港开了一个Node，提供一些国外网站在华业务的支持。<br /><br />呵呵，乱七八糟说了一通UltraDNS，其实IP Anycast还可以应用在企业内部作为DNS高速及冗余可靠方案，回头有时间再写点。<br /><br /><img class="insertimage" src="attachment.php?fid=11" border="0" width="477" height="281" /><br />简单的UltraDNS结构图，没有搜到详细些，但也有想象空间，呵呵，版权所有@NeuStart<br /><br />参考资料：<br />UltraDNS: <a href="http://www.ultradns.com/technology/overview.html">http://www.ultradns.com/technology/overview.html</a><br /><br />IP Anycast: <a href="http://en.wikipedia.org/wiki/Anycast">http://en.wikipedia.org/wiki/Anycast</a><br /><br /></p><br/>Tags - <a href="http://www.it-infra.cn/tags/dns%25E6%259E%25B6%25E6%259E%2584/" rel="tag">dns架构</a>
]]>
</description>
</item><item>
<link>http://www.it-infra.cn/wikipedia_Arch/</link>
<title><![CDATA[学习WikiPedia网站系统架构[转载]]]></title> 
<author>Luke Lai &lt;lukelai@126.com&gt;</author>
<category><![CDATA[网站系统架构]]></category>
<pubDate>Mon, 26 Jan 2009 16:08:36 +0000</pubDate> 
<guid>http://www.it-infra.cn/wikipedia_Arch/</guid> 
<description>
<![CDATA[ 
	<p>转载出处：DBA Notes<br /><a href="http://www.dbanotes.net/opensource/wikipedia_arch.html" class="permalink"><span style="color: #0082ff">http://www.dbanotes.net/opensource/wikipedia_arch.html</span></a> <br />本想自己从PDF文档中抓出重点翻译一下，但看<a href="http://www.dbanotes.net/"><span style="color: #0082ff">Fenng</span></a>兄已经在Blog讲得比较细，就直接转载，谢谢了，正文如下：<br /><br />维基百科(<a href="http://www.wikipedia.org/"><span style="color: #0082ff">WikiPedia.org</span></a>)位列世界十大网站，目前排名第八位。这是开放的力量。</p><p>来点直接的数据：<br /></p><ul><li>峰值每秒钟3万个 HTTP 请求 </li><li>每秒钟 3G<strong>bit </strong>流量, 近乎<strong>375MB</strong> </li><li>350 台 PC 服务器(<a href="http://www.nedworks.org/~mark/presentations/san/Wikimedia%20architecture.pdf"><span style="color: #0082ff">数据来源</span></a>)</li></ul><p></p><p>架构示意图如下：<br /><span class="mt-enclosure mt-enclosure-image"> <br /></span></p><br /><p></p><div style="text-align: center"><img src="images/itinfra/WikiPedia_arch.png" border="0" width="593" height="357" /></div><br />Copy @Mark Bergsma <p></p><h4><a href="http://www.caraytech.com/geodns/"><span style="color: #0082ff">GeoDNS</span></a></h4><p>在我写的这些网站架构的 Blog 中，GeoDNS 第一次出现，这东西是啥? &quot;A 40-line patch for BIND to add geographical filters support to the existent views in BIND&quot;, 把用户带到最近的服务器。GeoDNS 在 WikiPedia 架构中担当重任当然是由 WikiPedia 的内容性质决定的--面向各个国家，各个地域。</p><h4>负载均衡：LVS</h4><p>WikiPedia 用 <a href="http://www.linuxvirtualserver.org/"><span style="color: #0082ff">LVS</span></a> 做负载均衡, 是章文嵩博士发起的项目,也算中国人为数不多的在开源领域的骄傲啦。LVS 维护的一个老问题就是监控了，维基百科的技术人员用的是 <a href="http://svn.wikimedia.org/viewvc/mediawiki/trunk/pybal/"><span style="color: #0082ff">pybal</span></a>.</p><h4>图片服务器:Lighttpd</h4><p>Lighttpd 现在成了准标准图片服务器配置了。不多说。</p><h4>Wiki 软件: MediaWiki</h4>对 MediaWiki 的应用层优化细化得快到极致了。用开销相对比较小的方法定位代码热点，参见<a href="http://noc.wikimedia.org/cgi-bin/report.py"><span style="color: #0082ff">实时性能报告</span></a>，瓶颈在哪里，看这样的<a href="http://flake.defau.lt/pics/mediawiki.png"><span style="color: #0082ff">图树展示</span></a>一目了然。另外一个十分值得重视的经验是，尽可能抛弃复杂的算法、代价昂贵的查询，以及可能带来过度开销的 MediaWiki 特性。 <h4>Cache! Cache! Cache!</h4><p>维基百科网站成功的第一关键要素就是 Cache 了。CDN(其实也算是 Cache) 做内容分发到不同的大洲、Squid 作为反向代理. 数据库 Cache 用 Memcached，30 台，每台 2G 。对所有可能的数据尽可能的Cache，但他们也提醒了 Cache 的开销并非永远都是最小的，尽可能使用，但不能过度使用。 </p><h4>数据库: MySQL</h4><p>MediaWiki 用的DB 是 MySQL. MySQL 在 Web 2.0 技术上的常见的一些扩展方案他们也在使用。 复制、读写分离......应用在 DB 上的负载均衡通过 <a href="http://dev.fckeditor.net/browser/MediaWiki/trunk/includes/LoadBalancer.php"><span style="color: #0082ff">LoadBalancer.php</span></a> 来做到的，可以给我们一个很好的参考。</p><p>运营这样的站点，WikiPedia 每年的开支是 200 万美元，技术人员只有 6 个，惊人的高效。</p><p>参考文档：<br /></p><p><a href="http://www.nedworks.org/~mark/presentations/san/Wikimedia%20architecture.pdf"><span style="color: #0082ff">Wikimedia architecture （PDF)</span></a><br /><a href="http://highscalability.com/wikimedia-architecture"><span style="color: #0082ff">Todd Hoff 的文章</span></a><br /></p><br/>Tags - <a href="http://www.it-infra.cn/tags/wikipedia%25E6%258A%2580%25E6%259C%25AF%25E6%259E%25B6%25E6%259E%2584/" rel="tag">wikipedia技术架构</a>
]]>
</description>
</item><item>
<link>http://www.it-infra.cn/Web_Site_Architecture/</link>
<title><![CDATA[某中大型网站系统架构--实战案例研究]]></title> 
<author>Luke Lai &lt;lukelai@126.com&gt;</author>
<category><![CDATA[网站系统架构]]></category>
<pubDate>Mon, 26 Jan 2009 08:18:36 +0000</pubDate> 
<guid>http://www.it-infra.cn/Web_Site_Architecture/</guid> 
<description>
<![CDATA[ 
	作者: Luke Lai &#124; 同意转载, 转载时请以超链接形式标明文章原始出处，谢谢!<br />网址: <a href="Web_Site_Architecture">http://www.it-infra.cn/Web_Site_Architecture</a><br /><br />你是否一直考虑网站架构要有冗余性，安全性? 同时又有经济性呢？<br /><br />你是否经历过痛苦的思索网站的架构到底怎么样还算合理？<br /><br />怎么保证关键业务能够冗余，而其它业务可以选择冗余或不冗余。资金紧张的情况下 可以选择不冗余，一旦资金到位，系统架构又具备一定的灵活性，从而非常方便增加冗余设备？<br /><br />相信每个网站的系统网络部门都经历了网站系统架构的艰苦摸索，从一开始只有简单的几台服务器，随着业务增长，到了上百台服务器，但从未停止过探索。下面我想把从几次实战的中实验贡献出来，该架构已经在好几个较大的网站已经实施过，其中一个已经运行了4~5年，其中经历过无数次业务高峰的考验。<br /><br /><br /><br />该方案的特点：<br /><br /><span style="font-size: small">#1：简单 #2：可靠 #3：灵活 #4: 经济 #5：安全</span><br /><br /><img src="images/itinfra/Web_Site_Arch.jpg" border="0" width="661" height="722" /><br /><br />简单：该方案简单理解成三个主要功能区域，Zone #1 ~#3 各司其职:Zone #3为Border区域，主要是面对Internet的关键应用接口区域，如Web应用，邮件外发，等等。 安全级别低 Zone #2 类似于DMZ区，但不一样，我现在还没有找到合适的名字命名，主要是放置对外提供服务的服务器，如Web Server. 安全级别中 Zone #1: 内部服务区，主要放置于数据库群组及功能服务器，该区域安全级别高。<br /><br />可靠：针对业务关键应用如网站服务，前端采用了主从负载均衡器，实现10几秒之内的Failover切换。多台后端WEB服务器(Zone #2)提供服务，随着业务增长可以非常方便地增加Web服务器。负载均衡器采用商业级别的Load Balance，主要是F5和Netscaler，主要考虑到公司没有较牛的开源人才，出了问题之后很难得到支持，整个系统管理部门面对上层管理层压力非常之大，目前还没有生产环境中使用开源项目的负载均衡器，但非常想试一试Nginx.<br /><br />灵活：关于主从负载均衡器，如果资金短缺的情况，可以设置成单台设备运行，但后端Web服务器主机安全相应要做到非常好，如果万一前段的负载均衡器Down掉的话，可以通过DNS轮询解析把Website地址解析到多个公网IP，然后把WEB服务器外网直接配上公网IP。这样也能做为应急措施。<br /><br /><br />经济性：但如果稍会有些钱，建议主备两台负载均衡器一起上。或者Linux高手较牛的情况，非常推荐用Linux开源的负载均衡器。这也是跟管理层展现自己实力的机会（做完之后一定要在管理层上宣传省了多少￥）。另外经济性体现在防火墙及VPN设备上，该防火墙及VPN设备主要是连接公司办公室（或者其它功能中心如呼叫中心，物流中心等等），由于VPN连接如果实现在办公室跟IDC之间的故障无缝切换，那是要花上大价钱的，Cisco有全套的解决方案（vPN+OSPF路由），设备非常昂贵，我们已经把钱花在关键的网站业务上（购买商业级的负载均衡器），我相应大多数是互联网公司已经没有太多钱让你来提高Remote site(办公区，呼叫/物流中心)到IDC的连接可靠性上了。<br /><br />所以这里我们采取一台普通的防火墙及VPN设备，如Juniper的防火墙，简单方便上手，硬件上又具备一定可靠性。如果你会问如果我这个防火墙也Down掉了，我们的呼叫中心及物流中心联不到IDC，处理不了业务怎么办？最省钱的办法就在这个危急时刻暂时取消掉VPN加密，平时备一台Linux PC，安装开源路由防火墙软件，把备个办公区及呼叫/物流中心的出口IP地址加在白名单内。平时这台机器开着，出现紧急情况的时候，打电话给托管机房，让他们帮忙把防火墙外卡拨插到Linux PC上，当然由于VPN功能丢失，各个办公区无法以私网IP地址来访问位于IDC的应用服务器，这个时候还得做好静态NAT，相当的烦琐。不是也是临时解决问题的下策。上上策最好采购防火墙及VPN设备的时候，跟集成商谈好合同，要求他们提供备机服务，并在2/4小时内赶到机房，这样可以取得经济性跟可靠性之间平衡点。<br /><br />安全性：不敢妄谈安全性很高，但架构分成三个区域，每个区域的安全级别不一样，相应于访问策略也是不一样，如Zone #3属于直接面对Internet用户，所以此处安全配置要相应地谨慎，一般来说就开个80和443端口已经足够。Zone #2的Web服务器虽然有负载均衡器的保护，但安全级别仍是较低，黑客可以通过http注入的攻击控制WEB服务器，所以我们要在这个Zone的WEB服务器做足主机安全工作。而zone #1的数据库及App Server主要是面对Internal内部客户访问，如后台应用程序，相应来说安全威胁较小，可以通防火墙的配置对各个办公区访问IDC的服务器进行限制，如数据库只开放3389/1433端口，不必把所有端口开放给办公区用户。<br /><br /><br />附上网络基本配置：<br /><br />Zone #1: <br />IP address Pool: 192.168.1.0/24<br />防火墙及VPN设备内卡：192.168.1.1<br />所有DB及功能服务器指向192.168.1.1<br /><br />Zone #2:<br />IP address Pool: 192.168.2.0/24<br />主负载均衡器内卡：192.168.2.2<br />从负载均衡器内卡：192.168.2.3<br />负载均衡器SNAT地址：192.168.2.1<br />所有WEB服务器内卡IP地址段：<span style="color: #ff3300">192.168.1.0/24</span><br />所有WEB服务器外卡IP地址段：<span style="color: #cc3300">192.168.2.0/24</span><br />所有WEB服务器默认网关指向192.168.2.1<br /><br />Zone #3 (共网IP址为假设，如有雷同，请与我联系)<br />ip address pool: 202.1.1.0/24<br />托管机房网关地址：202.1.1.1<br />防火墙及VPN设备外卡: 202.1.1.11<br />主负载均衡器外卡：202.1.1.21<br />从负载均衡器外卡：202.1.1.22<br />负载均衡器的VIP地址段：202.1.1.31~61.<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br/>Tags - <a href="http://www.it-infra.cn/tags/%25E7%25BD%2591%25E7%25AB%2599%25E7%25B3%25BB%25E7%25BB%259F%25E6%259E%25B6%25E6%259E%2584/" rel="tag">网站系统架构</a> , <a href="http://www.it-infra.cn/tags/%25E7%25BD%2591%25E7%25AB%2599%25E5%259F%25BA%25E7%25A1%2580%25E6%259E%25B6%25E6%259E%2584/" rel="tag">网站基础架构</a> , <a href="http://www.it-infra.cn/tags/%25E5%259F%25BA%25E7%25A1%2580%25E6%259E%25B6%25E6%259E%2584/" rel="tag">基础架构</a> , <a href="http://www.it-infra.cn/tags/%25E7%25B3%25BB%25E7%25BB%259F%25E6%259E%25B6%25E6%259E%2584/" rel="tag">系统架构</a>
]]>
</description>
</item><item>
<link>http://www.it-infra.cn/web_frontend/</link>
<title><![CDATA[网站先锋 防火墙还是负载均衡器？]]></title> 
<author>Luke Lai &lt;lukelai@126.com&gt;</author>
<category><![CDATA[网站系统架构]]></category>
<pubDate>Sun, 25 Jan 2009 13:05:48 +0000</pubDate> 
<guid>http://www.it-infra.cn/web_frontend/</guid> 
<description>
<![CDATA[ 
	作者: Luke Lai &#124; 同意转载, 转载时请以超链接形式标明文章原始出处，谢谢!<br />网址: <a href="web_frontend">http://www.it-infra.cn/web_frontend</a><br /><br />我们应该把谁放在网站的前方？ 防火墙还是负载均衡器? <br /><br /><br /><img src="images/itinfra/netscaler_9000_01.jpg" border="0" width="222" height="337" align="left" /><br />如果你的单位有些钱，又对安全性及可用性有一定的要求，呵呵，估计负载均衡器(Load Balance)和防火墙(Firewall)都会逐渐添齐，那么怎么在网站这种应用环境中去使用它们？下面的小经验却是血泪换来的，呜呜<img src="images/emot/fear.gif" border="0" width="24" height="24" /><br /><br /><br /><br /><br />我曾经历一段&ldquo;可怕&rdquo;的经历，因为单位的业务迅猛发展，网络流量跟会话(Session数)猛增，原来一直放置在前段的防火墙撑不下去，只能临时从厂商借来load balance顶住。后来事后跟厂商的同志们分析，跟网络流量的增长不是太大关系，一般百兆防火墙虽然不能达到线速，但到60~70M问题不太大，当然这属于比较好的牌子的防火墙，当时主要的性能瓶颈在Session数及防火墙上包过滤策略。 <br /><br /><br /><br /><br />Load balance的Session数跟防火墙比起来，那不是一个数量级的，主要原因是load balance处理并发连接的方式对于防火墙来说是一个创新的方式，具体也很难在这个博文中解释清楚，如有兴趣，建议在网上搜取F5与Netscaler相关资料。 <span style="color: #ff6600"><strong>记住一点，把负载均衡器(Load balance)放置在面向Internet用户的位置，而把防火墙/VPN搁在内部网与IDC连接中间，作为内部安全设备使用。</strong></span>这样即保持网站的可用性，又保证内网的安全性。具体拓扑结构可以考虑另外一篇博文<a href="Web_Site_Architecture/">&lt;&lt;某中大型网站系统架构--实战案例研究&gt;&gt;</a><br /><br /><br /><br /><br /><br/>Tags - <a href="http://www.it-infra.cn/tags/%25E9%2598%25B2%25E7%2581%25AB%25E5%25A2%2599/" rel="tag">防火墙</a> , <a href="http://www.it-infra.cn/tags/%25E8%25B4%259F%25E8%25BD%25BD%25E5%259D%2587%25E8%25A1%25A1%25E5%2599%25A8/" rel="tag">负载均衡器</a>
]]>
</description>
</item>
</channel>
</rss>