<?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>庆亮的博客-webgame架构 &#187; 架构</title>
	<atom:link href="http://www.qingliangcn.com/category/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.qingliangcn.com</link>
	<description>关注LAMP&#124;PHP源代码分析&#124;web架构&#124;PHP扩展&#124;Erlang&#124;服务端架构</description>
	<lastBuildDate>Thu, 22 Jul 2010 09:19:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>读 《构建可扩展的Web站点》笔记</title>
		<link>http://www.qingliangcn.com/2009/07/%e8%af%bb-%e3%80%8a%e6%9e%84%e5%bb%ba%e5%8f%af%e6%89%a9%e5%b1%95%e7%9a%84web%e7%ab%99%e7%82%b9%e3%80%8b%e7%ac%94%e8%ae%b0/</link>
		<comments>http://www.qingliangcn.com/2009/07/%e8%af%bb-%e3%80%8a%e6%9e%84%e5%bb%ba%e5%8f%af%e6%89%a9%e5%b1%95%e7%9a%84web%e7%ab%99%e7%82%b9%e3%80%8b%e7%ac%94%e8%ae%b0/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 16:54:25 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[架构]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[扩展]]></category>
		<category><![CDATA[负载均衡]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=71</guid>
		<description><![CDATA[&#160; 从目录中就可以看出来,&#160;这是一本超越纯粹代码范畴的书.&#160;涉及到开发工具,&#160;开发方法,&#160;开发过程,&#160;体系结构,&#160;应用分层,&#160;常用web功能举例和注意事项,&#160;性能瓶颈,&#160;扩展并提出一些解决方法,&#160;最后还涉及到性能的监控方法. &#160; 扩展Web应用程序 &#160; 一、概念 &#160; 简单的来说，如果一个系统可扩展，那么你可以通过扩展来提供系统的性能。这代表着系统能够容纳更高的负载、更大的数据集，并且系统是可维护的。扩展和语言、某项具体的技术都是无关的。扩展可以分为两种： 1.&#160;垂直扩展（stade&#160;up），通俗的说就是将某台单一的机器的性能提升的更高，如添加内存、更换更强的处理器等等。 2.&#160;水平扩展（out），通俗的说就是添加新的机器。 对比可以发现，水平扩展比垂直扩展有更强大的扩展性，可以说是&#8220;无限&#8221;扩展，毕竟单台的机器的性能总是有限的，硬件的技术发展还赶不上web的发展。但同时，水平扩展也来了更高的维护成本。实际中，需要根据具体情况来寻求一个平衡点。 &#160; 二、冗余 &#160; 机器总可能会发生故障，而唯一的保证故障状况下服务依然可用的办法就是由多个硬件备份。备份可以分为热备份和冷备份，注意的区别在于数据服务是否在线，数据在线服务的同时进行的备份成为热备份。例如将mysql服务器关闭，然后拷贝数据文件到备份位置，则是典型的冷备份行为。 &#160; &#160; 三、负载均衡 &#160; 当我们使用了水平扩展之后，我们开始考虑新的问题了，如何将大量的请求&#8220;均衡&#8221;到我们的扩展机器上呢？ 两种负载均衡模式：有状态（如有携带session）和无状态 两种负载均衡方式：硬件均衡和软件均衡 硬件均衡比较简单，通常接入一个设备即可，之后的均衡和故障检测等等都由硬件自动完成。成本较高。 软件均衡则是通过软件来转发各种请求，更加容易的定义转发规则，有较多的开源产品选择。 第四层和第七层 经常在负载均衡中看到第四层和第七层这两个名词。它们实际上是指它们各自工作时所处理的网络协议的层数（使用ISO模型）。 第四层是数据传输层，包括TCP和UDP，第七层则是应用层，通常web中为HTTP应用。如Apache、nginx等支持第七层的均衡，而且可配置性都相当强大，能够适应较复杂的应用。例如可以简单的将流量分担到各个负载机上，也可以定义一套业务规则，将应用划分为不同的池，每个池处理某些固定规则的URL。 对比软件均衡与硬件均衡，可以发现它们各自的优缺点： 1.&#160;硬件均衡成本比较高，软件均衡多数可以使用免费的开源软件来实现。 2.&#160;硬件均衡对于故障检测比软件均衡更加强大、快速。在采用硬件均衡时，一旦某台机器出现故障，马上就可以检测出来并立即屏蔽。 3.&#160;硬件均衡可以快速的添加机器（接入硬件接口即可），而软件均衡除了添加机器外还要添加一些配置信息，以将某些流量导入到新的机器。 4.&#160;软件均衡可以定义非常复杂的业务规则，而硬件均衡在这方面相对较弱。 5.&#160;多数的硬件均衡方案都有捆绑附加的一些服务如HTTPS加速、DOS防火墙等等。 还有一种比较流行的方案：DNS解析。这种方式对解决用户分布在不同地理位置、不同网络的情况有着相当好的效果，每个用户都可以根据自己的网络得到一个较快速的访问IP。缺点也比较明显：DNS更新缓慢，对于实时性的均衡几乎没有什么作用，因为DNS的更新往往需要一两个小时，甚至一两天。 &#160; 四、使用缓存 &#160; 使用缓存将某些实时性要求不高的服务结果缓存起来是大型应用解决方案的一个共识，合理的使用缓存将极大的改善应用体验和性能。 常用的几类缓存： 缓存数据：memcached&#160;&#160;&#160;memcachedb 缓存HTTP请求：&#160;squid 用户浏览器缓存]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<div style="" class="Section0">
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';">从目录中就可以看出来<font face="Times New Roman">,&nbsp;</font><font face="宋体">这是一本超越纯粹代码范畴的书</font><font face="Times New Roman">.&nbsp;</font><font face="宋体">涉及到开发工具</font><font face="Times New Roman">,&nbsp;</font><font face="宋体">开发方法</font><font face="Times New Roman">,&nbsp;</font><font face="宋体">开发过程</font><font face="Times New Roman">,&nbsp;</font><font face="宋体">体系结构</font><font face="Times New Roman">,&nbsp;</font><font face="宋体">应用分层</font><font face="Times New Roman">,&nbsp;</font><font face="宋体">常用</font><font face="Times New Roman">web</font><font face="宋体">功能举例和注意事项</font><font face="Times New Roman">,&nbsp;</font><font face="宋体">性能瓶颈</font><font face="Times New Roman">,&nbsp;</font><font face="宋体">扩展并提出一些解决方法</font><font face="Times New Roman">,&nbsp;</font><font face="宋体">最后还涉及到性能的监控方法</font><font face="Times New Roman">.</font></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0">&nbsp;</p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0"><span style="font-weight: bold; font-size: 10.5pt; font-family: '宋体';">扩展<font face="Times New Roman">Web</font><font face="宋体">应用程序</font></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0">&nbsp;</p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0"><span style="font-weight: bold; font-size: 10.5pt; font-family: '宋体';">一、概念</span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0">&nbsp;</p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';">简单的来说，如果一个系统可扩展，那么你可以通过扩展来提供系统的性能。这代表着系统能够容纳更高的负载、更大的数据集，并且系统是可维护的。扩展和语言、某项具体的技术都是无关的。扩展可以分为两种：</span><span style="font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';">1.&nbsp;</span><span style="font-size: 10.5pt; font-family: '宋体';">垂直扩展（<font face="Times New Roman">stade&nbsp;up</font><font face="宋体">），通俗的说就是将某台单一的机器的性能提升的更高，如添加内存、更换更强的处理器等等。</font></span><span style="font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';">2.&nbsp;</span><span style="font-size: 10.5pt; font-family: '宋体';">水平扩展（<font face="Times New Roman">out</font><font face="宋体">），通俗的说就是添加新的机器。</font></span><span style="font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';">对比可以发现，水平扩展比垂直扩展有更强大的扩展性，可以说是&ldquo;无限&rdquo;扩展，毕竟单台的机器的性能总是有限的，硬件的技术发展还赶不上<font face="Times New Roman">web</font><font face="宋体">的发展。但同时，水平扩展也来了更高的维护成本。实际中，需要根据具体情况来寻求一个平衡点。</font></span><span id="more-71"></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0">&nbsp;</p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: bold; font-size: 10.5pt; font-family: '宋体';">二、</span><span style="font-weight: bold; font-size: 10.5pt; font-family: '宋体';">冗余</span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0">&nbsp;</p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: bold; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">机器总可能会发生故障，而唯一的保证故障状况下服务依然可用的办法就是由多个硬件备份。备份可以分为热备份和冷备份，注意的区别在于数据服务是否在线，数据在线服务的同时进行的备份成为热备份。例如将<font face="Times New Roman">mysql</font><font face="宋体">服务器关闭，然后拷贝数据文件到备份位置，则是典型的冷备份行为。</font></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0">&nbsp;</p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0">&nbsp;</p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: bold; font-size: 10.5pt; font-family: '宋体';">三、</span><span style="font-weight: bold; font-size: 10.5pt; font-family: '宋体';">负载均衡</span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0">&nbsp;</p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: bold; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">当我们使用了水平扩展之后，我们开始考虑新的问题了，如何将大量的请求&ldquo;均衡&rdquo;到我们的扩展机器上呢？</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">两种负载均衡模式：有状态（如有携带<font face="Times New Roman">session</font><font face="宋体">）和无状态</font></span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">两种负载均衡方式：硬件均衡和软件均衡</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">硬件均衡比较简单，通常接入一个设备即可，之后的均衡和故障检测等等都由硬件自动完成。成本较高。</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">软件均衡则是通过软件来转发各种请求，更加容易的定义转发规则，有较多的开源产品选择。</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">第四层和第七层</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">经常在负载均衡中看到第四层和第七层这两个名词。它们实际上是指它们各自工作时所处理的网络协议的层数（使用<font face="Times New Roman">ISO</font><font face="宋体">模型）。</font></span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">第四层是数据传输层，包括<font face="Times New Roman">TCP</font><font face="宋体">和</font><font face="Times New Roman">UDP</font><font face="宋体">，第七层则是应用层，通常</font><font face="Times New Roman">web</font><font face="宋体">中为</font><font face="Times New Roman">HTTP</font><font face="宋体">应用。如</font><font face="Times New Roman">Apache</font><font face="宋体">、</font><font face="Times New Roman">nginx</font><font face="宋体">等支持第七层的均衡，而且可配置性都相当强大，能够适应较复杂的应用。例如可以简单的将流量分担到各个负载机上，也可以定义一套业务规则，将应用划分为不同的池，每个池处理某些固定规则的</font><font face="Times New Roman">URL</font><font face="宋体">。</font></span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">对比软件均衡与硬件均衡，可以发现它们各自的优缺点：</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">1.&nbsp;</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">硬件均衡成本比较高，软件均衡多数可以使用免费的开源软件来实现。</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">2.&nbsp;</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">硬件均衡对于故障检测比软件均衡更加强大、快速。在采用硬件均衡时，一旦某台机器出现故障，马上就可以检测出来并立即屏蔽。</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">3.&nbsp;</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">硬件均衡可以快速的添加机器（接入硬件接口即可），而软件均衡除了添加机器外还要添加一些配置信息，以将某些流量导入到新的机器。</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">4.&nbsp;</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">软件均衡可以定义非常复杂的业务规则，而硬件均衡在这方面相对较弱。</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">5.&nbsp;</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">多数的硬件均衡方案都有捆绑附加的一些服务如<font face="Times New Roman">HTTPS</font><font face="宋体">加速、</font><font face="Times New Roman">DOS</font><font face="宋体">防火墙等等。</font></span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">还有一种比较流行的方案：<font face="Times New Roman">DNS</font><font face="宋体">解析。这种方式对解决用户分布在不同地理位置、不同网络的情况有着相当好的效果，每个用户都可以根据自己的网络得到一个较快速的访问</font><font face="Times New Roman">IP</font><font face="宋体">。缺点也比较明显：</font><font face="Times New Roman">DNS</font><font face="宋体">更新缓慢，对于实时性的均衡几乎没有什么作用，因为</font><font face="Times New Roman">DNS</font><font face="宋体">的更新往往需要一两个小时，甚至一两天。</font></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0">&nbsp;</p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: bold; font-size: 10.5pt; font-family: '宋体';">四、</span><span style="font-weight: bold; font-size: 10.5pt; font-family: '宋体';">使用缓存</span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0">&nbsp;</p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: bold; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">使用缓存将某些实时性要求不高的服务结果缓存起来是大型应用解决方案的一个共识，合理的使用缓存将极大的改善应用体验和性能。</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">常用的几类缓存：</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">缓存数据：<font face="Times New Roman">memcached&nbsp;&nbsp;&nbsp;memcachedb</font></span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">缓存<font face="Times New Roman">HTTP</font><font face="宋体">请求：&nbsp;</font><font face="Times New Roman">squid</font></span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
<p style="text-indent: 21pt; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;" class="p0"><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';">用户浏览器缓存</span><span style="font-weight: normal; font-size: 10.5pt; font-family: '宋体';"><o:p></o:p></span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/07/%e8%af%bb-%e3%80%8a%e6%9e%84%e5%bb%ba%e5%8f%af%e6%89%a9%e5%b1%95%e7%9a%84web%e7%ab%99%e7%82%b9%e3%80%8b%e7%ac%94%e8%ae%b0/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>驱动测试开发的几条TIPs</title>
		<link>http://www.qingliangcn.com/2009/05/%e9%a9%b1%e5%8a%a8%e6%b5%8b%e8%af%95%e5%bc%80%e5%8f%91%e7%9a%84%e5%87%a0%e6%9d%a1tips/</link>
		<comments>http://www.qingliangcn.com/2009/05/%e9%a9%b1%e5%8a%a8%e6%b5%8b%e8%af%95%e5%bc%80%e5%8f%91%e7%9a%84%e5%87%a0%e6%9d%a1tips/#comments</comments>
		<pubDate>Tue, 19 May 2009 10:10:50 +0000</pubDate>
		<dc:creator>庆亮</dc:creator>
				<category><![CDATA[架构]]></category>
		<category><![CDATA[ttd]]></category>
		<category><![CDATA[驱动测试开发]]></category>

		<guid isPermaLink="false">http://www.nd21.com/?p=87</guid>
		<description><![CDATA[拿到《测试驱动开发》这本书10天左右, 我便&#34;粗鲁&#34;的把它看了一遍, 说是粗鲁, 是因为我这是我一次正式的阅读关于极限编程的书籍, 同时又看的比较快, 对于诸多内容有些囫囵吞枣的嫌疑. 尽管如此, 我还是不得不感叹 Kent Beck(作者)的伟大思想, 给我感觉测试驱动开发更是一门方法学, 而非简单的软件工程解决方案. 激动与感慨之余, 顺便从书中摘抄了一些比较重要的TIps. 1.从测试开始, 而不是从建立对象开始. 2.测试开始之前, 写一个包含所有你认为必须要编写的测试的清单. 最后, 列出所有你认为这一轮编程结束后为了获得整洁代码而必须要完成的重构. 3.开始时的目的是为了让测试能够运行, 而非获得完美的解决方案. 4.测试驱动培养的是你在软件开发中一小步一小步的进行开发的能力, 而非教条的一小步一小步的进行开发. 5.首先解决目标的可用性, 之后再解决代码整洁性的问题. 6.尽量减少测试程序和代码之间的耦合度. 7.如果引入了新的测试, 你需要把新的测试记在清单上. 8.除非有更好的动机,否则不要引入过多的设计. 9.每一个周期,考虑重构一次代码,去掉重复部分.clear一下代码. 10.各种测试之间应该没有任何的相互影响. 11.相互独立的测试意味着所有的测试都是不依赖于顺序的. 12.试着从一开始就编写断言. 13.使用让人容易理解的测试数据. 14.测试从不做任何工作开始. 15.一次只解决一个问题. 16.注意休息. 相关资源:&#160;&#160; 1 PHP测试驱动开发介绍 2 豆瓣讨论]]></description>
			<content:encoded><![CDATA[<p>拿到<a href="http://www.dearbook.com/book/21054" target="_blank"><font color="#333333">《测试驱动开发》</font></a>这本书10天左右, 我便&quot;粗鲁&quot;的把它看了一遍, 说是粗鲁, 是因为我这是我一次正式的阅读关于极限编程的书籍, 同时又看的比较快, 对于诸多内容有些囫囵吞枣的嫌疑. 尽管如此, 我还是不得不感叹 Kent Beck(作者)的伟大思想, 给我感觉测试驱动开发更是一门方法学, 而非简单的软件工程解决方案. <br />
激动与感慨之余, 顺便从书中摘抄了一些比较重要的TIps.</p>
<p>1.从测试开始, 而不是从建立对象开始.</p>
<p>2.测试开始之前, 写一个包含所有你认为必须要编写的测试的清单. 最后, 列出所有你认为这一轮编程结束后为了获得整洁代码而必须要完成的重构.</p>
<p>3.开始时的目的是为了让测试能够运行, 而非获得完美的解决方案.</p>
<p>4.测试驱动培养的是你在软件开发中一小步一小步的进行开发的能力, 而非教条的一小步一小步的进行开发.</p>
<p>5.首先解决目标的可用性, 之后再解决代码整洁性的问题.</p>
<p>6.尽量减少测试程序和代码之间的耦合度.</p>
<p>7.如果引入了新的测试, 你需要把新的测试记在清单上.</p>
<p>8.除非有更好的动机,否则不要引入过多的设计.</p>
<p>9.每一个周期,考虑重构一次代码,去掉重复部分.clear一下代码.</p>
<p>10.各种测试之间应该没有任何的相互影响.</p>
<p>11.相互独立的测试意味着所有的测试都是不依赖于顺序的.</p>
<p>12.试着从一开始就编写断言.</p>
<p>13.使用让人容易理解的测试数据.</p>
<p>14.测试从不做任何工作开始.</p>
<p>15.一次只解决一个问题.</p>
<p>16.注意休息.</p>
<p>相关资源:&nbsp;&nbsp;<br />
1 <a href="http://www.yeeyan.com/articles/view/2930/1765" target="_blank"><font color="#333333">PHP测试驱动开发介绍</font></a><br />
2 <a href="http://www.douban.com/subject/1230036/" target="_blank"><font color="#333333">豆瓣讨论</font></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.qingliangcn.com/2009/05/%e9%a9%b1%e5%8a%a8%e6%b5%8b%e8%af%95%e5%bc%80%e5%8f%91%e7%9a%84%e5%87%a0%e6%9d%a1tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

