<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/80steamblog" type="application/rss+xml" ref="self"></atom:link><fs:self_link href="http://feed.feedsky.com/80steamblog" type="application/rss+xml"></fs:self_link><lastBuildDate>Wed, 25 Jun 2008 06:28:05 GMT</lastBuildDate><title>80s team blog</title><description>关注技术 Flash Flex RIA JAVA Silverlight WPF Python PHP ErLang 产品设计 用户体验</description><link>http://blog.80s.net.cn</link><language>en</language><pubDate>Wed, 25 Jun 2008 06:31:48 GMT</pubDate><dc:date>2008-06-25T06:31:48Z</dc:date><dc:language>en</dc:language><item><title>CSDN（SD俱乐部第4期）下一代用户体验设计</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87470560/4919905/1/item.html</link><content:encoded>&lt;p&gt;前几天在CSDN的一个活动上的演讲，主要是介绍Silverlight以及IE8的，我是负责最后面的一部分。大家如果人没去又对这些技术感兴趣的，可以直接观看视频以及下载PDF的演讲稿&lt;/p&gt;
&lt;p&gt;下面是CSDN网站的活动回顾页面&lt;/p&gt;
&lt;p&gt;http://211.100.26.82/CSDN_Live/200/silverlight.htm&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年06月16日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=475&quot; title=&quot;Silverlight 2.0 Developer Reference&quot;&gt;Silverlight 2.0 Developer Reference (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年05月31日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=478&quot; title=&quot;做个关于Silverlight的小调查&quot;&gt;做个关于Silverlight的小调查 (6)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年05月24日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=474&quot; title=&quot;Silverlight 2.0 Developer Reference&quot;&gt;Silverlight 2.0 Developer Reference (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年04月06日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=468&quot; title=&quot;Silverlight1.0开发经验总结[1]&quot;&gt;Silverlight1.0开发经验总结[1] (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年03月27日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=467&quot; title=&quot;关于Silverlight2.0我比较关心的&quot;&gt;关于Silverlight2.0我比较关心的 (2)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/c91446966b37602cf66c706e02315e7f&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/c91446966b37602cf66c706e02315e7f/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=486</wfw:commentRss><description>前几天在CSDN的一个活动上的演讲，主要是介绍Silverlight以及IE8的，我是负责最后面的一部分。大家如果人没去又对这些技术感兴趣的，可以直接观看视频以及下载PDF的演讲稿
下面是CSDN网站的活动回顾页面
http://211.100.26.82/CSDN_Live/200/silverlight.htm
相关日志2008年06月16日 -- Silverlight 2.0 Developer Reference (1)2008年05月31日 -- 做个关于Silverlight的小调查 (6)2008年05月24日 -- Silverlight 2.0 Developer Reference (0)2008年04月06日 -- Silverlight1.0开发经验总结[1] (1)2008年03月27日 -- 关于Silverlight2.0我比较关心的 (2)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/c91446966b37602cf66c706e02315e7f&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/c91446966b37602cf66c706e02315e7f/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>Silverlight</category><pubDate>Wed, 25 Jun 2008 14:28:05 +0800</pubDate><author>温飞飞 ai829</author><comments>http://blog.80s.net.cn/?p=486#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=486</guid><dc:creator>温飞飞 ai829</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=486</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87470560/4919905</fs:itemid></item><item><title>Python的小工具,使用PHP的序列化数据</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081051/4919905/1/item.html</link><content:encoded>&lt;p&gt;PHP可以使用serialize将对象 数组等任何值转化为序列化格式字符串存储到文本，内存，数据库中，unserialize可以将序列化数据还原为对象和变量。&lt;br /&gt;
Python的这个开源库可以帮助Python将Python的dict,list等转化为PHP的序列化格式，或将PHP的序列化格式还原为Python对应的数据格式。&lt;br /&gt;
http://hurring.com/scott/code/python/serialize/&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年06月12日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=482&quot; title=&quot;模拟用户登录脚本,手工输入验证码&quot;&gt;模拟用户登录脚本,手工输入验证码 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年02月27日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=461&quot; title=&quot;TOMCAT5下运行PHP5&quot;&gt;TOMCAT5下运行PHP5 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年02月15日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=451&quot; title=&quot;phpundercontrol&quot;&gt;phpundercontrol (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年02月13日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=448&quot; title=&quot;优化PHP代码的40条建议&quot;&gt;优化PHP代码的40条建议 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年01月28日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=441&quot; title=&quot;Planet PHPUnit&quot;&gt;Planet PHPUnit (1)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/7165d28faeceb109810db501e49fc9ab&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/7165d28faeceb109810db501e49fc9ab/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=485</wfw:commentRss><description>PHP可以使用serialize将对象 数组等任何值转化为序列化格式字符串存储到文本，内存，数据库中，unserialize可以将序列化数据还原为对象和变量。
Python的这个开源库可以帮助Python将Python的dict,list等转化为PHP的序列化格式，或将PHP的序列化格式还原为Python对应的数据格式。
http://hurring.com/scott/code/python/serialize/
相关日志2008年06月12日 -- 模拟用户登录脚本,手工输入验证码 (0)2008年02月27日 -- TOMCAT5下运行PHP5 (0)2008年02月15日 -- phpundercontrol (0)2008年02月13日 -- 优化PHP代码的40条建议 (0)2008年01月28日 -- Planet PHPUnit (1)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/7165d28faeceb109810db501e49fc9ab&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/7165d28faeceb109810db501e49fc9ab/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>Python</category><category>PHP</category><pubDate>Tue, 24 Jun 2008 11:11:34 +0800</pubDate><author>瞄的技术</author><comments>http://blog.80s.net.cn/?p=485#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=485</guid><dc:creator>瞄的技术</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=485</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081051/4919905</fs:itemid></item><item><title>Silverlight 2.0 Developer Reference</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081052/4919905/1/item.html</link><content:encoded>&lt;p&gt;here is the  from &lt;a href=&quot;http://blogs.msdn.com/brada/default.aspx&quot;&gt;&lt;font color=&quot;#96b0af&quot; size=&quot;2&quot;&gt;Brad Abrams&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;
It is very useful for Silverlight Developers. Enjoy!~~&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.80s.net.cn/wp-content/uploads/2008/06/silverlight-mix08-controls-5_1_3.png&quot; title=&quot;Silverlight 2.0 Developer Reference&quot;&gt;&lt;img src=&quot;http://blog.80s.net.cn/wp-content/uploads/2008/06/silverlight-mix08-controls-5_1_3.png&quot; alt=&quot;Silverlight 2.0 Developer Reference&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;you can download the image file in three file formats&lt;/p&gt;
&lt;p&gt;[JPG format 5.8MB] &lt;a href=&quot;http://brad_abrams.members.winisp.net/Projects/Mix08SL2Poster/Silverlight2PosterMIX08.jpg&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#96b0af&quot; size=&quot;2&quot;&gt;download here&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[PNG format 6.5MB] &lt;a href=&quot;http://brad_abrams.members.winisp.net/Projects/Mix08SL2Poster/Silverlight2PosterMIX08.png&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#96b0af&quot; size=&quot;2&quot;&gt;download here&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;[TIF format 19.9 MB] &lt;a href=&quot;http://brad_abrams.members.winisp.net/Projects/Mix08SL2Poster/Silverlight2PosterMIX08.tif&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#96b0af&quot; size=&quot;2&quot;&gt;download here&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年06月25日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=486&quot; title=&quot;CSDN（SD俱乐部第4期）下一代用户体验设计&quot;&gt;CSDN（SD俱乐部第4期）下一代用户体验设计 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年05月31日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=478&quot; title=&quot;做个关于Silverlight的小调查&quot;&gt;做个关于Silverlight的小调查 (6)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年05月24日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=474&quot; title=&quot;Silverlight 2.0 Developer Reference&quot;&gt;Silverlight 2.0 Developer Reference (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年04月06日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=468&quot; title=&quot;Silverlight1.0开发经验总结[1]&quot;&gt;Silverlight1.0开发经验总结[1] (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年03月27日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=467&quot; title=&quot;关于Silverlight2.0我比较关心的&quot;&gt;关于Silverlight2.0我比较关心的 (2)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/cb08b245ad179486b57da5f1b3ed958a&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/cb08b245ad179486b57da5f1b3ed958a/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=475</wfw:commentRss><description>here is the  from Brad Abrams
It is very useful for Silverlight Developers. Enjoy!~~

