﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-我的BT下载实验室</title><link>http://www.blogjava.net/wangdei/</link><description>&lt;a href="http://www.yaonba.com .cn" title="yao NBA"&gt;&lt;h1&gt;姚明的NBA&lt;/h1&gt;&lt;/a&gt;
&lt;a href="http://www.bt285.cn" title="yao NBA"&gt;&lt;h1&gt;BT下载&lt;/h1&gt;&lt;/a&gt;
&lt;a href="http://www.5a520.cn" title="小说520"&gt;&lt;h1&gt;小说520&lt;/h1&gt;&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 18:51:30 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 18:51:30 GMT</pubDate><ttl>60</ttl><item><title>JAVA分布式应用中使用XML数据</title><link>http://www.blogjava.net/wangdei/archive/2008/09/24/230896.html</link><dc:creator>BT下载与小说520</dc:creator><author>BT下载与小说520</author><pubDate>Wed, 24 Sep 2008 07:29:00 GMT</pubDate><guid>http://www.blogjava.net/wangdei/archive/2008/09/24/230896.html</guid><description><![CDATA[<div class="blog_content">
<p>可扩展标记语言（XML）作为一种简单的、中性的、易读的数据表示形式已经变得越来越流行，许多软件厂商宣布的&#8220;支持XML"，意味着他们的产品将能生成或处理XML数据。XML也被看作再企业间交换数据最佳格式。它允许企业在所交换的数据的XML的文档类型定义（Document Type Definitions，DTDs）或模式（Schema）上取得一致。这些DTDs或Schema是独立于企业使用的数据库模式的。 本文将用研究在不同计算机之间通讯与处理XML数据的分布式系统的构建方法，主要是运行在不同的虚拟机上的JAVA应用之间的XML通讯。 <strong>XML通讯 </strong>万维网协会（World Wide Web Consortium, W3C）在XML规范中定义了XML的语法和语义。为了处理XML数据,XML文档必须经过解析。W3C定义了文档对象模型（DOM），它是应用程序员处理XML数据的接口。DOM已经有包括JAVA在内的许多语言的实现。JAVA应用程序可以通过DOM API来访问XML数据。XML解析器将产生XML文档的DOM表示。 图1说明了处理XML文档的JAVA分布式应用的简单模型。这个模型假设数据可以从诸如关系数据库之类的数据源得到。JAVA代码处理数据并最终产生DOM表示，这些代码表示为图中的处理器。 <img title="点击图片可在新窗口打开" style="cursor: pointer" alt="" src="http://www.ccw.com.cn/htm/app/aprog/02_1_31.gif" _counted="undefined" /> 处理器代码将DOM代表的XML数据传给发送者。发送者是与接收者进行XML数据通讯的JAVA代码。接收者JAVA代码来接受XML数据，产生DOM表示的数据并把它传送给另一个处理器。简而言之，发送者和接收者抽象了DOM表示的XML数据的通讯。 发送者和接收者不是在同一个JAVA虚拟机上执行的。他们是通过分布式系统的构件来相连的。无论是接收者还是发送者都既是客户端又是服务器端，两者的数据传输都是双向的。 Xbeans 就像将要看到的一样，在本文中描述的发送者和接收者的三种实现方法都都是通过Xbeans来实现。Xbeans是一种接受XML数据作为输入，处理这个输入然后向下一个Xbeans输出XML结果的软件构件。Xbeans的输入输出都是XML的DOM文档，亦即传送给Xbeans的不是需要XML解析器解析的字符串，而是通过W3C的标准DOM API解析成了文档对象。图2说明了一个Xbeans。 <img title="点击图片可在新窗口打开" style="cursor: pointer" alt="" src="http://www.ccw.com.cn/htm/app/aprog/02_1_32.gif" _counted="undefined" /> Xbeans是JavaBeans,支持封装、重用、连接和客户化Java代码。通过适当的一些Xbeans和JavaBeans的设计工具，我们就能编很少的代码构建非常有用的分布式应用。 Xbeans从IBM的XML的JAVA开发工具包而来，在其上作了少量修改以便更适合分布式的应用。Xbeans能够从www.Xbeans.org的开放源码项目中免费获得。 实现发送方和接收方 下面将介绍用JAVA实现发送者和接收者的三种不同的方法。然后对每种方法作一个简单的分析。 <strong>方法一：用标准的web 服务器 </strong>这种方法将只是简单的将XML作为文本发送给远程计算机上的web服务器。发送方必须将DOM表示的XML转化为文本来与接收方进行通讯。然后，接受方必须将文本还原为DOM表示，如图3： <img title="点击图片可在新窗口打开" style="cursor: pointer" alt="" src="http://www.ccw.com.cn/htm/app/aprog/02_1_33.gif" _counted="undefined" /> 以下代码段用HTTP来实现发送者。这里用到了IBM Java开发包中的DOMWriter类来实现DOM表示到文本XML表示的转换。 </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1">
    <br />
    <tbody>
        <tr>
            <td>
            <pre><code>/**偷窥无罪 <a href="http://www.bt285.cn/content.php?id=141970">http://www.bt285.cn/content.php?id=141970</a>
            《我的丑娘》&nbsp; <a href="http://www.bt285.cn/wodechounian/">http://www.bt285.cn/wodechounian/</a></code></pre>
            <pre><code>甜性涩爱 <a href="http://www.bt285.cn/1196863/story/story_1.html">http://www.bt285.cn/1196863/story/story_1.html</a></code></pre>
            public void documentReady(DOMEvent evt) throws XbeansException { try { URL receiver = new URL (getRemoteURL ()); URLConnection receiverConnection = receiver.openConnection(); receiverConnection.setDoOutput(true); //向发送者打开一个输出流然后发送文本形式的XML数据 OutputStream out = receiverConnection.getOutputStream(); DOMWriter writer = new DOMWriter(); writer.setPrintWriter(new PrintWriter(out)); writer.documentReady( new com.ibm.xml.xpk4j.dom.DOMEvent( this,evt.getDocument())); out.close(); // 为结果打开一个输入流 BufferedReader in = New BufferedReader( new InputStreamReader(receiverConnection.getInputStream())); // 处理结果："OK" 表示成功；"Exception" 表示输入流串行化异常 ... in.close(); } catch (Throwable e) { e.printStackTrace(System.err); } } </td>
        </tr>
    </tbody>
</table>
<p>注意到以上的documentReady()方法用remoteURL属性得到服务器上的CGI脚本的URL。为了与HTTP兼容，CGI脚本类用字符串&#8221;Content-type: text/html"封装接收者的输出。这个脚本然后调用服务器上的the receiverMain()方法。 Main()函数只是简单的实例化接收者然后调用其receiveDocument()方法。 </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1">
    <br />
    <tbody>
        <tr>
            <td>
            <pre><code>
            import org.xbeans.communication.stdio.receiver.*;
            public class receiverMain {
            static Bean theReceiver = new Bean();
            public static void main(String[] args) {
            theReceiver.receiveDocument();
            }
            }
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<p>最后receiveDocument()方法的代码段将重新生成DOM表示以便进一步处理。这里用到了IBM的XML解析器。 </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1">
    <br />
    <tbody>
        <tr>
            <td>
            <pre><code>
            DOMParser parser = new DOMParser(); // 构造解析器
            try { // 调用解析器
            parser.parse(new InputSource(System.in));
            } catch (Throwable e) {
            throw new XbeansException("","receiver","io error parsing incoming document",
            "io error parsing incoming document "+e);
            }
            //将文档传向下一个bean
            DOMListener.documentReady(new DOMEvent(this,parser.getDocument()));
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<p><strong>方法二：通过JAVA远程方法调用串行化文档 </strong>这个方法通过JAVA远程方法调用（JAVA RMI）和DOM串行化（serialization）来从发送者向接收者传输XML DOM 文档。如图4： <img title="点击图片可在新窗口打开" style="cursor: pointer" alt="" src="http://www.ccw.com.cn/htm/app/aprog/02_1_34.gif" _counted="undefined" /> 以下代码用JAVA远程方法调用实现发送方与接受方的通讯. </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1">
    <br />
    <tbody>
        <tr>
            <td>
            <pre><code>
            public void documentReady(DOMEvent evt) throws XbeansException {
            if (DOMListener==null) {
            try {
            DOMListener = (DOMListener)Naming.lookup(getReceiverName());
            } catch (Exception e) {
            throw new XbeansException( evt.getDocument().getNodeName(),
            "sender", "error obtaining remote receiver",
            "The name may be wrong or the network may be down.");
            }
            }
            DOMListener.documentReady(evt); }
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<p>以下是接受方的JAVA 远程方法调用的实现。setName()方法将接受这传送给RMI注册（registry），documentReady()方法仅仅将接收到的文档传送给下一个组件。 </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1">
    <tbody>
        <tr>
            <td>
            <pre><code>
            <table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1">
                <tbody>
                    <tr>
                        <td>
                        <pre><code>/**偷窥无罪 <a href="http://www.bt285.cn/content.php?id=141970">http://www.bt285.cn/content.php?id=141970</a>
                        《我的丑娘》&nbsp; <a href="http://www.bt285.cn/wodechounian/">http://www.bt285.cn/wodechounian/</a></code></pre>
                        <pre><code>甜性涩爱 <a href="http://www.bt285.cn/1196863/story/story_1.html">http://www.bt285.cn/1196863/story/story_1.html</a></code></pre>
                        </td>
                    </tr>
                </tbody>
            </table>
            public void setReceiverName(String newName) {
            try {
            if (receiverName!=null) Naming.unbind(receiverName);
            receiverName = newName;
            Naming.rebind(receiverName, this );
            } catch( Exception e ) {
            System.out.println( e );
            }
            }
            public void documentReady(Document incomingDocument)
            throws RemoteException, XbeansException {
            if (DOMListener==null) {
            throw new XbeansException(incomingDocument.getNodeName(),"rmiReceiver",
            "next component not established", "The component needs to be configured.");
            }
            DOMListener.documentReady(new DOMEvent(this,incomingDocument));
            }
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<p><strong>方法三：CORBA-IIOP</strong> 第三方法用CORBA-IIOP(CORBA over Internet Inter-ORB Protocol)来传输数据。对象管理组织（OMG）正在建议扩展接口定义语言（IDL）将XML数据类型包括进去。这样，将来CORBA产品将能传输XML数据。如图5所示： <img title="点击图片可在新窗口打开" style="cursor: pointer" alt="" src="http://www.ccw.com.cn/htm/app/aprog/02_1_35.gif" _counted="undefined" /> 以下的OMG IDL给出了发送者和接收者CORBA实现的接口。 </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1">
    <br />
    <tbody>
        <tr>
            <td>
            <pre><code>
            exception RemoteReceiverException {
            string remoteIdentifier;
            string documentName;
            string componentName;
            string message;
            string moreMessage;
            };
            typedef sequence byteArray;
            interface XMLReceiver {
            void documentReady(in byteArray serializedDocument)
            raises(RemoteReceiverException);
            };
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<p>以下代码用JAVA串行化DOM和CORBA实现发送者。 </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1">
    <br />
    <tbody>
        <tr>
            <td>
            <pre><code>
            public void documentReady(DOMEvent evt) throws XbeansException {
            Document documentToSend = evt.getDocument();
            try {
            ByteArrayOutputStream bastream = new ByteArrayOutputStream();
            ObjectOutputStream p = new ObjectOutputStream(bastream);
            p.writeObject(documentToSend);
            p.flush();
            org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init( new String[0],
            System.getProperties());
            XMLReceiver receiver = urlToObject(orb,getReceiverURL());
            receiver.documentReady(bastream.toByteArray());
            } catch (RemoteReceiverException rre) {
            throw new XbeansException(rre.remoteIdentifier, rre.documentName,
            rre.componentName, rre.message,rre.moreMessage);
            } catch (Throwable e) {
            throw new XbeansException("","sender", "error sending document "+e,
            "error sending document "+e);
            }
            }
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<p>以下代码用JAVA串行化DOM和CORBA实现接收者。 </p>
<table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1">
    <br />
    <tbody>
        <tr>
            <td>
            <pre><code>
            public void documentReady(byte[] serializedDocument)throws RemoteReceiverException {
            // 反串行化字节流
            ByteArrayInputStream bais = new ByteArrayInputStream(serializedDocument);
            Document theDocument;
            try {
            ObjectInputStream ois = new ObjectInputStream(bais);
            theDocument = (Document)ois.readObject();
            } catch(Throwable e) {
            throw new RemoteReceiverException(corbaName,"incoming document","receiver",
            "error deserializing document","error deserializing document"+e);
            }
            try { //将文档传向监听者
            local.DOMListener.documentReady(new DOMEvent(this,theDocument));
            } catch (XbeansException xbe) {
            throw new RemoteReceiverException( xbe.remoteIdentifier(),
            xbe.documentName(),xbe.componentName(),
            xbe.message(),xbe.moreMessage());
            }
            }
            </code></pre>
            </td>
        </tr>
    </tbody>
</table>
<p><strong>分析:</strong> 测试表明，纯文本表示的XML要比DOM串行化表示性能更好。同时，解析DOM和文本所用的时间也要比用JAVA直接串行化和法串行化所用的时间少。 标准的web服务器方式的优势是其应用基础要广泛许多。CGI脚本能够在绝大多数web服务器上运行，而且，接受方能够很容易的通过URL标识。而对于RMI，则需要RMI注册。CORBA的解决办法则需要在服务器上安装对象请求代理（Object Request Broker，ORB ）,而且，CORBA发送者的实现使用的是一个URL的命名模式而不是接收者的CORBA对象引用，用一个字符串与一个URL相联系，然后在客户端转化。 CORBA 和RMI支持JAVA 客户端到JAVA服务器的解决方案。没有CGI脚本也不需要从标准输入中读取编码异常。而且，不需要在发送者每次用XML通讯时都启动一个JAVA虚拟机。他们两则均支持接收者的自动激活。 JAVA RMI方式只能在JAVA代码之间工作，对于web服务器包括CORBA理论上能在任何编程语言之间通讯。对于JAVA串行化的DOM来说，即便是客户端和服务器端均需要是JAVA代码的要求不是问题，它还存在另外一个困难，即JAVA串行化要求客户端和服务器运行的是相同的DOM实现。 <strong>结论 </strong>正如上面所述，有许多方法可以实现在JAVA分布式应用中发送XML数据，每一种方法的性能和互操作性都是不同的。重要的是应该把XML通讯从分布式应用逻辑中抽取出来。也就是，实现发送和接受XML的代码应和应用逻辑的代码中分离出来。通过把代码打包成软件组件，就能够改变发送方和接受方的代码而不会影响到应用其余实现。 </p>
</div>
<img src ="http://www.blogjava.net/wangdei/aggbug/230896.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangdei/" target="_blank">BT下载与小说520</a> 2008-09-24 15:29 <a href="http://www.blogjava.net/wangdei/archive/2008/09/24/230896.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不用词典利用Lucene取标题中的关键字</title><link>http://www.blogjava.net/wangdei/archive/2008/08/28/225288.html</link><dc:creator>BT下载与小说520</dc:creator><author>BT下载与小说520</author><pubDate>Thu, 28 Aug 2008 06:18:00 GMT</pubDate><guid>http://www.blogjava.net/wangdei/archive/2008/08/28/225288.html</guid><wfw:comment>http://www.blogjava.net/wangdei/comments/225288.html</wfw:comment><comments>http://www.blogjava.net/wangdei/archive/2008/08/28/225288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangdei/comments/commentRss/225288.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangdei/services/trackbacks/225288.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/wangdei/archive/2008/08/28/225288.html'>阅读全文</a><img src ="http://www.blogjava.net/wangdei/aggbug/225288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangdei/" target="_blank">BT下载与小说520</a> 2008-08-28 14:18 <a href="http://www.blogjava.net/wangdei/archive/2008/08/28/225288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMeter基础使用</title><link>http://www.blogjava.net/wangdei/archive/2008/08/02/219632.html</link><dc:creator>BT下载与小说520</dc:creator><author>BT下载与小说520</author><pubDate>Sat, 02 Aug 2008 14:37:00 GMT</pubDate><guid>http://www.blogjava.net/wangdei/archive/2008/08/02/219632.html</guid><wfw:comment>http://www.blogjava.net/wangdei/comments/219632.html</wfw:comment><comments>http://www.blogjava.net/wangdei/archive/2008/08/02/219632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangdei/comments/commentRss/219632.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangdei/services/trackbacks/219632.html</trackback:ping><description><![CDATA[<p>JMeter&nbsp;是&nbsp;Apache&nbsp;组织的开放源代码项目，它是功能和性能测试的工具，100%的用java实现，最新的版本是1.9.1。本文中作者将向大家介绍如何使用&nbsp;JMeter&nbsp;进行测试。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;JMeter是Apache组织的开放源代码项目，它是功能和性能测试的工具，100%的用java实现，最新的版本是1.9.1，大家可以到&nbsp;<a href="http://jakarta.apache.org/jmeter/index.html">http://jakarta.apache.org/jmeter/index.html</a>下载源代码和查看相关文档。<br />
JMeter作用领域<br />
JMeter可以用于测试静态或者动态资源的性能（文件、Servlets、Perl脚本、java对象、数据库和查询、ftp服务器或者其他的资源）。JMeter用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力，或者分析他们提供的服务在不同负载条件下的总性能情况。你可以用JMeter提供的图形化界面分析性能指标或者在高负载情况下测试服务器/脚本/对象的行为。<br />
<br />
<strong><br />
<br />
使用JMeter测试Web应用<br />
<br />
&nbsp;&nbsp;&nbsp;接下来的章节里，作者将详细的演示如何使用JMeter来测试Web应用的完整过程。<br />
<br />
2.1&nbsp;测试环境<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;作者使用了Tomcat作为Web服务器进行测试，被测试的内容是一个jsp文件和一个servlet，jsp文件调用JavaBean、打印相关信息，servlet接受用户参数、调用javabean、输出相关信息。详细的内容请参考作者提供的JMeter.war的内容。<br />
<br />
2.2&nbsp;安装启动JMeter<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;大家可以到通过<a href="http://apache.linuxforum.net/dist/jakarta/jmeter/binaries/jakarta-jmeter-1.9.1.zip">http://apache.linuxforum.net/dist/jakarta/jmeter/binaries/jakarta-jmeter-1.9.1.zip</a>下载JMeter的release版本，然后将下载的.zip文件解压缩到C:/JMeter（后面的文章中将使用%JMeter%来引用这个目录）目录下。<br />
<br />
现在，请使用%JMeter%/bin下面的jmeter.bat批处理文件来启动JMeter的可视化界面，下面的工作都将在这个可视化界面界面上进行操作。下面的图片是JMeter的可视化界面的屏幕截图。<br />
<br />
<br />
图一：&nbsp;JMeter打开时的屏幕截图<br />
</strong><img src="http://www.javaresearch.org/members/goldWindow/Jmeter01.png"  alt="" />&nbsp;<br />
2.3&nbsp;建立测试计划（Test&nbsp;Plan）<br />
<br />
<br />
测试计划描述了执行测试过程中JMeter的执行过程和步骤，一个完整的测试计划包括一个或者多个线程组(Thread&nbsp;Groups)、逻辑控制（Logic&nbsp;Controller）、实例产生控制器（Sample&nbsp;Generating&nbsp;Controllers）、侦听器(Listener)、定时器（Timer）、比较（Assertions）、配置元素（Config&nbsp;Elements）。打开JMeter时，它已经建立一个默认的测试计划,一个JMeter应用的实例只能建立或者打开一个测试计划。<br />
<br />
现在我们开始填充一个测试计划的内容，这个测试计划向一个jsp文件和一个servlet发出请求，我们需要JMeter模拟五个请求者（也就是五个线程），每个请求者连续请求两次，下面的章节介绍了详细的操作步骤。<br />
<br />
2.4&nbsp;增加负载信息设置<br />
<br />
<br />
这一步，我们将向测试计划中增加相关负载设置,是Jmeter知道我们需要模拟五个请求者，每个请求者在测试过程中连续请求两次。详细步骤如下：<br />
<br />
1.&nbsp;选中可视化界面中左边树的Test&nbsp;Plan节点，单击右键，选择Add'Thread&nbsp;Group，界面右边将会出现他的设置信息框。<br />
<br />
2.&nbsp;Thread&nbsp;Group有三个和负载信息相关的参数：&nbsp;<br />
Number&nbsp;of&nbsp;Threads：&nbsp;设置发送请求的用户数目&nbsp;<br />
Ramp-up&nbsp;period：&nbsp;每个请求发生的总时间间隔，单位是秒。比如你的请求数目是5，而这个参数是10，那么每个请求之间的间隔就是10／5，也就是2秒&nbsp;<br />
Loop&nbsp;Count：&nbsp;请求发生的重复次数，如果选择后面的forever（默认），那么&nbsp;请求将一直继续，如果不选择forever，而在输入框中输入数字，那么请求将重复&nbsp;指定的次数，如果输入0，那么请求将执行一次。&nbsp;<br />
<br />
根据我们演示例子的设计，我们应该将Number&nbsp;of&nbsp;Threads设置为5，Ramp-up&nbsp;period设置为0（也就是同时并发请求），不选中forever，在Loop&nbsp;Count后面的输入框中输入2，设置后的屏幕截图如下：<br />
<br />
<br />
图二：设置好参数的Thread&nbsp;Group。<br />
<img src="http://www.javaresearch.org/members/goldWindow/Jmeter02.png"  alt="" />&nbsp;<br />
2.5&nbsp;增加默认Http属性（可选）<br />
<br />
<br />
实际的测试工作往往是针对同一个服务器上Web应用展开的,所以Jmeter提供了这样一种设置,&nbsp;在默认Http属性设置需要被测试服务器的相关属性，以后的http请求设置中就可以忽略这些相同参数的设置,减少设置参数录入的时间。<br />
<br />
我们这里将采用这种属性。你可以通过下面的步骤来设置默认http属性：<br />
<br />
1.&nbsp;选中可视化界面中左边树的Test&nbsp;Plan节点，单击右键，选择Add'config&nbsp;element'http&nbsp;request&nbsp;defaults，界面右边将会出现他的设置信息框。<br />
<br />
2.&nbsp;默认http属性的主要参数说明如下：&nbsp;<br />
protocal：发送测试请求时使用的协议&nbsp;<br />
server&nbsp;name&nbsp;or&nbsp;ip：被测试服务器的ip地址或者名字&nbsp;如要测试 <a href="http://www.bt285.cn">http://www.bt285.cn</a> BT下载 或是 <a href="http://www.5a520.cn">http://www.5a520.cn</a> 小说520网 可以填<a href="http://www.bt285.cn/">http://www.bt285.cn</a>&nbsp;或<a href="http://www.5a520.cn/">http://www.5a520.cn</a><br />
path：&nbsp;默认的起始位置。比如将path设置为／jmeter，那么所有的http请求的url中都将增加／jmeter路径。&nbsp;<br />
port&nbsp;number：&nbsp;服务器提供服务的端口号&nbsp;<br />
<br />
我们的测试计划将针对<a href="http://www.yaonba.com.cn">www.yaonba.com.cn</a> 的Web服务器上的Web应用进行测试，所以protocal应该是http，ip使用<a href="http://www.yaonba.com.cn">www.yaonba.com.cn</a> ，因为这个web应用发布的context路径是／jmeter，所以这里的path设置为／jmeter，因为使用Tomcat服务器，所以port&nbsp;number是8080。设置后的屏幕截图如下：<br />
<br />
<br />
图三：&nbsp;测试计划中使用的默认Http参数<br />
<img src="http://www.javaresearch.org/members/goldWindow/Jmeter03.png"  alt="" />&nbsp;<br />
<br />
2.6&nbsp;增加Http请求<br />
<br />
<br />
现在我们需要增加http请求了，他也是我们测试的内容主体部分。你可以通过下面的步骤来增加性的http请求：<br />
<br />
1.&nbsp;选中可视化界面中左边树的Thread&nbsp;Group节点，单击右键，选择Add'sampler'http&nbsp;request，界面右边将会出现他的设置信息框。<br />
<br />
2.&nbsp;他的参数和2.5中介绍的http属性差不多，增加的属性中有发送http时方法的选择，你可以选择为get或者post。<br />
<br />
我们现在增加两个http&nbsp;请求，因为我们设置了默认的http属性，所以和默认http属性中相同的属性不再重复设置。设置后的屏幕截图如下：<br />
<br />
<br />
图四：设置好的jsp测试请求<br />
<img src="http://www.javaresearch.org/members/goldWindow/Jmeter04.png"  alt="" />&nbsp;<br />
图五：设置好的Servlet测试请求（带参数）<br />
<img src="http://www.javaresearch.org/members/goldWindow/Jmeter05.png"  alt="" />&nbsp;<br />
2.7&nbsp;增加Listener<br />
<br />
<br />
增加listener是为了记录测试信息并且可以使用Jmeter提供的可视化界面查看测试结果，里面有好几种结果分析方式可供选择，你可以根据自己习惯的分析方式选择不同的结果显示方式，我们这里使用表格的形式来查看和分析测试结果。你可以通过下面的步骤来增加listener：<br />
<br />
1.&nbsp;选中可视化界面中左边树的Test&nbsp;Plan节点，单击右键，选择Add'listener'view&nbsp;result&nbsp;in&nbsp;table，界面右边将会出现他的设置信息和结果显示框。<br />
<br />
2.&nbsp;你可以设置界面上面的filename属性设置将测试结果保存到某个文件中界面下面将使用表格显示测试结果，表格的第一列sampleno显示请求执行的顺序和编号，url显示请求发送的目标，sample－ms列显示这个请求完成耗费的时间，最后的success列显示改请求是否成功执行。<br />
<br />
界面的最下面你还可以看到一些统计信息，最关心的应该是Average吧，也就是相应的平均时间。<br />
<br />
2.8&nbsp;开始执行测试计划<br />
<br />
<br />
现在你可以通过单击菜单栏run&nbsp;-&gt;&nbsp;Start开始执行测试计划了。下面这两个图是作者第一次、第二次执行该测试计划的结果图:<br />
<br />
<br />
图六：第一次执行后的结果显示<br />
<img src="http://www.javaresearch.org/members/goldWindow/Jmeter06.png"  alt="" />&nbsp;<br />
图七：第二次执行的结果显示<br />
<img src="http://www.javaresearch.org/members/goldWindow/Jmeter07.png"  alt="" />&nbsp;<br />
<br />
大家可以看到第一次执行时的几个大时间值均来自于jsp&nbsp;request，这可以通过下面的理由进行解释：jsp执行前都需要被编译成.class文件。所以第二次的结果才是正常的结果。<br />
<br />
总结<br />
<br />
<br />
JMeter用于进行供能或者性能测试，通过使用JMeter提供的供能，我们可以可视化的制定测试计划：包括规定使用什么样的负载、测试什么内容、传入的参数，同时，他提供了好多种图形化的测试结果显示方式，使我们能够简单的开始测试工作和分析测试结果。<br />
<br />
本文中，作者根据自己的使用经验，详细演示了如何使用JMeter来进行Web测试的全部过程，简单的介绍了JMeter提供测试结果的图形化显示界面中相关参数的含义。希望能够帮助大家学会使用JMeter的基本知识，同时，大家可以参考这个过程和JMeter的帮助文档来实现对java对象、数据库等的测试过程。<br />
</p>
<img src ="http://www.blogjava.net/wangdei/aggbug/219632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangdei/" target="_blank">BT下载与小说520</a> 2008-08-02 22:37 <a href="http://www.blogjava.net/wangdei/archive/2008/08/02/219632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UUID的介绍与使用</title><link>http://www.blogjava.net/wangdei/archive/2008/07/30/218792.html</link><dc:creator>BT下载与小说520</dc:creator><author>BT下载与小说520</author><pubDate>Wed, 30 Jul 2008 09:22:00 GMT</pubDate><guid>http://www.blogjava.net/wangdei/archive/2008/07/30/218792.html</guid><wfw:comment>http://www.blogjava.net/wangdei/comments/218792.html</wfw:comment><comments>http://www.blogjava.net/wangdei/archive/2008/07/30/218792.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/wangdei/comments/commentRss/218792.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangdei/services/trackbacks/218792.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一.UUID的介绍:UUID又称为通用唯一标识符，是一个128位长的数字，一般用16进制表示，算法的核心思想是结合机器的网卡、当前时间和一个随机数来生成UUID.二:UUID的形式是：4-2-2-2-6，共4+2+2+2+6=16个字节。比如，550e8400-e29b-41d4-a716-446655440000 。其中，第3部分的第一个字节（即总体上的第7个字节）的高4位用来表示uuid的...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangdei/archive/2008/07/30/218792.html'>阅读全文</a><img src ="http://www.blogjava.net/wangdei/aggbug/218792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangdei/" target="_blank">BT下载与小说520</a> 2008-07-30 17:22 <a href="http://www.blogjava.net/wangdei/archive/2008/07/30/218792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转帖：360可以为了钱沦为流氓软件，程序员的我不行！</title><link>http://www.blogjava.net/wangdei/archive/2008/07/29/218335.html</link><dc:creator>BT下载与小说520</dc:creator><author>BT下载与小说520</author><pubDate>Tue, 29 Jul 2008 04:14:00 GMT</pubDate><guid>http://www.blogjava.net/wangdei/archive/2008/07/29/218335.html</guid><wfw:comment>http://www.blogjava.net/wangdei/comments/218335.html</wfw:comment><comments>http://www.blogjava.net/wangdei/archive/2008/07/29/218335.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/wangdei/comments/commentRss/218335.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangdei/services/trackbacks/218335.html</trackback:ping><description><![CDATA[<div class="blog_content">
<p>看完后,无语了.....</p>
<p>睡不着。 </p>
<p>今天，我下定决心离开，离开服务了近两年的公司奇虎360安全卫士，离开了再熟悉不过的办公环境，习惯了你来我往的人事变动。今天我走了&#8230;.带走了遗憾，带走了人生梦想，360（就这样亲切的称呼你吧）当时是你接纳了我，记得当时我还是一个刚毕业的大学生的时候，是你360安全卫士、是傅老大把我招到你的麾下，让我知道了我的目标，那就是做出国内顶级的安全软件！ </p>
<p>现在我走了，我只想在这一刻简单的记录一下我的心情，当年你的辉煌还在脑海激荡，上千万的装机量让我们兴奋不已，别忘了我们是免费的，我们没有任何的利润！也许大家不知道，当年最让人痛恨的3721就源自我们的老大—-周鸿祎，但是，他又做出了这样一款流氓软件专杀工具，荡尽了几乎所有的流氓软件，当然这是所有员工的功劳，包括我的上司，傅盛！傅盛应该算是360的最大功臣，是他让大家知道了360安全卫士，是他让360和卡巴斯基合作！方便了大家。没有他的业务关系就没有今天的360安全卫士。可是现在，已经物是人非，老大走了&#8230;&#8230;我们这些老员工，也都要走了。 </p>
<p>因为360要战略转型，我们不堪良心谴责，不堪工作压力要走了，也许大家还不知道，今年360已经不再和卡巴合作了，他们决定和罗马尼亚的BitDefender合作了。而与此对应的，我们项目组，不再是像其他同事那样继续研发360的安全技术，继续修复360免费杀软的BUG。而是都被调到一个新的项目组里！研分什么大家知道吗？！弹窗广告！！天啊，也许大家的噩梦又要来了，360的弹窗广告就要借着奥运来了。大家都知道我们以前一直是免费的没有利润的，即使是和卡巴合作也是赚微不足道的一点返点和广告费，而现在，360却将和国内某大型门户网站合作推出弹窗广告！听同事说双方合作费用达八位数。现在装有360的用户总能收到关于360升级的气泡提示，其实那是我们在调试。调试如何把消息同时发给送给所有的用户，因为大家知道即使是QQ的弹窗广告也不能同时发给全部用户，而会有延迟，所以我们就不断的调试调试&#8230;&#8230;要知道，奥运新闻过了五分钟就将不是<a href="http://www.yaonba.com.cn/">新闻</a>了,<a href="http://www.5a520.cn/">小说</a>,<a href="http://www.bt285.cn/">BT</a>。 </p>
<p>之所以决定离开是因为公司太让我们失望了，战略的转型让360又回到了3721时代&#8230;&#8230;我们研制的360把所有的流氓软件都杀干净了，却把自己塑造成了前所未有的第一流氓软件，我们想不通&#8230;&#8230;想不通周鸿祎老大他想做什么？现在我们的老大走了，也许是伤心了，也许是被逼无奈，辛辛苦苦推起来的软件就这样又被颠覆了&#8230;7月17的新闻发布会他没有参加，媒体说他是去度假，其实做什么我们很清楚，他在做最后的心理准备，然后把工作交接给完毕，走人&#8230;.老大，走好&#8230;&#8230; </p>
<p>走了&#8230;&#8230;离开了360，离开惠通时代广场的办公环境，还真不知道该何去何从，我的朋友们大家都走好，主要的是傅大哥，你教了我很多东西，感谢！360但愿也走好吧，毕竟是我们辛辛苦苦把你做起来的，成宿成夜的编程，大家都不容易，别太疯狂了就好了&#8230;&#8230;..给我们留点美好的回忆吧！！！！ </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 写于公元2008年7月29日凌晨</p>
</div>
 <img src ="http://www.blogjava.net/wangdei/aggbug/218335.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangdei/" target="_blank">BT下载与小说520</a> 2008-07-29 12:14 <a href="http://www.blogjava.net/wangdei/archive/2008/07/29/218335.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>说说大型高并发高负载网站的系统架构（更新）[Michael]</title><link>http://www.blogjava.net/wangdei/archive/2008/07/28/218135.html</link><dc:creator>BT下载与小说520</dc:creator><author>BT下载与小说520</author><pubDate>Mon, 28 Jul 2008 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/wangdei/archive/2008/07/28/218135.html</guid><wfw:comment>http://www.blogjava.net/wangdei/comments/218135.html</wfw:comment><comments>http://www.blogjava.net/wangdei/archive/2008/07/28/218135.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/wangdei/comments/commentRss/218135.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangdei/services/trackbacks/218135.html</trackback:ping><description><![CDATA[另外看Michael更新了他的那篇经典的文章，为了让更多的人能够看到，决定转载过来。<br />
<br />
我在CERNET做过拨号接入平台的搭建，而后在Yahoo&amp;3721从事过搜索引擎前端开发，又在MOP处理过大型社区猫扑大杂烩的架构升级等工作，同时自己接触和开发过不少大中型网站的模块，因此在大型网站应对高负载和并发的解决方案上有一些积累和经验，可以和大家一起探讨一下。<br />
<br />
<br />
　　一个小型的网站，比如个人网站，可以使用最简单的html静态页面就实现了，配合一些图片达到美化效果，所有的页面均存放在一个目录下，这样的网站对系统架构、性能的要求都很简单，随着互联网业务的不断丰富，网站相关的技术经过这些年的发展，已经细分到很细的方方面面，尤其对于大型网站来说，所采用的技术更是涉及面非常广，从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求，已经不是原来简单的html静态网站所能比拟的。<br />
<br />
　　大型网站，比如门户网站。在面对大量用户访问、高并发请求方面，基本的解决方案集中在这样几个环节：使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面，还没法根本解决大型网站面临的高负载和高并发问题。<br />
<br />
　　上面提供的几个解决思路在一定程度上也意味着更大的投入，并且这样的解决思路具备瓶颈，没有很好的扩展性，下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。<br />
<br />
<span style="color: #ff0000">1、HTML静态化</span><br />
　　其实大家都知道，效率最高、消耗最小的就是纯静态化的html页面，所以我们尽可能使我们的网站上的页面采用静态页面来实现，这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站，我们无法全部手动去挨个实现，于是出现了我们常见的信息发布系统CMS，像我们常访问的各个门户站点的新闻频道，甚至他们的其他频道，都是通过信息发布系统来管理和实现的，信息发布系统可以实现最简单的信息录入自动生成静态页面，还能具备频道管理、权限管理、自动抓取等功能，对于一个大型网站来说，拥有一套高效、可管理的CMS是必不可少的。<br />
<br />
　　除了门户和信息发布类型的网站，对于交互性要求很高的社区类型网站来说，尽可能的静态化也是提高性能的必要手段，将社区内的帖子、文章进行实时的静态化，有更新的时候再重新静态化也是大量使用的策略，像Mop的大杂烩就是使用了这样的策略，网易社区等也是如此。目前很多博客也都实现了静态化，我使用的这个Blog程序WordPress还没有静态化，所以如果面对高负载访问，<a href="http://www.bt285.cn">www.bt285.cn</a>一定不能承受&nbsp;&nbsp;<br />
<br />
　　同时，html静态化也是某些缓存策略使用的手段，对于系统中频繁使用数据库查询但是内容更新很小的应用，可以考虑使用html静态化来实现，比如论坛中论坛的公用设置信息，这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中，这些信息其实大量被前台程序调用，但是更新频率很小，可以考虑将这部分内容进行后台更新的时候进行静态化，这样避免了大量的数据库访问请求。<br />
<br />
　　在进行html静态化的时候可以使用一种折中的方法，就是前端使用动态实现，在一定的策略下进行定时静态化和定时判断调用，这个能实现很多灵活性的操作，我开发的小说网站故人居(<a href="http://www.5a520.cn">www.5a520.cn</a>)就是使用了这样的方法，我通过设定一些html静态化的时间间隔来对动态网站内容进行缓存，达到分担大部分的压力到静态页面上，可以应用于中小型网站的架构上。小说网站的地址：http://<a href="http://www.5a520.cn/">www.5a520.cn</a>，顺便提一下，有喜欢小说的朋友多多支持我这个免费网站:)<br />
<br />
<span style="color: #ff0000">2、图片服务器分离</span><br />
　　大家知道，对于Web服务器来说，不管是Apache、IIS还是其他容器，图片是最消耗资源的，于是我们有必要将图片与页面进行分离，这是基本上大型网站都会采用的策略，他们都有独立的图片服务器，甚至很多台图片服务器。这样的架构可以降低提供页面访问请求的服务器系统压力，并且可以保证系统不会因为图片问题而崩溃。<br />
<br />
　　在应用服务器和图片服务器上，可以进行不同的配置优化，比如Apache在配置ContentType的时候可以尽量少支持，尽可能少的LoadModule，保证更高的系统消耗和执行效率。<br />
<br />
　　我的台球网站故人居8zone.cn也使用了图片服务器架构上的分离，目前是仅仅是架构上分离，物理上没有分离，由于没有钱买更多的服务器:)，大家可以看到故人居上的图片连接都是类似img.9tmd.com或者img1.9tmd.com的URL。<br />
<br />
　　<span style="color: #ff0000">另外，在处理静态页面或者图片、js等访问方面，可以考虑使用lighttpd代替Apache，它提供了更轻量级和更高效的处理能力。</span><br />
<br />
<span style="color: #ff0000">3、数据库集群和库表散列</span><br />
　　大型网站都有复杂的应用，这些应用必须使用数据库，那么在面对大量访问的时候，数据库的瓶颈很快就能显现出来，这时一台数据库将很快无法满足应用，于是我们需要使用数据库集群或者库表散列。<br />
<br />
　　在数据库集群方面，很多数据库都有自己的解决方案，Oracle、Sybase等都有很好的方案，常用的MySQL提供的Master/Slave也是类似的方案，您使用了什么样的DB，就参考相应的解决方案来实施即可。<br />
<br />
　　上面提到的数据库集群由于在架构、成本、扩张性方面都会受到所采用DB类型的限制，于是我们需要从应用程序的角度来考虑改善系统架构，库表散列是常用并且最有效的解决方案。我们在应用程序中安装业务和应用或者功能模块将数据库进行分离，不同的模块对应不同的数据库或者表，再按照一定的策略对某个页面或者功能进行更小的数据库散列，比如用户表，按照用户ID进行表散列，这样就能够低成本的提升系统的性能并且有很好的扩展性。sohu的论坛就是采用了这样的架构，将论坛的用户、设置、帖子等信息进行数据库分离，然后对帖子、用户按照板块和ID进行散列数据库和表，最终可以在配置文件中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能。<br />
<br />
<span style="color: #ff0000">4、缓存</span><br />
　　缓存一词搞技术的都接触过，很多地方用到缓存。网站架构和网站开发中的缓存也是非常重要。这里先讲述最基本的两种缓存。高级和分布式的缓存在后面讲述。<br />
<br />
　　架构方面的缓存，对Apache比较熟悉的人都能知道Apache提供了自己的mod_proxy缓存模块，也可以使用外加的Squid进行缓存，这两种方式均可以有效的提高Apache的访问响应能力。<br />
<br />
　　网站程序开发方面的缓存，Linux上提供的Memcached是常用的缓存方案，不少web编程语言都提供memcache访问接口，php、perl、c和java都有，可以在web开发中使用，可以实时或者Cron的把数据、对象等内容进行缓存，策略非常灵活。一些大型社区使用了这样的架构。<br />
<br />
　　另外，在使用web语言开发的时候，各种语言基本都有自己的缓存模块和方法，PHP有Pear的Cache模块和eAccelerator加速和Cache模块，还要知名的Apc、XCache（国人开发的，支持！）php缓存模块，Java就更多了，.net不是很熟悉，相信也肯定有。<br />
<br />
<span style="color: #ff0000">5、镜像</span><br />
　　镜像是大型网站常采用的提高性能和数据安全性的方式，镜像的技术可以解决不同网络接入商和地域带来的用户访问速度差异，比如ChinaNet和EduNet之间的差异就促使了很多网站在教育网内搭建镜像站点，数据进行定时更新或者实时更新。在镜像的细节技术方面，这里不阐述太深，有很多专业的现成的解决架构和产品可选。也有廉价的通过软件实现的思路，比如Linux上的rsync等工具。<br />
<br />
<span style="color: #ff0000">6、负载均衡</span><br />
　　负载均衡将是大型网站解决高负荷访问和大量并发请求采用的终极解决办法。<br />
<br />
　　负载均衡技术发展了多年，有很多专业的服务提供商和产品可以选择，我个人接触过一些解决方法，其中有两个架构可以给大家做参考。另外有关初级的负载均衡DNS轮循和较专业的CDN架构就不多说了。<br />
<br />
<span style="color: #ff0000">6.1 硬件四层交换</span><br />
　　第四层交换使用第三层和第四层信息包的报头信息，根据应用区间识别业务流，将整个区间段的业务流分配到合适的应用服务器进行处理。　第四层交换功能就象是虚IP，指向物理服务器。它传输的业务服从的协议多种多样，有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基础上，需要复杂的载量平衡算法。在IP世界，业务类型由终端TCP或UDP端口地址来决定，在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP端口共同决定。<br />
<br />
　　在硬件四层交换产品领域，有一些知名的产品可以选择，比如Alteon、F5等，这些产品很昂贵，但是物有所值，能够提供非常优秀的性能和很灵活的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon就搞定了。<br />
<br />
<span style="color: #ff0000">6.2 软件四层交换</span><br />
　　大家知道了硬件四层交换机的原理后，基于OSI模型来实现的软件四层交换也就应运而生，这样的解决方案实现的原理一致，不过性能稍差。但是满足一定量的压力还是游刃有余的，有人说软件实现方式其实更灵活，处理能力完全看你配置的熟悉能力。<br />
<br />
　　软件四层交换我们可以使用Linux上常用的LVS来解决，LVS就是Linux Virtual Server，他提供了基于心跳线heartbeat的实时灾难应对解决方案，提高系统的鲁棒性，同时可供了灵活的虚拟VIP配置和管理功能，可以同时满足多种应用需求，这对于分布式的系统来说必不可少。<br />
<br />
　　一个典型的使用负载均衡的策略就是，在软件或者硬件四层交换的基础上搭建squid集群，这种思路在很多大型网站包括搜索引擎上被采用，这样的架构低成本、高性能还有很强的扩张性，随时往架构里面增减节点都非常容易。这样的架构我准备空了专门详细整理一下和大家探讨。<br />
<br />
<span style="color: #ff0000">6.3 七层交换</span><br />
　　大家都知道TCP/IP的七层协议，四层交换是基于传输层的，在这一层只能处理连接的管理，但是无法和业务关联起来，通常只能针对tcp、udp的连接来进行处理，而真正的业务逻辑需要后面的服务器群自己来处理，随着技术的发展，今天，我们在很多高级的应用中出现了七层交换。<br />
<br />
七层交换是基于TCP/IP的第七层应用层来实现的，在这一层上，首先我们可以区分出具体的应用，比如HTTP、TELNET、FTP、DNS等等，还能根据应用中传送的内容来进行策略的管理，比如我们有这么两个网站的路径 a.com/music/&#8230; 和a.com/photo/&#8230;&nbsp;<a href="http://www.yaonba.com.cn">NBA</a>,<a href="http://www.5a520.cn">小说520</a>&nbsp;,<a href="http://www.bt285.cn">BT下载</a>,原来基于四层交换只能把这两个url的请求都分发到后面一组服务器上，但是七层交换可以判断访问的是music/还是photo/路径，然后分别分发到不通的服务器群上，从而实现更灵活的系统架构设计。<br />
<br />
当然，七层交换也分硬件和软件的实现方式，在这里我不细说了，硬件有著名的F5、Nortel等，软件有Haproxy等，当然，七层交换的软件目前还是在性能上要远远差别于硬件实现的，要知道，这些硬件都价格不菲&nbsp;&nbsp;<br />
<br />
总结：<br />
　　
<div>
<div>引用</div>
<div>对于大型网站来说，前面提到的每个方法可能都会被同时使用到，Michael这里介绍得比较浅显，具体实现过程中很多细节还需要大家慢慢熟悉和体会，有时一个很小的squid参数或者apache参数设置，对于系统性能的影响就会很大，希望大家一起讨论，达到抛砖引玉之效。</div>
</div>
<img src ="http://www.blogjava.net/wangdei/aggbug/218135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangdei/" target="_blank">BT下载与小说520</a> 2008-07-28 17:47 <a href="http://www.blogjava.net/wangdei/archive/2008/07/28/218135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>颓废的站长,颓废的时代</title><link>http://www.blogjava.net/wangdei/archive/2008/07/11/214328.html</link><dc:creator>BT下载与小说520</dc:creator><author>BT下载与小说520</author><pubDate>Fri, 11 Jul 2008 12:28:00 GMT</pubDate><guid>http://www.blogjava.net/wangdei/archive/2008/07/11/214328.html</guid><wfw:comment>http://www.blogjava.net/wangdei/comments/214328.html</wfw:comment><comments>http://www.blogjava.net/wangdei/archive/2008/07/11/214328.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/wangdei/comments/commentRss/214328.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangdei/services/trackbacks/214328.html</trackback:ping><description><![CDATA[<p>我99年开始作站，像那时的<a href="http://www.bt285.cn">BT下载</a>&nbsp;与<a href="http://www.5a520.cn">小说520</a>,充满憧憬的进来，充满憧憬的看那时的站长奋发图强的工作，满口唾液的谈理想谈抱负，充满憧憬的看现在看起来很低级的所谓信息高速公路的 东西，充满憧憬的听那时候的站长谈未来的发展趋势，我想那个时候的互联网应该是没有铜臭或者说铜臭味道不是那么的浓的时代，是闪耀理想光芒的时代。我能看 到无数的站长为了一个个人论坛废寝忘食，我能看到一个个站长为了一个小小的JS代码信息若狂，我那时候根本就不知道原来还有个ALEXA,也许吧，那个时 候只是泡沫时代，魅力并不会长久。</p>
<p>&nbsp;&nbsp;&nbsp; 当闪光的互联网沸沸扬扬的进入了2001年，恶意代码开始萌芽，好123恶意代码让人骂娘，3721开始叫床了，一些小站更是恶意满天飞，随便打开一个网 站都会弹出让你安装控件的提示框，但是，我个人认为，那个时候的互联网也比较好，毕竟，站长的理想还在闪光，无非只有一个目的，就是把流量做起来，并不那 么和铜臭挂钩。</p>
<p>&nbsp;&nbsp;&nbsp; 而时间2002年03年，01年的代码多多少少争取了不少眼球，彻底变了，首先看看新浪的IT频道，软文满天飞，而且还可以明码标价。当时只是认为是炒 作，想想那时我的站点有: <a href="http://www.bt285.cn">http://www.bt285.cn</a> BT下载 <a href="http://www.yaonba.com.cn">http://www.yaonba.com.cn</a> NBA中文网 后来知道我错了，大家有兴趣可以翻翻那个时候新浪的报道，有很多可以让人笑掉大牙的事情（现在也有很多，不过隐蔽性比较强了，不那么明目张胆了，因为 现在的站长不像那个时候容易糊弄了）。其次,随便进入一个论坛，听大家都在叫，我今天注册了几个，你今天注册了几个，on my god,中移动流氓当家，网易这个小流氓不要脸的开天辟地的把SP推广起来了，那真叫一个恐怖，每天都担心被人明目张胆的合法的偷手机费。网易这个时候开 启了一个小时代，手机注册，疯狂敛财，瞬间电影网站，交友网站满天飞，色情而不色情的广告在凌晨时间满天飞，大量QQ上都是看我的照片，输入网址后呢， 再。。。再输入手机号码就可以上我了，就是看准了你这个时候荷尔蒙旺盛，就是蒙你的。一个朋友的电影站一个月移动就能扣掉60多万...</p>
<p>&nbsp;&nbsp;&nbsp; 当中移动将要抗不住用户的叫骂声开始呻吟的时候，在满天的叫骂声的背后，流氓软件也开始有些蠢蠢欲动了，因为靠SP不那么容易发财了，这个时候的3721 其实还不算流氓，我就装，他有一些修复网页的工具，还是比较有帮助的。但是当所有人都眼红书生的时候，流氓软件这个东西开始茁壮成长，但是好像做捆绑的所 谓插件还不像现在这么猛~。</p>
<p>&nbsp;&nbsp;&nbsp; 我觉得02年有代表性的事情还有一件，就是网络传销的流行，现在还有人宣传让你注册就月赚万元，注册帐户，先交钱。可惜了，现在如果还这么做的话进police的时间估计也不远了,像这种<a href="http://www.5a520.cn">http://www.5a520.cn</a> 小说520 每天也能赚个200多块钱.</p>
<p>&nbsp;&nbsp;&nbsp; 2002年，私服成了名词，可惜我没有玩过网络游戏，不知道这个东西能带来什么。只记得当传奇私服发布的时候为了给LP的论坛带点流量，花了两周时间改出 了一个无错版本的私服（应该是国内第一个无错版吧青青家园版）。恐怖的事情马上就出现了，我看到青青家园版在短短两周时间内变化了很多名字，流年版，飞客 版...，NND，天啊指纹码都没有换，现在想起来，自己其实在无意中创造了一个商机，论坛的一个朋友把他改头换面，成了立天版，而这位朋友，竟然卖程序 赚了十来万（这是后话，后来才知道的，不过现在想想他并不聪明，他没有接着下来做私服）。这是我第一次体验到金钱刺激的魅力，不到半年时间，私服成为一个 最赚钱的产业。可是我还在稀里糊涂的想免费的赚什么钱（我没有玩过网络游戏）</p>
<p>&nbsp;&nbsp;&nbsp; 当在北京战战兢兢的度过了非典时代，战战兢兢的小心翼翼的查查手机有没有扣费的时候，没有想到比非典更可怕的东西来了。一不小心就会被强奸，而且JB(基 本的意思)比较小，强奸你都不知道，突然发现不能随便下载软件了，到处都是流氓，到处都是病毒，而国产的杀毒软件只会隔着门叫叫，基本上不能用. 到底是流氓，繁殖速度确实惊人，如果说以前的流氓或者病毒还有很大以部分是处于兴趣爱好的目的或者提高流量的时候，这个时候已经完全赤裸裸了。当有了商业 目的，当有了金钱刺激的时候，他们有了充分的温床得以发展，这个时候互联网才真正开始乌烟瘴气来了。流氓还流氓的理直气壮，比如CNNIC</p>
<p>&nbsp;&nbsp;&nbsp; 当雅典奥运会带来了流氓和病毒的激情，我当时认为最黑暗的时候来临了，自认为对系统底层非常了解的我遇到了很多清除不掉的病毒，我的计算机成了病毒的乐 园，于是，装系统成了家常便饭。黑客事业中也在这个时候随私服越茁壮的发展成为一门产业，敲诈和勒索开始在互联网上盛行，并且迅速的成为一个产业链，我觉 得那个时候应该是有点流量的站长最恐怖的时代了，我D你你怎么办，买防火墙，30多万，你来啊，我就是卖防火墙的。最可恶的了，是那些所谓的安全公司，防 火墙公司，开始充分发挥威力了，威力不是杀毒不是安全，而是以安全测试为借口大批量的制造病毒，制造D工具，防火墙牛X起来了。我一个朋友，半年时间进账 千万，市面上一般的D工具都是他发布&#8230;&#8230;很知名的公司啊，也许他们现在还会夸，做私服的一半人用的都是我们的墙。我觉得&#8221;硬抢&#8220;是地地道道的流氓，强奸你 之后你还要给他付钱，不付钱继续勒索敲诈强奸，地地道道的阴阳人，前面是JB(进步的意思)告诉你无坚不摧，后面是YD（要到的意思啊）多牛X的JB都会 被我的YD DDOS掉，D的流脓，没有地方长GM，只好长在头上来放屁说话勒索了，于是YD与JB齐飞，GM共大便一色......</p>
<p>&nbsp;&nbsp;&nbsp; 我觉得，和&#8220;硬抢&#8221;比起来，传奇私服应该最有代表性，它几乎带动了一个产业群，程序，病毒，防火墙，登陆器，发布站...都在那个时代赚疯了钱，也塑造了 很多现在我们经常挂在嘴边的名字。灰鸽子也是在那个时代开始流行，肉鸡，木马，僵尸，成为一个时代的名词，现在其实也是。</p>
<p>&nbsp;&nbsp;&nbsp; 互联网在病唉唉中2005年的时候，也许是某些人看到了颓废的概念，有一种叫2.0的声音开始响起。好像概念是中国的站长提出来的，我那个时候并没有在国 外的站点上发现类似的声音，当时在myspace上问了几个朋友，都不知道，后来才知道myspace就是2.0的代表。翻了很多站点，愣是找不到一个概 念性的东西，不过大家都在闹，咱也跟着起哄吧。享受着病毒和流氓的强奸，总算是看到了一种奋起的声音。管他呢，我就叫2.0，我就要做2.0，于是互联网 进入2.0时代。想想，2.0就是进步的意思吧，至少不会那么流氓了，无意中却发现，2.0公司都是以流氓发家的..............无语。</p>
<p>&nbsp;&nbsp;&nbsp; 360其实也算是开起了一个时代，姑且不谈所谓炒作也罢，职业道德也罢，避开那腥风血雨的口水，至少能看到点安慰的声音。不管它的目的如何，它办到了三件 我几乎认为绝望的事情。一，彻底冲垮了杀毒软件和流氓厂商的床头协议，杀毒软件不能随便上流氓姑娘（暂且这么说吧，其实我觉得他们更像是出了钱的鸭子） 了，杀毒软件也不再说流氓姑娘&#8220;没毒&#8221;了。二，流氓的似乎不那么容易流氓起来了，冲垮了很多根基不是很牢固的小流氓，流氓也不是那么容易的，至少要会点武 术的吧。三，扼杀了一个尚未羽翼丰满的流氓产业，我当时在想，如果安全公司都和流氓姑娘上过床之后，流氓姑娘受精之后发展也就太恐怖了，有了商业化的孵化 器，那繁殖速度比惊人还惊人吧~~~~~~~~~</p>
<p>&nbsp;&nbsp;&nbsp; GG adsene算是真正开创了一个时代吧，03-04年的时候美刀真是好赚啊，GG那个时候也是&#8220;傻&#8221;的可以，他傻的让中国所有的站长都为他疯狂，那个时候 作弊代码甚至要用1W来买（至少我没有在国外的WEB上看到这么疯狂的事情），一天能作弊上万美金，开始出现代理作弊公司，交完保证金后分 账.......当所有人都为GG疯狂的时候,GG做出了和腾讯一样牛X的事情来，开始大规模的封杀帐户，我就是先让你疯狂起来再宰你，你不服气，欢迎拨 打国际长途。还不服气，不服气你靠什么吃饭呢。我隐约看到了腾讯的趾高气扬的模样！！我想这点有点向马化腾的强奸哲学，我先脱光了让你上，当你觉得上我很 舒服的时候，并且离不开我的时候，就该我强奸你了，我的JB（套用疯狂绅士的名词，JB是基本的意思啊）大，我要吃饭啊，你得给点&#8220;上机&#8221;费吧，我的5位 QQ就是这样被马化腾卖了作为上机费了~~</p>
<p>&nbsp;&nbsp;&nbsp; 进入2006年就不再说些什么了，之前赚到钱的站长开始收手，开了新的投资，而跟风者开始蔓延，GG这个时候开始大规模屠杀帐户，而这个时候应该是垃圾站成为名次的时候了，不再说了。</p>
<p>&nbsp;&nbsp;&nbsp; 其实想说的话也就一句，成功是可以复制的，前提是在别人开始复制之前！站长其实应该有更多的理想，坦坦荡荡的做一番事业，GG广告什么的只能作为一个辅助 手段，如果把他当作事业的话，互联网一天世界一年，长久不了的东西。既然图王提出了自律公约，那么我们就应该有个自励公约。其实跟其他站长谈，他们都怕中 国的站长，去国外租服务器他们都不是很欢迎，为什么要把自己的名声做坏呢。如果我们能吃饱肚子，为什么不做的更好呢！！美刀可以创造财富，但是他也可以毁 掉一个人的理想，毁掉一个人的永远的财富。其实我在想，如果真的觉得GG能赚钱，那就雇上几个人做，给自己一点思想的空间，看看前面的路，还有多远。。。</p>
<p>&nbsp;&nbsp;&nbsp; 记住自己的理想，放下包袱才能成长。其实商业上有不少这方面的例子，如果竞争对手想让一个公司垮掉有一个很聪明的办法就是不与他竞争，给他的初级产品足够的利润，足以毁掉一个公司动力的。比如施乐公司的策略</p>
<p>&nbsp;&nbsp;&nbsp; 估计要挨骂，那就骂的痛快一些吧~ 来自程序员</p>
<img src ="http://www.blogjava.net/wangdei/aggbug/214328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangdei/" target="_blank">BT下载与小说520</a> 2008-07-11 20:28 <a href="http://www.blogjava.net/wangdei/archive/2008/07/11/214328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>修正版 疯狂代码 写给WEB2.0的站长</title><link>http://www.blogjava.net/wangdei/archive/2008/07/05/212778.html</link><dc:creator>BT下载与小说520</dc:creator><author>BT下载与小说520</author><pubDate>Sat, 05 Jul 2008 12:56:00 GMT</pubDate><guid>http://www.blogjava.net/wangdei/archive/2008/07/05/212778.html</guid><wfw:comment>http://www.blogjava.net/wangdei/comments/212778.html</wfw:comment><comments>http://www.blogjava.net/wangdei/archive/2008/07/05/212778.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.blogjava.net/wangdei/comments/commentRss/212778.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangdei/services/trackbacks/212778.html</trackback:ping><description><![CDATA[<div class="blog_content">
<p>当互联网吵吵嚷嚷的进入2.0时代，当互联网的技术不再是那么高不可攀，当复制变成家常便饭，互联网热闹起来了</p>
<p>&nbsp;&nbsp;&nbsp; myspace火了，中国冒出更多的myspace</p>
<p>&nbsp;&nbsp;&nbsp; youtube刚刚起来，中国的视频网站就遍地开花</p>
<p>&nbsp;&nbsp;&nbsp; 51拔地而起，中国出了无数的SNS</p>
<p>&nbsp;&nbsp;&nbsp; facebook则改变了中国站长的抄袭方式，不再学chianren了，校内火了<br />
&nbsp;&nbsp;&nbsp; ..........</p>
<p>&nbsp;&nbsp;&nbsp; 当抄袭变成习惯，我想说的是，模仿，站长，你准备好了吗？</p>
<p>&nbsp;&nbsp;&nbsp; 如果你打算做垃圾站，或者赚点广告费的网站，请不要点击这篇文章，我从技术角度方面谈谈WEB2.0网站的模仿问题。</p>
<p>&nbsp;&nbsp;&nbsp; 当投资和流量都不是问题的时候，我想说的是，您真的一帆风顺吗？</p>
<p>&nbsp;&nbsp;&nbsp; 拿SNS网站来说，当匆匆上线的2.0，当一笔笔投资砸进去的时候，当流量上去的时候，您的困惑在什么地方？</p>
<p>&nbsp;&nbsp;&nbsp; 我做过多个2.0公司的技术顾问，简单的谈谈2.0公司遇到的问题(涉及隐私，我用A B C D代替)，这里就不再赘述大家众所周知的页面静态化，缓存和代码安全等问题了，有点技术的2.0公司的CTO都知道这些东西，我们谈点发展之后的问题</p>
<p><strong>A公司</strong></p>
<p>&nbsp;&nbsp;&nbsp; A公司做的是SNS网站，程序是两个毛头小伙子做的，目标直指51，程序开发是一帆风顺，功能也比51牛多了，推广也是一帆风顺（A公司有自己独到的推广方式。但是当ALEXA到2W的时候问题出来了，每天下午4点左右，网站速度慢的惊人，基本上打不开，公司三台服务器CPU100%，让人郁闷的是公司的网络配置方式，居然是双WEB的集群，而单独一台DB数据库。整个瓶颈在数据库，于是我建议做DB的集群，分析了一下数据结构，MD，典型的WEB程序员的作品，没有一点数据库设计规范，功能实现是可以，如果要扩展，不可能，集群基本上是不可能的，怎么办？不能办，于是，一个月的时间修改程序，数据结构基本上换了一遍 前期砸进去的几十万打了水飘，用户走光了。</p>
<p><strong>&nbsp;&nbsp;&nbsp; 结论：WEB2.0前期设计的时候不应该只考虑功能，应该认真考虑一下底层和数据结构了。</strong></p>
<p><strong>B公司</strong></p>
<p>&nbsp;&nbsp;&nbsp; B公司也是做的SNS网站，程序是3个人开发的，CEO是某名牌大学的经济学硕士，有点知己网的味道，又有一些特色出来，说实话，公司的潜力不错，CEO有很强的运作能力，感觉前景不错。系统架构还行，但是---但是系统崩溃了，why?系统没有考虑到用户有个海量的说法，文件也有个海量的说法，用户的相册，图片全部存贮在WEB服务器的一个分区上，每个用户一个目录，而打开性能监视器，磁盘的IO高的惊人，基本上无暇响应。众所周知，文件系统也是一个数据库，单独大文件无所谓，关键是整个是300多个G的零碎文件，大量的读写操作，系统崩溃，数据丢失，文件系统的一个链断了，用户数据全部丢失！！！Raid并不能解决所有问题，磁盘阵列只能保证在硬盘损坏的时候进行恢复，但是这个是文件系统的损坏，raid不能恢复。这是一个非常沉重的问题，系统整整停了一个月来做数据恢复（单独文件很容易，但是海量文件目前还没有一个软件能组织起来软件架构，数据恢复软件一般在建立目录结构索引的时候就已经死掉了，尝试过用16G内存的服务器做恢复，无效）。解决方案：修改程序架构，做分布式文件存贮（程序修改用了8天，但是文件转移却又用去了将近一个月），20万用户损失殆尽 像这种 <a href="http://www.bt285.cn/">http://www.bt285.cn</a>&nbsp;bt下载</p>
<p><strong>&nbsp;&nbsp;&nbsp; 结论：WEB2.0前期的设计应该有应付海量存贮的考虑，整个涉及了程序架构的修改，前期规划不好的话基本上思路一条。</strong></p>
<p><strong>C公司</strong></p>
<div>&nbsp;&nbsp;&nbsp; C公司是一个值得尊敬的公司，CEO技术出身，和比尔盖茨一样，大学未毕业出来做网络，01到03年做短信狠赚了一笔，后来做的小项目也小有所成，说实话，我很佩服。公司做的是校友方面，但是更偏重myspace风格，注重个人主页，推广方面也下了大手笔。系统崩溃的原因其实很简单，由于采用的是微软的SqlServer，而微软的MSDN直接就告诉了我们，SQLSERVER不支持负载集群，只支持灾难恢复的集群，他们的数据库超负载，100%就没有下去过，只能横向增加配置，采用了4路4核CPU系统，但是系统还是崩溃了... 高互动注定了高负载。解决方案： 现从基本入手，解决掉几个程序耗能大户，对数据库采用横向切割，将用户每10万进行分组，同时对数据库系统进行散列，将多个表垂直分割，同时进行文件分组 ，解决问题. 因为修改了数据结构，程序也基本上大动了一下。 好在系统没有出大错，损失不算很大，不过对用户体验造成了很坏的影响。</div>
<div>&nbsp;&nbsp; 附注：<strong>SqlServer其实是可以实现集群的</strong>，一般是通过复制和分发的形式实现，但是应用程序需要对数据库操作进行分类，更新和查询。但是同时存在一个问题，在高互动下的数据库更新操作频繁的情况下，复制的延迟时间会很长，甚至会有5分钟的延迟！应用程序应该有应对延迟的准备！</div>
<p><strong>&nbsp;&nbsp;&nbsp; 结论：WEB2.0前期设计应该有良好的散列考虑，程序应该能有配合的扩充性，符合数据库的扩充</strong></p>
<p><strong>D公司</strong></p>
<p>&nbsp;&nbsp;&nbsp; D公司是一个各个方面做的比较好的公司，做了CDN加速，图片也独立分出了N个服务器，数据库不错的一个，(CTO是个数据库专家），系统崩溃的原因在于WEB，按道理说WEB很容易做集群的，但是发现集群并解决不掉问题，他们的集群只允许做4台的WEB集群，但是4台都当掉了。仔细分析，找到原因，我估计整个也是大部分CTO最容易犯的一个错误，或者说他们根本就想不到的问题，就是WEB上传的问题，上传的时候由于数据传输的原因，线程是保持链接的，300个线程就可以把一个WEB Server当掉了。解决方案：这个最简单，把上传和其他耗能大户分离出独立出来，同时做异步分布式上传。程序改动不是很大，但是之前半个月速度满对用户体验的损失也不可小视。像这种<a href="http://www.5a520.cn/">http://www.5a520.cn</a> 小说520网</p>
<p><strong>&nbsp;&nbsp;&nbsp; 结论：没有什么结论了，毕竟有海量访问经验的CTO不多，也就是那几个大站的。</strong></p>
<p>&nbsp;&nbsp;&nbsp; 总结：不是泼冷水，模仿其实是很容易的，随便找几个WEB程序员就能做到，并且很简单，速度可能还很高效，因为WEB2.0无非就是跟数据库打交道，会操作数据库就会做。但是真正做大并不容易，因为能应付海量访问的程序并不简单，现在的程序员都太自命不凡，其实真正有经验的并不多，不要相信一个月薪5K--10K的程序员能给你多大的惊喜，能应付海量访问的程序员不是那个价格。如果您想做2.0，想做大，有几个个建议：</p>
<p>&nbsp;&nbsp;&nbsp; 一.找DBMS的专家设计好数据库，大部分程序员都不知道分区视图，数据散列，数据组的概念</p>
<p>&nbsp;&nbsp;&nbsp; 二.设计好程序架构（这个其实不难，有个高人指导就行了），保持良好的扩展性，成本考虑可以找兼职的系统架构设计师做好系统架构，确定将来的发展瓶颈。</p>
<p>&nbsp;&nbsp;&nbsp; 三.考虑好文件存贮的问题。文件存贮的技术含量看起来很低，其实是很高的，可以考虑反向代理的方案。文件存贮出问题了，站点基本上就完蛋了，不仅仅是RAID的问题和存贮服务器的问题，不过道理倒是一点就破的</p>
<p>&nbsp;&nbsp;&nbsp; 四.中国国情考虑，这个最致命，需要考虑电信和网通的问题，CDN并不能解决所有问题。互动性的东西并CDN并不是很有效。最关键的是，现有的双线机房遇到DDOS攻击基本上都会当掉，原因很简单，双线机房都是私人机房，本身就不会有太高的带宽，随便攻击一下就可以D掉（顺带提一个笑话，我知道一个双线机房的老总总共1G的带宽却买了4G的金盾墙，很简单800M的攻击就可以搞定）。</p>
<p>&nbsp;&nbsp;&nbsp; 五.网络延迟的问题，这是分布式系统必须要考虑的，程序要能容忍0到100秒的数据延迟的功能，也就是同步的问题。不要小看这几十秒，问题很大的，如果你的站点有交互式功能，比如即时聊天，你可以想象一下是个什么结果。对于即时聊天的东西，可以用反向代理来解决（成本较高）。但是对于留言和评论的影响不大，但是如果系统为了健壮做了缓存和静态化的时候，这个东西可能就是灾难性的了。静态文件的更新和重写需要异步的方式来做。</p>
<p>&nbsp;&nbsp;&nbsp; 六.分散你的程序，如果你没有太多的资金构筑动辄百万的服务器，建议把功能分散开来，比如相册一台服务器，留言一台服务器</p>
<p>&nbsp;&nbsp;&nbsp; 七.看好你的程序员，如果没有很好的激励措施的话你的程序员很容易写出敷衍性的代码，而这个可能就是将来的大患，程序架构定下来后要修改可能就要费牛劲了。最好你的CTO能对你100%的衷心，100%的负责。</p>
<div>&nbsp;&nbsp;&nbsp; 八.文件同步的问题，这个问题可能你觉得没有必要，如果你看一下网通和电信的TTL就明白了，同步要支持续传，并且不能是持续的，否则你的成本会高出N倍，流量大的时候需要采用同步服务器进行更新，不要期望能通过你的软件实现，交给你的程序员吧，把上面的话告诉他他就知道怎么做了。&nbsp;&nbsp;&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp; 九.最狠的一个问题了，也是吃亏最大的问题，不管您跟网警的关系多好，看好你的用户，审核好你的东西，一被停机可能就致命，本人就吃过N次亏。</div>
<div>&nbsp;&nbsp;&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp; 十.对于缓存和静态文件，应该采用独立的缓存服务器，对缓存维护和文件索引维护，并更新和删除</div>
<div>&nbsp;</div>
<div>最后，祝各位站长一番风顺，大展宏图。</div>
</div>
<img src ="http://www.blogjava.net/wangdei/aggbug/212778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangdei/" target="_blank">BT下载与小说520</a> 2008-07-05 20:56 <a href="http://www.blogjava.net/wangdei/archive/2008/07/05/212778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过JOX轻松实现JavaBeans与XML的相互转换 </title><link>http://www.blogjava.net/wangdei/archive/2008/07/04/212600.html</link><dc:creator>BT下载与小说520</dc:creator><author>BT下载与小说520</author><pubDate>Fri, 04 Jul 2008 06:32:00 GMT</pubDate><guid>http://www.blogjava.net/wangdei/archive/2008/07/04/212600.html</guid><wfw:comment>http://www.blogjava.net/wangdei/comments/212600.html</wfw:comment><comments>http://www.blogjava.net/wangdei/archive/2008/07/04/212600.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/wangdei/comments/commentRss/212600.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangdei/services/trackbacks/212600.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp; 不用复杂的代码，就可以让您的JavaBeans自己控制到XML文件的相互转化。本文展示了怎样通过JOX来实现从JavaBeans到XML文件的相互转换。 &nbsp;&nbsp;&nbsp;为了灵活的满足Web应用和Web&nbsp;services需求的变化，Java和XML的轻便性和可扩展性使它们成为解决这一问题的理想选择。SAX&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/wangdei/archive/2008/07/04/212600.html'>阅读全文</a><img src ="http://www.blogjava.net/wangdei/aggbug/212600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangdei/" target="_blank">BT下载与小说520</a> 2008-07-04 14:32 <a href="http://www.blogjava.net/wangdei/archive/2008/07/04/212600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解密淘宝网的开源架构(转)</title><link>http://www.blogjava.net/wangdei/archive/2008/06/22/209849.html</link><dc:creator>BT下载与小说520</dc:creator><author>BT下载与小说520</author><pubDate>Sun, 22 Jun 2008 07:37:00 GMT</pubDate><guid>http://www.blogjava.net/wangdei/archive/2008/06/22/209849.html</guid><wfw:comment>http://www.blogjava.net/wangdei/comments/209849.html</wfw:comment><comments>http://www.blogjava.net/wangdei/archive/2008/06/22/209849.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/wangdei/comments/commentRss/209849.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangdei/services/trackbacks/209849.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.5a520.cn">淘宝网</a>，是一个在线商品数量突破一亿，日均成交额超过两亿元人民币，注册用户接近八千万的大型电子商务网站，是亚洲最大的购物网站。那么对于淘宝网这样大规模的一个网站，我猜想大家一定会非常关心整个网站都采用了什么样的技术、产品和架构，也会很想了解在淘宝网中是否采用了开源的软件或者是完全采用的商业软件。那么下面我就简单的介绍一下淘宝网中应用的开源<a href="http://www.bt285.cn">软件</a>。
<p>&nbsp;&nbsp;&nbsp; 对于规模稍大的网站来说，其IT必然是一个服务器集群来提供网站服务，数据库也必然要和应用服务分开，有单独的数据库服务器。对于像淘宝网这样规模的网站而言，就是应用也分成很多组。那么下面，我就从应用服务器操作系统、应用服务器软件、Web Server、数据库、开发框架等几个方面来介绍一下淘宝网中开源<a href="http://www.bt285.cn">软件</a>的应用。</p>
<p><strong>&nbsp;&nbsp;&nbsp; 操作系统 </strong></p>
<p>&nbsp;&nbsp;&nbsp; 我们首先就从应用服务器的操作系统说起。一个应用服务器，从软件的角度来说他的最底层首先是操作系统。要先选择操作系统，然后才是操作系统基础上的应用软件。在淘宝网，我们的应用服务器上采用的是Linux操作系统。Linux操作系统从1991年第一次正式被公布到现在已&#190;&#172;走过了十七个年头，在PC Server上有广泛的应用。硬件上我们选择PC Server而不是小型机，那么Server的操作系统供我们选择的一般也就是Linux，FreeBSD, windows 2000 Server或者Windows Server 2003。如果不准备采用微软的一系列产品构建应用，并且有能力维护Linux或者FreeBSD，再加上成本的考虑，那么还是应该在Linux和FreeBSD之间进行选择。可以说，现在Linux和FreeBSD这两个系统难分伯仲，很难说哪个一定比另外一个要优秀很多、能够全面的超越对手，应该是各有所长。那么在选择的时候有一个因素就是企业的技术人员对于哪种系统更加的熟悉，这个熟悉一方面是系统管理方面，另外一方面是对于内核的熟悉，对内核的熟悉对于性能调优和对操作系统进行定制剪裁会有很大的帮助。而应用全面的优化、提升性能也是从操作系统的优化开始的。</p>
<p>&nbsp;<strong>&nbsp;&nbsp; 应用服务器 </strong></p>
<p>&nbsp;&nbsp;&nbsp; 在确定了服务器的硬件、服务器的操作系统之后，下面我们来说说业务系统的构建。淘宝网有很多业务系统应用是基于JEE规范的系统。还有一些是C C++构建的应用或者是Java构建的Standalone的应用。那么我们要选择一款实现了JEE规范的应用服务器。我们的选择是JBoss Applcation Server。JBoss AS是RedHat的一个开源的支持JEE规范的应用服务器。在几年前，如果采用Java技术构建互联网应用或者企业级应用，在开源软件中的选择一般也就是Apache组织的Tomcat、JBoss的 JBoss AS和Resin。严格意义上讲，Tomcat和Resin并不能算是一个应用服务器，他们是实现了部分J2EE规范的一个容器。而商业软件的选择就是IBM的WebSphere和BEA的WebLogic。到了现在，除了JBoss AS外，Apache的Geronimo，Sun的Glassfish也都是很优秀的JEE应用服务器。也给现在的开发人员提供了更多的选择。具体对于目前JEE应用服务器的比较。这边就不在赘述。</p>
<p>&nbsp;&nbsp;&nbsp; 在应用服务器前端，我们采用了Web Server做了一次转发，我们选择的Web服务器是大名鼎鼎的Apache。几年前，Apache几乎是Linux系统上开源Web Server的唯一选择。那个时候虽然也有一些其他的开源的Web Server，但是从功能和稳定性上来说都无法和Apache相对。在今天来说，Lighty也会是一个非常好的选择。Lighty是一个非常轻量级、占用内存资源也比较少的Web Server。虽然功能上没有Apache强大，但是在不少场景下，性能是非常出色、强于Apache的。而微软的IIS，就只能工作在Windows的系统上了。并且使用IIS的话，基本上也就是选择了ISAPI、ASP或者ASP.NET进行Web应用的开发了。<br />
<br />
<br />
<br />
<strong>&nbsp;&nbsp; 数据库 </strong></p>
<p>&nbsp;&nbsp;&nbsp; 说完了我们采用的操作系统、应用服务器、WebServer后，下面就来谈谈我们的数据库。在淘宝网的应用中，采用了两种关系型数据库管理系统。一个是Oracle公司的Oracle 10g，另外一个是Sun MySQL的MySQL。Oracle是一款优秀的、广泛采用的商业数据库管理软件。有很强大的功能和安全性，可以处理相对海量的数据。而MySQL是一款非常优秀的开源数据库管理软件，非常适合用多台PC Server组成多点的存储节点阵列(这里我所指的不是MySQL自身提供的集群功能)，每单位的数据存储成本也非常的低廉。用多台PC Server安装MySQL组成一个存储节点阵列，通过MySQL自身的Replication或者应用自身的处理，可以很好的保证容错(允许部分节点失效)，保证应用的健壮性和可靠性。可以这么说，在关系数据库管理系统的选择上，可以考虑应用本身的情况来决定。</p>
<p>&nbsp;&nbsp;&nbsp; 一个互联网应用，除了服务器的操作系统，Web Server软件，应用服务器软件，数据库软件外，我们还会涉及到一些其他的系统，比如一些中间件系统、文件存储系统、搜索、分布式框架、缓存系统等等。在淘宝网，这些系统都是自主开发的，没有采用目前商业的或者开源的产品。有些系统，会存在着一些开源的产品或者商业产品。但是，考虑到淘宝网自己的需求和大并发量的压力，这些系统都选择了自主开发。</p>
<p><strong>&nbsp;&nbsp;&nbsp; 开发框架 </strong></p>
<p>&nbsp;&nbsp;&nbsp; 前面谈的都是系统级的产品，下面我们说说开发框架的使用。可能有朋友想问，作为一个如此大规模的网站，淘宝网的Web展现层采用的是什么框架，是怎么实现的呢？曾&#190;&#172;也有到淘宝的应聘者问过我这个问题，他问我说是不是用的struts。我告诉他说不是的。其实淘宝网的Web展现层的框架用的不是struts，不是webwork，不是spring mvc等等。淘宝网的Web展现层的框架用的是集团内部自主开发的一套Web框架。这个框架能够解决一些其他Web框架不能解决的、在淘宝的应用中又会出现并需要解决的问题。在淘宝的多个应用中，也采用了一些开源的框架，比如Spring、iBatis、jBPM、Hessian、Mina等等。这些开源软件的采用为我们构建应用系统提供了很大的帮助。</p>
<p>&nbsp;&nbsp;&nbsp; 采用开源软件构建系统，我想有两个很大的好处：</p>
<p>&nbsp;&nbsp;&nbsp; 一个是降低成本。假设你有1000台应用服务器，如果你每台服务器上采用的不是JBoss AS或者其他开源的软件，而是使用商业的Oracle BEA的Weblogic或者IBM的WebSphere，那么为这1000台机器的应用购买License的费用是非常高的。</p>
<p>&nbsp;&nbsp;&nbsp; 另外一个好处(我觉得最大的好处)是你可以看到软件的源码，你可以研究了解软件内部的工作过程、原理。这对于应用设计、开发、查错、优化都是非常有帮助的。</p>
<p><strong>&nbsp;&nbsp;&nbsp; 淘宝网的开源观</strong></p>
<p>&nbsp;&nbsp;&nbsp; 对于开源软件的应用，有些人可能担心质量的问题，有些人可能担心软件本身发展更新的问题，等等。对于质量的问题，我想现在很多的开源软件尤其是一些很著名的开源软件都有很完善的组织，有完善的开发、测试、发布流程。在一个新版本完成前，会有多次的测试版本发布，最后才是正式版。这和商业软件是一样的。并且因为代码公开，反而更加的容易发现错误，提高质量。至于第二个问题，我想跟第一个问题一样，关键是组织和规划而不在是否开源，并且在很多著名的开源软件背后，会有厂商在进行支持。软件本身的发展应该是不会成为问题的，不太会出现软件突然停止发展的情况。</p>
<p>&nbsp;&nbsp;&nbsp; 在今后的发展中，我们还是会一如既往的关注开源软件的发展，也还会根据需要采用不同的开源软件。在选择一个开源产品的时候，我会考虑以下几点：</p>
<p>&nbsp;&nbsp;&nbsp; 1. 这个软件目前的功能和它的RoadMap</p>
<p>&nbsp;&nbsp;&nbsp; 2. 软件本身的架构</p>
<p>&nbsp;&nbsp;&nbsp; 3. 该软件开发的活跃度</p>
<p>&nbsp;&nbsp;&nbsp; 4. 该开源软件是否是遵守该领域内的国际规范的</p>
<p>&nbsp;&nbsp;&nbsp; 5. 在同类产品中，要挑选有比较优势的。并且要考虑可能存在的移植代价。这个移植指的是采用了这款开源软件后现有系统的移植，或者是从这个开源软件到其他软件的移植。</p>
<p>&nbsp;&nbsp;&nbsp; 对于企业级系统、互联网应用来说，采用开源软件不仅可以降低成本，更重要的是能够真正了解软件的内部工作机制。还可以在现在的基础上进行增强和定制，也能够从开源软件中借鉴到很多好的设计和实现。希望国内能有更多的企业在使用开源软件的同时，也能开源自身的一些软件，或者能够成为一些开源软件的贡献者。而作为淘宝网，我们也会非常积极的参与到开源的活动中，也会努力为开源的发展做出我们应有的贡献。<br />
</p>
<p>哈哈.看完之后,感觉阿里还是电话销售公司.<a href="http://www.bt285.cn">BT</a>一下了.</p>
<img src ="http://www.blogjava.net/wangdei/aggbug/209849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangdei/" target="_blank">BT下载与小说520</a> 2008-06-22 15:37 <a href="http://www.blogjava.net/wangdei/archive/2008/06/22/209849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>