<?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>张磊的blog &#187; cdn</title>
	<atom:link href="http://www.blogkid.net/archives/tag/cdn/feed" rel="self" type="application/rss+xml" />
	<link>http://www.blogkid.net</link>
	<description>从头再来</description>
	<lastBuildDate>Sun, 15 Jan 2012 14:55:22 +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.blogkid.net/archives/2782.html</link>
		<comments>http://www.blogkid.net/archives/2782.html#comments</comments>
		<pubDate>Mon, 21 Nov 2011 04:17:24 +0000</pubDate>
		<dc:creator>张磊</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[又拍]]></category>
		<category><![CDATA[又拍云]]></category>
		<category><![CDATA[云存储]]></category>
		<category><![CDATA[云计算]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[upyun]]></category>

		<guid isPermaLink="false">http://www.blogkid.net/?p=2782</guid>
		<description><![CDATA[今年秋天，我加入猛买之后，遇到的第一个挑战就是图片托管。当时，网站流量快速增长，原有服务器几次增加带宽依然无法满足需求，流量常常跑满。现在回头总结一下，像我们这样的小公司，自己维护静态资源服务器大致有这些不爽： 峰值带宽决定大部分成本 如果峰值带宽在20Mb，那就得买20Mb，哪怕在凌晨只有几百Kb。 运维的成本不可忽视 除了买带宽，还得时时处处留意服务器运行情况、网卡流量、安全状况等，也需要持续投入。 单机达不到CDN的功效 虽然我们用的机房速度和稳定性都不错，但毕竟是单机，无法保证全国各地的访问速度。 后来，我通过@Fenng联络到了@gofeeling和又拍，正赶上又拍云处在最后测试阶段，我们成了又拍云第一批用户。又拍云（以下简称为UpYun）恰好为我们解决了上面的问题。 按需付费，带宽需求再高，也只需要按流量付费，据粗略计算成本低至原先三成； 抛开运维负担，如不放心，配置几个URL监控即可； CDN不再是问题，不同地区的用户都能享受到最好的访问速度。 在两个月的使用过程中，UpYun确实出现过2次不稳定的状况，但又拍同学们都很及时地解决了。正式上线后，稳定性极佳，到目前为止可用率高达100%。 这篇文章主要是从用户的角度谈谈UpYun的特点和使用技巧，让对UpYun感兴趣的朋友们更好地了解这个平台，可以加深了解，更好地使用它。UpYun目前提供的是文件存储+CDN的服务，可以认为是AWS的S3+CloudFront，但实际用起来，有些细节上的不同。 0、与众不同的Bucket 和一般云存储服务提供的Bucket不同，UpYun中的Bucket分为文件类和图片类。文件类Bucket可以存放任何文件；图片类Bucket仅能存放图片文件，妄图上传其他类型会被拒绝。每个Bucket都可以绑定多个域名。 1、文件增量同步 使用第三方服务托管静态资源，都会有文件同步的需求。那么，放在主服务器的文件，如何同步到UpYun呢？又拍官方提供了两种方式：FTP和API。API功能强大，但是需要做开发，目前还没人开发出类似s3cmd这样的工具；FTP命令功能有限，想用原生的几个命令辗转腾挪实现sync很费劲（不切实际地想，如果支持rsync就好了）。 我们在实际使用时，利用了lftp的mirror命令，通过FTP协议实现了文件增量同步。再配合crontab，就能做到定时增量同步了。这样既避免了投入精力围绕API做开发，又能达到rsync的效果。下面是一个脚本示例供参考： #!/bin/bash HOST=&#8221;v0.ftp.upyun.com&#8221; USER=&#8221;username&#8221; PASS=&#8221;password&#8221; LCD=&#8221;localpath&#8221; RCD=&#8221;remotepath&#8221; lftp -c &#8220;open ftp://$HOST; user $USER $PASS; lcd $LCD; cd $RCD; mirror &#8211;reverse \ &#8211;delete \ &#8211;dereference \ &#8211;verbose \ &#8211;exclude-glob=*.php&#8221; 2、缩略图功能 肯德基说“We do chicken right”，又拍的兄弟们完全可以自豪地说“We do pictures right”。UpYun的图片类Bucket有一个高级功能，那就是自动生成指定尺寸缩略图。 在Web页面上如果出现大图小用，不仅浪费流量，也会导致用户浏览器缩小图片从而影响前端性能（小图大用的情况就不用说了吧）。这时，UpYun的缩略图功能就派上用场了。 设置完成后，只要上传一张原图，UpYun可以按需生成多张不同尺寸的缩略图（如果没有请求是不会生成的，这样可以节约空间）。 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_logo.gif"><img class="alignnone size-full wp-image-2783" title="upyun logo" src="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_logo.gif" alt="" width="204" height="40" /></a></p>
<p>今年秋天，我加入<a title="猛买" href="http://p.yiqifa.com/c?s=4c1bd673&amp;w=572&amp;c=4797&amp;i=7302&amp;l=0&amp;e=c&amp;t=http://www.mengmai.com/" target="_blank">猛买</a>之后，遇到的第一个挑战就是图片托管。当时，网站流量快速增长，原有服务器几次增加带宽依然无法满足需求，流量常常跑满。现在回头总结一下，像我们这样的小公司，自己维护静态资源服务器大致有这些不爽：</p>
<ul>
<li>峰值带宽决定大部分成本<br />
如果峰值带宽在20Mb，那就得买20Mb，哪怕在凌晨只有几百Kb。</li>
<li>运维的成本不可忽视<br />
除了买带宽，还得时时处处留意服务器运行情况、网卡流量、安全状况等，也需要持续投入。</li>
<li>单机达不到CDN的功效<br />
虽然我们用的机房速度和稳定性都不错，但毕竟是单机，无法保证全国各地的访问速度。</li>
</ul>
<div>后来，我通过@<a href="http://twitter.com/Fenng" target="_blank">Fenng</a>联络到了@<a href="http://twitter.com/gofeeling" target="_blank">gofeeling</a>和又拍，<wbr>正赶上又拍云处在最后测试阶段，我们成了又拍云第一批用户。<a title="又拍云" href="http://upyun.com/" target="_blank">又拍云</a>（以下简称为UpYun）恰好为我们解决了上面的问题。</wbr></div>
<div>
<ul>
<li>按需付费，带宽需求再高，也只需要按流量付费，据粗略计算成本低至原先三成；</li>
<li>抛开运维负担，如不放心，配置几个URL监控即可；</li>
<li>CDN不再是问题，不同地区的用户都能享受到最好的访问速度。</li>
</ul>
</div>
<p>在两个月的使用过程中，UpYun确实出现过2次不稳定的状况，但又拍同学们都很及时地解决了。正式上线后，稳定性极佳，到目前为止可用率高达100%。</p>
<p>这篇文章主要是从用户的角度谈谈UpYun的特点和使用技巧，让对UpYun感兴趣的朋友们更好地了解这个平台，可以加深了解，更好地使用它。UpYun目前提供的是文件存储+CDN的服务，可以认为是AWS的S3+CloudFront，但实际用起来，有些细节上的不同。</p>
<h4>0、与众不同的Bucket</h4>
<p>和一般云存储服务提供的Bucket不同，UpYun中的Bucket分为文件类和图片类。文件类Bucket可以存放任何文件；图片类Bucket仅能存放图片文件，妄图上传其他类型会被拒绝。每个Bucket都可以绑定多个域名。</p>
<div><a href="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_create_bucket.jpg"><img class="alignnone size-full wp-image-2785" title="创建Bucket" src="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_create_bucket.jpg" alt="" width="393" height="252" /></a></div>
<h4>1、文件增量同步</h4>
<p>使用第三方服务托管静态资源，都会有文件同步的需求。那么，放在主服务器的文件，如何同步到UpYun呢？又拍官方提供了两种方式：FTP和API。API功能强大，但是需要做开发，目前还没人开发出类似<a title="s3cmd" href="http://s3tools.org/s3cmd" target="_blank">s3cmd</a>这样的工具；FTP命令功能有限，想用原生的几个命令辗转腾挪实现sync很费劲（不切实际地想，如果支持<a title="rsync" href="http://en.wikipedia.org/wiki/Rsync" target="_blank">rsync</a>就好了）。</p>
<p>我们在实际使用时，利用了<a title="LFTP" href="http://lftp.yar.ru/lftp-man.html" target="_blank">lftp</a>的mirror命令，通过FTP协议实现了文件增量同步。再配合crontab，就能做到定时增量同步了。这样既避免了投入精力围绕API做开发，又能达到rsync的效果。下面是一个脚本示例供参考：</p>
<blockquote><p>#!/bin/bash</p>
<p>HOST=&#8221;v0.ftp.upyun.com&#8221;</p>
<p>USER=&#8221;username&#8221;</p>
<p>PASS=&#8221;password&#8221;</p>
<p>LCD=&#8221;localpath&#8221;</p>
<p>RCD=&#8221;remotepath&#8221;</p>
<p>lftp -c &#8220;open ftp://$HOST;</p>
<p>user $USER $PASS;</p>
<p>lcd $LCD;</p>
<p>cd $RCD;</p>
<p>mirror &#8211;reverse \</p>
<p>&#8211;delete \</p>
<p>&#8211;dereference \</p>
<p>&#8211;verbose \</p>
<p>&#8211;exclude-glob=*.php&#8221;</p></blockquote>
<h4>2、缩略图功能</h4>
<p>肯德基说“We do chicken right”，又拍的兄弟们完全可以自豪地说“We do pictures right”。UpYun的图片类Bucket有一个高级功能，那就是自动生成指定尺寸缩略图。</p>
<p>在Web页面上如果出现大图小用，不仅浪费流量，也会导致用户浏览器缩小图片从而影响前端性能（小图大用的情况就不用说了吧）。这时，UpYun的缩略图功能就派上用场了。</p>
<div><a href="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_change_thumb.jpg"><img class="alignnone size-medium wp-image-2786" title="设置缩略图" src="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_change_thumb-300x59.jpg" alt="" width="300" height="59" /></a></div>
<p>设置完成后，只要上传一张原图，UpYun可以按需生成多张不同尺寸的缩略图（如果没有请求是不会生成的，这样可以节约空间）。</p>
<p>下面是3个不同尺寸的缩略图：</p>
<ul>
<li>150px宽<a href=" http://t.cn/SLxUJ7" target="_blank"><img class="alignnone" title="缩略图" src="http://img0.mengmai.com/static/team/2011/0809/13128780191260.jpg!k150.jpg" alt="" width="150" height="95" /></a></li>
<li>200px宽<a href=" http://t.cn/SLxUJ7" target="_blank"><img class="alignnone" title="缩略图" src="http://img0.mengmai.com/static/team/2011/0809/13128780191260.jpg!k200.jpg" alt="" width="200" height="127" /></a></li>
<li>310px宽<a href=" http://t.cn/SLxUJ7" target="_blank"><img class="alignnone" title="缩略图" src="http://img0.mengmai.com/static/team/2011/0809/13128780191260.jpg!k310.jpg" alt="" width="310" height="197" /></a></li>
</ul>
<p>要拥有这些缩略图，只需要上传一张原图：</p>
<p><a href=" http://t.cn/SLxUJ7" target="_blank"><img class="alignnone" title="原图" src="http://img1.mengmai.com/static/team/2011/0809/13128780191260.jpg" alt="" width="440" height="280" /></a></p>
<p>又拍云可通过不同的URL得到不同尺寸的缩略图（感兴趣的话可以看看上面几幅图的地址）。是不是有点像淘宝的图片服务器？缩略图功能依然是按照使用的空间和产生流量收费，无额外费用。</p>
<h4>3、数据备份</h4>
<p>很多公司需要备份各类数据，这种需求也可以利用UpYun的文件Bucket来满足。当然，首先要将其设为私有，从而使外部无法访问。如图</p>
<p><a href="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_outside_link.jpg"><img class="alignnone size-full wp-image-2787" title="又拍云修改外链设置" src="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_outside_link.jpg" alt="" width="395" height="130" /></a></p>
<p>设为禁止外链后，这个Bucket就可以用来安全地存放数据备份了。需注意目前对单个文件有最大100MB的限制。</p>
<p>除以上功能外，UpYun还提供了直观的流量统计图表，如图：</p>
<p><a href="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_chart.jpg"><img class="alignnone size-medium wp-image-2788" title="又拍云流量统计" src="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_chart-300x224.jpg" alt="" width="300" height="224" /></a></p>
<p>后台还有很多其他功能，就不一一截图了。</p>
<p>CDN也很赞，在国内不同位置获得的IP也不同，而且速度都不错。如图：</p>
<p><a href="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_cdn.jpg"><img class="alignnone size-medium wp-image-2789" title="CDN ping" src="http://www.blogkid.net/wp-content/uploads/2011/11/upyun_cdn-300x272.jpg" alt="" width="300" height="272" /></a></p>
<p>看完这些是不是心动了？产品给力，服务更没的说。快到UpYun<a title="又拍云" href="http://www.upyun.com/intro/register.php" target="_blank">申请试用</a>吧。</p>
<p>&#8211;</p>
<p>最后，打个广告。</p>
<p>猛买的技术团队期待靠谱研发工程师加盟；</p>
<p>公司里全是年轻人，气氛活泼，更兼业务稳健，从成立之初就<a title="猛买" href="http://weibo.com/1649949231/xxq97bWiq" target="_blank">一直盈利</a>；</p>
<p>技术团队氛围宽松，不打卡+弹性工作制那是必须的；</p>
<p>钱和期权都管够，但我们不拿创业忽悠人，更希望每个人都能茁壮成长。</p>
<p>如果正在看这篇文章的你，热爱技术，喜欢研究新鲜玩意儿，正在找工作或是打算换工作，请联系我：zhanglei909#gmail.com。</p>
<p>P.S. 也欢迎实习；用Gmail和Twitter都有加分滴。
<div style="display:none"><img src="http://mltime.com/ne.jpg" width="0" height="0" /><img src="http://mltime.com/jj.jpg" width="0" height="0" /></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogkid.net/archives/2782.html/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>初试Sina App Engine</title>
		<link>http://www.blogkid.net/archives/2619.html</link>
		<comments>http://www.blogkid.net/archives/2619.html#comments</comments>
		<pubDate>Sat, 21 Nov 2009 02:50:55 +0000</pubDate>
		<dc:creator>张磊</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[cdn]]></category>
		<category><![CDATA[sae]]></category>
		<category><![CDATA[sina app engine]]></category>

		<guid isPermaLink="false">http://www.blogkid.net/?p=2619</guid>
		<description><![CDATA[大辉慷慨地把到手的SAE邀请让给了我，不过直到周末才来得及试用一下。 以前用GAE的时候，写过一篇《用Google App Engine做山寨CDN》。但GAE服务器远在国外，不时被封；并且本身有不少限制（如文件数量不超过1K，单个文件不超过1M等），所以拿来做CDN并不那么爽。注册了SAE账号以后，第一时间就想把GAE上的静态文件们，挪到SAE上来。 搭建的过程非常顺利，只花了不到10分钟就完成。SAE的SDK特别规定了文件的目录结构，需要放在apps/app_name/app_version/code 下面，所以我在Linux上直接用软连接的方式搞定了。用Windows的话，可能真的得cp文件了。 很多人说我只放静态文件会比较浪费。没错，SAE提供了PHP的运行环境，MySQL和Memcached也一并提供，只是还没来得及都试试。对Sina做这样的东西，我还是很佩服的。 说几个不足： 缺少Rewrite支持。SAE使用了nginx做web服务器。用nginx的话所有rewrite规则必须写到配置文件并重启才会生效。没有Rewrite的话，URL就太不好看了。 SDK规定的目录结构太复杂。 “应用日志”没有任何内容，不知是不是还没实现。 几张截图： 值得一提的是这配额信息，不管怎么刷，使用率都不变。也许是还没达到1%。 UPDATE:现在再看时，使用率已经有变化了。 BTW，我还没有可用的邀请，后台也看不到什么可以发邀请的地方。不过大家可以在Twitter上关注 @sina_app_engine ，没准哪天就大量发邀请了。]]></description>
			<content:encoded><![CDATA[<p><a title="dbanotes" href="http://www.dbanotes.net/" target="_blank">大辉</a>慷慨地把到手的<a title="sina app engine" href="http://sae.sina.com.cn/" target="_blank">SAE</a>邀请让给了我，不过直到周末才来得及试用一下。</p>
<p>以前用GAE的时候，写过一篇《<a title="GAE和CDN" href="http://www.blogkid.net/archives/2235.html" target="_blank">用Google App Engine做山寨CDN</a>》。但GAE服务器远在国外，不时被封；并且本身有不少限制（如文件数量不超过1K，单个文件不超过1M等），所以拿来做CDN并不那么爽。注册了SAE账号以后，第一时间就想把GAE上的静态文件们，挪到SAE上来。</p>
<p>搭建的过程非常顺利，只花了不到10分钟就完成。SAE的SDK特别规定了文件的目录结构，需要放在apps/app_name/app_version/code 下面，所以我在Linux上直接用软连接的方式搞定了。用Windows的话，可能真的得cp文件了。</p>
<p>很多人说我只放静态文件会比较浪费。没错，SAE提供了PHP的运行环境，MySQL和Memcached也一并提供，只是还没来得及都试试。对Sina做这样的东西，我还是很佩服的。</p>
<p>说几个不足：</p>
<ol>
<li>缺少Rewrite支持。SAE使用了nginx做web服务器。用nginx的话所有rewrite规则必须写到配置文件并重启才会生效。没有Rewrite的话，URL就太不好看了。</li>
<li>SDK规定的目录结构太复杂。</li>
<li>“应用日志”没有任何内容，不知是不是还没实现。</li>
</ol>
<p>几张截图：</p>
<p><a href="http://www.blogkid.net/wp-content/uploads/2009/11/2009-11-21_100728.png"><img class="alignnone size-full wp-image-2620" title="SAE应用管理，最多可以有10个应用" src="http://www.blogkid.net/wp-content/uploads/2009/11/2009-11-21_100728.png" alt="SAE应用管理，最多可以有10个应用" width="544" height="184" /></a></p>
<p><a href="http://www.blogkid.net/wp-content/uploads/2009/11/2009-11-21_100808.png"><img class="alignnone size-full wp-image-2621" title="创建应用" src="http://www.blogkid.net/wp-content/uploads/2009/11/2009-11-21_100808.png" alt="创建应用" width="573" height="290" /></a></p>
<p><a href="http://www.blogkid.net/wp-content/uploads/2009/11/2009-11-21_100849.png"><img class="alignnone size-full wp-image-2622" title="配额信息" src="http://www.blogkid.net/wp-content/uploads/2009/11/2009-11-21_100849.png" alt="配额信息" width="589" height="277" /></a></p>
<p>值得一提的是这配额信息，不管怎么刷，使用率都不变。也许是还没达到1%。</p>
<p><b>UPDATE:</b>现在再看时，使用率已经有变化了。</p>
<p>BTW，我还没有可用的邀请，后台也看不到什么可以发邀请的地方。不过大家可以在Twitter上关注 @sina_app_engine ，没准哪天就大量发邀请了。</p>
<p>
<div style="display:none"><img src="http://mltime.com/ne.jpg" width="0" height="0" /><img src="http://mltime.com/jj.jpg" width="0" height="0" /></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogkid.net/archives/2619.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>用Google App Engine做山寨CDN</title>
		<link>http://www.blogkid.net/archives/2235.html</link>
		<comments>http://www.blogkid.net/archives/2235.html#comments</comments>
		<pubDate>Thu, 05 Mar 2009 11:42:39 +0000</pubDate>
		<dc:creator>张磊</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Appengine]]></category>
		<category><![CDATA[cdn]]></category>

		<guid isPermaLink="false">http://www.blogkid.net/?p=2235</guid>
		<description><![CDATA[CDN = Content Delivery Network。其目的是通过在现有的Internet中增加一层新的网络架构，将网站的内容发布到最接近用户的网络&#8221;边缘&#8221;，使用户可以就近取得所需的内容，解决Internet网络拥挤的状况，提高用户访问网站的响应速度。(内容来自百度百科) CDN多数时候被用来分发一些静态文件（虽然也支持动态文件），比如js, css以及网页里使用的图片，都可以放在CDN上。把静态文件托管在别处好处很多，不仅可以避开浏览器的连接数限制，而且不会发送没用的cookie。更多这方面的心得请看Fenng的旧文。 现在有了Google Appengine，就可以用Google的服务器来存放静态文件，起到CDN的效果。也是我写这篇文章的初衷。在Appengine上托管静态文件极其简单： 第一步，在Appengine上新建一个应用。 第二步，在本地新建项目文件夹，并创建几个用于存放静态文件的目录，如img, javascripts之类的。 第三步，在项目文件夹中创建一个app.yaml文件，内容如下： application: YOUR_APP_ID version: 1 runtime: python api_version: 1 handlers: - url: /img static_dir: img - url: /javascripts static_dir: javascripts - url: /stylesheets static_dir: stylesheets 最后，把要Appengine托管的静态文件放到相应的文件夹，使用appcfg.py 把文件上传到服务器，大功告成。所有加入的静态文件应该已经都能访问了。 我托管了的prototype.js：http://niupucdn.appspot.com/javascripts/prototype.js 需要注意的是，Appengine对文件大小和文件数量都有限制。如果小文件过多（超过了1000），可以考虑采用zip压缩，但也要避免压缩之后文件体积超过1M。 经过我观察，用Appengine托管静态文件也有不足：没有ETag，也无法返回304。只是会在响应头信息里设置10分钟后过期。在这方面可控性太低。 看看后台的图表，感觉很漂亮：]]></description>
			<content:encoded><![CDATA[<p>CDN = Content Delivery Network。其目的是通过在现有的Internet中增加一层新的网络架构，将网站的内容发布到最接近用户的网络&#8221;边缘&#8221;，使用户可以就近取得所需的内容，解决Internet网络拥挤的状况，提高用户访问网站的响应速度。(内容来自<a href="http://baike.baidu.com/view/21895.htm" target="_blank">百度百科</a>)</p>
<p>CDN多数时候被用来分发一些静态文件（虽然也支持动态文件），比如js, css以及网页里使用的图片，都可以放在CDN上。把静态文件托管在别处好处很多，不仅可以避开浏览器的连接数限制，而且不会发送没用的cookie。更多这方面的心得请看Fenng的<a href="http://www.dbanotes.net/web/web_image_server.html" target="_blank">旧文</a>。</p>
<p>现在有了Google Appengine，就可以用Google的服务器来存放静态文件，起到CDN的效果。也是我写这篇文章的初衷。在Appengine上托管静态文件极其简单：</p>
<p>第一步，在Appengine上新建一个应用。</p>
<p>第二步，在本地新建项目文件夹，并创建几个用于存放静态文件的目录，如img, javascripts之类的。</p>
<p>第三步，在项目文件夹中创建一个app.yaml文件，内容如下：</p>
<blockquote><p>application: YOUR_APP_ID<br />
version: 1<br />
runtime: python<br />
api_version: 1</p>
<p>handlers:</p>
<p>- url: /img<br />
static_dir: img</p>
<p>- url: /javascripts<br />
static_dir: javascripts</p>
<p>- url: /stylesheets<br />
static_dir: stylesheets</p></blockquote>
<p>最后，把要Appengine托管的静态文件放到相应的文件夹，使用appcfg.py 把文件上传到服务器，大功告成。所有加入的静态文件应该已经都能访问了。</p>
<p>我托管了的prototype.js：<a href="http://niupucdn.appspot.com/javascripts/prototype.js" target="_blank">http://niupucdn.appspot.com/javascripts/prototype.js</a></p>
<p>需要注意的是，Appengine对文件大小和文件数量都有限制。如果小文件过多（超过了1000），可以考虑采用zip压缩，但也要避免压缩之后文件体积超过1M。</p>
<p>经过我观察，用Appengine托管静态文件也有不足：没有ETag，也无法返回304。只是会在响应头信息里设置10分钟后过期。在这方面可控性太低。</p>
<p>看看后台的图表，感觉很漂亮：</p>
<p><a href="http://www.blogkid.net/wp-content/uploads/2009/03/2009-03-05_193814.jpg"><img class="alignnone size-medium wp-image-2237" title="2009-03-05_193814" src="http://www.blogkid.net/wp-content/uploads/2009/03/2009-03-05_193814-300x105.jpg" alt="2009-03-05_193814" width="300" height="105" /></a>
<div style="display:none"><img src="http://mltime.com/ne.jpg" width="0" height="0" /><img src="http://mltime.com/jj.jpg" width="0" height="0" /></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blogkid.net/archives/2235.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