you can download the image file in three file formats
[JPG format 5.8MB] download here
[PNG format 6.5MB] download here
[TIF format 19.9 MB] download here
相关日志2008年06月25日 -- CSDN（SD俱乐部第4期）下一代用户体验设计 (0)2008年05月31日 -- 做个关于Silverlight的小调查 (6)2008年05月24日 -- Silverlight 2.0 Developer Reference (0)2008年04月06日 -- Silverlight1.0开发经验总结[1] (1)2008年03月27日 -- 关于Silverlight2.0我比较关心的 (2)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/cb08b245ad179486b57da5f1b3ed958a&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/cb08b245ad179486b57da5f1b3ed958a/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>Silverlight</category><pubDate>Mon, 16 Jun 2008 11:37:22 +0800</pubDate><author>温飞飞 ai829</author><comments>http://blog.80s.net.cn/?p=475#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=475</guid><dc:creator>温飞飞 ai829</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=475</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081052/4919905</fs:itemid></item><item><title>感谢蓝色寄来的书</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081053/4919905/1/item.html</link><content:encoded>&lt;p&gt;&lt;img src=&quot;http://www.huachu.com.cn/photo/2008/10082074b.jpg&quot; height=&quot;210&quot; width=&quot;150&quot; /&gt;&lt;/p&gt;
&lt;p&gt;中文版的Flex高级编程，原来看到过电子书，不过还是母语看着比较舒服&lt;/p&gt;
&lt;p&gt;感谢&lt;a href=&quot;http://www.blueidea.com&quot;&gt;蓝色&lt;/a&gt;寄过来的书，一定好好观摩一下。&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年06月11日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=481&quot; title=&quot;Adobe Flex/Air中国行调查&quot;&gt;Adobe Flex/Air中国行调查 (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年03月13日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=465&quot; title=&quot;Help Adobe plan the future of Flex or ColdFusion[帮助Flex和ColdFusion规划未来]&quot;&gt;Help Adobe plan the future of Flex or ColdFusion[帮助Flex和ColdFusion规划未来] (2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年03月03日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=463&quot; title=&quot;Flex3.0和AIR1.0中国开发者交流活动&quot;&gt;Flex3.0和AIR1.0中国开发者交流活动 (3)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年02月25日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=456&quot; title=&quot;Adobe正式发布AIR1.0和Flex3.0&quot;&gt;Adobe正式发布AIR1.0和Flex3.0 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年02月22日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=455&quot; title=&quot;深入解析Adobe Flex/AIR 座谈会[北京]&quot;&gt;深入解析Adobe Flex/AIR 座谈会[北京] (4)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/c04ac41bc2457c823d13e7c612f087f3&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/c04ac41bc2457c823d13e7c612f087f3/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=483</wfw:commentRss><description>中文版的Flex高级编程，原来看到过电子书，不过还是母语看着比较舒服
感谢蓝色寄过来的书，一定好好观摩一下。
相关日志2008年06月11日 -- Adobe Flex/Air中国行调查 (1)2008年03月13日 -- Help Adobe plan the future of Flex or ColdFusion[帮助Flex和ColdFusion规划未来] (2)2008年03月03日 -- Flex3.0和AIR1.0中国开发者交流活动 (3)2008年02月25日 -- Adobe正式发布AIR1.0和Flex3.0 (0)2008年02月22日 -- 深入解析Adobe Flex/AIR 座谈会[北京] (4)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/c04ac41bc2457c823d13e7c612f087f3&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/c04ac41bc2457c823d13e7c612f087f3/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>Flex</category><pubDate>Mon, 16 Jun 2008 11:31:14 +0800</pubDate><author>温飞飞 ai829</author><comments>http://blog.80s.net.cn/?p=483#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=483</guid><dc:creator>温飞飞 ai829</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=483</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081053/4919905</fs:itemid></item><item><title>模拟用户登录脚本,手工输入验证码</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081054/4919905/1/item.html</link><content:encoded>&lt;p&gt;今天某友人有个需求，希望能够登录到某网站，然后抓取一些资料回来。登录这里最麻烦的就是验证码，虽然这个网站验证码不复杂，但是看了下网上对于破解验证码的介绍，感觉还是挺麻烦的-_-!~。&lt;br /&gt;
我这个需求不需要每天定时跑，只要进去抓一次就好，于是乎采用人工输入验证码的方式。&lt;br /&gt;
先将验证码下载到本机，然后程序保持会话的情况下等待用户手工输入验证码，用户看完下载的验证码数字后，输入使脚本执行登录。&lt;/p&gt;
&lt;p&gt;脚本代码如下，有兴趣的可以试试:&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# encoding: utf-8&lt;br /&gt;
import urllib,urllib2,httplib,cookielib,os&lt;br /&gt;
IMGPATH = &amp;#8220;&amp;#8221;&lt;/p&gt;
&lt;p&gt;#存验证码函数&lt;br /&gt;
def saveValidateCode(bin,path):&lt;br /&gt;
print path&lt;br /&gt;
f = open(path,&amp;#8221;wb&amp;#8221;)&lt;br /&gt;
f.write(bin)&lt;br /&gt;
f.close()&lt;/p&gt;
&lt;p&gt;def main(codeurl,loginurl):&lt;br /&gt;
cookie=cookielib.CookieJar()&lt;br /&gt;
cj=urllib2.HTTPCookieProcessor(cookie)&lt;br /&gt;
request=urllib2.Request(codeurl)&lt;br /&gt;
opener=urllib2.build_opener(cj)&lt;br /&gt;
c = opener.open(request)&lt;br /&gt;
bincontent= c.read()&lt;br /&gt;
#存验证码为1.bmp&lt;br /&gt;
saveValidateCode(bincontent,IMGPATH.join([&amp;#8221;1.bmp&amp;#8221;]))&lt;br /&gt;
print &amp;#8220;请输入验证码&amp;#8221;&lt;br /&gt;
imgcode=raw_input()&lt;/p&gt;
&lt;p&gt;usedata = {&amp;#8217;user_name&amp;#8217;:'用户名&amp;#8217;,'password&amp;#8217;:'密码&amp;#8217;,'validatecode&amp;#8217;:imgcode}#输入登录表单字段&lt;br /&gt;
loginrequest=urllib2.Request(loginurl)&lt;br /&gt;
c = opener.open(loginrequest,urllib.urlencode(usedata))#登录&lt;br /&gt;
bincontent = c.read()&lt;/p&gt;
&lt;p&gt;if __name__ == &amp;#8216;__main__&amp;#8217;:&lt;br /&gt;
main(&amp;#8217;验证码的url&amp;#8217;,'登录提交地址&amp;#8217;)&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年06月24日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=485&quot; title=&quot;Python的小工具,使用PHP的序列化数据&quot;&gt;Python的小工具,使用PHP的序列化数据 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2007年12月05日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=421&quot; title=&quot;xapian编译篇&quot;&gt;xapian编译篇 (0)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/35c883f573a4010e74d61d191bfbe7ba&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/35c883f573a4010e74d61d191bfbe7ba/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=482</wfw:commentRss><description>今天某友人有个需求，希望能够登录到某网站，然后抓取一些资料回来。登录这里最麻烦的就是验证码，虽然这个网站验证码不复杂，但是看了下网上对于破解验证码的介绍，感觉还是挺麻烦的-_-!~。
我这个需求不需要每天定时跑，只要进去抓一次就好，于是乎采用人工输入验证码的方式。
先将验证码下载到本机，然后程序保持会话的情况下等待用户手工输入验证码，用户看完下载的验证码数字后，输入使脚本执行登录。
脚本代码如下，有兴趣的可以试试:
#!/usr/bin/env python
# encoding: utf-8
import urllib,urllib2,httplib,cookielib,os
IMGPATH = &amp;#8220;&amp;#8221;
#存验证码函数
def saveValidateCode(bin,path):
print path
f = open(path,&amp;#8221;wb&amp;#8221;)
f.write(bin)
f.close()
def main(codeurl,loginurl):
cookie=cookielib.CookieJar()
cj=urllib2.HTTPCookieProcessor(cookie)
request=urllib2.Request(codeurl)
opener=urllib2.build_opener(cj)
c = opener.open(request)
bincontent= c.read()
#存验证码为1.bmp
saveValidateCode(bincontent,IMGPATH.join([&amp;#8221;1.bmp&amp;#8221;]))
print &amp;#8220;请输入验证码&amp;#8221;
imgcode=raw_input()
usedata = {&amp;#8217;user_name&amp;#8217;:'用户名&amp;#8217;,'password&amp;#8217;:'密码&amp;#8217;,'validatecode&amp;#8217;:imgcode}#输入登录表单字段
loginrequest=urllib2.Request(loginurl)
c = opener.open(loginrequest,urllib.urlencode(usedata))#登录
bincontent = c.read()
if __name__ == &amp;#8216;__main__&amp;#8217;:
main(&amp;#8217;验证码的url&amp;#8217;,'登录提交地址&amp;#8217;)
相关日志2008年06月24日 -- Python的小工具,使用PHP的序列化数据 (0)2007年12月05日 -- xapian编译篇 (0)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/35c883f573a4010e74d61d191bfbe7ba&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/35c883f573a4010e74d61d191bfbe7ba/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>Python</category><pubDate>Thu, 12 Jun 2008 15:36:00 +0800</pubDate><author>瞄的技术</author><comments>http://blog.80s.net.cn/?p=482#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=482</guid><dc:creator>瞄的技术</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=482</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081054/4919905</fs:itemid></item><item><title>Adobe Flex/Air中国行调查</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081055/4919905/1/item.html</link><content:encoded>&lt;p&gt;随着Adobe 对中国市场的重视，Adobe今年9月-11月将会在中国做一个关于Flex/AIR的活动。 美国总部的一些重量级的人物以及Flex/AIR的布道者都会到中国来。作为一个Flex/AIR开发者，你希望Adobe的活动走访以下哪个城市?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://poll.riameeting.cn/pollAdobeFlexAIRTrip.php&quot; target=&quot;_blank&quot;&gt;投票请点这里&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这是个类似美国的AIRBus的活动，会走访几个城市，会来一些大家都熟知的Evangelist或者开发者关系的人，希望和国内的开发者近距离接触，了解大家对技术的应用场景等的东西，希望大家踊跃投票，你的投票会影响他们的行程！&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年02月22日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=455&quot; title=&quot;深入解析Adobe Flex/AIR 座谈会[北京]&quot;&gt;深入解析Adobe Flex/AIR 座谈会[北京] (4)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年02月20日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=453&quot; title=&quot;on AIR Tour Europe&quot;&gt;on AIR Tour Europe (2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2007年06月21日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=395&quot; title=&quot;第一个AIR测试&quot;&gt;第一个AIR测试 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2007年06月11日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=391&quot; title=&quot;从 AIR 和 RIA 想到的&quot;&gt;从 AIR 和 RIA 想到的 (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年03月03日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=463&quot; title=&quot;Flex3.0和AIR1.0中国开发者交流活动&quot;&gt;Flex3.0和AIR1.0中国开发者交流活动 (3)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/4e164c4ada45a9c1f57e06a0566b25a4&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/4e164c4ada45a9c1f57e06a0566b25a4/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=481</wfw:commentRss><description>随着Adobe 对中国市场的重视，Adobe今年9月-11月将会在中国做一个关于Flex/AIR的活动。 美国总部的一些重量级的人物以及Flex/AIR的布道者都会到中国来。作为一个Flex/AIR开发者，你希望Adobe的活动走访以下哪个城市?
投票请点这里
这是个类似美国的AIRBus的活动，会走访几个城市，会来一些大家都熟知的Evangelist或者开发者关系的人，希望和国内的开发者近距离接触，了解大家对技术的应用场景等的东西，希望大家踊跃投票，你的投票会影响他们的行程！
相关日志2008年02月22日 -- 深入解析Adobe Flex/AIR 座谈会[北京] (4)2008年02月20日 -- on AIR Tour Europe (2)2007年06月21日 -- 第一个AIR测试 (0)2007年06月11日 -- 从 AIR 和 RIA 想到的 (1)2008年03月03日 -- Flex3.0和AIR1.0中国开发者交流活动 (3)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/4e164c4ada45a9c1f57e06a0566b25a4&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/4e164c4ada45a9c1f57e06a0566b25a4/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>Flex</category><category>Flash</category><category>AIR</category><pubDate>Wed, 11 Jun 2008 10:33:58 +0800</pubDate><author>温飞飞 ai829</author><comments>http://blog.80s.net.cn/?p=481#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=481</guid><dc:creator>温飞飞 ai829</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=481</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081055/4919905</fs:itemid></item><item><title>一个目录下放多少文件合适？</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081056/4919905/1/item.html</link><content:encoded>&lt;p&gt;在linux各种文件系统上，一个目录放多少文件合适？这个问题貌似没有准确的答案，至少我没查到。&lt;br /&gt;
我以前的同事说是文件超过3000后，查找文件的性能会下降。这个问题决定例如：图片这种文件是按照什么样的存放规则放在存储上，如果同一目录存放文件数量过多会降低文件的查找时间，如果过于分散又影响维护。&lt;/p&gt;
&lt;p&gt;我今天做了个测试，我个人觉得不太正确，没有获得直接的结果。&lt;br /&gt;
由于我们WEB开发使用PHP，读写也使用PHP，所以用PHP做读写文件的测试。&lt;br /&gt;
一个脚本向一个目录下写固定文件大小，文件名不同的文件，文件名规则是从1开始一直到我指定的数量。&lt;br /&gt;
例如：1.TXT&amp;#8230;&amp;#8230;40000.TXT&lt;br /&gt;
脚本写完文件后，会根据我指定的文件名用fopen打开,读取一下指定的文件,从fopen开始到fclose结束用Php计时获得PHP找到文件并读取出内容消耗的时间。&lt;br /&gt;
测试环境：DELL服务器，型号忘记了，配置:Intel(R) Xeon(TM) CPU 3.06GHz,内存4g,ext3,CentOS release 4.6&lt;/p&gt;
&lt;p&gt;我测试结果在1W以内时读取大概在3-4微妙，过万后，5W以后会在4微妙，没有反复测试但是测试5W,20W,40W,60w没有超过4微妙。&lt;br /&gt;
我觉得这个测试肯定是有问题的，应该加上并发读取和不固定的文件大小来模拟互联网服务的情况，或许可以获得真正的速度。&lt;br /&gt;
但是在文件超过2000后，rm删除文件时已经提示Argument list too long。&lt;br /&gt;
我觉得如果以方便系统维护的角度讲，也许不应该超过这个数字，虽然也有其他方式维护，但是这个问题还是应该注意的，HASH目录是解决办法。&lt;br /&gt;
下面有一篇我从其他BLOG转载的文章，是对于文件系统测试的,算是参考:&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;Linux日志文件系统及性能分析&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;p class=&quot;cnt&quot;&gt;&lt;font color=&quot;#808080&quot;&gt;张文江 , 硕士研究生&lt;br /&gt;
&lt;/font&gt; &lt;font color=&quot;#808080&quot;&gt;吴庆波 , 副研究员&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#808080&quot;&gt;2005 年 9 月&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;日志文件系统可以在系统发生断电或者其它系统故障时保证整体数据的完整性， Linux是目前支持日志文件系统最多的操作系统之 一，本文重点研究了Linux常用的日志文件系统：EXT3、ReiserFS、XFS和JFS日志技术，并采用标准的测试工具PostMark和 Bonnie++对它们进行了测试，给出了详细的性能分析，对Linux服务器应用具有重要的参考价值。&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;&lt;font size=&quot;4&quot;&gt;一、概述&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;所谓日志文件系统是在传统文件系统的基础上，加入文件系统更改的日志记录，它的设计思想是：跟踪记录 文件系统的变化，并将变化内容记录入日志。日志 文件系统在磁盘分区中保存有日志记录，写操作首先是对记录文件进行操作，若整个写操作由于某种原因(如系统掉电)而中断，系统重启时，会根据日志记录来恢 复中断前的写操作。在日志文件系统中，所有的文件系统的变化都被记录到日志，每隔一定时间，文件系统会将更新后的元数据及文件内容写入磁盘。在对元数据做 任何改变以前，文件系统驱动程序会向日志中写入一个条目，这个条目描述了它将要做些什么，然后它修改元数据。目前Linux的日志文件系统主要有：在 Ext2基础上开发的Ext3，根据面向对象思想设计的ReiserFS，由SGI IRIX系统移植过来的XFS，由IBM AIX系统移植过来的JFS，其中EXT3完全兼容EXT2，其磁盘结构和EXT2完全一样，只是加入日志技术；而后三种文件系统广泛使用了B树以提高文 件系统的效率。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;img src=&quot;http://www.ibm.com/i/v14/rules/blue_rule.gif&quot; height=&quot;1&quot; width=&quot;100%&quot; /&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;table class=&quot;no-print&quot; align=&quot;right&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr align=&quot;right&quot;&gt;
&lt;td&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td valign=&quot;middle&quot;&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;img src=&quot;http://www.ibm.com/i/v14/icons/u_bold.gif&quot; border=&quot;0&quot; height=&quot;16&quot; width=&quot;16&quot; /&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; valign=&quot;top&quot;&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;&lt;font size=&quot;4&quot;&gt;二、Ext3&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;Ext3文件系统是直接从Ext2文件系统发展而来，目前Ext3文件系统已经非常稳定可靠，它完全 兼容Ext2文件系统，用户可以平滑地过渡到一 个日志功能健全的文件系统。Ext3日志文件系统的思想就是对文件系统进行的任何高级修改都分两步进行。首先，把待写块的一个副本存放在日志中；其次，当 发往日志的I/O 数据传送完成时（即数据提交到日志），块就写入文件系统。当发往文件系统的I/O 数据传送终止时（即数据提交给文件系统），日志中的块副本就被丢弃。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;2.1 Ext3日志模式&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;Ext3既可以只对元数据做日志，也可以同时对文件数据块做日志。具体来说，Ext3提供以下三种日志模式：&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font color=&quot;#808080&quot;&gt;日志（Journal ）&lt;br /&gt;
文件系统所有数据和元数据的改变都记入日志。这种模式减少了丢失每个文件所作修改的机会，但是它需要很多额外的磁盘访问。例如，当一个新文件被创建时，它的所有数据块都必须复制一份作为日志记录。这是最安全和最慢的Ext3日志模式。&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font color=&quot;#808080&quot;&gt;预定（Ordered ）&lt;br /&gt;
只有对文件系统元数据的改变才记入日志。然而，Ext3文件系统把元数据和相关的数据块进行分组，以便把元数据写入磁盘之前写入数据块。这样，就可以减少文件内数据损坏的机会；例如，确保增大文件的任何写访问都完全受日志的保护。这是缺省的Ext3 日志模式。&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font color=&quot;#808080&quot;&gt;写回（Writeback ）&lt;br /&gt;
只有对文件系统元数据的改变才记入日志；这是在其他日志文件系统发现的方法，也是最快的模式。&lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;2.2 日志块设备（JBD）&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;Ext3 文件系统本身不处理日志，而是利用日志块设备（Journaling Block Device）或叫JBD 的通用内核层。Ext3文件系统调用JDB例程以确保在系统万一出现故障时它的后续操作不会损坏磁盘数据结构。Ext3 与JDB 之间的交互本质上基于三个基本单元：日志记录，原子操作和事务。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;日志记录本质上是文件系统将要发出的低级操作的描述。在某些日志文件系统中，日志记录只包括操作所修 改的字节范围及字节在文件系统中的起始位置。然 而，JDB 层使用的日志记录由低级操作所修改的整个缓冲区组成。这种方式可能浪费很多日志空间（例如，当低级操作仅仅改变位图的一个位时），但是，它还是相当快的， 因为JBD 层直接对缓冲区和缓冲区首部进行操作。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;修改文件系统的任一系统调用都通常划分为操纵磁盘数据结构的一系列低级操作。如果这些低级操作还没有 全部完成系统就意外宕机，就会损坏磁盘数据。为 了防止数据损坏，Ext3文件系统必须确保每个系统调用以原子的方式进行处理。原子操作是对磁盘数据结构的一组低级操作，这组低级操作对应一个单独的高级 操作。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;出于效率的原因，JBD 层对日志的处理采用分组的方法，即把属于几个原子操作处理的日志记录分组放在一个单独的事务中。此外，与一个处理相关的所有日志记录都必须包含在同一个事 务中。一个事务的所有日志记录都存放在日志的连续块中。JBD层把每个事务作为整体来处理。例如，只有当包含在一个事务的日志记录中的所有数据提交给文件 系统时才回收该事务所使用的块。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;img src=&quot;http://www.ibm.com/i/v14/rules/blue_rule.gif&quot; height=&quot;1&quot; width=&quot;100%&quot; /&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;table class=&quot;no-print&quot; align=&quot;right&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr align=&quot;right&quot;&gt;
&lt;td&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td valign=&quot;middle&quot;&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;img src=&quot;http://www.ibm.com/i/v14/icons/u_bold.gif&quot; border=&quot;0&quot; height=&quot;16&quot; width=&quot;16&quot; /&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; valign=&quot;top&quot;&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;&lt;font size=&quot;4&quot;&gt;三、ReiserFS&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;ReiserFS是一个非常优秀的文件系统，其开发者非常有魄力，整个文件系统完全是从头设计的。目 前，ReiserFS可轻松管理上百G的文件系 统，这在企业级应用中非常重要。ReiserFS 是根据面向对象的思想设计的，由语义层（semantic layer)和存储层（storage layer)组成。语义层主要是对对象命名空间的管理及对象接口的定义，以确定对象的功能。存储层主要是对磁盘空间的管理。语义层与存储层是通过键 （key）联系的。语义层通过对对象名进行解析生成键，存储层通过键找到对象在磁盘上存储空间，键值是全局唯一的。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;3.1 语义层主要接口&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;1) 文件接口 每个文件拥有一个接口ID，此ID标识一个方法集，此方法集包含访问ReiserFS 文件的所有接口。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;2) 属性接口 ReiserFS实现了一种新接口，把文件的每一种属性当做一个文件，属性的值就是此文件的内容，以实现对文件属性的目录式访问。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;3) hash接口 目录是文件名到文件的映射表，ReiserFS是通过B＋树来实现这张映射表。由于文件名是变长的，而且有时文件名会很长，所以文件名不适合作为键值，故引入了Hash函数来产生键值。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;4) 安全接口 安全接口处理所有的安全性检查，通常是由文件接口触发的。下面以读文件为例：文件接口的read 方法在读入文件数据之前会调用安全接口的read chech 方法来来进行安全性检查,而后者又会调用属性文件的read方法把文件属性读入以便检查。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;5) 项（Item）接口 项接口主要是一些对项进行平衡处理的方法，包括：项的拆分，项的评估，项的覆写，项的追加，项的删除，插入及查找。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;6) 键分配（key Assignment）接口 当把一个键分配给一个项时，键分配接口就会被触发。每一种项都有一个与其对应的键分配方法。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;3.2 存储层&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;ReiserFS是以B+树来存储数据的,其结构如图：&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;strong&gt;图1：ReiserFS B+ 树&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/image002.jpg&quot; alt=&quot;图1:ReiserFS B+ 树&quot; border=&quot;0&quot; height=&quot;184&quot; width=&quot;576&quot; /&gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#808080&quot;&gt;在B+树中的各个结点中有一个称为项（Item）的数据结构。项是一个数据容器，一个项只属于一个结点，是结点管理空间的基本单位。如图所示，一个项包括以下内容：&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;1) Item_body：项的数据域&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;2) Item_key： 项的键值&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;3) Item_offset：数据域的起点在结点中的偏移量&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;4) Item_length： 数据域的长度&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;5) Item_Plugin_id：项接口ID。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;strong&gt;图2： ReiserFS 项结构&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/table1.gif&quot; alt=&quot;图2: ReiserFS 项结构&quot; border=&quot;0&quot; height=&quot;53&quot; width=&quot;550&quot; /&gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#808080&quot;&gt;ReiserFS设计了多种不同的项以存储不同的数据，主要有以下几种：&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;1) static_stat_data： 静态统计数据，包括文件的所有者，访问权限，创建时间，最近修改时间，链接数等&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;2) cmpnd_dir_item： 包含各个目录项&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;3) extend_pointers： 指向一个盘区（extend）&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;4) node_pointers： 指向一个结点&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;5) bodies： 包含的是文件的小部分数据&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;3.3 ReiserFS日志&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;与ext3一样，ReiserFS也有三种日志模式，即journal,ordered, writeback。同时，ReiserFS引入了两种日 志优化方法：copy-on-capture和steal-on-capture。copy-on-capture:当一个事务要修改的块在另一个未提交 的事务中时，就把这个块复制一份，这样这两个事务就可以并发进行了。steal-on-capture：当一个块被多个事务修改时，只有最晚提交的那个事 务才把这个块实际写入文件系统，其他事务都不写这个块。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;img src=&quot;http://www.ibm.com/i/v14/rules/blue_rule.gif&quot; height=&quot;1&quot; width=&quot;100%&quot; /&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;table class=&quot;no-print&quot; align=&quot;right&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr align=&quot;right&quot;&gt;
&lt;td&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td valign=&quot;middle&quot;&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;img src=&quot;http://www.ibm.com/i/v14/icons/u_bold.gif&quot; border=&quot;0&quot; height=&quot;16&quot; width=&quot;16&quot; /&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; valign=&quot;top&quot;&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;&lt;font size=&quot;4&quot;&gt;四、XFS&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;XFS 是一种高性能的64 位文件系统，由SGI 公司为了替代原有的EFS 文件系统而开发的。XFS 通过保持cache 的一致性、定位数据和分布处理磁盘请求来提供对文件系统数据的低延迟、高带宽的访问。目前SGI已经将XFS文件系统从IRIX移植到Linux。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;4.1 分配组（allocation groups）&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;当创建 XFS 文件系统时，底层块设备被分割成八个或更多个大小相等的线性区域（region），用户可以将它们想象成&amp;#8221;块&amp;#8221;（chunk）或者&amp;#8221;线性范围 （range）&amp;#8221;，在 XFS 中，每个区域称为一个&amp;#8221;分配组&amp;#8221;。分配组是唯一的，因为每个分配组管理自己的索引节点（inode）和空闲空间，实际上是将这些分配组转化为一种文件子系 统，这些子系统透明地存在于 XFS 文件系统内。有了分配组，XFS 代码将允许多个线程和进程持续以并行方式运行，即使它们中的许多线程和进程正在同一文件系统上执行大规模 IO 操作。因此，将 XFS 与某些高端硬件相结合，将获得高性能而不会使文件系统成为瓶颈。分配组在内部使用高效的 B+树来跟踪主要数据，具有优越性能和极大的可扩展性。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;4.2 日志记录&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;XFS 也是一种日志记录文件系统，它允许意外重新引导后的快速恢复。象 ReiserFS 一样，XFS 使用逻辑日志；它不象 ext3 那样将文字文件系统块记录到日志，而是使用一种高效的磁盘格式来记录元数据的变动。就 XFS 而言，逻辑日志记录是很适合的；在高端硬件上，日志经常是整个文件系统中争用最多的资源。通过使用节省空间的逻辑日志记录，可以将对日志的争用降至最小。 另外，XFS 允许将日志存储在另一个块设备上，例如，另一个磁盘上的一个分区。这个特性很有用，它进一步改进了 XFS 文件系统的性能。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;4.3 延迟分配&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;延迟分配是 XFS 独有的特性，它是查找空闲空间区域并用于存储新数据的过程。通过延迟分配，XFS 赢得了许多机会来优化写性能。到了要将数据写到磁盘的时候，XFS 能够以这种优化文件系统性能的方式，智能地分配空闲空间。尤其是，如果要将一批新数据添加到单一文件，XFS 可以在磁盘上分配一个单一、相邻区域来储存这些数据。如果 XFS 没有延迟它的分配决定，那么，它也许已经不知不觉地将数据写到了多个非相邻块中，从而显著地降低了写性能。但是，因为 XFS 延迟了它的分配决定，所以，它能够一下子写完数据，从而提高了写性能，并减少了整个文件系统的碎片。在性能上，延迟分配还有另一个优点。在要创建许多&amp;#8221;短 命的&amp;#8221;临时文件的情况下，XFS 可能根本不需要将这些文件全部写到磁盘。因为从未给这些文件分配任何块，所以，也就不必释放任何块，甚至根本没有触及底层文件系统元数据。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;img src=&quot;http://www.ibm.com/i/v14/rules/blue_rule.gif&quot; height=&quot;1&quot; width=&quot;100%&quot; /&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;table class=&quot;no-print&quot; align=&quot;right&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr align=&quot;right&quot;&gt;
&lt;td&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td valign=&quot;middle&quot;&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;img src=&quot;http://www.ibm.com/i/v14/icons/u_bold.gif&quot; border=&quot;0&quot; height=&quot;16&quot; width=&quot;16&quot; /&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; valign=&quot;top&quot;&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;&lt;font size=&quot;4&quot;&gt;五、JFS&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;JFS 由IBM 公司开发，最初出现在AIX 操作系统之上，它提供了基于日志的字节级、面向事务的高性能文件系统。它具有可伸缩性和健壮性，与非日志文件系统相比，它的优点是其快速重启能力：JFS 能够在几秒或几分钟内就把文件系统恢复到一致状态。JFS 是完全 64 位的文件系统。所有 JFS 文件系统结构化字段都是 64 位大小。这允许 JFS 同时支持大文件和大分区。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;为了支持 DCE DFS（分布式计算环境分布式文件系统），JFS 将磁盘空间分配池（称为聚集）的概念, 与可安装的文件系统子树（称为文件集）的概念分开。每个分区只有一个聚集；每个聚集可能有多个文件集。在第一个发行版中，JFS 仅支持每个聚集一个文件集；但是，所有元数据都已设计成适用于所有情况。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;如图3所示，聚集开始部分是32K的保留区，紧随其后的是聚集主超级块。超级块包含聚集的信息，例 如：聚集的大小、分配组的大小、聚集块的尺寸等 等。超级块位于固定位置，这使得 JFS 不依赖任何其它信息，就能够找到它们。在聚集中还有一个重要的结构是聚集索引结点表（Aggregate Inode Table）以及用于其映射的聚集索引结点分配映射表（Aggregate Inode Allocation Map）。AIT表中的inode 0 保留，inode 1 描述聚集本身，inode 2 描述聚集块映射表（block map）， inode 3 描述安装时的内嵌日志，inode 4 描述在聚集格式化期间发现的坏块，保留inode 5 到 15 以备将来扩展。 从inode 16 开始，每个inode代表一个文件集。文件集中也有索引结点表以及用于其映射的索引结点分配映射表，文件集中的inode 描述文件集中的每一个文件。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;strong&gt;图3 JFS磁盘结构&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/image004.jpg&quot; alt=&quot;图3  JFS磁盘结构&quot; border=&quot;0&quot; height=&quot;487&quot; width=&quot;476&quot; /&gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#808080&quot;&gt;JFS 使用基于盘区的寻址结构，连同主动的块分配策略，产生紧凑、高效、可伸缩的结构，以将文件中的逻辑偏移量映射成磁盘上的物理地址。盘区是象一个单元那样分 配给文件的相连块序列，可用一个由 &amp;lt;逻辑偏移量，长度，物理地址&amp;gt; 组成的三元组来描述。寻址结构是一棵 B+ 树，该树由盘区描述符（上面提到的三元组）填充，根在 inode 中，键为文件中的逻辑偏移量。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;JFS 按需为磁盘 inode 动态地分配空间，同时释放不再需要的空间。这一支持避开了在文件系统创建期间，为磁盘 inode 保留固定数量空间的传统方法，因此用户不再需要估计文件系统包含的文件和目录最大数目。另外，这一支持使磁盘 inode 与固定磁盘位置分离。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;JFS 提供两种不同的目录组织。第一种组织用于小目录，并且在目录的 inode 内存储目录内容。这就不再需要不同的目录块 I/O，同时也不再需要分配不同的存储器。最多可有 8 个项可直接存储在 inode 中，这些项不包括自己(.)和父(..)目录项，这两个项存储在 inode 中不同的区域内。第二种组织用于较大的目录，用按名字键控的 B+ 树表示每个目录。与传统无序的目录组织比较，它提供更快的目录查找、插入和删除能力。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;
&lt;td&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;img src=&quot;http://www.ibm.com/i/v14/rules/blue_rule.gif&quot; height=&quot;1&quot; width=&quot;100%&quot; /&gt;&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;table class=&quot;no-print&quot; align=&quot;right&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr align=&quot;right&quot;&gt;
&lt;td&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tr&gt;
&lt;td valign=&quot;middle&quot;&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;img src=&quot;http://www.ibm.com/i/v14/icons/u_bold.gif&quot; border=&quot;0&quot; height=&quot;16&quot; width=&quot;16&quot; /&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td align=&quot;right&quot; valign=&quot;top&quot;&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;atitle&quot;&gt;&lt;font size=&quot;4&quot;&gt;六、性能测试&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;6.1 测试环境&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/table2.gif&quot; border=&quot;0&quot; height=&quot;105&quot; width=&quot;530&quot; /&gt;&lt;br /&gt;
&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;6.2测试工具&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;所用的测试工具是Postmark和Bonnie++。Postmark主要用于测试文件系统在邮件系统或电子商务系统中性能，这类应用的特点是：需要频繁、大量地存取小文件。而Bonnie++主要测试大文件的IO性能。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;span class=&quot;smalltitle&quot;&gt;&lt;strong&gt;&lt;font size=&quot;3&quot;&gt;6.3 测试结果分析&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;下面将详细分析用上述两种测试工具在各种测试参数配置下的结果。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;strong&gt;图4 PostMark 小文件&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/image006.gif&quot; alt=&quot;图4  PostMark 小文件&quot; border=&quot;0&quot; height=&quot;222&quot; width=&quot;412&quot; /&gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#808080&quot;&gt;图 4是PostMark测试小文件的结果，其参数是文件大小50B增至1K, 同一目录下的文件数从5k至20k，事务总数为25k。从图中我们可以看出：&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;1. 不论是Ext3 还是ReiserFS,在三种日志模式中，写回（writeback）最快，预定（ordered）次之，日志（journal）最慢。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;2. 在各种文件系统中，ReiserFS 的写回和预定模式是最快的，且随着文件数的增加事务处理速度下降的也很慢。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;3. Ext3在文件数较少时，事务处理速度也比较快，但当文件数超过10k后，速度就比较慢了。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;4. XFS和JFS的速度较慢，但随着文件数的增加，速度下降的比较缓慢。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;strong&gt;图5 PostMark 大文件&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/image008.gif&quot; alt=&quot;图5  PostMark 大文件&quot; border=&quot;0&quot; height=&quot;228&quot; width=&quot;389&quot; /&gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#808080&quot;&gt;图5是PostMark测试大文件的结果，其参数是文件大小1k至16K,同一目录下的文件数从5k增至20k，事务总数为25k时的测试结果。从图中我们可以看出：&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;1. 在处理大文件时，当文件数达到15k时，各种文件系统处理能力都较差。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;2. 当文件数在小于10k时，ReiserFS的写回、预定模式和EXT3的写回模式性能是比较好的。但这两种文件系统的全日志模式都比较差。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;3. XFS文件系统的性能居中，JFS文件系统的性能最差。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;strong&gt;图6：Bonnie++顺序写的速率&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/image010.gif&quot; alt=&quot;图6:Bonnie++顺序写的速率&quot; border=&quot;0&quot; height=&quot;231&quot; width=&quot;399&quot; /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;strong&gt;图7：Bonnie++顺序写时CPU利用率&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/image012.gif&quot; alt=&quot;图7:Bonnie++顺序写时CPU利用率&quot; border=&quot;0&quot; height=&quot;241&quot; width=&quot;396&quot; /&gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#808080&quot;&gt;图6是Bonnie++对文件大小分别为1G，2G，4G顺序写的性能比较，图7是其CPU的利用率比较。从上述两图中我们可以看出：&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;1. 除了Ext3和ReiserFS的Journal模式的性能较差外，其他几种模式和XFS、JFS写磁盘的速率相当。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;2. 从CPU利用率来看，各种文件系统的CPU利用率都比较低，而且随着数据量的增大CPU的利用率降低。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;3. Journal模式的CPU利用率比其他两种模式要低。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;br /&gt;
&lt;strong&gt;图8：Bonnie++ 顺序创建文件&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/image014.gif&quot; alt=&quot;图8:Bonnie++ 顺序创建文件&quot; border=&quot;0&quot; height=&quot;206&quot; width=&quot;397&quot; /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;strong&gt;图9：Bonnie++ 随机创建文件&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/image016.gif&quot; alt=&quot;图9:Bonnie++ 随机创建文件&quot; border=&quot;0&quot; height=&quot;211&quot; width=&quot;392&quot; /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;strong&gt;图10：Bonnie++ 随机删除文件&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/image018.gif&quot; alt=&quot;图10:Bonnie++ 随机删除文件&quot; border=&quot;0&quot; height=&quot;217&quot; width=&quot;392&quot; /&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;strong&gt;图11：Bonnie++ 随机删除文件时的CPU利用率&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&quot;http://www-128.ibm.com/developerworks/cn/linux/l-jfs/images/image020.gif&quot; alt=&quot;图11:Bonnie++ 随机删除文件时的CPU利用率&quot; border=&quot;0&quot; height=&quot;216&quot; width=&quot;391&quot; /&gt;&lt;br /&gt;
&lt;/font&gt;&lt;font color=&quot;#808080&quot;&gt;图8至图11是Bonnie++对创建和删除文件的性能比较，文件数由50k增至400k。从中可以看出：&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;1. 不管是创建文件，还是删除文件，Ext3和ReiserFS的三种日志模式之间的性能差别可以忽略不计。这主要是由于创建、删除文件都是对元数据的操作，而对元数据的操作三种模式之间本身就没有什么区别。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;2. 不管是创建文件，还是删除文件，Ext3的性能都比较差；ReiserFS的性能是最好的，特别是文件数少于100k时。这主要是由于Ext3是基于Ext2的，其目录项是线性组织的，而其他文件系统都是树形结构。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;3. 从CPU的利用率来看，除Ext3的利用率交给外，其他几种文件系统的利用率都很低。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;综上所述，我们可以得出以下结论：&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;1. 在小型系统，如：邮件系统或小规模的电子商务系统应用时，ReiserFS和Ext3 的性能是比较好的。但由于Ext3的目录项是线型的，而ReiserFS的目录项是树型的，故当目录下文件较多时，ReiserFS的性能更优。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;2. 在对于上G的这种大文件做I/O时，各种文件系统间的性能差距很小，性能瓶颈往往在磁盘上。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;3. 虽然XFS和JFS在设计结构上都比较好，但它们主要是针对大中型系统的，在小型系统中由于硬件的原因性能发挥不明显。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;4. 全日志模式和预定、写回这两种模式相比，性能差距是比较大的；而预定和写回之间的性能差距不大。所以性能和安全兼顾时，文件系统的缺省安全模式，即预定模式是比较好的选择。&lt;/font&gt;&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年05月30日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=477&quot; title=&quot;配置Heartbeat&quot;&gt;配置Heartbeat (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年05月30日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=476&quot; title=&quot;lvs 安装及配置&quot;&gt;lvs 安装及配置 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2007年01月18日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=374&quot; title=&quot;X86架构的Linux Flash Player 9发布稳定版&quot;&gt;X86架构的Linux Flash Player 9发布稳定版 (0)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/6ca33554b28b39379a931c80c84c5fa2&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/6ca33554b28b39379a931c80c84c5fa2/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=480</wfw:commentRss><description>在linux各种文件系统上，一个目录放多少文件合适？这个问题貌似没有准确的答案，至少我没查到。
我以前的同事说是文件超过3000后，查找文件的性能会下降。这个问题决定例如：图片这种文件是按照什么样的存放规则放在存储上，如果同一目录存放文件数量过多会降低文件的查找时间，如果过于分散又影响维护。
我今天做了个测试，我个人觉得不太正确，没有获得直接的结果。
由于我们WEB开发使用PHP，读写也使用PHP，所以用PHP做读写文件的测试。
一个脚本向一个目录下写固定文件大小，文件名不同的文件，文件名规则是从1开始一直到我指定的数量。
例如：1.TXT&amp;#8230;&amp;#8230;40000.TXT
脚本写完文件后，会根据我指定的文件名用fopen打开,读取一下指定的文件,从fopen开始到fclose结束用Php计时获得PHP找到文件并读取出内容消耗的时间。
测试环境：DELL服务器，型号忘记了，配置:Intel(R) Xeon(TM) CPU 3.06GHz,内存4g,ext3,CentOS release 4.6
我测试结果在1W以内时读取大概在3-4微妙，过万后，5W以后会在4微妙，没有反复测试但是测试5W,20W,40W,60w没有超过4微妙。
我觉得这个测试肯定是有问题的，应该加上并发读取和不固定的文件大小来模拟互联网服务的情况，或许可以获得真正的速度。
但是在文件超过2000后，rm删除文件时已经提示Argument list too long。
我觉得如果以方便系统维护的角度讲，也许不应该超过这个数字，虽然也有其他方式维护，但是这个问题还是应该注意的，HASH目录是解决办法。
下面有一篇我从其他BLOG转载的文章，是对于文件系统测试的,算是参考:
Linux日志文件系统及性能分析

张文江 , 硕士研究生
 吴庆波 , 副研究员
2005 年 9 月
日志文件系统可以在系统发生断电或者其它系统故障时保证整体数据的完整性， Linux是目前支持日志文件系统最多的操作系统之 一，本文重点研究了Linux常用的日志文件系统：EXT3、ReiserFS、XFS和JFS日志技术，并采用标准的测试工具PostMark和 Bonnie++对它们进行了测试，给出了详细的性能分析，对Linux服务器应用具有重要的参考价值。
一、概述
所谓日志文件系统是在传统文件系统的基础上，加入文件系统更改的日志记录，它的设计思想是：跟踪记录 文件系统的变化，并将变化内容记录入日志。日志 文件系统在磁盘分区中保存有日志记录，写操作首先是对记录文件进行操作，若整个写操作由于某种原因(如系统掉电)而中断，系统重启时，会根据日志记录来恢 复中断前的写操作。在日志文件系统中，所有的文件系统的变化都被记录到日志，每隔一定时间，文件系统会将更新后的元数据及文件内容写入磁盘。在对元数据做 任何改变以前，文件系统驱动程序会向日志中写入一个条目，这个条目描述了它将要做些什么，然后它修改元数据。目前Linux的日志文件系统主要有：在 Ext2基础上开发的Ext3，根据面向对象思想设计的ReiserFS，由SGI IRIX系统移植过来的XFS，由IBM AIX系统移植过来的JFS，其中EXT3完全兼容EXT2，其磁盘结构和EXT2完全一样，只是加入日志技术；而后三种文件系统广泛使用了B树以提高文 件系统的效率。




















二、Ext3
Ext3文件系统是直接从Ext2文件系统发展而来，目前Ext3文件系统已经非常稳定可靠，它完全 兼容Ext2文件系统，用户可以平滑地过渡到一 个日志功能健全的文件系统。Ext3日志文件系统的思想就是对文件系统进行的任何高级修改都分两步进行。首先，把待写块的一个副本存放在日志中；其次，当 发往日志的I/O 数据传送完成时（即数据提交到日志），块就写入文件系统。当发往文件系统的I/O 数据传送终止时（即数据提交给文件系统），日志中的块副本就被丢弃。
2.1 Ext3日志模式
Ext3既可以只对元数据做日志，也可以同时对文件数据块做日志。具体来说，Ext3提供以下三种日志模式：

日志（Journal ）
文件系统所有数据和元数据的改变都记入日志。这种模式减少了丢失每个文件所作修改的机会，但是它需要很多额外的磁盘访问。例如，当一个新文件被创建时，它的所有数据块都必须复制一份作为日志记录。这是最安全和最慢的Ext3日志模式。
预定（Ordered ）
只有对文件系统元数据的改变才记入日志。然而，Ext3文件系统把元数据和相关的数据块进行分组，以便把元数据写入磁盘之前写入数据块。这样，就可以减少文件内数据损坏的机会；例如，确保增大文件的任何写访问都完全受日志的保护。这是缺省的Ext3 日志模式。
写回（Writeback ）
只有对文件系统元数据的改变才记入日志；这是在其他日志文件系统发现的方法，也是最快的模式。

2.2 日志块设备（JBD）
Ext3 文件系统本身不处理日志，而是利用日志块设备（Journaling Block Device）或叫JBD 的通用内核层。Ext3文件系统调用JDB例程以确保在系统万一出现故障时它的后续操作不会损坏磁盘数据结构。Ext3 与JDB 之间的交互本质上基于三个基本单元：日志记录，原子操作和事务。
日志记录本质上是文件系统将要发出的低级操作的描述。在某些日志文件系统中，日志记录只包括操作所修 改的字节范围及字节在文件系统中的起始位置。然 而，JDB 层使用的日志记录由低级操作所修改的整个缓冲区组成。这种方式可能浪费很多日志空间（例如，当低级操作仅仅改变位图的一个位时），但是，它还是相当快的， 因为JBD 层直接对缓冲区和缓冲区首部进行操作。
修改文件系统的任一系统调用都通常划分为操纵磁盘数据结构的一系列低级操作。如果这些低级操作还没有 全部完成系统就意外宕机，就会损坏磁盘数据。为 了防止数据损坏，Ext3文件系统必须确保每个系统调用以原子的方式进行处理。原子操作是对磁盘数据结构的一组低级操作，这组低级操作对应一个单独的高级 操作。
出于效率的原因，JBD 层对日志的处理采用分组的方法，即把属于几个原子操作处理的日志记录分组放在一个单独的事务中。此外，与一个处理相关的所有日志记录都必须包含在同一个事 务中。一个事务的所有日志记录都存放在日志的连续块中。JBD层把每个事务作为整体来处理。例如，只有当包含在一个事务的日志记录中的所有数据提交给文件 [...]&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/6ca33554b28b39379a931c80c84c5fa2&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/6ca33554b28b39379a931c80c84c5fa2/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>linux</category><category>ext3</category><pubDate>Tue, 10 Jun 2008 17:14:45 +0800</pubDate><author>瞄的技术</author><comments>http://blog.80s.net.cn/?p=480#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=480</guid><dc:creator>瞄的技术</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=480</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081056/4919905</fs:itemid></item><item><title>做个关于Silverlight的小调查</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081057/4919905/1/item.html</link><content:encoded>&lt;p&gt;做一个调查，有多少人知道Silverlight，如果从成熟的1.0和beta的2.0中选，现在你会选择用那个，另外在另外半年内你选择用那个版本。&lt;br /&gt;
PS: Silverlight各个版本在国内的下载量已达5000W（官方消息）&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年06月25日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=486&quot; title=&quot;CSDN（SD俱乐部第4期）下一代用户体验设计&quot;&gt;CSDN（SD俱乐部第4期）下一代用户体验设计 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年06月16日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=475&quot; title=&quot;Silverlight 2.0 Developer Reference&quot;&gt;Silverlight 2.0 Developer Reference (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年05月24日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=474&quot; title=&quot;Silverlight 2.0 Developer Reference&quot;&gt;Silverlight 2.0 Developer Reference (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年04月06日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=468&quot; title=&quot;Silverlight1.0开发经验总结[1]&quot;&gt;Silverlight1.0开发经验总结[1] (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年03月27日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=467&quot; title=&quot;关于Silverlight2.0我比较关心的&quot;&gt;关于Silverlight2.0我比较关心的 (2)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/f58983d528d8c5785396eeeca7483434&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/f58983d528d8c5785396eeeca7483434/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=478</wfw:commentRss><description>做一个调查，有多少人知道Silverlight，如果从成熟的1.0和beta的2.0中选，现在你会选择用那个，另外在另外半年内你选择用那个版本。
PS: Silverlight各个版本在国内的下载量已达5000W（官方消息）
相关日志2008年06月25日 -- CSDN（SD俱乐部第4期）下一代用户体验设计 (0)2008年06月16日 -- Silverlight 2.0 Developer Reference (1)2008年05月24日 -- Silverlight 2.0 Developer Reference (0)2008年04月06日 -- Silverlight1.0开发经验总结[1] (1)2008年03月27日 -- 关于Silverlight2.0我比较关心的 (2)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/f58983d528d8c5785396eeeca7483434&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/f58983d528d8c5785396eeeca7483434/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>Silverlight</category><category>未分类</category><pubDate>Sat, 31 May 2008 22:16:51 +0800</pubDate><author>温飞飞 ai829</author><comments>http://blog.80s.net.cn/?p=478#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=478</guid><dc:creator>温飞飞 ai829</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=478</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081057/4919905</fs:itemid></item><item><title>配置Heartbeat</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081058/4919905/1/item.html</link><content:encoded>&lt;p&gt;Heartbeat是linux的HA插件，它可以通过主备的互相检测来到达主服务器倒了，自动切换备服务器。不仅可以用于lvs，其他服务也可以使用。&lt;br /&gt;
Ldirectord是lvs的启动工具,可以根据配置来启动对应LVS的服务。&lt;/p&gt;
&lt;p&gt;由于资源的问题只在2台服务器上配置Heartbeat可以自动切换，没有测试Ldirectord。这部分介绍网上有很多。实际就是在两个配置了一样的LVS Director机器上实现主备的自动切换。&lt;/p&gt;
&lt;p&gt;主  eth0:202.106.184.251外网IP,eth1:10.55.37.220内网IP&lt;br /&gt;
备   eth0:202.106.184.145外网IP,eth1:10.55.37.145内网IP。&lt;br /&gt;
2台服务器都要安装Heartbeat，并配置节点，Heartbeat可以通过串口或网络来检查主节点服务器是否存在，因此2个机器内网IP提供给Heartbeat使用。&lt;br /&gt;
在主备两个机器上都要在配置一个VIP，VIP提供用户访问。&lt;br /&gt;
VIP:202.106.184.132&lt;/p&gt;
&lt;p&gt;Heartbeat的配置&lt;br /&gt;
在两个主备D机器上：&lt;br /&gt;
安装&lt;br /&gt;
yum install heartbeat-ldirectord.i386&lt;/p&gt;
&lt;p&gt;yum install heartbeat.i386&lt;/p&gt;
&lt;p&gt;配置VIP&lt;br /&gt;
vi /etc/sysconfig/network-scripts/ifcfg-eth0:0&lt;br /&gt;
DEVICE=eth0:0&lt;br /&gt;
IPADDR=202.106.184.132&lt;br /&gt;
broadcast=202.106.184.255&lt;br /&gt;
NETMASK=255.255.255.255&lt;br /&gt;
ONBOOT=yes#开机就启动&lt;/p&gt;
&lt;p&gt;/etc/rc.d/init.d/network restart  #重启网卡&lt;/p&gt;
&lt;p&gt;route add -host 202.106.184.132  dev eth0:0&lt;/p&gt;
&lt;p&gt;在两台机器的hosts上把两个主机名 对应的IP地址增加上。&lt;br /&gt;
XD_Blog_Web_184_251 202.106.184.251&lt;br /&gt;
XD_Blog_Web_184_145 202.106.184.145&lt;/p&gt;
&lt;p&gt;配置Heartbeat：&lt;/p&gt;
&lt;p&gt;在/usr/share/doc/heartbeat-2.1.3下有配置文件的模板&lt;br /&gt;
authkeys 是主备服务器验证配置文件,需要上传到/etc/ha.d/ 权限600&lt;br /&gt;
格式&lt;br /&gt;
auth 2 #选择哪种认证&lt;br /&gt;
#1 crc #crc方式&lt;br /&gt;
2 sha1 HI! #sha1加密 后面的&amp;#8221;HI!&amp;#8221;是密码&lt;br /&gt;
#3 md5 Hello! #md5方式&lt;/p&gt;
&lt;p&gt;haresources 是Heartbeat主节点和监控服务的配置文件&lt;br /&gt;
格式:&lt;br /&gt;
XD_Blog_Web_184_251 IPaddr::202.106.184.251/24/202.106.184.255 ipvsadm ldirectord::www&lt;br /&gt;
#XD_Blog_Web_184_251主节点的主机名，需要在/etc/hosts下增加主机名 对应的ip地址;&lt;br /&gt;
#IPaddr::vip/24/网关;&lt;br /&gt;
#ipvsadm ldirectord::www 要切换的服务 及ldirectord读取www这个配置文件&lt;/p&gt;
&lt;p&gt;我测试的是httpd服务&lt;br /&gt;
XD_Blog_Web_184_251 IPaddr::202.106.184.132/24/202.106.184.255 httpd&lt;/p&gt;
&lt;p&gt;ha.cf是Heartbeat的配置文件，主要是在主机down的时候备机如何处理。&lt;br /&gt;
bcast     eth1 # 其他参数基本用默认的，这个参数是两台服务器的Heartbeat用什么形式连接，用内网端口eth1连接&lt;/p&gt;
&lt;p&gt;node     XD_Blog_Web_184_251#一共有多少个节点就写多少个&lt;br /&gt;
node     XD_Blog_Web_184_145&lt;br /&gt;
其他参数解释:&lt;br /&gt;
&lt;font color=&quot;#808080&quot;&gt;serial /dev/ttyS0&lt;/p&gt;
&lt;p&gt;使用串口heartbeat - 如果你不使用串口heartbeat, 你必须选择其它的介质，比如以太网bcast (ethernet) heartbeat。如果你使用其它串口heartbeat，修改/dev/ttyS0 为其它的串口设备。&lt;/p&gt;
&lt;p&gt;watchdog /dev/watchdog&lt;/p&gt;
&lt;p&gt;可选项：watchdog功能提供了一种方法能让系统在出现故障无法提供&amp;#8221;heartbeat&amp;#8221;时，仍然具有最小的功能，能在出现故障1分钟后重启该机 器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。如果你想使用该特性，你必须在内核中装入&amp;#8221;softdog&amp;#8221; 内核模块用来生成实际的设备文件。想要达到这个目的, 首先输入 &amp;#8220;insmod softdog&amp;#8221; 加载模块。然后，输入&amp;#8221;grep misc /proc/devices&amp;#8221; 注意显示的数字 (should be 10).然后, 输入&amp;#8221;cat /proc/misc | grep watchdog&amp;#8221; 注意输出显示出的数字(should be 130)。现在你可以生成设备文件使用如下命令：&amp;#8221;mknod /dev/watchdog c 10 130&amp;#8243; 。&lt;/p&gt;
&lt;p&gt;bcast eth1&lt;/p&gt;
&lt;p&gt;指定使用的广播heartbeat 的网络接口eth1(修改为eth0, eth2, 或你所使用的接口)&lt;/p&gt;
&lt;p&gt;keepalive 2&lt;/p&gt;
&lt;p&gt;设置心跳间隔时间为2两秒。&lt;/p&gt;
&lt;p&gt;warntime 10&lt;/p&gt;
&lt;p&gt;在日志中发出最后心跳&amp;#8221;late heartbeat&amp;#8221; 前的警告时间设定。&lt;/p&gt;
&lt;p&gt;deadtime 30&lt;/p&gt;
&lt;p&gt;在30秒后明确该节点的死亡。&lt;/p&gt;
&lt;p&gt;initdead 120&lt;/p&gt;
&lt;p&gt;在一些配置中，节点重启后需要花一些时间启动网络。这个时间与&amp;#8221;deadtime&amp;#8221;不同，要单独对待。 至少是标准死亡时间的两倍。&lt;/p&gt;
&lt;p&gt;hopfudge 1&lt;/p&gt;
&lt;p&gt;可选项： 用于环状拓扑结构,在集群中总共跳跃节点的数量。&lt;/p&gt;
&lt;p&gt;baud 19200&lt;/p&gt;
&lt;p&gt;串口波特率的设定(bps).&lt;/p&gt;
&lt;p&gt;udpport 694&lt;/p&gt;
&lt;p&gt;bcast和ucast通讯使用的端口号694 。这是缺省值，官方IANA 使用标准端口号。&lt;/p&gt;
&lt;p&gt;nice_failback on&lt;/p&gt;
&lt;p&gt;可选项：对那些熟悉Tru64 Unix, 心跳活动就像是&amp;#8221;favored member&amp;#8221;模式。主节点获取所有资源直到它宕机,同时备份节点启用。一旦主节点重新开始工作, 它将从备份节点重新获取所有资源。这个选项用来防止主节点失效后重新又获得集群资源。&lt;/p&gt;
&lt;p&gt;node linuxha1.linux-ha.org&lt;/p&gt;
&lt;p&gt;强制选项：通过`uname -n`命令显示出的集群中的机器名。&lt;/p&gt;
&lt;p&gt;node linuxha2.linux-ha.org&lt;/p&gt;
&lt;p&gt;强制选项：通过`uname -n`命令显示出的集群中的机器名。&lt;/p&gt;
&lt;p&gt;respawnuseridcmd&lt;/p&gt;
&lt;p&gt;可选项：列出可以被spawned 和监控的命令。例如：To spawn ccm 后台进程，可以增加如下内容：&lt;br /&gt;
respawn hacluster /usr/lib/heartbeat/ccm&lt;br /&gt;
通知heartbeat 重新以可信任userid身份运行(在我们的例子中是hacluster) 同时监视该进程的&amp;#8221;健康&amp;#8221;状况，如果进程死掉，重启它。例如ipfail, 内容如下：&lt;br /&gt;
respawn hacluster /usr/lib/heartbeat/ipfail&lt;br /&gt;
NOTE: 如果进程以退出代码100死掉, 这个进程将不会respawned。&lt;/p&gt;
&lt;p&gt;pingping1.linux-ha.orgping2.linux-ha.org &amp;#8230;.&lt;/p&gt;
&lt;p&gt;可选项：指定ping 的节点。 这些节点不是集群中的节点。它们用来检测网络的连接性，以便运行一些像ipfail的模块。&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;两个服务器启动Heartbeat&lt;br /&gt;
/etc/init.d/heartbeat start&lt;/p&gt;
&lt;p&gt;当主服务器关闭时，服务会自动切换到备服务器。&lt;br /&gt;
备服务器检查到主服务器没有相应的Log:&lt;br /&gt;
&lt;font color=&quot;#808080&quot;&gt;heartbeat[9836]: 2008/05/30_15:07:47 WARN: node xd_blog_web_184_251: is dead&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:07:47 WARN: No STONITH device configured.&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:07:47 WARN: Shared disks are not protected.&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:07:47 info: Resources being acquired from xd_blog_web_184_251.&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:07:47 info: Link xd_blog_web_184_251:eth1 dead.&lt;br /&gt;
harc[10882]:     2008/05/30_15:07:47 info: Running /etc/ha.d/rc.d/status status&lt;br /&gt;
heartbeat[10883]: 2008/05/30_15:07:47 info: No local resources [/usr/share/heartbeat/ResourceManager listkeys xd_blog_web_184_145] to acquire.&lt;br /&gt;
mach_down[10911]:        2008/05/30_15:07:47 info: Taking over resource group IPaddr::202.106.184.132/24/202.106.184.255&lt;br /&gt;
ResourceManager[10937]: 2008/05/30_15:07:47 info: Acquiring resource group: xd_blog_web_184_251 IPaddr::202.106.184.132/24/202.106.184.255 httpd&lt;br /&gt;
IPaddr[10964]:  2008/05/30_15:07:47 INFO:  Running OK&lt;br /&gt;
mach_down[10911]:        2008/05/30_15:07:47 info: /usr/share/heartbeat/mach_down: nice_failback: foreign resources acquired&lt;br /&gt;
mach_down[10911]:        2008/05/30_15:07:47 info: mach_down takeover complete for node xd_blog_web_184_251.&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:07:47 info: mach_down takeover complete.&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#000000&quot;&gt;主服务器恢复，备服务器停止服务器的Log&lt;/font&gt;&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:17:48 info: Heartbeat restart on node xd_blog_web_184_251&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:17:48 info: Link xd_blog_web_184_251:eth1 up.&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:17:48 info: Status update for node xd_blog_web_184_251: status init&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:17:48 info: Status update for node xd_blog_web_184_251: status up&lt;br /&gt;
harc[11426]:     2008/05/30_15:17:48 info: Running /etc/ha.d/rc.d/status status&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:17:48 info: Status update for node xd_blog_web_184_251: status active&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:17:48 info: all clients are now paused&lt;br /&gt;
harc[11442]:     2008/05/30_15:17:48 info: Running /etc/ha.d/rc.d/status status&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:17:48 info: remote resource transition completed.&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:17:48 info: xd_blog_web_184_145 wants to go standby [foreign]&lt;br /&gt;
harc[11458]:     2008/05/30_15:17:48 info: Running /etc/ha.d/rc.d/status status&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:17:49 info: standby: xd_blog_web_184_251 can take our foreign resources&lt;br /&gt;
heartbeat[11474]: 2008/05/30_15:17:49 info: give up foreign HA resources (standby).&lt;br /&gt;
ResourceManager[11487]: 2008/05/30_15:17:49 info: Releasing resource group: xd_blog_web_184_251 IPaddr::202.106.184.132/24/202.106.184.255 httpd&lt;br /&gt;
ResourceManager[11487]: 2008/05/30_15:17:49 info: Running /etc/init.d/httpd  stop&lt;br /&gt;
ResourceManager[11487]: 2008/05/30_15:17:49 info: Running /etc/ha.d/resource.d/IPaddr 202.106.184.132/24/202.106.184.255 stop&lt;br /&gt;
IPaddr[11577]:  2008/05/30_15:17:49 INFO: ifconfig eth0:0 down&lt;br /&gt;
IPaddr[11551]:  2008/05/30_15:17:49 INFO:  Success&lt;br /&gt;
heartbeat[11474]: 2008/05/30_15:17:49 info: foreign HA resource release completed (standby).&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:17:49 info: Local standby process completed [foreign].&lt;br /&gt;
heartbeat[9836]: 2008/05/30_15:17:51 info: all clients are now resumed&lt;br /&gt;
&lt;/font&gt;Ldirectord的配置，没有经过测试,将Ldirectord.cf存为www.cf，内容如下:&lt;/p&gt;
&lt;p&gt;&lt;font color=&quot;#808080&quot;&gt;&lt;font color=&quot;#000000&quot;&gt;virtual=202.106.184.132:80 #vip&lt;br /&gt;
real=202.106.184.250:80 gate #R机&lt;br /&gt;
fallback=127.0.0.1:80 gate&lt;br /&gt;
service=http&lt;br /&gt;
request=&amp;#8221;index.php&amp;#8221;&lt;br /&gt;
receive=&amp;#8221;Test Page&amp;#8221;&lt;br /&gt;
#virtualhost=some.domain.com.au&lt;br /&gt;
scheduler=rr&lt;br /&gt;
#persistent=600&lt;br /&gt;
#netmask=255.255.255.255&lt;br /&gt;
protocol=tcp&lt;br /&gt;
checktype=negotiate&lt;br /&gt;
checkport=80&lt;br /&gt;
#request=&amp;#8221;index.php&amp;#8221;&lt;br /&gt;
#receive=&amp;#8221;Test Page&amp;#8221;&lt;br /&gt;
#virtualhost=www.x.y.z&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年05月30日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=476&quot; title=&quot;lvs 安装及配置&quot;&gt;lvs 安装及配置 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年06月10日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=480&quot; title=&quot;一个目录下放多少文件合适？&quot;&gt;一个目录下放多少文件合适？ (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2007年01月18日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=374&quot; title=&quot;X86架构的Linux Flash Player 9发布稳定版&quot;&gt;X86架构的Linux Flash Player 9发布稳定版 (0)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/90455eeaf8686362d8dec1b6b500edd4&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/90455eeaf8686362d8dec1b6b500edd4/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=477</wfw:commentRss><description>Heartbeat是linux的HA插件，它可以通过主备的互相检测来到达主服务器倒了，自动切换备服务器。不仅可以用于lvs，其他服务也可以使用。
Ldirectord是lvs的启动工具,可以根据配置来启动对应LVS的服务。
由于资源的问题只在2台服务器上配置Heartbeat可以自动切换，没有测试Ldirectord。这部分介绍网上有很多。实际就是在两个配置了一样的LVS Director机器上实现主备的自动切换。
主  eth0:202.106.184.251外网IP,eth1:10.55.37.220内网IP
备   eth0:202.106.184.145外网IP,eth1:10.55.37.145内网IP。
2台服务器都要安装Heartbeat，并配置节点，Heartbeat可以通过串口或网络来检查主节点服务器是否存在，因此2个机器内网IP提供给Heartbeat使用。
在主备两个机器上都要在配置一个VIP，VIP提供用户访问。
VIP:202.106.184.132
Heartbeat的配置
在两个主备D机器上：
安装
yum install heartbeat-ldirectord.i386
yum install heartbeat.i386
配置VIP
vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
IPADDR=202.106.184.132
broadcast=202.106.184.255
NETMASK=255.255.255.255
ONBOOT=yes#开机就启动
/etc/rc.d/init.d/network restart  #重启网卡
route add -host 202.106.184.132  dev eth0:0
在两台机器的hosts上把两个主机名 对应的IP地址增加上。
XD_Blog_Web_184_251 202.106.184.251
XD_Blog_Web_184_145 202.106.184.145
配置Heartbeat：
在/usr/share/doc/heartbeat-2.1.3下有配置文件的模板
authkeys 是主备服务器验证配置文件,需要上传到/etc/ha.d/ 权限600
格式
auth 2 #选择哪种认证
#1 crc #crc方式
2 sha1 HI! #sha1加密 后面的&amp;#8221;HI!&amp;#8221;是密码
#3 md5 Hello! #md5方式
haresources 是Heartbeat主节点和监控服务的配置文件
格式:
XD_Blog_Web_184_251 IPaddr::202.106.184.251/24/202.106.184.255 ipvsadm ldirectord::www
#XD_Blog_Web_184_251主节点的主机名，需要在/etc/hosts下增加主机名 对应的ip地址;
#IPaddr::vip/24/网关;
#ipvsadm ldirectord::www 要切换的服务 及ldirectord读取www这个配置文件
我测试的是httpd服务
XD_Blog_Web_184_251 IPaddr::202.106.184.132/24/202.106.184.255 httpd
ha.cf是Heartbeat的配置文件，主要是在主机down的时候备机如何处理。
bcast     eth1 # 其他参数基本用默认的，这个参数是两台服务器的Heartbeat用什么形式连接，用内网端口eth1连接
node     XD_Blog_Web_184_251#一共有多少个节点就写多少个
node     XD_Blog_Web_184_145
其他参数解释:
serial [...]&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/90455eeaf8686362d8dec1b6b500edd4&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/90455eeaf8686362d8dec1b6b500edd4/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>Heartbeat</category><category>linux</category><category>lvs</category><pubDate>Fri, 30 May 2008 18:06:41 +0800</pubDate><author>瞄的技术</author><comments>http://blog.80s.net.cn/?p=477#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=477</guid><dc:creator>瞄的技术</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=477</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081058/4919905</fs:itemid></item><item><title>lvs 安装及配置</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081059/4919905/1/item.html</link><content:encoded>&lt;p&gt;LVS介绍和各种模式 调度算法去LVS官网看就好了。不过这个配置没什么实际意义，Director是单点，OVER了就全完了，这部分还要在学习一下。&lt;br /&gt;
另外网络环境是个很灵活的事，需要灵活处理。下面的安装方法也是我参考其他的文档，尝试的。&lt;/p&gt;
&lt;p&gt;安装&lt;br /&gt;
linux kernel2.6的都不需要打patch。只要安装ipvsadm就好了&lt;/p&gt;
&lt;p&gt;实现VS/NAT:&lt;br /&gt;
这个模式实际是信息双向流动都通过lvs,内部服务器是不可见的，发包 收包都是通过lvs的D机来做的，因此貌似D机器的压力会很大，要处理双向的流量。&lt;/p&gt;
&lt;p&gt;Director  eth0:202.106.184.251外网IP,eth1:10.55.37.220内网IP。我用的是双网卡，经过和其他同事讨论，单网卡也一样。&lt;/p&gt;
&lt;p&gt;RealServer只需要设置网关为D的内网IP即可。&lt;br /&gt;
RealServer：10.55.37.132；10.55.37.231内网Ip&lt;/p&gt;
&lt;p&gt;Director 配置:&lt;br /&gt;
yum install  ipvsadm.i386&lt;/p&gt;
&lt;p&gt;vi /etc/sysctl.conf&lt;br /&gt;
net.ipv4.ip_forward = 1 #打开IP转发&lt;/p&gt;
&lt;p&gt;sysctl -p  重新使用配置&lt;br /&gt;
ipvsadm -L #显示内核虚拟服务器表&lt;br /&gt;
ipvsadm -C 清除内核虚拟服务器表中的所有记录。&lt;/p&gt;
&lt;p&gt;ipvsadm -A -t 202.106.184.251:80 -s wlc #-a加记录 -t tcp服务 -s调度模式 默认wlc&lt;br /&gt;
ipvsadm -a -t 202.106.184.251:80 -r 10.55.37.145:80 -m #-m nat模式 -r 真实的服务器地址:端口&lt;br /&gt;
ipvsadm -a -t 202.106.184.251:80 -r 10.55.37.132:80 -m&lt;/p&gt;
&lt;p&gt;/etc/rc.d/init.d/ipvsadm save 将配制保存到/etc/sysconfig/ipvsadm 配制文件中&lt;/p&gt;
&lt;p&gt;在两台R机器&lt;br /&gt;
vi /etc/sysconfig/network&lt;br /&gt;
GATEWAY=10.55.37.220 #修改网关为D机IP&lt;/p&gt;
&lt;p&gt;在R机器开apache配置虚拟目录，设置域名到D机的HOST,访问域名可以发现在两个R机器轮询。&lt;/p&gt;
&lt;p&gt;VS/DR:&lt;br /&gt;
这个模式类似单臂路由，指的是用户的请求通过LVS的D机进去，分发给R机器，但是R机回包的时候不原路经过D机返回给客户端，而是经过其他路由或线路范围，这样在D机只处理请求并不向用户返回数据，降低压力。&lt;br /&gt;
D机器依然是双网卡，单网卡也可以，有的配置方案上是单网卡+VIP,貌似如果没有HA的话，VIP不需要。&lt;/p&gt;
&lt;p&gt;Director  eth0:202.106.184.251外网IP,eth1:10.55.37.220内网IP。&lt;br /&gt;
ipvsadm -C #清掉以前的配置记录&lt;br /&gt;
ipvsadm -A -t 202.106.184.251:80 -s wlc&lt;br /&gt;
ipvsadm -a -t 202.106.184.251:80 -r 10.55.37.145:80 -g&lt;br /&gt;
ipvsadm -a -t 202.106.184.251:80 -r 10.55.37.231:80 -g&lt;/p&gt;
&lt;p&gt;在两台R机器&lt;br /&gt;
vi /etc/sysctl.conf #设置arp 这部分我没太搞明白&lt;br /&gt;
&lt;code&gt; net.ipv4.ip_forward = 1&lt;/code&gt;&lt;br /&gt;
&lt;code&gt; net.ipv4.conf.lo.arp_ignore = 1&lt;br /&gt;
net.ipv4.conf.lo.arp_announce = 2&lt;br /&gt;
net.ipv4.conf.all.arp_ignore = 1&lt;br /&gt;
net.ipv4.conf.all.arp_announce = 2&lt;/p&gt;
&lt;p&gt;vi /etc/sysconfig/network-scripts/ifcfg-lo:0 #增加vip&lt;br /&gt;
DEVICE=lo:0&lt;br /&gt;
IPADDR=202.106.184.251 #我这里写的就是D机的外网IP,如果D机器对外提供访问的是VIP,这里填对应的VIP&lt;br /&gt;
NETMASK=255.255.255.255&lt;br /&gt;
ONBOOT=yes&lt;/p&gt;
&lt;p&gt;/etc/rc.d/init.d/network restart #重启网卡&lt;/p&gt;
&lt;p&gt;&lt;/code&gt; 在R机器开apache配置虚拟目录，设置域名到D机的HOST,访问域名可以发现在两个R机器轮询。&lt;br /&gt;
&lt;code&gt;&lt;br /&gt;
arp配置的含义:&lt;br /&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;arp_ignore - 整型
        当对要求解析本地目标IP地址的ARP请求做响应时，定义不同的模式：
        0 - (缺省): 响应配置在任何接口上的任何本地目标地址
        1 - 只有当目标IP地址是配置在进入接口上的本地地址时才响应
        2 - 只有当目标IP地址是配置在进入接口上的本地地址，并且发送者的IP地址处于本接口的同一网段时才响应
        3 - 不响应用scope host配置的本地地址，只有通用地址和链接地址会被响应
        4-7 - 保留
        8 - 不响应所有的本地地址

        conf/{all,interface}/arp_ignore的最大值在{interface}上收到APR请求的时候被使用。

arp_announce - 整型
        在ARP请求被送到接口上，要在IP包中宣布本地源IP地址时，定义不同的限制级别：
        0 - （缺省）使用配置在任何接口上的任何本地地址
        1 - 尝试避免本接口上的本地地址不是目标的子网段。当目标主机请求的源地址是逻辑网段的一部分时候，这种模式有用。
            如果我们生成这个请求，我们将会检查包含目标IP的所有子网，保留来自这些子网的源地址。
            如果没有这样的子网，就用级别2的规则来选择。
        2 - 总是使用这个目标的最好的本地地址。在这种模式下，我们忽略IP包中的源地址，尝试选择我们喜欢的本地地址给目标主机。
            选择的方式是在输出接口上包含目标IP地址的所有子网里寻找主要的IP地址。
            如果没有合适的的目标地址，就选择输出接口或者所有其他接口上的第一个地址。

            conf/{all,interface}/arp_announce的最大值是被使用的。

            提高限制级别会提供更多的机会来接收到解析目标的响应回答，而降低级别会宣布更多有效的发送者信息。&lt;/pre&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年05月30日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=477&quot; title=&quot;配置Heartbeat&quot;&gt;配置Heartbeat (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年06月10日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=480&quot; title=&quot;一个目录下放多少文件合适？&quot;&gt;一个目录下放多少文件合适？ (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2007年01月18日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=374&quot; title=&quot;X86架构的Linux Flash Player 9发布稳定版&quot;&gt;X86架构的Linux Flash Player 9发布稳定版 (0)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/31b28b6fcce499880b7a0572d932ebcd&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/31b28b6fcce499880b7a0572d932ebcd/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=476</wfw:commentRss><description>LVS介绍和各种模式 调度算法去LVS官网看就好了。不过这个配置没什么实际意义，Director是单点，OVER了就全完了，这部分还要在学习一下。
另外网络环境是个很灵活的事，需要灵活处理。下面的安装方法也是我参考其他的文档，尝试的。
安装
linux kernel2.6的都不需要打patch。只要安装ipvsadm就好了
实现VS/NAT:
这个模式实际是信息双向流动都通过lvs,内部服务器是不可见的，发包 收包都是通过lvs的D机来做的，因此貌似D机器的压力会很大，要处理双向的流量。
Director  eth0:202.106.184.251外网IP,eth1:10.55.37.220内网IP。我用的是双网卡，经过和其他同事讨论，单网卡也一样。
RealServer只需要设置网关为D的内网IP即可。
RealServer：10.55.37.132；10.55.37.231内网Ip
Director 配置:
yum install  ipvsadm.i386
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 #打开IP转发
sysctl -p  重新使用配置
ipvsadm -L #显示内核虚拟服务器表
ipvsadm -C 清除内核虚拟服务器表中的所有记录。
ipvsadm -A -t 202.106.184.251:80 -s wlc #-a加记录 -t tcp服务 -s调度模式 默认wlc
ipvsadm -a -t 202.106.184.251:80 -r 10.55.37.145:80 -m #-m nat模式 -r 真实的服务器地址:端口
ipvsadm -a -t 202.106.184.251:80 -r 10.55.37.132:80 -m
/etc/rc.d/init.d/ipvsadm save 将配制保存到/etc/sysconfig/ipvsadm 配制文件中
在两台R机器
vi /etc/sysconfig/network
GATEWAY=10.55.37.220 #修改网关为D机IP
在R机器开apache配置虚拟目录，设置域名到D机的HOST,访问域名可以发现在两个R机器轮询。
VS/DR:
这个模式类似单臂路由，指的是用户的请求通过LVS的D机进去，分发给R机器，但是R机回包的时候不原路经过D机返回给客户端，而是经过其他路由或线路范围，这样在D机只处理请求并不向用户返回数据，降低压力。
D机器依然是双网卡，单网卡也可以，有的配置方案上是单网卡+VIP,貌似如果没有HA的话，VIP不需要。
Director  eth0:202.106.184.251外网IP,eth1:10.55.37.220内网IP。
ipvsadm -C [...]&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/31b28b6fcce499880b7a0572d932ebcd&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/31b28b6fcce499880b7a0572d932ebcd/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>linux</category><category>lvs</category><pubDate>Fri, 30 May 2008 18:05:38 +0800</pubDate><author>瞄的技术</author><comments>http://blog.80s.net.cn/?p=476#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=476</guid><dc:creator>瞄的技术</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=476</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081059/4919905</fs:itemid></item><item><title>Silverlight 2.0 Developer Reference</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081060/4919905/1/item.html</link><content:encoded>&lt;p&gt;&lt;a rel=&quot;attachment wp-att-479&quot; href=&quot;http://blog.80s.net.cn/?attachment_id=479&quot; title=&quot;11abfbd56cb.jpg&quot;&gt;&lt;/a&gt;here is the Silverlight 2.0 Developer Reference from &lt;a href=&quot;http://blogs.msdn.com/brada/default.aspx&quot;&gt;&lt;font size=&quot;2&quot; color=&quot;#96b0af&quot;&gt;Brad Abrams&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;
It is very useful for Silverlight Developers. Enjoy!~~&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;attachment wp-att-479&quot; href=&quot;http://blog.80s.net.cn/?attachment_id=479&quot; title=&quot;11abfbd56cb.jpg&quot;&gt;&lt;img src=&quot;http://blog.80s.net.cn/wp-content/uploads/2008/05/11abfbd56cb.jpg&quot; alt=&quot;11abfbd56cb.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;you can download the image file in three file formats&lt;/p&gt;
&lt;p&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://brad_abrams.members.winisp.net/Projects/Mix08SL2Poster/Silverlight2PosterMIX08.jpg&quot;&gt;JPG file&lt;/a&gt; |  &lt;a href=&quot;http://brad_abrams.members.winisp.net/Projects/Mix08SL2Poster/Silverlight2PosterMIX08.png&quot;&gt;PNG file&lt;/a&gt; | &lt;a target=&quot;_blank&quot; href=&quot;http://brad_abrams.members.winisp.net/Projects/Mix08SL2Poster/Silverlight2PosterMIX08.tif&quot;&gt;TIF file&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年06月25日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=486&quot; title=&quot;CSDN（SD俱乐部第4期）下一代用户体验设计&quot;&gt;CSDN（SD俱乐部第4期）下一代用户体验设计 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年06月16日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=475&quot; title=&quot;Silverlight 2.0 Developer Reference&quot;&gt;Silverlight 2.0 Developer Reference (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年05月31日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=478&quot; title=&quot;做个关于Silverlight的小调查&quot;&gt;做个关于Silverlight的小调查 (6)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年04月06日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=468&quot; title=&quot;Silverlight1.0开发经验总结[1]&quot;&gt;Silverlight1.0开发经验总结[1] (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年03月27日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=467&quot; title=&quot;关于Silverlight2.0我比较关心的&quot;&gt;关于Silverlight2.0我比较关心的 (2)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/49703a5506dc7022cdc1308024f76f44&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/49703a5506dc7022cdc1308024f76f44/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=474</wfw:commentRss><description>here is the Silverlight 2.0 Developer Reference from Brad Abrams
It is very useful for Silverlight Developers. Enjoy!~~

you can download the image file in three file formats
JPG file &amp;#124;  PNG file &amp;#124; TIF file
相关日志2008年06月25日 -- CSDN（SD俱乐部第4期）下一代用户体验设计 (0)2008年06月16日 -- Silverlight 2.0 Developer Reference (1)2008年05月31日 -- 做个关于Silverlight的小调查 (6)2008年04月06日 -- Silverlight1.0开发经验总结[1] (1)2008年03月27日 -- 关于Silverlight2.0我比较关心的 (2)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/49703a5506dc7022cdc1308024f76f44&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/49703a5506dc7022cdc1308024f76f44/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>Silverlight</category><pubDate>Sat, 24 May 2008 23:08:31 +0800</pubDate><author>温飞飞 ai829</author><comments>http://blog.80s.net.cn/?p=474#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=474</guid><dc:creator>温飞飞 ai829</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=474</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081060/4919905</fs:itemid></item><item><title>MYSQL数据库设计的一点总结</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081061/4919905/1/item.html</link><content:encoded>&lt;p&gt;大大小小也搞过一些数据库设计，见过一些其他人的设计，看过些书，总结总结，经验谈。&lt;br /&gt;
选表类型：&lt;br /&gt;
大家都知道mysql的myisam表适合读操作大，写操作少;表级锁表&lt;br /&gt;
innodb表正好相反；行级锁表&lt;br /&gt;
互联网服务，不算支付性的服务外，互动产品，新闻系统等等一般都是读多，写少。用myisam表比较合适。&lt;/p&gt;
&lt;p&gt;表的设计&lt;br /&gt;
定长表:所有列的字段长度都是定长的。可以去查mysql的手册不定长字段是VARCHAR、BLOB或TEXT。int char都是定长的，定长表占用空间会大。&lt;br /&gt;
动态表:就是字段不是都定长的。&lt;br /&gt;
定长表要比动态表检索速度快。&lt;/p&gt;
&lt;p&gt;软件系统的设计习惯是把每张表都分清很明确的功能，比如用户表都是用户信息，如果需要同时从留言表取数据，又从用户表取用户信息的时候，就会采用联合查 询，有的时候一些操作还会用left,join等各种复杂sql语句，没准还要用mysql的函数。如果是针对访问量，读取量很大的互联网服务时，同时并 发去读，数据量又大，很可怕。最好是如果数据不会修改，在常用的表上有冗余字段，能够做到一次读，把数据都拿到；可以有冗余的写操作，但减少复杂的查询操 作。&lt;/p&gt;
&lt;p&gt;在设计表的时候要将这个表的所有字段类型占用的字节数求和，并乘以你的预期（如:存储100W数据量），就是整张表未来会占用容量。&lt;/p&gt;
&lt;p&gt;拆表 拆库&lt;br /&gt;
拆表就是将一张表复制N多张，里面分别存放不用内容的数据，数据的存放是用HASH算法来决定放入哪张表。&lt;br /&gt;
例如用户表user,传统情况就是一张表，拆表就是将表复制为user_01,user_02等里面都存放了格式一样的不同用户数据。&lt;/p&gt;
&lt;p&gt;拆库和拆表类似，就是库的复制。&lt;/p&gt;
&lt;p&gt;拆表或拆库有很多的HASH算法，主要目的就是减少表的数据量，用算法保证每个表的数据量平均，请求，读写操作被分摊降低压力，而且安全，出了问题最多是一部分用户受影响。缺点就是检索不方便，需要另想办法。&lt;/p&gt;
&lt;p&gt;很多网站为了前期省事都会采用discuz的产品，如bbs,blog等，网上有不少关于这个产品的介绍和优化方法，没细研究过，听过一些网站介绍他们的 优化方法时，对于数据库主要是采用主从的方法，将数据库的读写分离来提高性能，但是个人觉得这种办法在数据量到了规模的时候就OVER了，并发和读写操作 没提升，数据也是会逐渐累计超过限制。&lt;/p&gt;
&lt;p&gt;互联网服务由于要应对大数据量，大请求量，所以在设计开发的时候就不要太学院派，不要力图达到数据库、程序的设计“优美”，性能是最要紧的。&lt;/p&gt;
&lt;h3&gt;随机日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2005年11月01日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=283&quot; title=&quot;Windows live&amp;#8211;Google和Microsoft的战争前兆&quot;&gt;Windows live&amp;#8211;Google和Microsoft的战争前兆 (4)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2005年04月28日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=227&quot; title=&quot;寻找新的浏览方式&amp;#8211;picture viewer&quot;&gt;寻找新的浏览方式&amp;#8211;picture viewer (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2005年07月25日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=236&quot; title=&quot;微软的Virtual earth&quot;&gt;微软的Virtual earth (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2006年06月05日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=335&quot; title=&quot;当当网音乐频道设计项目成功上线&quot;&gt;当当网音乐频道设计项目成功上线 (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2005年03月30日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=221&quot; title=&quot;Flash支持的系统平台和语言的列表&quot;&gt;Flash支持的系统平台和语言的列表 (0)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/36f2e876bc22f8071115b72c46efb86e&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/36f2e876bc22f8071115b72c46efb86e/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=473</wfw:commentRss><description>大大小小也搞过一些数据库设计，见过一些其他人的设计，看过些书，总结总结，经验谈。
选表类型：
大家都知道mysql的myisam表适合读操作大，写操作少;表级锁表
innodb表正好相反；行级锁表
互联网服务，不算支付性的服务外，互动产品，新闻系统等等一般都是读多，写少。用myisam表比较合适。
表的设计
定长表:所有列的字段长度都是定长的。可以去查mysql的手册不定长字段是VARCHAR、BLOB或TEXT。int char都是定长的，定长表占用空间会大。
动态表:就是字段不是都定长的。
定长表要比动态表检索速度快。
软件系统的设计习惯是把每张表都分清很明确的功能，比如用户表都是用户信息，如果需要同时从留言表取数据，又从用户表取用户信息的时候，就会采用联合查 询，有的时候一些操作还会用left,join等各种复杂sql语句，没准还要用mysql的函数。如果是针对访问量，读取量很大的互联网服务时，同时并 发去读，数据量又大，很可怕。最好是如果数据不会修改，在常用的表上有冗余字段，能够做到一次读，把数据都拿到；可以有冗余的写操作，但减少复杂的查询操 作。
在设计表的时候要将这个表的所有字段类型占用的字节数求和，并乘以你的预期（如:存储100W数据量），就是整张表未来会占用容量。
拆表 拆库
拆表就是将一张表复制N多张，里面分别存放不用内容的数据，数据的存放是用HASH算法来决定放入哪张表。
例如用户表user,传统情况就是一张表，拆表就是将表复制为user_01,user_02等里面都存放了格式一样的不同用户数据。
拆库和拆表类似，就是库的复制。
拆表或拆库有很多的HASH算法，主要目的就是减少表的数据量，用算法保证每个表的数据量平均，请求，读写操作被分摊降低压力，而且安全，出了问题最多是一部分用户受影响。缺点就是检索不方便，需要另想办法。
很多网站为了前期省事都会采用discuz的产品，如bbs,blog等，网上有不少关于这个产品的介绍和优化方法，没细研究过，听过一些网站介绍他们的 优化方法时，对于数据库主要是采用主从的方法，将数据库的读写分离来提高性能，但是个人觉得这种办法在数据量到了规模的时候就OVER了，并发和读写操作 没提升，数据也是会逐渐累计超过限制。
互联网服务由于要应对大数据量，大请求量，所以在设计开发的时候就不要太学院派，不要力图达到数据库、程序的设计“优美”，性能是最要紧的。
随机日志2008年03月27日 -- 关于Silverlight2.0我比较关心的 (2)2005年09月01日 -- &amp;#8220;Macromedia Studio8 视频实况剪辑(1-14)&amp;#8221; (3)2005年03月22日 -- 关于class a和 class a=new class()的区别 杂说 (0)2008年06月12日 -- 模拟用户登录脚本,手工输入验证码 (0)2007年11月16日 -- AIR新logo以及Flash On (0)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/36f2e876bc22f8071115b72c46efb86e&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/36f2e876bc22f8071115b72c46efb86e/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>Mysql</category><pubDate>Fri, 23 May 2008 19:26:32 +0800</pubDate><author>瞄的技术</author><comments>http://blog.80s.net.cn/?p=473#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=473</guid><dc:creator>瞄的技术</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=473</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081061/4919905</fs:itemid></item><item><title>[5月]RIAMeeting第六次开发者交流活动</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081062/4919905/1/item.html</link><content:encoded>&lt;p class=&quot;t_msgfont&quot;&gt;[5月]RIAMeeting第六次开发者交流活动&lt;br /&gt;
5月的一场大地震带给我们过多的悲痛，但国家还要兴起，技术还要进步，让广大RIA开发者化悲愤为力量，继续开创中国的RIA事业吧！&lt;br /&gt;
本月的25日，RIAMeeting将举办第六次开发者交流活动，本次活动邀请到了Adobe总部的Air Evangelist （老外）为我们讲一个 General AIR Overview，之后会介绍一下Flash10的新特性以及讨论展示一些Flash10的示例代码，以下是本次活动的详情：&lt;br /&gt;
会议时间：周日(5月25日) 13:30-17:00&lt;br /&gt;
会议日程：&lt;br /&gt;
13:30–14:00 签到时间&lt;br /&gt;
14:00-15:00 General AIR Overview&lt;br /&gt;
15:00–16:00 Flash10新特性&lt;br /&gt;
16:00–17:00 分组讨论&lt;/p&gt;
&lt;p class=&quot;t_msgfont&quot;&gt;
会议地点：&lt;br /&gt;
Adobe中国研发中心&lt;br /&gt;
北京海淀区中关村东路1号院 清华科技园 科技大厦 A座 21层&lt;/p&gt;
&lt;p class=&quot;t_msgfont&quot;&gt;
&lt;strong&gt;请使用这个链接 &lt;a target=&quot;_blank&quot; href=&quot;http://www.riameeting.cn/register/&quot;&gt;http://www.riameeting.cn/register/&lt;/a&gt; 报名&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;相关日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年06月11日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=481&quot; title=&quot;Adobe Flex/Air中国行调查&quot;&gt;Adobe Flex/Air中国行调查 (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年03月03日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=463&quot; title=&quot;Flex3.0和AIR1.0中国开发者交流活动&quot;&gt;Flex3.0和AIR1.0中国开发者交流活动 (3)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年02月25日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=459&quot; title=&quot;Adobe AIR1.0 launch t-shirt&quot;&gt;Adobe AIR1.0 launch t-shirt (3)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年02月25日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=456&quot; title=&quot;Adobe正式发布AIR1.0和Flex3.0&quot;&gt;Adobe正式发布AIR1.0和Flex3.0 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年02月22日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=455&quot; title=&quot;深入解析Adobe Flex/AIR 座谈会[北京]&quot;&gt;深入解析Adobe Flex/AIR 座谈会[北京] (4)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/bd1c6ceec1046236c429c765da28407c&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/bd1c6ceec1046236c429c765da28407c/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=472</wfw:commentRss><description>[5月]RIAMeeting第六次开发者交流活动
5月的一场大地震带给我们过多的悲痛，但国家还要兴起，技术还要进步，让广大RIA开发者化悲愤为力量，继续开创中国的RIA事业吧！
本月的25日，RIAMeeting将举办第六次开发者交流活动，本次活动邀请到了Adobe总部的Air Evangelist （老外）为我们讲一个 General AIR Overview，之后会介绍一下Flash10的新特性以及讨论展示一些Flash10的示例代码，以下是本次活动的详情：
会议时间：周日(5月25日) 13:30-17:00
会议日程：
13:30–14:00 签到时间
14:00-15:00 General AIR Overview
15:00–16:00 Flash10新特性
16:00–17:00 分组讨论

会议地点：
Adobe中国研发中心
北京海淀区中关村东路1号院 清华科技园 科技大厦 A座 21层

请使用这个链接 http://www.riameeting.cn/register/ 报名
相关日志2008年06月11日 -- Adobe Flex/Air中国行调查 (1)2008年03月03日 -- Flex3.0和AIR1.0中国开发者交流活动 (3)2008年02月25日 -- Adobe AIR1.0 launch t-shirt (3)2008年02月25日 -- Adobe正式发布AIR1.0和Flex3.0 (0)2008年02月22日 -- 深入解析Adobe Flex/AIR 座谈会[北京] (4)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/bd1c6ceec1046236c429c765da28407c&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/bd1c6ceec1046236c429c765da28407c/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>FlashPlayer</category><category>AIR</category><pubDate>Wed, 21 May 2008 10:43:45 +0800</pubDate><author>温飞飞 ai829</author><comments>http://blog.80s.net.cn/?p=472#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=472</guid><dc:creator>温飞飞 ai829</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=472</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081062/4919905</fs:itemid></item><item><title>网页版HTTPWATCH 网站性能调试好工具</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081063/4919905/1/item.html</link><content:encoded>&lt;p&gt;httpwatch现在是开发互联网服务的必用工具(IE下使用)，ff下是firebug,yslow。&lt;br /&gt;
http://www.gomez.com/info_center/instant_test.php&lt;br /&gt;
这个工具类似网站版的httpwatch,可以列出你所制定URL页面的各个内部元素的下载时间及状态。另外还有一个很不错的功能，就是选择IDC ，有了这个选项你可以测试其他地区的用户对你网站的访问速度。帮助你找到在你网页中制约下载速度是网络问题，还是页面布局，或者是某一个元素的问题。&lt;/p&gt;
&lt;h3&gt;随机日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2006年01月25日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=304&quot; title=&quot;opera mini免费下载列&quot;&gt;opera mini免费下载列 (2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2006年04月19日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=320&quot; title=&quot;[转]flash动画——中国动画新浪潮&quot;&gt;[转]flash动画——中国动画新浪潮 (1)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年01月24日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=439&quot; title=&quot;Silverlight杀手锏&quot;&gt;Silverlight杀手锏 (4)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2004年12月15日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=180&quot; title=&quot;防止FLEX输出的swf下载到客户端&quot;&gt;防止FLEX输出的swf下载到客户端 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2007年11月18日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=417&quot; title=&quot;RIAMeeting第二次活动报名中&quot;&gt;RIAMeeting第二次活动报名中 (0)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/8a0f84a13a700d9de137ebfc6136c388&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/8a0f84a13a700d9de137ebfc6136c388/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=471</wfw:commentRss><description>httpwatch现在是开发互联网服务的必用工具(IE下使用)，ff下是firebug,yslow。
http://www.gomez.com/info_center/instant_test.php
这个工具类似网站版的httpwatch,可以列出你所制定URL页面的各个内部元素的下载时间及状态。另外还有一个很不错的功能，就是选择IDC ，有了这个选项你可以测试其他地区的用户对你网站的访问速度。帮助你找到在你网页中制约下载速度是网络问题，还是页面布局，或者是某一个元素的问题。
随机日志2005年10月24日 -- MovieClip的onLoad和onData bug以及变态修正方法 (5)2007年08月21日 -- Flash Player 9最新升级 (0)2005年08月26日 -- back from studio 8 Beijing (1)2005年02月01日 -- 我的文章在CSDN二月刊上发表 (0)2005年10月11日 -- 祝贺神六发射成功! (112)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/8a0f84a13a700d9de137ebfc6136c388&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/8a0f84a13a700d9de137ebfc6136c388/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>RIA</category><category>调试工具</category><category>httpwatch</category><pubDate>Tue, 20 May 2008 17:33:10 +0800</pubDate><author>瞄的技术</author><comments>http://blog.80s.net.cn/?p=471#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=471</guid><dc:creator>瞄的技术</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=471</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081063/4919905</fs:itemid></item><item><title>敏捷堂的第一期电子杂志</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081064/4919905/1/item.html</link><content:encoded>&lt;p&gt;张逸在敏捷中国的邮件列表里发的，我转载上传到工作室的博客上，方便大家传阅。&lt;a href=&quot;http://blog.80s.net.cn/wp-content/uploads/2008/04/%e6%95%8f%e6%8d%b7%e4%b9%8b%e9%81%93%e7%ac%ac1%e6%9c%9f.pdf&quot; title=&quot;%e6%95%8f%e6%8d%b7%e4%b9%8b%e9%81%93%e7%ac%ac1%e6%9c%9f.pdf&quot;&gt;敏捷之道第一期&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;d945bbe1&lt;/p&gt;
&lt;h3&gt;随机日志&lt;/h3&gt;&lt;ul class=&quot;related_post&quot;&gt;&lt;li&gt;2008年02月20日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=453&quot; title=&quot;on AIR Tour Europe&quot;&gt;on AIR Tour Europe (2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2008年01月16日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=436&quot; title=&quot;Silverlight的一些中文资源&quot;&gt;Silverlight的一些中文资源 (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2005年09月18日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=262&quot; title=&quot;80s noteBar(Beta1.0)桌面版&quot;&gt;80s noteBar(Beta1.0)桌面版 (7)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2005年04月11日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=224&quot; title=&quot;80s has been added to MXNA&quot;&gt;80s has been added to MXNA (0)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;2004年12月30日 -- &lt;a href=&quot;http://blog.80s.net.cn/?p=189&quot; title=&quot;Flex里DataGird出现的问题&quot;&gt;Flex里DataGird出现的问题 (0)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/f584e2e541516c996cbbf6bedfef0e80&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/f584e2e541516c996cbbf6bedfef0e80/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</content:encoded><wfw:commentRss>http://blog.80s.net.cn/?feed=rss2&amp;p=470</wfw:commentRss><description>张逸在敏捷中国的邮件列表里发的，我转载上传到工作室的博客上，方便大家传阅。敏捷之道第一期
d945bbe1
随机日志2005年08月03日 -- Macromedia手机Flash专题研讨会（台北站） (0)2005年03月01日 -- Ajax:Web应用新的解决方案 (0)2007年08月02日 -- FlashPlayer9的安装量达到23亿 (0)2008年02月05日 -- erlang tips 1 (0)2006年11月28日 -- 通过彩信或mail发布你的blog (0)&lt;br /&gt;&lt;!-- Feedsky ad --&gt;&lt;a href=&quot;http://feed.feedsky.com/~cpm/c/80steamblog/f584e2e541516c996cbbf6bedfef0e80&quot;&gt;&lt;img src=&quot;http://feed.feedsky.com/~cpm/80steamblog/f584e2e541516c996cbbf6bedfef0e80/s.gif&quot; border=&quot;0&quot; style=&quot;margin-top:5px;&quot; /&gt;&lt;/a&gt;&lt;!-- /Feedsky ad --&gt;</description><category>敏捷</category><pubDate>Mon, 28 Apr 2008 10:42:13 +0800</pubDate><author>瞄的技术</author><comments>http://blog.80s.net.cn/?p=470#comments</comments><guid isPermaLink="false">http://blog.80s.net.cn/?p=470</guid><dc:creator>瞄的技术</dc:creator><fs:srclink>http://blog.80s.net.cn/?p=470</fs:srclink><fs:srcfeed>http://blog.80s.net.cn/?feed=rss2</fs:srcfeed><fs:itemid>feedsky/80steamblog/~6875423/87081064/4919905</fs:itemid></item><item><title>Silverlight1.0开发经验总结[1]</title><link>http://item.feedsky.com/~feedsky/80steamblog/~6875423/87081065/4919905/1/item.html</link><content:encoded>&lt;p&gt;createFromXAML的文本中要是有x:Name的话一定要价namespace，譬如xmlns:x=&amp;#8221;http://schemas.microsoft.com/winfx/2006/xaml&amp;#8221;，无论你是否以Canvas作为根标记，哪怕你只有一个&amp;lt;TextBlock&amp;gt;，那也应该写成:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;lt;textblock&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;xmlns:x&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;x:name&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;name_txt&amp;quot;&lt;/span&gt;&lt;span style=&quot;font-weight: bold; color: black;&quot;&gt;&amp;gt;&lt;/spa