<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
 <channel>
  <title>以平为期</title>
  <link>http://skyhorse.blogbus.com</link>
  <description><![CDATA[分类技术文章，生活工作学习的历程。
<br>
生活,学习,思考,求知]]></description>
  <generator> by blogbus.com </generator>
  <lastBuildDate>Thu, 01 Jan 1970 07:00:00 +0700</lastBuildDate>
  <image>
									<url>http://public.blogbus.com/profile/7/6/6/14667/avatar_14667_96.jpg</url>
									<title>以平为期</title>
									<link>http://skyhorse.blogbus.com</link>
								</image>  <item>
   <title>TextMatrixv1.1发布</title>
   <description><![CDATA[TextMatrix<br />http://code.google.com/p/textmatrix/ <br />TextMatrix是基于标准C++开发的一个跨平台(Windows,Linux)的用于文本分类或挖掘的开源项目。最早开始于2006年底，是我在学习C++的过程中逐渐开发的。 <br />可以同时处理中英文文本(目前支持的中文文本编码格式是GB2312,GBK)，具有中文分词，英文Stemming,停用词滤除，抽取基于字或词的Ngram特征，生成基于SuffixTree的KeySub...<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/2760067.html">我爱ubuntu</a> 2006-07-05</div><div><a href="/logs/2579005.html">一个疑问句的解析实例.</a> 2006-06-01</div><div><a href="/logs/2578955.html">A Bottom-Up Chart Parser Design (Implement of NLP TextBook Chapter3 Section3.4)</a> 2006-06-01</div><div><a href="/logs/2185258.html">C# to Java 代码转换过程记录</a> 2006-04-03</div><div><a href="/logs/2185239.html">Sql Drived Web Fast Develope Solution</a> 2006-04-03</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fskyhorse.blogbus.com%2Flogs%2F29450154.html&title=TextMatrixv1.1%E5%8F%91%E5%B8%83">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://skyhorse.blogbus.com/logs/29450154.html</link>
   <author>skyhorse</author>
   <pubDate>Sun, 21 Sep 2008 15:14:37 +0800</pubDate>
  </item>
  <item>
   <title>我爱ubuntu</title>
   <description><![CDATA[<br><p>我爱ubuntu</p><p>skyhorse<br />2006-7-5</p><p>原来都没有听说过ubuntu, 也没有用过, 前2天因为想装一个oracle10G玩玩,本想装redhat advance server的,因为刻的盘有些问题,改装ubuntu 6.06 desktop版, 这才发现ubuntu 的好处, 感觉很开心.</p><p>比方说我要装eclipse, 只需一个命令: apt-get install eclipse 网络环境好的话,几分钟之内就在你的桌面的编程菜单中出现 eclipse 了. 你什么也不需要作,鼠标都不用点.如果不愿意敲命令,也有界面可以用.</p><p>2天时间内, 装了一堆软件, 这在以前是我不能想象的, 原来总是configure, make, make install, 且还总是少这个包,少那个包的,还不一定成功.</p><p>我装了 Oracle 10G ,以及附加的第二张盘的软件(一个包括Ultra Search的冬冬), 安装过程第一张盘没有遇到 link之类的任何错误, 第二张有几个小错误. <br />当然了,你需要先google 几个oracle 10g的安装文档照着做就行了. 另外dbstart 内部已经启动listener了,所以无需在自启动的脚本中添加启动listener的命令了,还发现了oracle10g的脚本的bug, 呵呵.</p><p>还有下面的:<br />mediawiki(大名鼎鼎的wiki软件), phpmyadmin(mysql管理必备), cvs ,cvsd(一个安全运行cvs pserver的wrapper), apache2, mysql, Mambo(类似xoops的内容发布系统,但是更漂亮), tomcat 总之就是网站的那一套东西.</p><p><br />防火墙(firestarter) 强烈推荐这个, 在界面上简单加几个规则, 你再在终端中 sud iptables -L 一看,简直帅呆了. 作者肯定把iptables 这套东西搞得滚瓜烂熟.  这个可比windowsxp下的自带防火墙功能强大多了, 主要是因为如果你熟悉iptables的话,可以自己写策略执行就可以了, 比方说结合squid作个透明代理, 或者起2个dns,再作一下根据ip来源进行不同端口映射,作个动态的dns. 如果不熟悉的话,就把它当作window下自带的防火墙来用.<br />我就简单地通过界面加上了 保留 http 的端口,  对 ssh 则加上了网段的限制, 很快也很方便.(如果不会计算子网掩码就自己google一下subnet netmask之类的:) )</p><p>还有vnc,连接windows的终端软件, 光盘刻录, 媒体播放(mplayer之类), freemind(一个绘制思维导图软件,java的,也有windows版),其他一些桌面的软件就不用说了, 系统安装时自带的.</p><p>顺便说下, 因为firefox 的linux版不带导入ie的功能, 所以我在windows版的firefox中导出ie的收藏夹, 它存成了一个html文件,然后在linux 下用书签管理导入这个文件就可以了.太帅了.</p><p>系统启动时默认就是能够挂载windows分区的, 桌面也非常漂亮, 我用右键把菜单中的常用的几项加到了panel上, 如终端,文件管理器. 屏保也非常炫,比windows的那种中规中矩的好看多了.</p><p>同时也有很多有趣的游戏.</p><p><br />总结了一下ubuntu 的优点:<br />软件包的维护和依赖关系的计算非常好, 大大方便了软件的安装, 知道软件名字直接下载就行了, 连菜单的类别都创建好了.<br />有一个巨大的维护的软件库. 你可以选择离你最近的站点.( 我用的是 mirror.net9.org ) <br />通过默认的 sudo 来保证了系统的安全. ( 如果有人奇怪安装后root密码是什么,可以参加wikt.ubuntu.org.cn上的常见问答)</p><p><br />界面比较容易上手,也很方便. 一般的用户往往都是装了一个linux,发现不好用,就放弃了, 我相信随着ubuntu的发行,这个情况应该逐渐会有所改观.<br />本来电脑的目的就是为了更方便快捷地帮助人们解决各自的问题的, 可用性增强了,自然会吸引大批用户.</p><p>不过我也遇到点小问题, 自动装bugzilla的时候, 创建mysql的数据库表时出错, 看来,需要自己来安装配置了.</p><p><br />顺便说一下我的这台电脑是在实验室同时用来给自己提供服务,开发和做桌面用的.<br />你也可以选择安装不带gui的server版. </p><p><br />从 apt-get , sudo 都不知道是什么命令,到安装配置我的电脑的各类软件,我只用了2,3天时间, 多亏了 ubuntu, google和那些写文章的linuxer们.<br />所以写了这么一篇宣传一下:), 希望更多的人使用. 这也符合ubuntu的共享精神. <br />使用ubuntu即享受桌面的乐趣,又享受自己diy的乐趣, 更重要的是它是开源和免费的. </p><p>btw: 用google trends 搜一下, ubuntu 也是一直处于上升的趋势.</p><p><br /><a href="http://wiki.ubuntu.org.cn/" target="_blank">wiki.ubuntu.org.cn</a> 上的 新手入门指引  提供了大量的帮助, 请一定要仔细看,并照做,相信你一定会很快上手的.</p><p /><p /><br><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://skyhorse.blogbus.com/logs/175520.html">IFT 3102 磁盘阵列的双机共用方法</a> 2004-05-14</div><div><a href="http://skyhorse.blogbus.com/logs/152399.html">2002-12 unix下挂接磁盘阵列</a> 2004-04-25</div><div><a href="http://skyhorse.blogbus.com/logs/152391.html">系统运行部情况介绍2001年1月17日</a> 2004-04-25</div><div><a href="http://skyhorse.blogbus.com/logs/152384.html">2002-6-13某单位出差报告及用户需求分析，以及远程教育相关思考</a> 2004-04-25</div><div><a href="http://skyhorse.blogbus.com/logs/116757.html">oracle9i Primary Server的redolog被覆盖后的解决方法实例。</a> 2004-03-10</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fskyhorse.blogbus.com%2Flogs%2F2760067.html&title=%E6%88%91%E7%88%B1ubuntu">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://skyhorse.blogbus.com/logs/2760067.html</link>
   <author>skyhorse</author>
   <pubDate>Wed, 05 Jul 2006 01:30:00 +0800</pubDate>
  </item>
  <item>
   <title>几个有趣的站点</title>
   <description><![CDATA[<P><A href="http://www.textmap.com/">http://www.textmap.com/</A></P>
<P><A href="http://www.opinmin.com/">http://www.opinmin.com/</A></P>
<P><A href="http://www.wefeelfine.org/">http://www.wefeelfine.org/</A></P><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://skyhorse.blogbus.com/logs/2579064.html"><自然语言理解 第二版>中的隐含错误</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2579005.html">一个疑问句的解析实例.</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2578964.html">A Top-Down Chart Parser With Feathers Design (Implement of NLP TextBook Chapter4 Section4.5)</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2578955.html">A Bottom-Up Chart Parser Design (Implement of NLP TextBook Chapter3 Section3.4)</a> 2006-06-01</div><div><a href="/logs/29450154.html">TextMatrixv1.1发布</a> 2008-09-21</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fskyhorse.blogbus.com%2Flogs%2F2579157.html&title=%E5%87%A0%E4%B8%AA%E6%9C%89%E8%B6%A3%E7%9A%84%E7%AB%99%E7%82%B9">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://skyhorse.blogbus.com/logs/2579157.html</link>
   <author>skyhorse</author>
   <pubDate>Thu, 01 Jun 2006 00:37:44 +0800</pubDate>
  </item>
  <item>
   <title>&lt;自然语言理解 第二版&gt;中的隐含错误</title>
   <description><![CDATA[<p>Natural Language Understanding, Second Edition<br />P132 (原版)<br />section 5.3  处理所有一般疑问句(Yes/no Question)的语法</p><p>S[+inv]-&gt;(AUX AGR ?a SUBCAT ?v)(NP AGR ?a)(VP VFORM ?v)<br />应该改为:<br />S[+inv]-&gt;(AUX AGR ?a COMPFORM ?v)(NP AGR ?a)(VP VFORM ?v)</p><p>这是我在写程序,试验那些语法规则时发现的.</p><p>原版和翻译版本(p107)都是如此. </p><p>希望大家有时间写程序验证一下.</p><p /><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://skyhorse.blogbus.com/logs/2579157.html">几个有趣的站点</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2579005.html">一个疑问句的解析实例.</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2578964.html">A Top-Down Chart Parser With Feathers Design (Implement of NLP TextBook Chapter4 Section4.5)</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2578955.html">A Bottom-Up Chart Parser Design (Implement of NLP TextBook Chapter3 Section3.4)</a> 2006-06-01</div><div><a href="/logs/29450154.html">TextMatrixv1.1发布</a> 2008-09-21</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fskyhorse.blogbus.com%2Flogs%2F2579064.html&title=%3C%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E7%90%86%E8%A7%A3+%E7%AC%AC%E4%BA%8C%E7%89%88%3E%E4%B8%AD%E7%9A%84%E9%9A%90%E5%90%AB%E9%94%99%E8%AF%AF">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://skyhorse.blogbus.com/logs/2579064.html</link>
   <author>skyhorse</author>
   <pubDate>Thu, 01 Jun 2006 00:22:06 +0800</pubDate>
  </item>
  <item>
   <title>一个疑问句的解析实例.</title>
   <description><![CDATA[<p> can  he  see  the  dog  ?</p><p>尽管去掉了多余的垃圾边,还是有这么多,呵呵.果然是一件麻烦的事情.</p><p>1 can 2<br />ACTIVE_ARCS:<br />(S INV:- VFORM:? pres past AGR:?) --&gt; o (NP AGR:?) (VP VFORM:? pres past AGR:?) (1,1)<br />(NP AGR:?) --&gt; o (PRO AGR:?WH:?) (1,1)<br />(NP AGR:?) --&gt; o (ART AGR:?) (N AGR:?) (1,1)<br />(NP AGR:?) --&gt; o (NAME AGR:?) (1,1)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (1,1)<br />(DET AGR:?WH:?) --&gt; o (QDET WH:?) (1,1)<br />(S INV:+ VFORM:?AGR:?WH:?GAP:?) --&gt; o (AUX AGR:1s 2s 3s 1p 2p 3p COMPFORM:base ) (NP AGR:1s 2s 3s 1p 2p 3p WH:?GAP:(- ) ) (VP VFORM:base AGR:1s 2s 3s 1p 2p 3p GAP:?) (1,1)<br />(S VFORM:?AGR:?) --&gt; o (NP AGR:?WH:Q GAP:(- ) ) (S INV:+ VFORM:?AGR:?GAP:(NP ) ) (1,1)<br />(NP AGR:?) --&gt; o (PRO AGR:?WH:?) (1,1)<br />(NP AGR:?) --&gt; o (ART AGR:?) (N AGR:?) (1,1)<br />(NP AGR:?) --&gt; o (NAME AGR:?) (1,1)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (1,1)<br />(DET AGR:?WH:?) --&gt; o (QDET WH:?) (1,1)<br />(S INV:+ VFORM:pres AGR:1s 2s 3s 1p 2p 3p WH:?GAP:?) --&gt; (AUX AGR:1s 2s 3s 1p 2p 3p COMPFORM:base ) o (NP AGR:1s 2s 3s 1p 2p 3p WH:?GAP:(- ) ) (VP VFORM:base AGR:1s 2s 3s 1p 2p 3p GAP:?) (1,2)<br />(NP AGR:?) --&gt; o (PRO AGR:?WH:?) (2,2)<br />(NP AGR:?) --&gt; o (ART AGR:?) (N AGR:?) (2,2)<br />(NP AGR:?) --&gt; o (NAME AGR:?) (2,2)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (2,2)<br />(CNP ) --&gt; o (N AGR:?) (2,2)</p><p>CONSTITUENTS:<br />(AUX VFORM:pres AGR:1s 2s 3s 1p 2p 3p COMPFORM:base )(1,2)</p><p>AGGENDA:</p><p>1 can 2 he 3<br />ACTIVE_ARCS:<br />(S INV:- VFORM:? pres past AGR:?) --&gt; o (NP AGR:?) (VP VFORM:? pres past AGR:?) (1,1)<br />(NP AGR:?) --&gt; o (ART AGR:?) (N AGR:?) (1,1)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (1,1)<br />(S INV:+ VFORM:?AGR:?WH:?GAP:?) --&gt; o (AUX AGR:3s COMPFORM:base ) (NP AGR:3s WH:?GAP:(- ) ) (VP VFORM:base AGR:3s GAP:?) (1,1)<br />(S VFORM:?AGR:?) --&gt; o (NP AGR:?WH:Q GAP:(- ) ) (S INV:+ VFORM:?AGR:?GAP:(NP ) ) (1,1)<br />(NP AGR:?) --&gt; o (ART AGR:?) (N AGR:?) (1,1)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (1,1)<br />(S INV:+ VFORM:pres AGR:1s 2s 3s 1p 2p 3p WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) o (NP AGR:3s WH:?GAP:(- ) ) (VP VFORM:base AGR:3s GAP:?) (1,2)<br />(NP AGR:?) --&gt; o (PRO AGR:3s WH:?) (2,2)<br />(NP AGR:?) --&gt; o (ART AGR:?) (N AGR:?) (2,2)<br />(NP AGR:?) --&gt; o (NAME AGR:?) (2,2)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (2,2)<br />(CNP ) --&gt; o (N AGR:?) (2,2)<br />(S INV:+ VFORM:pres AGR:3s WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) (NP AGR:3s WH:?GAP:(- ) ) o (VP VFORM:base AGR:3s GAP:?) (1,3)<br />(VP VFORM:?AGR:?) --&gt; o (V VFORM:?AGR:?SUBCAT:_none ) (3,3)<br />(VP VFORM:?AGR:?) --&gt; o (V VFORM:?AGR:?SUBCAT:_vp:inf ) (VP VFORM:inf ) (3,3)<br />(VP VFORM:?AGR:?) --&gt; o (AUX COMPFORM:?) (VP VFORM:?AGR:?) (3,3)<br />(VP VFORM:?AGR:?PASSGAP:- ) --&gt; o (V SUBCAT:_np ) (NP AGR:?) (3,3)<br />(VP VFORM:?AGR:?PASS:+ ) --&gt; o (AUX :be ) (VP VFORM:pastprt PASSGAP:+ ) (3,3)<br />(VP VFORM:?AGR:?PASSGAP:+ ) --&gt; o (V SUBCAT:_np ) (3,3)<br />(VP VFORM:?AGR:?GAP:?) --&gt; o (V SUBCAT:_np ) (NP AGR:?GAP:?) (3,3)</p><p>CONSTITUENTS:<br />(AUX VFORM:pres AGR:1s 2s 3s 1p 2p 3p COMPFORM:base )(1,2)<br />(PRO AGR:3s )(2,3)<br />(NP AGR:3s ) --&gt; (PRO AGR:3s WH:?) o (2,3)</p><p>AGGENDA:</p><p>1 can 2 he 3 see 4<br />ACTIVE_ARCS:<br />(S INV:- VFORM:? pres past AGR:?) --&gt; o (NP AGR:?) (VP VFORM:? pres past AGR:?) (1,1)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (1,1)<br />(S VFORM:?AGR:?) --&gt; o (NP AGR:?WH:Q GAP:(- ) ) (S INV:+ VFORM:?AGR:?GAP:(NP ) ) (1,1)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (1,1)<br />(S INV:+ VFORM:pres AGR:1s 2s 3s 1p 2p 3p WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) o (NP AGR:3s WH:?GAP:(- ) ) (VP VFORM:base AGR:3s GAP:?) (1,2)<br />(NP AGR:?) --&gt; o (ART AGR:?) (N AGR:?) (2,2)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (2,2)<br />(S INV:+ VFORM:pres AGR:3s WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) (NP AGR:3s WH:?GAP:(- ) ) o (VP VFORM:base AGR:3s GAP:?) (1,3)<br />(VP VFORM:?AGR:?) --&gt; o (V VFORM:?AGR:?SUBCAT:_none ) (3,3)<br />(VP VFORM:?AGR:?) --&gt; o (V VFORM:?AGR:?SUBCAT:_vp:inf ) (VP VFORM:inf ) (3,3)<br />(VP VFORM:?AGR:?) --&gt; o (AUX COMPFORM:?) (VP VFORM:?AGR:?) (3,3)<br />(VP VFORM:?AGR:?PASSGAP:- ) --&gt; o (V SUBCAT:_np ) (NP AGR:?) (3,3)<br />(VP VFORM:?AGR:?PASS:+ ) --&gt; o (AUX :be ) (VP VFORM:pastprt PASSGAP:+ ) (3,3)<br />(VP VFORM:?AGR:?PASSGAP:+ ) --&gt; o (V SUBCAT:_np ) (3,3)<br />(VP VFORM:?AGR:?GAP:?) --&gt; o (V SUBCAT:_np ) (NP AGR:?GAP:?) (3,3)<br />(VP VFORM:base AGR:?PASSGAP:- ) --&gt; (V SUBCAT:_np ) o (NP AGR:?) (3,4)<br />(NP AGR:?) --&gt; o (PRO AGR:3s WH:?) (4,4)<br />(NP AGR:?) --&gt; o (ART AGR:?) (N AGR:?) (4,4)<br />(NP AGR:?) --&gt; o (NAME AGR:?) (4,4)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (4,4)<br />(CNP ) --&gt; o (N AGR:?) (4,4)<br />(VP VFORM:base AGR:?GAP:?) --&gt; (V SUBCAT:_np ) o (NP AGR:?GAP:?) (3,4)<br />(NP AGR:?) --&gt; o (PRO AGR:3s WH:?) (4,4)<br />(NP AGR:?) --&gt; o (ART AGR:?) (N AGR:?) (4,4)<br />(NP AGR:?) --&gt; o (NAME AGR:?) (4,4)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (4,4)<br />(CNP ) --&gt; o (N AGR:?) (4,4)</p><p>CONSTITUENTS:<br />(AUX VFORM:pres AGR:1s 2s 3s 1p 2p 3p COMPFORM:base )(1,2)<br />(PRO AGR:3s )(2,3)<br />(NP AGR:3s ) --&gt; (PRO AGR:3s WH:?) o (2,3)<br />(V VFORM:base SUBCAT:_np )(3,4)<br />(VP VFORM:base AGR:?PASSGAP:+ ) --&gt; (V SUBCAT:_np ) o (3,4)<br />(S INV:+ VFORM:pres AGR:3s WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) (NP AGR:3s WH:?GAP:(- ) ) (VP VFORM:base AGR:3s GAP:?) o (1,4)</p><p>AGGENDA:</p><p>1 can 2 he 3 see 4 the 5<br />ACTIVE_ARCS:<br />(S INV:- VFORM:? pres past AGR:?) --&gt; o (NP AGR:?) (VP VFORM:? pres past AGR:?) (1,1)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (1,1)<br />(S VFORM:?AGR:?) --&gt; o (NP AGR:?WH:Q GAP:(- ) ) (S INV:+ VFORM:?AGR:?GAP:(NP ) ) (1,1)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (1,1)<br />(S INV:+ VFORM:pres AGR:1s 2s 3s 1p 2p 3p WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) o (NP AGR:3s WH:?GAP:(- ) ) (VP VFORM:base AGR:3s GAP:?) (1,2)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (2,2)<br />(S INV:+ VFORM:pres AGR:3s WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) (NP AGR:3s WH:?GAP:(- ) ) o (VP VFORM:base AGR:3s GAP:?) (1,3)<br />(VP VFORM:?AGR:?) --&gt; o (V VFORM:?AGR:?SUBCAT:_vp:inf ) (VP VFORM:inf ) (3,3)<br />(VP VFORM:?AGR:?PASSGAP:- ) --&gt; o (V SUBCAT:_np ) (NP AGR:?) (3,3)<br />(VP VFORM:?AGR:?PASSGAP:+ ) --&gt; o (V SUBCAT:_np ) (3,3)<br />(VP VFORM:base AGR:?PASSGAP:- ) --&gt; (V SUBCAT:_np ) o (NP AGR:?) (3,4)<br />(NP AGR:?) --&gt; o (PRO AGR:3s WH:?) (4,4)<br />(NP AGR:?) --&gt; o (ART AGR:3s 3p 3p 3s ) (N AGR:3s 3p 3p 3s ) (4,4)<br />(NP AGR:?) --&gt; o (NAME AGR:?) (4,4)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (4,4)<br />(CNP ) --&gt; o (N AGR:?) (4,4)<br />(VP VFORM:base AGR:?GAP:?) --&gt; (V SUBCAT:_np ) o (NP AGR:?GAP:?) (3,4)<br />(NP AGR:?) --&gt; o (PRO AGR:3s WH:?) (4,4)<br />(NP AGR:?) --&gt; o (ART AGR:3s 3p 3p 3s ) (N AGR:3s 3p 3p 3s ) (4,4)<br />(NP AGR:?) --&gt; o (NAME AGR:?) (4,4)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (4,4)<br />(CNP ) --&gt; o (N AGR:?) (4,4)<br />(NP AGR:3s 3p ) --&gt; (ART AGR:3s 3p 3p 3s ) o (N AGR:3s 3p 3p 3s ) (4,5)<br />(NP AGR:3s 3p ) --&gt; (ART AGR:3s 3p 3p 3s ) o (N AGR:3s 3p 3p 3s ) (4,5)</p><p>CONSTITUENTS:<br />(AUX VFORM:pres AGR:1s 2s 3s 1p 2p 3p COMPFORM:base )(1,2)<br />(PRO AGR:3s )(2,3)<br />(NP AGR:3s ) --&gt; (PRO AGR:3s WH:?) o (2,3)<br />(V VFORM:base SUBCAT:_np )(3,4)<br />(VP VFORM:base AGR:?PASSGAP:+ ) --&gt; (V SUBCAT:_np ) o (3,4)<br />(S INV:+ VFORM:pres AGR:3s WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) (NP AGR:3s WH:?GAP:(- ) ) (VP VFORM:base AGR:3s GAP:?) o (1,4)<br />(ART AGR:3s 3p )(4,5)</p><p>AGGENDA:</p><p>1 can 2 he 3 see 4 the 5 dog 6<br />ACTIVE_ARCS:<br />(S INV:- VFORM:? pres past AGR:?) --&gt; o (NP AGR:?) (VP VFORM:? pres past AGR:?) (1,1)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (1,1)<br />(S VFORM:?AGR:?) --&gt; o (NP AGR:?WH:Q GAP:(- ) ) (S INV:+ VFORM:?AGR:?GAP:(NP ) ) (1,1)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (1,1)<br />(S INV:+ VFORM:pres AGR:1s 2s 3s 1p 2p 3p WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) o (NP AGR:3s WH:?GAP:(- ) ) (VP VFORM:base AGR:3s GAP:?) (1,2)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (2,2)<br />(S INV:+ VFORM:pres AGR:3s WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) (NP AGR:3s WH:?GAP:(- ) ) o (VP VFORM:base AGR:3s GAP:?) (1,3)<br />(VP VFORM:?AGR:?PASSGAP:- ) --&gt; o (V SUBCAT:_np ) (NP AGR:3s ) (3,3)<br />(VP VFORM:base AGR:?PASSGAP:- ) --&gt; (V SUBCAT:_np ) o (NP AGR:3s ) (3,4)<br />(NP AGR:?) --&gt; o (ART AGR:3s ) (N AGR:3s ) (4,4)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (4,4)<br />(VP VFORM:base AGR:?GAP:?) --&gt; (V SUBCAT:_np ) o (NP AGR:3s GAP:?) (3,4)<br />(NP AGR:?) --&gt; o (ART AGR:3s ) (N AGR:3s ) (4,4)<br />(NP AGR:?WH:?) --&gt; o (DET AGR:?WH:?) (CNP AGR:?) (4,4)<br />(NP AGR:3s 3p ) --&gt; (ART AGR:3s ) o (N AGR:3s ) (4,5)<br />(NP AGR:3s 3p ) --&gt; (ART AGR:3s ) o (N AGR:3s ) (4,5)</p><p>CONSTITUENTS:<br />(AUX VFORM:pres AGR:1s 2s 3s 1p 2p 3p COMPFORM:base )(1,2)<br />(PRO AGR:3s )(2,3)<br />(NP AGR:3s ) --&gt; (PRO AGR:3s WH:?) o (2,3)<br />(V VFORM:base SUBCAT:_np )(3,4)<br />(VP VFORM:base AGR:?PASSGAP:+ ) --&gt; (V SUBCAT:_np ) o (3,4)<br />(S INV:+ VFORM:pres AGR:3s WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) (NP AGR:3s WH:?GAP:(- ) ) (VP VFORM:base AGR:3s GAP:?) o (1,4)<br />(ART AGR:3s 3p )(4,5)<br />(N AGR:3s )(5,6)<br />(NP AGR:3s ) --&gt; (ART AGR:3s ) (N AGR:3s ) o (4,6)<br />(VP VFORM:base AGR:3s GAP:?) --&gt; (V SUBCAT:_np ) (NP AGR:3s GAP:?) o (3,6)</p><p>AGGENDA:(S INV:+ VFORM:pres AGR:3s WH:?GAP:?) --&gt; (AUX AGR:3s COMPFORM:base ) (NP AGR:3s WH:?GAP:(- ) ) (VP VFORM:base AGR:3s GAP:?) o (1,6) (VP VFORM:base AGR:3s PASSGAP:- ) --&gt; (V SUBCAT:_np ) (NP AGR:3s ) o (3,6) (NP AGR:3s ) --&gt; (ART AGR:3s ) (N AGR:3s ) o (4,6) </p><p>Parsed OK!<br /></p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://skyhorse.blogbus.com/logs/2579157.html">几个有趣的站点</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2579064.html"><自然语言理解 第二版>中的隐含错误</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2578964.html">A Top-Down Chart Parser With Feathers Design (Implement of NLP TextBook Chapter4 Section4.5)</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2578955.html">A Bottom-Up Chart Parser Design (Implement of NLP TextBook Chapter3 Section3.4)</a> 2006-06-01</div><div><a href="/logs/29450154.html">TextMatrixv1.1发布</a> 2008-09-21</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fskyhorse.blogbus.com%2Flogs%2F2579005.html&title=%E4%B8%80%E4%B8%AA%E7%96%91%E9%97%AE%E5%8F%A5%E7%9A%84%E8%A7%A3%E6%9E%90%E5%AE%9E%E4%BE%8B.">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://skyhorse.blogbus.com/logs/2579005.html</link>
   <author>skyhorse</author>
   <pubDate>Thu, 01 Jun 2006 00:18:04 +0800</pubDate>
  </item>
  <item>
   <title>A Top-Down Chart Parser With Feathers Design (Implement of NLP TextBook Chapter4 Section4.5)</title>
   <description><![CDATA[<p>Title: A Top-Down Chart Parser With Feathers Design (Implement of NLP TextBook Chapter4 Section4.5)<br />Author:lijun<br />Date: 2006-4-23</p><p>OutLine:<br />DataStructure &amp; Main Algorithm.<br />Object oriented.</p><p>Note:<br />A class is denoted as: classname : class{ data, method() }<br />Usually a dateSturce Collection with relevant methods is named after : xxManager<br />The Main Class is ChartParser</p><p><br />DataStructure:</p><p>Sentence: words[] or class{ string[] word, int spos, init(),length(),next(),curword(), toString() }</p><p>Symbol: class{String CAT,ArrayList AGR,ArrayList SUBCAT,ArrayList VFORM;  <br />Copy() // 注意要完全复制， 用Clone会有问题.<br />boolean NoContrary(Symbol other); // 表示 CAT同，其他实例化的属性不冲突,是包含或相等，非实例化的不管.<br />// 但是对于Rule中有的，但是C(也就是X)中没有的，则需要只判断C 的所有特征是否都能在Rule.Next中发现，<br />// 也就是说只用判断 !=null &amp;&amp; size()&gt;0的情况<br />Instantiation(Rule) // 由本Symbol对其他Rule进行空变量的实例化，<br />}<br />// Symbol中除CAT外，其他变量的状态表示: size==0表未知，等待实例化; =null 表没有此属性; size==1表已有值,size&gt;1则表示另一种形式的未知，多个值可选,也需实例化.(如果2个都是&gt;1则取交集)<br />// 这种表示方法的缺陷是: 如果碰到 VP1-&gt; AUX VP补足语 时，VP的VFROM 用AUX的 COMPFORM来表示时，无法表现出2者的关系。<br />// 可以添加一个专门的变量 equal来表示2者关系, ArrayList of equal; 0=1, 2=3,..<br />用在Rule中如果</p><p>// 按照课本的做法，认为一个单词只有一个CAT,因为其他属性都不一定一样， 多个时，可以用ROOTID之类的来扩展<br />LexiconWord: class{String word, Symbol sym}<br />Lexicon: class{HashMap lexicons,LexiconWord getLexiconWord(str); String[] getLexiconWordCat(str) Load()}</p><p>Rule: class{Symbol[] thisRule; Symbol getHead(), Symbol[] getBody(), Rule copy() }  // e.g. S -&gt; NP VP<br />RuleManager class{Rule[] getRightStartWith(String catStr) Load()}</p><p>//  0&lt;= rulepos &lt;= rule.length  e.g.  S -&gt; 0 NP 1 VP 2<br />Arc: class{Rule thisRule; addRule(); int start,end; int rulepos; isFullActive(); isLastPos(); isConstituent(); Arc(rule,start,end,rulepos); Arc(left,right,start,end,rulepos=1) ; <br />}<br />isFullActive(): rulepos&lt; thisRule.size()-1; // S-&gt; w1,...C,...Wn-1,Wn<br />isLastPos(): ruleepos==thisRulesize()-1;   // S-&gt; w1,....C,Wn<br />isConstituent(): rulepos == thisRule.Size(); //  S-&gt;w1,...Wn-1,C  , or C-&gt;C</p><p>//这里用Stack实现<br />AggendaManager: class{ArrayList agendaConstiuent; add(), add(Arc), cons Pop(); isEmpty()}</p><p>// 这里的ArcManager 包括 ActiveArc 和 Constituent 2种类型的 Arc.<br />ArcManager: class{ArrayList arcs; ArrayList cons; addArc(); addConstituent() }</p><p>ChartParser: class{AggendaManager,ChartManager,Load(), Parser(sentence), extension() extensionStep2(), extensionStep3()}</p><p>上面的Arc中的 start, end 分别代表 Sentence的word的位置。<br />假设n个word组成sentence.<br />1&lt;= start &lt;= n;<br />1 &lt; end &lt;= n+1;<br />注意: word[i] 中的i 则是按照java的数组下表从 0 --&gt;n-1</p><p>      而Rule的开始位置是从 0 到 rule.length.<br />//为了统一处理，将Rule的 Head和Body 都放到一个Symbol数组中了,所以对于rulepos来说，访问body的0位置等于现在访问 Symbol[1]了，<br />为了不影响原来的程序，getHead(), getBody(), <br />getBody(rpos) // 内部将rpos+1,取Symbol[rpos+1];<br />// 或者等程序写完了，统一将 rpos 的值都+1, 按照1---Symbol.length的范围来处理.</p><p><br />Agenda中存已经完成的Constiuent.同时也是要处理的.<br />Chart包括 Arc 和 Constiuent两部分，与原来写的bottom-up 不一样，把Arc和Constituent用Arc类型统一来处理了。<br />extension算法得到新的 Active Arc 以及匹配完成的Constiuent 分别加入到Arc和Agenda中。<br />每次Parser循环时，把单词向后移一位，然后从Agenda中取出一个来。处理完agenda中的所有Constiuent后才再取单词。<br />对于一个单词的词性 Arc的形式是: N -&gt; N o ( start,end)<br />算法中的ArcManager 和ConstituentManager都是 ArcManager类型的类,都用来存储Arc，</p><p><br />这里是一步一步地处理。每步把此步的单词词性以及派生出来的成分处理完.</p><p /><p><br />// 弧导入算法,为了便于处理，没有传入一个Arc,而是传入Arc.Rule, arc.end, arc.rule.rulepos,以便当一个单词词性的弧导入时，方便写传入参数.<br />// arc.start 用不到，所以就省去了。<br />// 第一次时， S -&gt; NP VP , 1 , 0<br />//递归导入新弧, 分别传入 这条弧的规则Rule, 这条弧的结束位置arcEnd, 以及规则进行到了第几个位置rpos<br />// S -&gt; C1 ... o Ci ...Cn  (start,end) =====&gt; Ci -&gt; o X1 X2...Xk ( end, end )<br />//             rpos                                 0<br />ArcIntroduction(Rule newRule,int arcEnd,int rpos)<br />{<br /> for(each rule[i]){<br />    if(rule[i].gethead.CAT.equals(newRule.getRuleBodyConstiuent(rpos).CAT)<br />       &amp;&amp; noContrary() ) // 只需判断 noContrary 即可，因为两者的CAT都不为空.<br />    { // 这里是导入新弧，下一个单词还未确定，所以无需进行各类属性的判断，只需与Rule中有值属性无冲突即可.<br />      // 但是为了彻底减少垃圾边，newRule是实例化后的更好.<br /> Arc arcNew=new Arc(rule[i],arcEnd,arcEnd,0); // 新弧以规则的0位置开始.<br /> arcManager.AddArc(arcNew);<br /> if(Symbol.getType(rule[i].body[0])!=Symbol.TERMINAL)<br />     ArcIntroduction(tmprule,arcEnd,rpos);  // 递归非终结符<br />    }<br /> }<br />}</p><p><br />Main Algorithm:( Inside ChartParser class Parser Method )</p><p>// 第一次运行导入所有S的规则:<br />for(each rule)<br />  if(rule.left=='S')<br />  {<br />    Arc arcNew =new Arc(rule[i],1,1,0);<br />    arcManager.add(arcNew);<br />    ArcIntroduction(rule[i],1,0);<br />  }</p><p>Sentence --&gt; word[] or SentenceObj<br />spos=1;<br />Constiuent c <br />While(pos&lt;=word.length){<br />  // 得到一个单词以及成分.<br />  if(aggendaManager.isEmpty()){<br /> if(spos&lt;=length){<br />  // 这里可以删除那些肯定没用的边<br />  for(each are)<br />   if( sentence.spos &gt; arc.end &amp;&amp; arc.rule[rpos]==terminal )<br />     arcManager.remove(thisarc);</p><p>  //对于下一个词的多种词性，只添加在当前活动弧的下一个位置上的词性<br />   sym =lexcion.getLexiconWordCat(words[spos-1]).symbol;<br />  for(each catstr)<br />  {<br />     for(each arc)<br />     {<br />        if(arc[j].RuleNextCons==catstr[i] &amp;&amp; arc.end==sendten.spos<br />          &amp;&amp; noContrary() ==true )<br />   // 这里无需复制Symbol.因为词性不会变化<br />   c = new Arc(sym,sym,spos,spos+1);<br />   aggendaManger.add(c);<br />   break;<br />     }<br />  }<br /> }//if(spos<br /> else{ //栈空，且到了句子末尾，解析失败. <br />   failed! break; <br /> }<br />  }//if(aggendaMan<br />  //把本次构成的所有成分c处理完.<br />  while(agendaManger.isEmpty()){<br />   c=agendaManger.pop();<br />   //如果执行到弹出的一个成分是S,1-end, 表示解析完成。<br />   if(c.substar='S' &amp;&amp; c.start==1 &amp;&amp; c.end= n+1 )<br />   { succeed! break; }<br />   //进行弧扩展<br />   extension()<br />  }<br />  spos=spos+1;<br />}//While<br />if(succeed)<br /> out.pirntln(&quot;Ok!&quot;);</p><p><br />// 弧扩展算法, 两个for可以合并到一起.<br />extension(){<br />  // 从待处理表agenda中取出的成分Constiuent放入constiuent.<br />  constientManger.add(c);<br />  // 包含以C开头的活动边并不处于末尾位置的边再产生新活动边加入arcManager. 同时进行边导入算法 ArcIntro<br />  //  S-&gt; w1,...o C,...Wn-1,Wn ===&gt; S-&gt; w1,....C o ...Wn<br />  //          rulepos                         rulepos+1<br />  for(each arc in arcManger){<br /> if(isFullActive &amp;&amp; arc.end==c.start &amp;&amp; arc.rule[rulepos]==c.rule.left <br />    &amp;&amp; noContrary()<br />   cRule = arc.Rule.copy();<br />   c.head.instantiation(cRule);<br />   arcNew=new arc(cRule,arc.start,c.end,rulepos+1);<br />   arcManger.addArc(arcNew);  <br />          // 对于新加入的的弧进行导入新弧, 无论传入arc.thisRule，还是实例化后的cRule， 都可以。因为<br />          ArcIntroduction(cRule,c.end,arc.rulePos+1);</p><p>  } <br />  // 以C cat结尾的活动边 产生新的完全匹配的成分Constiuent加入到aggendaManager中.<br />  for(each arc in arcManager){<br /> if(isinLastPos() &amp;&amp; arc.end==c.start &amp;&amp; arc.rule[rulepos]==c.cat <br />    &amp;&amp; noContrary())<br />  {<br />   cRule = arc.Rule.copy();<br />   c.head.instantiation(cRule);<br />   arcNew=new arc(cRule,arc.start,c.end,rule.size());<br />   agendaManger.addCons(cNew);<br /> }<br />  }<br />}</p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://skyhorse.blogbus.com/logs/2579157.html">几个有趣的站点</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2579064.html"><自然语言理解 第二版>中的隐含错误</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2579005.html">一个疑问句的解析实例.</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2578955.html">A Bottom-Up Chart Parser Design (Implement of NLP TextBook Chapter3 Section3.4)</a> 2006-06-01</div><div><a href="/logs/2185239.html">Sql Drived Web Fast Develope Solution</a> 2006-04-03</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fskyhorse.blogbus.com%2Flogs%2F2578964.html&title=A+Top-Down+Chart+Parser+With+Feathers+Design+%28Implement+of+NLP+TextBook+Chapter4+Section4.5%29">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://skyhorse.blogbus.com/logs/2578964.html</link>
   <author>skyhorse</author>
   <pubDate>Thu, 01 Jun 2006 00:10:11 +0800</pubDate>
  </item>
  <item>
   <title>A Bottom-Up Chart Parser Design (Implement of NLP TextBook Chapter3 Section3.4)</title>
   <description><![CDATA[<P>Title: A bottom-up Chart Parser Design (Implement of NLP TextBook Chapter3 Section3.4)<BR>Author:lijun<BR>Date: 2006-4-16</P>
<P>OutLine:<BR>DataStructure &amp; Main Algorithm.<BR>Object oriented.</P>
<P>Note:<BR>A class is denoted as: classname : class{ data, method() }<BR>Usually a dateSturce Collection with relevant methods is named after : xxManager<BR>The Main Class is ChartParser</P>
<P><BR>DataStructure:</P>
<P>Sentence: words[] or class{ string[] word, int spos, init(),length(),next(),curword(), toString() }</P>
<P>LexiconWord: class{String word, ArrayList catStr}<BR>Lexicon: class{HashMap lexicons,LexiconWord getLexiconWord(str); String[] getLexiconWordCat(str) Load()}</P>
<P>Constiuent: class{String catStr; int start, int end}<BR>Rule: class{String head; String[] body}&nbsp; // e.g. S -&gt; NP VP<BR>RuleManager class{Rule[] getRightStartWith(String catStr) Load()}</P>
<P>//&nbsp; 0&lt;= rulepos &lt; rule.length <BR>Arc: class{Rule thisRule; addRule(); int start,end; int rulepos; isFullActive(); isLastPos()}<BR>isFullActive(): rulepos&lt; thisRule.size()-1; // S-&gt; w1,...C,...Wn-1,Wn<BR>isLastPos(): ruleepos==thisRulesize()-1;&nbsp;&nbsp; // S-&gt; w1,....C,Wn</P>
<P>//这里用Stack实现<BR>AggendaManager: class{ArrayList agendaConstiuent; add(), cons Pop(); isEmpty()}</P>
<P>ArcManager: class{ArrayList arcs; addArc()}</P>
<P>ConstiuentManager: class{ArrayList consArr; addCons()}</P>
<P>ChartParser: class{AggendaManager,ArcManager,ConstiuentManager,Load(), Parser(sentence), extension() extensionStep2(), extensionStep3()}</P>
<P>上面的Constiuent和Arc中的 start, end 分别代表 Sentence的word的位置。<BR>假设n个word组成sentence.<BR>1&lt;= start &lt;= n;<BR>1 &lt; end &lt;= n+1;<BR>注意: word[i] 中的i 则是按照java的数组下表从 0 --&gt;n-1</P>
<P>Agenda中存已经完成的Constiuent.同时也是要处理的.<BR>Chart包括 Arc 和 Constiuent两部分，<BR>extension算法得到新的 Active Arc 以及匹配完成的Constiuent 分别加入到Arc和Agenda中。<BR>每次Parser循环时，把单词向后移一位，然后从Agenda中取出一个来。处理完agenda中的所有Constiuent后才再取单词。</P>
<P>与刘群的算法不一样，他是一次全部取出。这里是一步一步地处理。每步把此步的单词词性以及派生出来的成分处理完.<BR>另外刘群是把Constiuent的构成无论是词类Cat还是Arc 都作为Arc来处理了。<BR>而NLP Textbook 上好像为了易于理解没有这么说明算法,缺点是多占用了一点空间。</P>
<P><BR>Main Algorithm:( Inside ChartParser class Parser Method )</P>
<P>Sentence --&gt; word[] or SentenceObj<BR>spos=1;<BR>Constiuent c <BR>While(pos&lt;=word.length){<BR>&nbsp; // 得到一个单词以及成分.<BR>&nbsp; if(aggendaManager.isEmpty()){<BR>&nbsp;if(spos&lt;=length){<BR>&nbsp; &nbsp;catStrs=lexcion.getLexiconWordCat(words[spos-1]);<BR>&nbsp;&nbsp;for(each catstr){<BR>&nbsp;&nbsp;&nbsp;c = new Constiuent(catStr,spos,spos+1);<BR>&nbsp;&nbsp;&nbsp;aggendaManger.add(c);<BR>&nbsp;&nbsp;}<BR>&nbsp;}//if(spos<BR>&nbsp;else{ //栈空，且到了句子末尾，解析失败. <BR>&nbsp;&nbsp; failed! break; <BR>&nbsp;}<BR>&nbsp; }//if(aggendaMan<BR>&nbsp; //把本次构成的所有成分c处理完.<BR>&nbsp; while(agendaManger.isEmpty()){<BR>&nbsp;&nbsp; c=agendaManger.pop();<BR>&nbsp;&nbsp; //如果执行到弹出的一个成分是S,1-end, 表示解析完成。<BR>&nbsp;&nbsp; if(c.substar='S' &amp;&amp; c.start==1 &amp;&amp; c.end= n+1 )<BR>&nbsp;&nbsp; { succeed! break; }<BR>&nbsp;&nbsp; //将成分开头的规则加入弧中。<BR>&nbsp;&nbsp; MatchedRules=RuleManager.getRightStartWith(c.catStr);<BR>&nbsp;&nbsp; for(each MatchedRule){<BR>&nbsp;&nbsp;arc=new arc(rule[i],c.start,c.end,pos=1)<BR>&nbsp;&nbsp;arcManger.addArc(arc);<BR>&nbsp;&nbsp; }<BR>&nbsp;&nbsp; //进行弧扩展<BR>&nbsp;&nbsp; extension()<BR>&nbsp; }<BR>&nbsp; spos=spos+1;<BR>}//While<BR>if(succeed)<BR>&nbsp;out.pirntln("Ok!");</P>
<P><BR>// 弧扩展算法, 两个for可以合并到一起.<BR>extension(){<BR>&nbsp; // 从待处理表agenda中取出的成分Constiuent放入constiuent.<BR>&nbsp; constientManger.add(c);<BR>&nbsp; // 包含以C开头的活动边并不处于末尾位置的边再产生新边加入arcManager.<BR>&nbsp; for(each arc in arcManger){<BR>&nbsp;if(isFullActive &amp;&amp; arc.end==c.start &amp;&amp; arc.rule[rulepos]==c.cat )<BR>&nbsp;&nbsp; arcNew=new arc(arc.rule,arc.start,c.end,rulepos+1);<BR>&nbsp;&nbsp; arcManger.add(arcNew);&nbsp; <BR>&nbsp; } <BR>&nbsp; // 以C cat结尾的活动边 产生新的完全匹配的成分Constiuent加入到aggendaManager中.<BR>&nbsp; for(each arc in arcManager){<BR>&nbsp;if(isinLastPos() &amp;&amp; arc.end==c.start &amp;&amp; arc.rule[rulepos]==c.cat ){<BR>&nbsp;&nbsp; Constiuent cNew=new Constiuent(arc.rule.head,arc.start,c.end)<BR>&nbsp;&nbsp; agendaManger.add(cNew);<BR>&nbsp;}<BR>&nbsp; }<BR>}</P><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://skyhorse.blogbus.com/logs/2579157.html">几个有趣的站点</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2579064.html"><自然语言理解 第二版>中的隐含错误</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2579005.html">一个疑问句的解析实例.</a> 2006-06-01</div><div><a href="http://skyhorse.blogbus.com/logs/2578964.html">A Top-Down Chart Parser With Feathers Design (Implement of NLP TextBook Chapter4 Section4.5)</a> 2006-06-01</div><div><a href="/logs/29450154.html">TextMatrixv1.1发布</a> 2008-09-21</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fskyhorse.blogbus.com%2Flogs%2F2578955.html&title=A+Bottom-Up+Chart+Parser+Design+%28Implement+of+NLP+TextBook+Chapter3+Section3.4%29">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://skyhorse.blogbus.com/logs/2578955.html</link>
   <author>skyhorse</author>
   <pubDate>Thu, 01 Jun 2006 00:08:54 +0800</pubDate>
  </item>
  <item>
   <title>C# to Java 代码转换过程记录</title>
   <description><![CDATA[<p>C# -- &gt; java 过程中遇到的问题记录及解决<br />author:lijun<br />date:2006-01-02</p><p>0. 预备知识<br /> C# namespace -- java package<br /> object x --- Object x<br /> enum -- jdk 1.5 support , --&gt; static final int<br /> java 的一个class 文件存在多个class时，只能有一个是public类型的。<br /> lock -- synchrionized<br /> ref -- 地址引用。<br />  void func(ref xx) --- xxtype func(xx)<br />     使用时 xx = func(xx);<br />  当多个ref时，只好用全局变量来实现此效果。</p><p><br /> as xx -- (xx) 强制类型转换。<br /> string -- String 改变大小写. suggest match case,match whole word then replaceAll.<br /> ToString() -- toString()<br /> bool --- boolean<br /> object --- Object<br /> Console.WriteLine(str); --- System.out.println(str);<br /> wait,pulse,pulseall -- wait, notify,notifyall<br /> strFromList.Trim();  --- strFromList.trim();<br /> strFragAttr.ToLower().Equals(strSelect.ToLower()) <br /> --- strFragAttr.toLowerCase().equals(strSelect.toLowerCase()<br /> strSql.Substring(nFromIndex,nWhereIndex-nFromIndex) --- strSql.substring(nFromIndex,nWhereIndex)<br /> // 分割字符<br />        String[] s=strTableField.Split(new char[]{'.'}); --- String[] s=strTableField.split(&quot;\\.&quot;);<br /> // 判断字符串相等 , 如果在java中 用 ==有时会出现问题。<br />  str1 == str2  --- str1.equals(str2) </p><p /><p> // 有关foreach转换成 for 循环要这样来转换:<br /> foreach(ArrayList arr in arrConjunctiveNF) ---&gt;<br />                        for(int j=0;j&lt;=arrConjunctiveNF.size()-1;j++)<br />                        {<br />                                ArrayList arr =(ArrayList)(arrConjunctiveNF.get(j));</p><p> array[j]; --- arraylist.get(j);<br /> array.Count --- array.size();</p><p> Hashtable tableJoinAttributes=Hashtable.Synchronized(new Hashtable()); <br />  --- =new Hashtable(); //Hashtable is synchronized.<br />  or --- Map m = Collections.synchronizedMap(new HashMap(...));</p><p> PredicateElem e=arr[0] as PredicateElem;  --- PredicateElem e = (PredicateElem)arr[0];</p><p> DictionaryEntry --- Map.Entry<br /> arr.RemoveAt(i); --- arr.remove(i);<br /> arr.sort() ---- Collections.sort(arr);</p><p>  arrAttr.Add(e.leftOpValue); --- arrAttr.add(e.leftOpValue)</p><p>  tableJoinAttributes[leftTable] --- get(leftTable);</p><p> tableJoinAttributes[leftTable]=newArr; ---  this.tableJoinAttributes.put(leftTable,newArr);</p><p><br /> tableJoinAttributes.Contains(leftTable) <br /> -- tableJoinAttributes.containsKey(leftTable)</p><p> stack.Push() Pop() --- stack.push() pop()</p><p>                  foreach(DictionaryEntry entry in this.tableJoinAttributes)<br />                  {<br />                          ArrayList arr=entry.Value as ArrayList;<br />                          this.TrimEqual(arr);<br />                  }<br />    ------&gt;<br />                    Set entrys = tableJoinAttributes.entrySet();<br />                    Iterator it = entrys.iterator();<br />                    while(it.hasNext()){<br />                      ArrayList arr = (ArrayList)((Map.Entry)it.next()).getValue();<br />                      TrimEqual(arr);<br />                    }</p><p><br />   又一个例子<br />                        tableIndexCounts=new Hashtable();<br />   Foreach(Dictionaryentry Entry In Item.Tableindexs)<br />   {<br />    Tableindexcounts[Entry.Key]=(Entry.Value As Hashtable).Count;<br />   }<br />   ----&gt;<br />                            tableIndexCounts=new Hashtable();                            <br />                            Set entrys =  item.tableIndexs.entrySet();<br />                            Iterator it = entrys.iterator();<br />                            while(it.hasNext())<br />                            {<br />                              Map.Entry entry = (Map.Entry)it.next();<br />                              tableIndexCounts.put(entry.getKey(),((Hashtable)entry.getValue()).size());<br />                            }</p><p>   对于HashMap 之类的也可以用2个Iterator 同步访问Key &amp; value.</p><p /><p>Class的访问权限：<br />每个编译单元（文件）仅能有一个public class。即：只能拥有一个由public class所表现的单一public接口。可以拥有许多个支持用的friendly classes（默认的访问权限，不需要任何关键字）。如果生命不止一个public class，编译器会给出错误。 <br />public class的名称必须跟编译单元（文件）名称相同。 <br />编译单元内可以不含任何public class，所以可以任意给定文件名（这个以前不知道）。 </p><p><br /> // 有关实现接口interface的转换<br /> public class RangeEndPoint:IComparable  --- public class RangeEndPoint implements Comparable<br /> CompareTo() --- compareTo()</p><p><br /> public class myexample:IComparer<br /> {  <br />  public int Compare(object x, object y){}<br /> }<br /> ---&gt; <br /> public class myexample implements Comparator{<br />   public int compare(Object o1, Object o2) {<br />   //Returns:a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. <br />     return 0;<br />   }<br />   // optional<br />   public boolean equals(Object obj) {<br />     return false;<br />   }<br /> }</p><p> candidate.Sort(new CompareOfTableHorFrag());<br /> ---&gt;   Collections.sort(candidate,new CompareOfTableHorFrag()); <br /> or ---&gt;<br />        TableNameAndJoinInfo[] candidate_convert=(TableNameAndJoinInfo[])candidate.toArray();<br />        Arrays.sort(candidate_convert,new CompareOfTableHorFrag());</p><p><br /> [Serializable]<br /> ---&gt; implements Serializable</p><p> // c# 的thread 方法名无所谓<br /> ThreadClassExec exec=new ThreadClassExec();<br /> Thread threadListen=new Thread(new ThreadStart(exec.ListenThreadMethod));<br /> threadListen.Start();<br /> ---&gt; Thread threadListen=new Thread(new implemtsRunableClass())<br /> class implemtsRunableClass implements Runable{<br /> public void run(){<br /> }}<br /> threadListen.start();</p><p> int nParentIndex; arrBegin.add(nParentIndex) <br /> ---&gt;<br />        arrBegin.add(new Integer(nParentIndex));</p><p> dataTable,dataTable.Rows ---&gt; CachedRowSet<br /> dataTable.Rows.Count ---&gt; dataTable.size()</p><p> DataRow row=this.dataTable.Rows[i];<br /> ---&gt; java 的5.0 版本的 rowset 不提供row , 只能通过metadata得到列数，再遍历<br /> ResultSetMetaData rsm= dataTable.getMetaData();<br />        while(crs_down.next()) {<br />          System.out.print(&quot; &quot;+crs_down.getObject(1));</p><p>  key.GetType()==typeof(string)<br />  ---&gt; if(key.getClass()==String.class)   <br />  or --&gt; if(key instanceof String)  但是这个好像有是父类时仍相等的问题。不是完全相等.</p><p><br /> System.Data.DataTable.Clone() , <br /> ----&gt;<br /> CachedRowSet.createCopySchema() , </p><p> Deep Copy:<br /> System.Data.DataTable.Copy()<br /> ----&gt; CachedRowSet.createCopy();</p><p> Thread.CurrentThread.Name<br /> ---&gt; Thread.currentThread.getName();<br /></p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://skyhorse.blogbus.com/logs/2185239.html">Sql Drived Web Fast Develope Solution</a> 2006-04-03</div><div><a href="http://skyhorse.blogbus.com/logs/2185214.html">分布式数据库实现摘要</a> 2006-04-03</div><div><a href="http://skyhorse.blogbus.com/logs/219040.html">通用简单html报表的设计及实现</a> 2004-06-12</div><div><a href="http://skyhorse.blogbus.com/logs/152392.html">数据结构设计提交模板（2003-12）</a> 2004-04-25</div><div><a href="http://skyhorse.blogbus.com/logs/152321.html">2003年某项目具体总结</a> 2004-04-25</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fskyhorse.blogbus.com%2Flogs%2F2185258.html&title=C%23+to+Java+%E4%BB%A3%E7%A0%81%E8%BD%AC%E6%8D%A2%E8%BF%87%E7%A8%8B%E8%AE%B0%E5%BD%95">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://skyhorse.blogbus.com/logs/2185258.html</link>
   <author>skyhorse</author>
   <pubDate>Mon, 03 Apr 2006 02:22:24 +0800</pubDate>
  </item>
  <item>
   <title>Sql Drived Web Fast Develope Solution</title>
   <description><![CDATA[<P>Title: Sql Drived Web Fast Develope Solution<BR>Date: 2005-09<BR>Author: lijun</P>
<P>Abstract:<BR>本演示文档通过3个常见的Web程序实例，引出了一种基于sql语言的快速Web开发模式解决方案。<BR>每个实例都仅需一行或5－6行代码。在对其已经实现的框架做了简要介绍之后，引出最终实现0行代码的构想。<BR>虽然演示的代码实例是基于kylix，但是按照文中的思想，这套解决方案可以移植到任何语言平台上。<BR>可以极大地加快开发速度，缩短开发周期。</P>
<P>Readers:<BR>如果是这套解决方案的使用者，无需看此篇文档，只需要知道如何写Sql语句和html即可进行页面开发。<BR>如果是要对这套解决方案有关通用API部分进行移植和扩充的开发者，则对其要求是：有一点OO的基础，熟悉Regular Expression,</P>
<P><BR>Comment:<BR>SqlDrivedWebFastDevelopSolution.PPT 是主要的PPT, 另一篇MyAssignment3.PPT则是被引用的一个引子。</P>
<P><BR>work to do：<BR>设计数据库表，用于存储程序用到的sql语句。</P>
<P>database design:<BR>1 program: 1 web module(e.g. cgi or jsp)<BR>1 program include: id,name,path,description<BR>1 sql include: id,content,name,description,type(rowset,singlevalue,selectOptions,etc.)<BR>1 sql---n program<BR>1 program -- n sql </P>
<P>3 tables:<BR>tbl_sql,tbl_program,tbl_progs_sqls</P>
<P>develope web modules:<BR>add sql, add program<BR>mod sql, mod program<BR>delete sql,delete program<BR>add sqls to program</P>
<P>后记:<BR>用正则表达式来进行sql的解析也许不是好办法，对于复杂的oracle的sql语句没法解决，可以用编译原理的分析技术来解决。</P>
<P><IMG alt=http://skyhorse.blogbus.com/files/1144000943.ppt hspace=0 src="http://skyhorse.blogbus.com/files/1144000943.ppt" align=baseline border=0></P>
<P><IMG alt=http://skyhorse.blogbus.com/files/1144000979.ppt hspace=0 src="http://skyhorse.blogbus.com/files/1144000979.ppt" align=baseline border=0></P><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://skyhorse.blogbus.com/logs/2185258.html">C# to Java 代码转换过程记录</a> 2006-04-03</div><div><a href="http://skyhorse.blogbus.com/logs/2185214.html">分布式数据库实现摘要</a> 2006-04-03</div><div><a href="http://skyhorse.blogbus.com/logs/219040.html">通用简单html报表的设计及实现</a> 2004-06-12</div><div><a href="http://skyhorse.blogbus.com/logs/152392.html">数据结构设计提交模板（2003-12）</a> 2004-04-25</div><div><a href="http://skyhorse.blogbus.com/logs/152321.html">2003年某项目具体总结</a> 2004-04-25</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fskyhorse.blogbus.com%2Flogs%2F2185239.html&title=Sql+Drived+Web+Fast+Develope+Solution">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://skyhorse.blogbus.com/logs/2185239.html</link>
   <author>skyhorse</author>
   <pubDate>Mon, 03 Apr 2006 01:59:00 +0800</pubDate>
  </item>
  <item>
   <title>负载均衡技术综述</title>
   <description><![CDATA[<p class="MsoNormal" style="PAGE-BREAK-BEFORE: always; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 5cm; LINE-HEIGHT: 300%; mso-char-indent-count: 5.43"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 26pt; LINE-HEIGHT: 300%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">负载均衡技术综述</span></b></p><p class="MsoNormal" style="PAGE-BREAK-BEFORE: always; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 5cm; LINE-HEIGHT: 300%; mso-char-indent-count: 5.43"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 26pt; LINE-HEIGHT: 300%; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"></span></b></p><p class="MsoNormal" style="PAGE-BREAK-BEFORE: always; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 5cm; LINE-HEIGHT: 300%; mso-char-indent-count: 5.43"><b style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 26pt; LINE-HEIGHT: 300%; FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman""></span></b><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">2005-3</span></p><p class="MsoNormal" style="PAGE-BREAK-BEFORE: always; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 5cm; LINE-HEIGHT: 300%; mso-char-indent-count: 5.43"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">摘要：</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; TEXT-ALIGN: left; mso-char-indent-count: 2.0; mso-layout-grid-align: none" align="left"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">负载均衡建立在现有网络结构之上，它提供了一种有效的方法，用于扩展服务器带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。本文介绍了负载均衡技术的分类概况以及原理介绍</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">并详细阐述了第</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">4</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层交换及其调度算法，通过</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">HTTP URL</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">解析和</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">FTP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">主动模式、被动模式下的负载均衡介绍了第</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">7</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层交换技术，并给出了负载均衡解决应用的案例。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">关键词：</span><span style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">&nbsp;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">负载均衡</span><span style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">&nbsp;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">集群</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"> 4</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层交换</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"> 7</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层交换</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 104.4pt; mso-char-indent-count: 4.0"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 26pt">Load Balance Techniques<p /></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 104.4pt; mso-char-indent-count: 4.0"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 26pt"><p> </p></span></b></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 186pt; mso-char-indent-count: 15.5"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><span style="mso-spacerun: yes"> </span>LI Jun<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">( Department of Computer Science and Technology, <placename w:st="on">Tshinghua</placename> <placetype w:st="on">University</placetype>, <city w:st="on">Beijing</city> 100084, <place w:st="on"><country-region w:st="on">China</country-region></place>)<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US">Email: <a href="mailto:l-jun04@mails.tsinghua.edu.cn">l-jun04@mails.tsinghua.edu.cn</a></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><b><span lang="EN-US" style="FONT-SIZE: 12pt">Abstract:</span></b><b><span lang="EN-US" style="FONT-SIZE: 10pt; mso-font-kerning: 0pt">&nbsp;</span></b><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Load balancing leverages the existing networks. Hence is a effective approach for increased throughput and extended server bandwidth , for enhanced network data processing capability , and for further network flexibility and availability. This thesis presents briefly a load balancing theory , components. then use HTTP URL parse and FTP to illustrate content switching that relies on application Layer 7 technology. On top of all these it proposes the general suggestion of how to utilize load balance techniques in real scenario. <p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left"><b><span lang="EN-US" style="FONT-SIZE: 12pt">Keywords: </span></b><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">load balance; cluster; layer 4 switch;layer 7 switch<b><p /></b></span></p><h1 style="MARGIN: 17pt 0cm 16.5pt 21.25pt; TEXT-INDENT: -21.25pt; mso-list: l6 level1 lfo5; tab-stops: list 21.25pt"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore">1.<span style="FONT: 7pt "Times New Roman"">   </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">引言</span></h1><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Internet</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的快速增长使提供网络服务的服务器的负载急剧增加，面对的访问者数量快速增加，网络服务器需要具备提供大量并发访问服务的能力。而对于单独的服务器而言，</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">CPU</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">、</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">I/O</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">处理能力很快会成为瓶颈。简单的提高硬件性能并不能真正解决这个问题，因为单台服务器的性能总是有限的。必须采用多台服务器提供网络服务，并将网络请求分配给这些服务器分担，才能提供处理大量并发服务的能力。负载均衡（</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">load balance</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">）技术在这其中起到了关键的作用。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">负载均衡的基本思路是多台服务器为对称方式，每台服务器都具备等价的地位，都可以单独对外提供服务而无须其他服务器的辅助。然后通过某种负载分担技术，将外部发送来的请求均匀分配到对称结构中的某一台服务器上，而接收到请求的服务器都独立回应客户机的请求。服务器内容的一致性一般靠共享存储，同步更新或者是数据库。多台服务器构成了一个所谓的集群</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">(Cluster)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">现在业内流行的负载均衡器产品包括软件和硬件</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">.</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">软件以章文嵩博士的开源项目</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Linux Virtual Server(Lvs)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">为代表，而硬件产品的代表则有</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Nortel Networks</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">公司</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">(Alteon WebSystems)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">生产的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"> Alteon</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">交换机，</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Cisco System</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">公司生产的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"> Local Director</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">交换机，</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">F5 Networks</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">公司生产的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"> F5</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">交换机等。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><p> </p></span></p><h1 style="MARGIN: 17pt 0cm 16.5pt 21.25pt; TEXT-INDENT: -21.25pt; mso-list: l3 level1 lfo6; tab-stops: list 21.25pt"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore">2.<span style="FONT: 7pt "Times New Roman"">   </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">负载均衡技术的概况与分类</span></h1><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">负载均衡是一种策略</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">它能让多台服务器或多条链路共同承担一些繁重的计算或</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">I/ O </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">任</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">务</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">从而以较低成本消除网络瓶颈</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">提高网络的灵活性和可靠性。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">负载均衡的实现方式有多种，包括基于</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">DNS,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">基于客户端的，基于应用服务器和基于协议层的多种实现方式。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">其中使用负载均衡器</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">(load balancer)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">实现的基于协议层交换的负载均衡技术，包括第</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">4</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层，第</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">7</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层交换等。这种方式将负载均衡层与网络服务层分开，具有较高的可伸缩性和高可用性等特点，对于服务器和客户端而言透明，基本上无须做特别的修改。由于这样的特点，所以是最为流行也是广泛使用的技术。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US"><p> </p></span></p><h2 style="MARGIN: 13pt 0cm"><span lang="EN-US"><font face="Arial">2.1</font></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">基于</span><span lang="EN-US"><font face="Arial">DNS</font></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">的解决方法</span></h2><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">最早的负载均衡技术是通过</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">DNS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">服务中的随机名字解析来实现的，在</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">DNS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">服务器中，可以为多个不同的地址配置同一个名字，而最终查询这个名字的客户机将在解析这个名字时得到其中的一个地址。因此，对于同一个名字，不同的客户机会得到不同的地址，他们也就访问不同地址上的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Web</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">服务器，从而达到负载均衡的目的。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">DNS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">负载均衡的优点是简单、易行，并且服务器可以位于互联网的任意位置上，然而它也存在不少缺点，一个缺点是为了保证</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">DNS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">数据及时更新，一般都要将</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">DNS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的刷新时间设置的较小，但太小就会造成太大的额外网络流量，并且更改了</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">DNS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">数据之后也不能立即生效；第二点是</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">DNS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">负载均衡无法得知服务器之间的差异，它不能做到为性能较好的服务器多分配请求，也不能了解到服务器的当前状态，甚至会出现客户请求集中在某一台服务器上的偶然情况。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">DNS</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">方法实现的是基于</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Round-Robin</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">轮循的算法，它实现了一种粗粒度的负载均衡。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p> </p></span></p><h2 style="MARGIN: 13pt 0cm; tab-stops: list 1.0cm"><span lang="EN-US"><font face="Arial">2.2</font></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">基于客户端的解决方法</span></h2><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">这种模式指的是在网络的客户端运行特定的程序，该程序通过某种手段得到所有服务器的</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">信息，再根据某种选择策略，找到可以提供服务的最佳服务器，将本地的应用请求发向它。如果负载信息采集程序发现服务器失效，则找到其他可替代的服务器作为服务选择。整个过程对于应用程序来说是完全透明的，所有的工作都在运行时处理。因此这也是一种动态的负载均衡技术。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">但这种技术存在通用性的问题。因为每一个客户端都要安装这个特殊的程序；并且，为了保证应用层的透明运行，需要针对每一个应用程序加以修改，通过动态链接库或者嵌入的方法，将客户端的访问请求能够先经过采集程序再发往服务器，以重定向的过程进行。对于每一个应用几乎要对代码进行重新开发，工作量比较大。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">所以，这种技术仅在特殊的应用场合才使用到，比如在执行某些专有任务的时候，比较需要分布式的计算能力，对应用的开发没有太多要求。例如<span lang="EN-US">Oracle</span>的客户端的配置文件<span lang="EN-US">Tnsname.ora</span>中就可以对同一个数据库实例名写多个<span lang="EN-US">ip</span>地址。当第一个地址访问不到时，客户端就会主动访问<span lang="EN-US">addresslist</span>中的下一个<span lang="EN-US">ip</span>地址。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p> </p></span></p><h2 style="MARGIN: 13pt 0cm; tab-stops: list 1.0cm"><span lang="EN-US"><font face="Arial">2.3</font></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">基于应用服务器的特定解决方法</span></h2><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">如果将客户端的负载均衡层移植到某一个中间平台，形成三层结构，则客户端应用可以不需要做特殊的修改，透明的通过中间层应用服务器将请求均衡到相应的服务结点。比较常见的实现手段就是反向代理技术。所谓的反向代理与一般的代理相反，不是部署在靠近客户端的位置，而是靠近被访问的服务器的位置。<span lang="EN-US"><p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">使用反向代理服务器，可以将请求均匀转发给多台服务器，或者直接将缓存的数据返回客户端，这样的加速模式在一定程度上可以提升静态网页的访问速度，从而达到负载均衡的目的。</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">使用反向代理的好处是，可以将负载均衡和代理服务器的高速缓存技术结合在一起，提供有益的性能。然而它本身也存在一些问题，首先就是必须为每一种服务都专门开发一个反向代理服务器。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">反向代理服务器针对每一次代理，就必须维护两个连接，一个对外的连接，一个对内的连接，因此对于特别高的连接请求，代理服务器的负载也就非常之大。反向代理能够执行针对应用协议而优化的负载均衡策略，每次仅访问最空闲的内部服务器来提供服务。但是随着并发连接数量的增加，代理服务器本身的负载也变得非常大，最后反向代理服务器本身会成为服务的瓶颈。</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">例如，使用</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Apache</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">mod_rproxy</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">模块来实现负载均衡功能时，提供的并发连接数量受</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Apache</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">本身的并发连接数量的限制。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><h2 style="MARGIN: 13pt 0cm; tab-stops: list 1.0cm"><span lang="EN-US"><font face="Arial">2.4</font></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">基于使用负载均衡器的协议层的解决方法</span></h2><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">与以上的方法相比，使用负载均衡器的协议层的解决方法实现了精细粒度的负载均衡。<span lang="EN-US"><p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">在这种体系结构中，一组服务器通过高速的局域网或者地理分布的广域网相互连接，在它们的前端是负载均衡器。负载均衡器能无缝地将网络请求调度到真实服务器上，从而使得服务器集群的结构对客户是透明的，客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务机群中透明地加入和删除一个节点来达到，通过检测节点或服务进程故障和正确地重置系统达到高可用性。整个集群具有单一的虚拟<span lang="EN-US">IP</span>地址<span lang="EN-US">(VIP)</span>。使集群中的服务器对客户端具有透明性。<span lang="EN-US"><p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">均衡器通常称为<span lang="EN-US">OSI</span>参考模型第<span lang="EN-US">4</span>层的切换装置，因为在传输数据包时，它们除采用<span lang="EN-US">IP</span>层的信息外，还采用了传输层<span lang="EN-US">(OSI</span>参考模型第<span lang="EN-US">4</span>层<span lang="EN-US">)</span>的信息。<span lang="EN-US"><p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">Schroeder</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">等人对<span lang="EN-US">Web</span>服务器集群技术进行了综述<span lang="EN-US">[2]</span>，他们根据负载分配策略的细节将其分为以下三类：<span lang="EN-US"><p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 45pt; TEXT-INDENT: -21pt; mso-list: l2 level1 lfo7; tab-stops: list 45.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-bidi-font-weight: bold"><span style="mso-list: Ignore">l<span style="FONT: 7pt "Times New Roman"">        </span></span></span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">L4/2</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">――第<span lang="EN-US">4</span>层交换，第<span lang="EN-US">2</span>层分组转发<span lang="EN-US"><p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 45pt; TEXT-INDENT: -21pt; mso-list: l2 level1 lfo7; tab-stops: list 45.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-bidi-font-weight: bold"><span style="mso-list: Ignore">l<span style="FONT: 7pt "Times New Roman"">        </span></span></span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">L4/3</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">――第<span lang="EN-US">4</span>层交换，第<span lang="EN-US">3</span>层分组转发<span lang="EN-US"><p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 45pt; TEXT-INDENT: -21pt; mso-list: l2 level1 lfo7; tab-stops: list 45.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-bidi-font-weight: bold"><span style="mso-list: Ignore">l<span style="FONT: 7pt "Times New Roman"">        </span></span></span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">L7</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">－－第<span lang="EN-US">7</span>层交换，也就是基于应用层内容的交换。<span lang="EN-US"><p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">基本的服务器负载均衡，比如<span lang="EN-US">Web</span>服务器的负载均衡通常采用第一和第二种方法就基本可以实现。而针对于某些特定的服务和特定的需求，则需要依靠第三种方法才能实现负载均衡。<span lang="EN-US"><p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">从本质上讲，第<span lang="EN-US">4</span>层的交换对网络协议中的源地址和目标地址进行了更改和替换，以便实现客户端访问一个绑定在负载均衡器上<span lang="EN-US">VIP</span>到真实服务器<span lang="EN-US">ip</span>（<span lang="EN-US">RIP</span>）的转换，它根据特定的算法策略对所有的传输流进行修改。第<span lang="EN-US">4</span>层的交换是基于状态的，负载均衡器对于每个会话都进行记录。 而源端口与目的端口的结合，以及第<span lang="EN-US">3</span>层<span lang="EN-US">IP</span>寻址，使<span lang="EN-US">TCP/UDP</span>可以唯一地识别网络中地每一个会话。<span lang="EN-US"><p /></span></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">而第</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">7</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">层的智能性能够进行进一步地控制，即对所有传输流和内容的控制。由于可以自由地完全打开传输流的应用／表示层，仔细分析其中的内容，因此可以根据应用的类型而非仅仅根据</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">IP</span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和端口号做出更智能的负载均衡决定。</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><p> </p></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><p> </p></span></p><h1 style="MARGIN: 17pt 0cm 16.5pt 21.25pt; TEXT-INDENT: -21.25pt; mso-list: l3 level1 lfo6; tab-stops: list 21.25pt"><span lang="EN-US" style="mso-fareast-font-family: "Times New Roman""><span style="mso-list: Ignore">3.<span style="FONT: 7pt "Times New Roman"">   </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">基于负载均衡器的协议层的技术</span></h1><h2 style="MARGIN: 13pt 0cm 13pt 1cm; TEXT-INDENT: -1cm; mso-list: l3 level2 lfo6; tab-stops: list 1.0cm"><span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><span style="mso-list: Ignore"><font face="Arial">3.1.</font><span style="FONT: 7pt "Times New Roman"">&nbsp;</span></span></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">第</span><span lang="EN-US"><font face="Arial">4</font></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">层交换第</span><span lang="EN-US"><font face="Arial">2</font></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">层分组转发</span></h2><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">服务器负载均衡最简单的实现方法是使用第<span lang="EN-US">2</span>层模型。此时，负载均衡器的所有接口在和客户端路由器与被访问的对象服务器处于相同的<span lang="EN-US">VLAN</span>和<span lang="EN-US">IP</span>子网中。它的主要优势是简单性。负载均衡器置于网络中时无须改变拓扑结构，也无须重新调整<span lang="EN-US">IP</span>来实现负载均衡。但是缺点是每个服务器都要有一个在<span lang="EN-US">Internet</span>上注册过的真实<span lang="EN-US">IP</span>来提供对互联网客户端的服务</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold">假设客户端正在与位于<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span lang="EN-US">10.10.10</span></chsdate><span lang="EN-US">.0</span>网络</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">中的一个</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Web</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">站点建立一个</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">http</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">连接，该网络通过</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">VI<chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False">P 10.10.10</chsdate>.100</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">均衡器进行服务器负载均衡。由客户端向服务器的通信流如下：</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 81pt; TEXT-INDENT: -36pt; mso-list: l4 level2 lfo1; tab-stops: list 81.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold"><span style="mso-list: Ignore">（1）<span style="FONT: 7pt "Times New Roman"">    </span></span></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">客户端通过</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Dns</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">查询或直接输入均衡器上的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">VIP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，并发送一个</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">TCP SYN</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">数据包和</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">VIP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">建立一个</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">TCP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">会话。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 81pt; TEXT-INDENT: -36pt; mso-list: l4 level2 lfo1; tab-stops: list 81.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold"><span style="mso-list: Ignore">（2）<span style="FONT: 7pt "Times New Roman"">    </span></span></span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">TCP SYN</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">数据包被发送到客户端路由器。客户端路由器将向</span><chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">10.10.10</span></chsdate><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">.0</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">网络发送一个</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">ARP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">广播以解析</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">10.10.10.100</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">MAC</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">地址。均衡器会以它的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">MAC</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">地址来回应路由器的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">ARP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">广播，来代表</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">VIP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 81pt; TEXT-INDENT: -36pt; mso-list: l4 level2 lfo1; tab-stops: list 81.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold"><span style="mso-list: Ignore">（3）<span style="FONT: 7pt "Times New Roman"">    </span></span></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">客户端路由器会向均衡器的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">MAC</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">地址转发帧。此时，均衡器会作出一个负载均衡的算法判断，并转换</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">MAC</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">地址和目的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">IP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">地址为挑选出来的真实服务器的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">MAC</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">RIP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">，并且在每一层中改变校验和信息等。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 45pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">而从服务器到客户机的通信流，则采用相反的逻辑。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 81pt; TEXT-INDENT: -36pt; mso-list: l4 level2 lfo1; tab-stops: list 81.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold"><span style="mso-list: Ignore">（4）<span style="FONT: 7pt "Times New Roman"">    </span></span></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">服务器通过向默认网关</span><chsdate w:st="on" year="1899" month="12" day="30" islunardate="False" isrocdate="False"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">10.10.10</span></chsdate><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">.1</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">发送帧，来回应</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">TCP SYN-ACK<p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 81pt; TEXT-INDENT: -36pt; mso-list: l4 level2 lfo1; tab-stops: list 81.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold"><span style="mso-list: Ignore">（5）<span style="FONT: 7pt "Times New Roman"">    </span></span></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">由于帧必须通过均衡器并达到客户端路由器的默认网关，所以对</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">MAC</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">地址和源</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">IP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">地址进行了逆向转换。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 81pt; TEXT-INDENT: -36pt; mso-list: l4 level2 lfo1; tab-stops: list 81.0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-family: 宋体; mso-bidi-font-weight: bold"><span style="mso-list: Ignore">（6）<span style="FONT: 7pt "Times New Roman"">    </span></span></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">最后均衡器向客户端路由器的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">MAC</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">地址转发帧，该路由器也向客户端发送返回数据包。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">在此过程中，客户端和目标的真实服务器都没有察觉到负载均衡的发生，换句话说就是客户端看到的是自身和均衡器的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">VIP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的持续连接，同时服务器看到的是没有涉及均衡器的客户端连接。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 45pt"><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p> </p></span></p><h2 style="MARGIN: 13pt 0cm 13pt 1cm; TEXT-INDENT: -1cm; mso-list: l3 level2 lfo6; tab-stops: list 1.0cm"><span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><span style="mso-list: Ignore"><font face="Arial">3.2.</font><span style="FONT: 7pt "Times New Roman"">&nbsp;</span></span></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">第</span><span lang="EN-US"><font face="Arial">4</font></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">层交换第</span><span lang="EN-US"><font face="Arial">3</font></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">层分组转发</span></h2><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">最常见的服务器负载均衡应该是第</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">3</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">(</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">路由</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">)</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的服务器负载均衡。它与第</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">2</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层的概念相似，但是区别在于，客户端路由器和对象服务器存在于不同的第</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">2</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">VLAN</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">和</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">IP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">子网。均衡器对服务器和客户端间的帧进行路由而不是进行交换。均衡器同时也起到了路由的作用。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">均衡器的位置可能成为客户端</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">IP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">网络中的一员，这种情况下，客户端路由器无须关心服务器所在的子网，对真实服务器的访问可以通过均衡器上的</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">VIP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">然后由</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">NAT</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">地址转换来实现，这样部署可以节约使用</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">Internet</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">注册地址。</span><span style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">&nbsp;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">第二种情况是</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">VIP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">成为对象服务器所在网络中的一员，在这种情况下，服务器所在网络必须是可路由的公网，或者由其他一个</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">NAT</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">设备进行转换。最后一种情况，</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">VIP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">是不与均衡器直接连接的子网的一员，客户端路由器必须配置一个静态路由来指向</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">VIP</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">所在的虚拟子网的均衡器的接口。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">部署第</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">3</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层的负载均衡有</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">2</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">个主要的优势</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42.75pt; TEXT-INDENT: -21pt; mso-list: l5 level1 lfo2; tab-stops: list 42.75pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-bidi-font-weight: bold"><span style="mso-list: Ignore">l<span style="FONT: 7pt "Times New Roman"">        </span></span></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">节省地址空间，</span><span style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">&nbsp;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">不必使用注册</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">IP,</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">使用符合</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">RFC1918</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">的地址空间即可。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 42.75pt; TEXT-INDENT: -21pt; mso-list: l5 level1 lfo2; tab-stops: list 42.75pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings; mso-fareast-font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-bidi-font-weight: bold"><span style="mso-list: Ignore">l<span style="FONT: 7pt "Times New Roman"">        </span></span></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">简单，</span><span style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">&nbsp;</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">均衡器同时作为一个路由器，更容易理解其网络拓扑。</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold"><p /></span></p><h2 style="MARGIN: 13pt 0cm 13pt 1cm; TEXT-INDENT: -1cm; mso-list: l3 level2 lfo6; tab-stops: list 1.0cm"><span lang="EN-US" style="mso-fareast-font-family: Arial; mso-bidi-font-family: Arial"><span style="mso-list: Ignore"><font face="Arial">3.3.</font><span style="FONT: 7pt "Times New Roman"">&nbsp;</span></span></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">基于第</span><span lang="EN-US"><font face="Arial">7</font></span><span style="FONT-FAMILY: 黑体; mso-ascii-font-family: Arial">层内容交换技术</span></h2><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; mso-char-indent-count: 2.0"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">在一般情况下，使用第</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">4</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层交换就可以达到基本的负载均衡，但是在有些情况下，对于某些应用，使用第</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">7</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层所含的信息进行决策可以带来更大的益处。第</span><span lang="EN-US" style="FONT-SIZE: 12pt; mso-bidi-font-weight: bold">7</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体; mso-bidi-font-weight: bold; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">层的智能性能够进行进一步地控制，即对所有传输流和内容的控制。由于可以自由地<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://skyhorse.blogbus.com/logs/219031.html">解决图形客户端从外网访问网站内部的oracle服务器的方法</a> 2004-06-12</div><div><a href="http://skyhorse.blogbus.com/logs/152807.html">2001年4月我写的几个经典ipchains,iptables防火墙策略及实际应用</a> 2004-04-25</div><div><a href="http://skyhorse.blogbus.com/logs/152786.html">2001年排除网络故障经验总结</a> 2004-04-25</div><div><a href="http://skyhorse.blogbus.com/logs/152396.html">2001－8月checkpoint防火墙培训</a> 2004-04-25</div><div><a href="http://skyhorse.blogbus.com/logs/152381.html">2002年6月10日某单位网络情况汇报</a> 2004-04-25</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fskyhorse.blogbus.com%2Flogs%2F2185231.html&title=%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E6%8A%80%E6%9C%AF%E7%BB%BC%E8%BF%B0">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://skyhorse.blogbus.com/logs/2185231.html</link>
   <author>skyhorse</author>
   <pubDate>Mon, 03 Apr 2006 01:47:02 +0800</pubDate>
  </item>
 </channel>
</rss>
