<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>超群.com的博客 &#187; web</title>
	<atom:link href="http://www.fuchaoqun.com/tag/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fuchaoqun.com</link>
	<description></description>
	<lastBuildDate>Thu, 08 Sep 2011 15:08:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>构建可扩展网络应用的七个步骤</title>
		<link>http://www.fuchaoqun.com/2008/09/7-stages-scaling-of-web-apps/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=7-stages-scaling-of-web-apps</link>
		<comments>http://www.fuchaoqun.com/2008/09/7-stages-scaling-of-web-apps/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 13:20:04 +0000</pubDate>
		<dc:creator>超群.com</dc:creator>
				<category><![CDATA[Arch]]></category>
		<category><![CDATA[默认分类]]></category>
		<category><![CDATA[scaling]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">http://chaoqun.17348.com/?p=73</guid>
		<description><![CDATA[本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享，转载请保留链接http://chaoqun.17348.com/2008/09/7-stages-scaling-of-web-apps/ 几天前看到The 7 Stages of Scaling Web Apps，觉得很是不错，想写点什么，奈何一直很忙，整天忙着那些quick&#38;dirty的项目，让人也堕落了许多。 今天找到报告的原文看了一下，内容丰满了许多。 要构建一个可扩展的网络应用,大多是数据库分表分库、分布式缓存、负载均衡、统一存储，诸如此类，前面我也翻译了一些国外网站架构文章，John Engales的文章高明之处是分7个步骤阐述了一个网络应用从简单到高度可扩展的构建过程。对比这七个步骤，想想我们的应用处在第几步呢？ 报告的一开始解释了Performance（性能）和Scalability（扩展性）的区别，里面有两幅图片很好的诠释了，高性能就是买个好车（高配服务器）在高速公路（充足带宽）跑，高扩展性是一堆车跑在立交桥N通道上，不一定跑的很快，至少不会堵车。 第一步：开始阶段 简单的结构：防火墙＋负载均衡、一对服务器、数据库服务器、内部存储，结构简单，没有冗余，维护成本低，很是适合开始阶段。 这样的应用结构应该撑个50W～100W的访问没问题吧，一般的应用话。 很多的应用可能还不到这个水平，一台服务器扔在托管机房里，应用和数据库跑在同一台服务器上，这样的应该是“第零步”吧，如果要扩展这样的应用，升级到第一步吧，应该对程序和数据库不需要怎么修改，效果可能还会不错（如果你的应用不是特别大的话）。 第二步：和第一步一样，只是规模大了些 应用很成功，加更多防火墙、负载均衡，增加更多的应用服务器，找个DBA来优化一下数据库，增加数据库存储备份，把数据库存到SAN或者DAS（这个不太赞同，有几个有这个钱的啊），仍然是个简单的应用。 第二步也很有用，估计能撑到300W左右。如果钱能解决的问题，都不是问题，访问量大了，有钱了，多买点服务器能解决问题何乐而不为？ 第三步：痛苦的开始 访问量大了，加个Squid或者Varnish做反向代理吧，或者更高级的负载均衡，以缓存静态内容。加更多的应用服务器，数据库做个Master-Slave，一台Master负责写操作，N台Slave负责读操作，可能会需要做一些代码修改。 到这一步就有点像模像样了，这应该是硬件方面能做到的极限吧，估计撑了500W左右问题不大。 第四步：更加痛苦了 访问量更大了，做个memcache分布式缓存吧，数据库主从复制出现问题了，大量的写堆积到一台服务器上，复制时间过长（数据库从服务器不能即时同步），然后可以做做数据库分区（或者分表），内容统一存储，需要大量重构应用和数据库结构。 终于引入memcache了，可以大大减轻服务器硬盘读取的负载，当数据库（数据库表）变的过大的时候，再多服务器都不管用，想想你的一个数据表有100G，索引有10个G，服务器内存才4个G，光放索引都放不下。这个时候分表会是一个不错的选择，简单的分表可以自定义一个hash函数或者按照ID主键分表，只是这种固定的分表方法将来数据迁移会费事很多，还是推荐Flickr的中心数据库做法，后面会讲到。 到第四步的规模，估计1000W问题不大了 第五步：真正的痛苦开始了 开始恐慌了，开始考虑整个应用模式了，仅仅是通过业务分区还不够，可以通过地理位置啊（比如北方的用户都用北京的服务器），用户ID啊什么的分服务器分区，建立服务器集群，对于每个集群，所有功能都是可用的（这样可以很好的做数据迁移以及冗余），使用一个hash结构或者主服务器来判断用户属于哪个服务器集群（^_^中心数据库） 第五步？估计很多应用都到不了这一步，已经分完善了，估计5000W左右都没问题。 第六步：一点点痛苦 扩展应用和数据库架构，提高性能，增加新功能，优化代码，访问还在增长，但是可控。 比较惬意的阶段了，1个亿的访问量轻松应对吧。 第七步：进入未知的领域 开始找系统的瓶颈了，电源、存储、CDN什么的，更多的数据中心，可能难题是夸地区的数据复制。 呵呵，这个应该是Google考虑的问题了. 想想我们的应用瓶颈在那里，不要一下子什么都想想全了，一步到位的做法是不存在的，知道那里不足，解决它，发现其他的不足，再解决，无休止的循环，直到你失业（什么问题都没有，还要你做什么啊）或者退休（该歇歇了）。]]></description>
			<content:encoded><![CDATA[<blockquote><p>本博客所有原创文章采用<a href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/" target="_blank">知识共享署名-非商业性使用-相同方式共享</a>，转载请保留链接<a href="http://chaoqun.17348.com/2008/09/7-stages-scaling-of-web-apps/" target="_blank">http://chaoqun.17348.com/2008/09/7-stages-scaling-of-web-apps/</a></p></blockquote>
<p>几天前看到<a href="http://highscalability.com/7-stages-scaling-web-apps" target="_blank">The 7 Stages of Scaling Web Apps</a>，觉得很是不错，想写点什么，奈何一直很忙，整天忙着那些quick&amp;dirty的项目，让人也堕落了许多。</p>
<p>今天找到报告的<a href="http://www.slideshare.net/davemitz/7-stages-of-scaling-web-applications" target="_blank">原文</a>看了一下，内容丰满了许多。</p>
<p>要构建一个可扩展的网络应用,大多是数据库分表分库、分布式缓存、负载均衡、统一存储，诸如此类，前面我也翻译了一些国外网站架构文章，John Engales的文章高明之处是分7个步骤阐述了一个网络应用从简单到高度可扩展的构建过程。对比这七个步骤，想想我们的应用处在第几步呢？</p>
<p>报告的一开始解释了Performance（性能）和Scalability（扩展性）的区别，里面有两幅图片很好的诠释了，高性能就是买个好车（高配服务器）在高速公路（充足带宽）跑，高扩展性是一堆车跑在立交桥N通道上，不一定跑的很快，至少不会堵车。</p>
<p><strong>第一步：开始阶段</strong></p>
<p>简单的结构：防火墙＋负载均衡、一对服务器、数据库服务器、内部存储，结构简单，没有冗余，维护成本低，很是适合开始阶段。</p>
<p>这样的应用结构应该撑个50W～100W的访问没问题吧，一般的应用话。</p>
<p>很多的应用可能还不到这个水平，一台服务器扔在托管机房里，应用和数据库跑在同一台服务器上，这样的应该是“第零步”吧，如果要扩展这样的应用，升级到第一步吧，应该对程序和数据库不需要怎么修改，效果可能还会不错（如果你的应用不是特别大的话）。</p>
<p><strong>第二步：和第一步一样，只是规模大了些</strong></p>
<p>应用很成功，加更多防火墙、负载均衡，增加更多的应用服务器，找个DBA来优化一下数据库，增加数据库存储备份，把数据库存到SAN或者DAS（这个不太赞同，有几个有这个钱的啊），仍然是个简单的应用。</p>
<p>第二步也很有用，估计能撑到300W左右。如果钱能解决的问题，都不是问题，访问量大了，有钱了，多买点服务器能解决问题何乐而不为？</p>
<p><strong>第三步：痛苦的开始</strong></p>
<p>访问量大了，加个Squid或者Varnish做反向代理吧，或者更高级的负载均衡，以缓存静态内容。加更多的应用服务器，数据库做个Master-Slave，一台Master负责写操作，N台Slave负责读操作，可能会需要做一些代码修改。</p>
<p>到这一步就有点像模像样了，这应该是硬件方面能做到的极限吧，估计撑了500W左右问题不大。</p>
<p><strong>第四步：更加痛苦了</strong></p>
<p>访问量更大了，做个memcache分布式缓存吧，数据库主从复制出现问题了，大量的写堆积到一台服务器上，复制时间过长（数据库从服务器不能即时同步），然后可以做做数据库分区（或者分表），内容统一存储，需要大量重构应用和数据库结构。</p>
<p>终于引入memcache了，可以大大减轻服务器硬盘读取的负载，当数据库（数据库表）变的过大的时候，再多服务器都不管用，想想你的一个数据表有100G，索引有10个G，服务器内存才4个G，光放索引都放不下。这个时候分表会是一个不错的选择，简单的分表可以自定义一个hash函数或者按照ID主键分表，只是这种固定的分表方法将来数据迁移会费事很多，还是推荐Flickr的中心数据库做法，后面会讲到。</p>
<p>到第四步的规模，估计1000W问题不大了</p>
<p><strong>第五步：真正的痛苦开始了</strong></p>
<p>开始恐慌了，开始考虑整个应用模式了，仅仅是通过业务分区还不够，可以通过地理位置啊（比如北方的用户都用北京的服务器），用户ID啊什么的分服务器分区，建立服务器集群，对于每个集群，所有功能都是可用的（这样可以很好的做数据迁移以及冗余），使用一个hash结构或者主服务器来判断用户属于哪个服务器集群（^_^中心数据库）</p>
<p>第五步？估计很多应用都到不了这一步，已经分完善了，估计5000W左右都没问题。</p>
<p><strong>第六步：一点点痛苦</strong></p>
<p>扩展应用和数据库架构，提高性能，增加新功能，优化代码，访问还在增长，但是可控。</p>
<p>比较惬意的阶段了，1个亿的访问量轻松应对吧。</p>
<p><strong>第七步：进入未知的领域</strong></p>
<p>开始找系统的瓶颈了，电源、存储、CDN什么的，更多的数据中心，可能难题是夸地区的数据复制。</p>
<p>呵呵，这个应该是Google考虑的问题了.</p>
<p>想想我们的应用瓶颈在那里，不要一下子什么都想想全了，一步到位的做法是不存在的，知道那里不足，解决它，发现其他的不足，再解决，无休止的循环，直到你失业（什么问题都没有，还要你做什么啊）或者退休（该歇歇了）。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuchaoqun.com/2008/09/7-stages-scaling-of-web-apps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>网站日志统计分析技术</title>
		<link>http://www.fuchaoqun.com/2008/08/web_log_analytics/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=web_log_analytics</link>
		<comments>http://www.fuchaoqun.com/2008/08/web_log_analytics/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 12:09:12 +0000</pubDate>
		<dc:creator>超群.com</dc:creator>
				<category><![CDATA[默认分类]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">http://chaoqun.17348.com/?p=27</guid>
		<description><![CDATA[本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享，转载请保留链接http://chaoqun.17348.com/2008/08/web_log_analytics/ 前段时间，一直关注一个开源的统计系统http://www.piwik.org，有两个方面的原因，一是对统计非常有兴趣，二是这个项目构建在Zend Framework上，实在是学习ZF难得的一个样板，程序写的很优美，建议想学ZF的人可以阅读piwik源代码，好的，切入正题。 一般的网站统计系统我知道的有三种类型： 分析网站日子(Apache log)，代表的有 AWStats：http://awstats.sourceforge.net/ analog：http://www.analog.cx/ Webalizer ：http://www.mrunix.net/webalizer/ 使用Apache log好处是高速、低开销(apache随着访问写log开销不大)，但是功能一般，比如不能记录客户端的的分辨率、色深、是否支持Java或者Flash等。 通过在网页中嵌入一个探针记录网站日志，piwik就是这样的典型，特点是快速、高开销(piwik是通过php直接往mysql中写记录)、功能强劲(可以记录客户端的详细信息)。 混合使用，代表是Google Analytics、缔元信，这些产品也是在网站中加入一个探针，然后发送一个类似http://www.google-analytics.com/__utm.gif?******的请求，其实是访问服务器上一个空白的图片文件，目的只有一个，记录http日志，这种方式的好处是集上面两种的好处：效率高、功能强。 探针的Javascript代码我们就不分析了，看一下Google Analytics最后发送的请求是什么样子的： http://www.google-analytics.com/__utm.gif ?utmwv=4.1 //常量 &#038;utmn=1048672819 //随机数，还记得我是怎样处理mootools ajax问题吗？ &#038;utmhn=code.google.com //网站 &#038;utmcs=UTF-8 //编码 &#038;utmsr=1280&#215;800 //分辨率 &#038;utmsc=16-bit //色深 &#038;utmul=zh-cn //语言 &#038;utmje=1 //是否允许Java &#038;utmfl=9.0%20%20r115 //9.0 r115,Flash播放器版本 &#038;utmdt=Google%20Code //Google Code,标题 &#038;utmhid=594665987 &#038;utmr=- //来源地址 &#038;utmp=/ //目录 &#038;utmac=UA-18071-1 //帐号 &#038;utmcc=__utma%3D247248150.137016230.1209822741.1209822741.1209822741.1%3B%2B__utmz%3D247248150.1209822741.1.1.utmcsr%3D(direct)%7Cutmccn%3D(direct)%7Cutmcmd%3D(none)%3B // 一些加密字串 有兴趣的可以去读一下ga.js源码，入门的话看一下yahoo的统计源码，写的比较清晰，也没有作混淆。]]></description>
			<content:encoded><![CDATA[<blockquote><p>本博客所有原创文章采用<a href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/" target="_blank">知识共享署名-非商业性使用-相同方式共享</a>，转载请保留链接<a href="http://chaoqun.17348.com/2008/08/web_log_analytics/">http://chaoqun.17348.com/2008/08/web_log_analytics/</a></p></blockquote>
<p>前段时间，一直关注一个开源的统计系统<a href="http://www.piwik.org" target="_blank">http://www.piwik.org</a>，有两个方面的原因，一是对统计非常有兴趣，二是这个项目构建在Zend Framework上，实在是学习ZF难得的一个样板，程序写的很优美，建议想学ZF的人可以阅读piwik源代码，好的，切入正题。</p>
<p>一般的网站统计系统我知道的有三种类型：</p>
<ul>
<li>分析网站日子(Apache log)，代表的有<br />
AWStats：<a href="http://awstats.sourceforge.net/" target="_blank">http://awstats.sourceforge.net/</a><br />
analog：<a href="http://www.analog.cx/" target="_blank">http://www.analog.cx/</a><br />
Webalizer ：<a href="http://www.mrunix.net/webalizer/" target="_blank">http://www.mrunix.net/webalizer/</a><br />
使用Apache log好处是高速、低开销(apache随着访问写log开销不大)，但是功能一般，比如不能记录客户端的的分辨率、色深、是否支持Java或者Flash等。</li>
<li>通过在网页中嵌入一个探针记录网站日志，piwik就是这样的典型，特点是快速、高开销(piwik是通过php直接往mysql中写记录)、功能强劲(可以记录客户端的详细信息)。</li>
<li>混合使用，代表是<a href="https://www.google.com/analytics/home/?hl=zh-CN" target="_blank">Google Analytics</a>、<a href="http://www.dratio.com/" target="_blank">缔元信</a>，这些产品也是在网站中加入一个探针，然后发送一个类似http://www.google-analytics.com/__utm.gif?******的请求，其实是访问服务器上一个空白的图片文件，目的只有一个，记录http日志，这种方式的好处是集上面两种的好处：效率高、功能强。</li>
</ul>
<p>探针的Javascript代码我们就不分析了，看一下Google Analytics最后发送的请求是什么样子的：</p>
<blockquote><p>http://www.google-analytics.com/__utm.gif<br />
?utmwv=4.1 //常量<br />
&#038;utmn=1048672819 //随机数，还记得我是怎样处理mootools ajax问题吗？<br />
&#038;utmhn=code.google.com //网站<br />
&#038;utmcs=UTF-8 //编码<br />
&#038;utmsr=1280&#215;800 //分辨率<br />
&#038;utmsc=16-bit //色深<br />
&#038;utmul=zh-cn //语言<br />
&#038;utmje=1 //是否允许Java<br />
&#038;utmfl=9.0%20%20r115 //9.0 r115,Flash播放器版本<br />
&#038;utmdt=Google%20Code //Google Code,标题<br />
&#038;utmhid=594665987<br />
&#038;utmr=- //来源地址<br />
&#038;utmp=/ //目录<br />
&#038;utmac=UA-18071-1 //帐号<br />
&#038;utmcc=__utma%3D247248150.137016230.1209822741.1209822741.1209822741.1%3B%2B__utmz%3D247248150.1209822741.1.1.utmcsr%3D(direct)%7Cutmccn%3D(direct)%7Cutmcmd%3D(none)%3B // 一些加密字串</p></blockquote>
<p>有兴趣的可以去读一下ga.js源码，入门的话看一下yahoo的统计源码，写的比较清晰，也没有作混淆。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.fuchaoqun.com/2008/08/web_log_analytics/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
