??xml version="1.0" encoding="utf-8" standalone="yes"?> 可扩展标记语aQXMLQ作ZU简单的、中性的、易ȝ数据表示形式已经变得来流行,许多软g厂商宣布?#8220;支持XML"Q意味着他们的品将能生成或处理XML数据。XML也被看作再企业间交换数据最x式。它允许企业在所交换的数据的XML的文类型定义(Document Type DefinitionsQDTDsQ或模式QSchemaQ上取得一致。这些DTDs或Schema是独立于企业使用的数据库模式的?本文用研究在不同计机之间通讯与处理XML数据的分布式pȝ的构建方法,主要是运行在不同的虚拟机上的JAVA应用之间的XML通讯?XML通讯 万维|协会(World Wide Web Consortium, W3CQ在XML规范中定义了XML的语法和语义。ؓ了处理XML数据,XML文必须l过解析。W3C定义了文档对象模型(DOMQ,它是应用E序员处理XML数据的接口。DOM已经有包括JAVA在内的许多语a的实现。JAVA应用E序可以通过DOM API来访问XML数据。XML解析器将产生XML文的DOM表示??说明了处理XML文的JAVA分布式应用的单模型。这个模型假设数据可以从诸如关系数据库之cȝ数据源得到。JAVA代码处理数据q最l生DOM表示Q这些代码表CZؓ图中的处理器? 注意C上的documentReady()Ҏ用remoteURL属性得到服务器上的CGI脚本的URL。ؓ了与HTTP兼容QCGI脚本cȝ字符?#8221;Content-type: text/html"装接收者的输出。这个脚本然后调用服务器上的the receiverMain()Ҏ?Main()函数只是单的实例化接收者然后调用其receiveDocument()Ҏ? 最后receiveDocument()Ҏ的代码段重新生成DOM表示以便q一步处理。这里用CIBM的XML解析器? Ҏ二:通过JAVAq程Ҏ调用串行化文?q个Ҏ通过JAVAq程Ҏ调用QJAVA RMIQ和DOM串行化(serializationQ来从发送者向接收者传输XML DOM 文档。如?Q? 以下是接受方的JAVA q程Ҏ调用的实现。setName()Ҏ接受这传送给RMI注册QregistryQ,documentReady()Ҏ仅仅接收到的文传送给下一个组件? Ҏ三:CORBA-IIOP W三Ҏ用CORBA-IIOP(CORBA over Internet Inter-ORB Protocol)来传输数据。对象管理组l(OMGQ正在徏议扩展接口定义语aQIDLQ将XML数据cd包括q去。这P来CORBA产品能传输XML数据。如?所C: 以下代码用JAVA串行化DOM和CORBA实现发送者? 以下代码用JAVA串行化DOM和CORBA实现接收者? 分析: 试表明Q纯文本表示的XML要比DOM串行化表C性能更好。同Ӟ解析DOM和文本所用的旉也要比用JAVA直接串行化和法串行化所用的旉?标准的web服务器方式的优势是其应用基础要广泛许多。CGI脚本能够在绝大多数web服务器上q行Q而且Q接受方能够很容易的通过URL标识。而对于RMIQ则需要RMI注册。CORBA的解军_法则需要在服务器上安装对象h代理QObject Request BrokerQORB Q?而且QCORBA发送者的实现使用的是一个URL的命名模式而不是接收者的CORBA对象引用Q用一个字W串与一个URL相联p,然后在客L转化?CORBA 和RMI支持JAVA 客户端到JAVA服务器的解决Ҏ。没有CGI脚本也不需要从标准输入中读取编码异常。而且Q不需要在发送者每ơ用XML通讯旉启动一个JAVA虚拟机。他们两则均支持接收者的自动ȀzR?JAVA RMI方式只能在JAVA代码之间工作Q对于web服务器包括CORBA理论上能在Q何编E语a之间通讯。对于JAVA串行化的DOM来说Q即便是客户端和服务器端均需要是JAVA代码的要求不是问题,它还存在另外一个困难,即JAVA串行化要求客L和服务器q行的是相同的DOM实现?l论 正如上面所qͼ有许多方法可以实现在JAVA分布式应用中发送XML数据Q每一U方法的性能和互操作性都是不同的。重要的是应该把XML通讯从分布式应用逻辑中抽取出来。也是Q实现发送和接受XML的代码应和应用逻辑的代码中分离出来。通过把代码打包成软glgQ就能够改变发送方和接受方的代码而不会媄响到应用其余实现? 处理器代码将DOM代表的XML数据传给发送者。发送者是与接收者进行XML数据通讯的JAVA代码。接收者JAVA代码来接受XML数据Q生DOM表示的数据ƈ把它传送给另一个处理器。简而言之,发送者和接收者抽象了DOM表示的XML数据的通讯?发送者和接收者不是在同一个JAVA虚拟Z执行的。他们是通过分布式系l的构g来相q的。无论是接收者还是发送者都既是客户端又是服务器端,两者的数据传输都是双向的?Xbeans 像要看到的一P在本文中描述的发送者和接收者的三种实现Ҏ都都是通过Xbeans来实现。Xbeans是一U接受XML数据作ؓ输入Q处理这个输入然后向下一个Xbeans输出XMLl果的Y件构件。Xbeans的输入输出都是XML的DOM文档Q亦即传送给Xbeans的不是需要XML解析器解析的字符Ԍ而是通过W3C的标准DOM API解析成了文对象。图2说明了一个Xbeans?
Xbeans是JavaBeans,支持装、重用、连接和客户化Java代码。通过适当的一些Xbeans和JavaBeans的设计工P我们p~很的代码构徏非常有用的分布式应用?Xbeans从IBM的XML的JAVA开发工具包而来Q在其上作了量修改以便更适合分布式的应用。Xbeans能够从www.Xbeans.org的开放源码项目中免费获得?实现发送方和接收方 下面介l用JAVA实现发送者和接收者的三种不同的方法。然后对每种Ҏ作一个简单的分析?Ҏ一Q用标准的web 服务?q种Ҏ只是简单的XML作ؓ文本发送给q程计算Z的web服务器。发送方必须DOM表示的XML转化为文本来与接收方q行通讯。然后,接受方必d文本q原为DOM表示Q如?Q?
以下代码D는HTTP来实现发送者。这里用CIBM Java开发包中的DOMWritercL实现DOM表示到文本XML表示的{换?
/**L无罪 http://www.bt285.cn/content.php?id=141970
《我的丑娘?nbsp; http://www.bt285.cn/wodechounian/
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())); // 处理l果Q?OK" 表示成功Q?Exception" 表示输入串行化异常 ... in.close(); } catch (Throwable e) { e.printStackTrace(System.err); } } 甜性ӆ?http://www.bt285.cn/1196863/story/story_1.html
import org.xbeans.communication.stdio.receiver.*;
public class receiverMain {
static Bean theReceiver = new Bean();
public static void main(String[] args) {
theReceiver.receiveDocument();
}
}
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()));
以下代码用JAVAq程Ҏ调用实现发送方与接受方的通讯.
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); }
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));
}
/**L无罪 http://www.bt285.cn/content.php?id=141970
《我的丑娘?nbsp; http://www.bt285.cn/wodechounian/
甜性ӆ?http://www.bt285.cn/1196863/story/story_1.html
以下的OMG IDLl出了发送者和接收者CORBA实现的接口?
exception RemoteReceiverException {
string remoteIdentifier;
string documentName;
string componentName;
string message;
string moreMessage;
};
typedef sequence byteArray;
interface XMLReceiver {
void documentReady(in byteArray serializedDocument)
raises(RemoteReceiverException);
};
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);
}
}
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());
}
}
]]>
]]>
JMeter是Apachel织的开放源代码目Q它是功能和性能试的工P100%的用java实现Q最新的版本?.9.1Q大家可以到 http://jakarta.apache.org/jmeter/index.html下蝲源代码和查看相关文?br />
JMeter作用领域
JMeter可以用于试静态或者动态资源的性能Q文件、Servlets、Perl脚本、java对象、数据库和查询、ftp服务器或者其他的资源Q。JMeter用于模拟在服务器、网l或者其他对象上附加高负载以试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的L能情况。你可以用JMeter提供的图形化界面分析性能指标或者在高负载情况下试服务?脚本/对象的行为?br />
使用JMeter试Web应用
接下来的章节里,作者将详细的演C如何用JMeter来测试Web应用的完整过E?br />
2.1 试环境
作者用了Tomcat作ؓWeb服务器进行测试,被测试的内容是一个jsp文g和一个servletQjsp文g调用JavaBean、打印相关信息,servlet接受用户参数、调用javabean、输出相关信息。详l的内容请参考作者提供的JMeter.war的内宏V?br />
2.2 安装启动JMeter
大家可以到通过http://apache.linuxforum.net/dist/jakarta/jmeter/binaries/jakarta-jmeter-1.9.1.zip下蝲JMeter的release版本Q然后将下蝲?zip文g解压~到C:/JMeterQ后面的文章中将使用%JMeter%来引用这个目录)目录下?br />
现在Q请使用%JMeter%/bin下面的jmeter.bat批处理文件来启动JMeter的可视化界面Q下面的工作都将在这个可视化界面界面上进行操作。下面的囄是JMeter的可视化界面的屏q截图?br />
图一Q?nbsp;JMeter打开时的屏幕截图
2.3 建立试计划QTest PlanQ?br />
试计划描述了执行测试过E中JMeter的执行过E和步骤Q一个完整的试计划包括一个或者多个线E组(Thread Groups)、逻辑控制QLogic ControllerQ、实例生控制器QSample Generating ControllersQ、侦听器(Listener)、定时器QTimerQ、比较(AssertionsQ、配|元素(Config ElementsQ。打开JMeterӞ它已l徏立一个默认的试计划,一个JMeter应用的实例只能徏立或者打开一个测试计划?br />
现在我们开始填充一个测试计划的内容Q这个测试计划向一个jsp文g和一个servlet发出hQ我们需要JMeter模拟五个h者(也就是五个线E)Q每个请求者连l请求两ơ,下面的章节介l了详细的操作步骤?br />
2.4 增加负蝲信息讄
q一步,我们向试计划中增加相兌载设|?是Jmeter知道我们需要模拟五个请求者,每个h者在试q程中连l请求两ơ。详l步骤如下:
1. 选中可视化界面中左边树的Test Plan节点Q单d键,选择Add'Thread GroupQ界面右边将会出C的设|信息框?br />
2. Thread Group有三个和负蝲信息相关的参敎ͼ
Number of ThreadsQ?nbsp;讄发送请求的用户数目
Ramp-up periodQ?nbsp;每个h发生的L间间隔,单位是秒。比如你的请求数目是5Q而这个参数是10Q那么每个请求之间的间隔是10Q?Q也是2U?nbsp;
Loop CountQ?nbsp;h发生的重复次敎ͼ如果选择后面的foreverQ默认)Q那?nbsp;h一直l,如果不选择foreverQ而在输入框中输入数字Q那么请求将重复 指定的次敎ͼ如果输入0Q那么请求将执行一ơ?nbsp;
Ҏ我们演示例子的设计,我们应该Number of Threads讄?QRamp-up period讄?Q也是同时q发hQ,不选中foreverQ在Loop Count后面的输入框中输?Q设|后的屏q截囑֦下:
图二Q设|好参数的Thread Group?br />
2.5 增加默认Http属性(可选)
实际的测试工作往往是针对同一个服务器上Web应用展开?所以Jmeter提供了这样一U设|? 在默认Http属性设|需要被试服务器的相关属性,以后的httph讄中就可以忽略q些相同参数的设|?减少讄参数录入的时间?br />
我们q里采用这U属性。你可以通过下面的步骤来讄默认http属性:
1. 选中可视化界面中左边树的Test Plan节点Q单d键,选择Add'config element'http request defaultsQ界面右边将会出C的设|信息框?br />
2. 默认http属性的主要参数说明如下Q?nbsp;
protocalQ发送测试请求时使用的协?nbsp;
server name or ipQ被试服务器的ip地址或者名?nbsp;如要试 http://www.bt285.cn BT下蝲 或是 http://www.5a520.cn 说520|?可以?a >http://www.bt285.cn ?a >http://www.5a520.cn
pathQ?nbsp;默认的v始位|。比如将path讄为/jmeterQ那么所有的httph的url中都增加/jmeter路径?nbsp;
port numberQ?nbsp;服务器提供服务的端口?nbsp;
我们的测试计划将针对www.yaonba.com.cn 的Web服务器上的Web应用q行试Q所以protocal应该是httpQip使用www.yaonba.com.cn Q因个web应用发布的context路径是/jmeterQ所以这里的path讄为/jmeterQ因Z用Tomcat服务器,所以port number?080。设|后的屏q截囑֦下:
图三Q?nbsp;试计划中用的默认Http参数
2.6 增加Httph
现在我们需要增加httph了,他也是我们测试的内容M部分。你可以通过下面的步骤来增加性的httphQ?br />
1. 选中可视化界面中左边树的Thread Group节点Q单d键,选择Add'sampler'http requestQ界面右边将会出C的设|信息框?br />
2. 他的参数?.5中介l的http属性差不多Q增加的属性中有发送http时方法的选择Q你可以选择为get或者post?br />
我们现在增加两个http hQ因为我们设|了默认的http属性,所以和默认http属性中相同的属性不再重复设|。设|后的屏q截囑֦下:
囑֛Q设|好的jsp试h
图五Q设|好的Servlet试hQ带参数Q?br />
2.7 增加Listener
增加listener是ؓ了记录测试信息ƈ且可以用Jmeter提供的可视化界面查看试l果Q里面有好几U结果分析方式可供选择Q你可以Ҏ自己习惯的分析方式选择不同的结果显C方式,我们q里使用表格的Ş式来查看和分析测试结果。你可以通过下面的步骤来增加listenerQ?br />
1. 选中可视化界面中左边树的Test Plan节点Q单d键,选择Add'listener'view result in tableQ界面右边将会出C的设|信息和l果昄框?br />
2. 你可以设|界面上面的filename属性设|将试l果保存到某个文件中界面下面用表格显C测试结果,表格的第一列sampleno昄h执行的顺序和~号Qurl昄h发送的目标QsampleQms列显C个请求完成耗费的时_最后的success列显C改h是否成功执行?br />
界面的最下面你还可以看到一些统计信息,最兛_的应该是Average吧,也就是相应的q_旉?br />
2.8 开始执行测试计?br />
现在你可以通过单击菜单栏run -> Start开始执行测试计划了。下面这两个图是作者第一ơ、第二次执行该测试计划的l果?
囑օQ第一ơ执行后的结果显C?br />
图七Q第二次执行的结果显C?br />
大家可以看到W一ơ执行时的几个大旉值均来自于jsp requestQ这可以通过下面的理p行解释:jsp执行前都需要被~译?class文g。所以第二次的结果才是正常的l果?br />
ȝ
JMeter用于q行供能或者性能试Q通过使用JMeter提供的供能,我们可以可视化的制定试计划Q包括规定用什么样的负载、测试什么内宏V传入的参数Q同Ӟ他提供了好多U图形化的测试结果显C方式,使我们能够简单的开始测试工作和分析试l果?br />
本文中,作者根据自q使用l验Q详l演CZ如何使用JMeter来进行Web试的全部过E,单的介绍了JMeter提供试l果的图形化昄界面中相兛_数的含义。希望能够帮助大家学会用JMeter的基本知识,同时Q大家可以参考这个过E和JMeter的帮助文来实现对java对象、数据库{的试q程?br />
看完?无语?....
睡不着?
今天Q我下定军_dQ离开服务了近两年的公司奇?60安全卫士Q离开了再熟悉不过的办公环境,习惯了你来我往的h事变动。今天我C….带走了遗憾,带走了h生梦惻I360Q就q样亲切的称g吧)当时是你接纳了我Q记得当时我q是一个刚毕业的大学生的时候,是你360安全卫士、是傅老大把我招到你的麾下Q让我知道了我的目标Q那是做出国内的安全YӞ
现在我走了,我只惛_q一ȝ单的记录一下我的心情,当年你的辉煌q在脑vȀ荡,上千万的装机量让我们兴奋不已Q别忘了我们是免费的Q我们没有Q何的利润Q也许大家不知道Q当q最让h痛恨?721源自我们的老大?周`,但是Q他又做Zq样一ƾ流氓Y件专杀工具Q荡了几乎所有的氓软gQ当然这是所有员工的功劳Q包括我的上司,傅盛Q傅盛应该算?60的最大功臣,是他让大家知道了360安全卫士Q是他让360和卡巴斯基合作!方便了大家。没有他的业务关pd没有今天?60安全卫士。可是现在,已经物是人非Q老大C……我们q些老员工,也都要走了?
因ؓ360要战略{型,我们不堪良心谴责Q不堪工作压力要CQ也许大家还不知道,今年360已经不再和卡巴合作了Q他们决定和|马g的BitDefender合作了。而与此对应的Q我们项目组Q不再是像其他同事那Ll研?60的安全技术,l箋修复360免费杀软的BUG。而是都被调到一个新的项目组里!研分什么大家知道吗Q!弹窗q告Q!天啊Q也许大家的噩梦又要来了Q?60的弹H广告就要借着奥运来了。大安知道我们以前一直是免费的没有利润的Q即使是和卡巴合作也是赚微不道的一点返点和q告费,而现在,360却将和国内某大型门户|站合作推出弹窗q告Q听同事说双方合作费用达八位数。现在装?60的用h能收到关于360升的气泡提C,其实那是我们在调试。调试如何把消息同时发给送给所有的用户Q因为大家知道即使是QQ的弹H广告也不能同时发给全部用户Q而会有gq,所以我们就不断的调试调?#8230;…要知道,奥运新闻q了五分钟就不?a >新闻?说,BT?
之所以决定离开是因为公司太让我们失望了Q战略的转型?60又回C3721时代……我们研制?60把所有的氓软g都杀q净了,却把自己塑造成了前所未有的第一氓软gQ我们想不?#8230;…想不通周鸿祎老大他想做什么?现在我们的老大CQ也许是伤心了,也许是被逼无奈,辛辛苦苦推v来的软gp样又被颠覆了…7?7的新d布会他没有参加,媒体说他是去度假Q其实做什么我们很清楚Q他在做最后的心理准备Q然后把工作交接l完毕,Ch….老大Q走?#8230;…
C……d?60Q离开惠通时代广场的办公环境Q还真不知道该何M从,我的朋友们大安走好Q主要的是傅大哥Q你教了我很多东西,感谢Q?60但愿也走好吧Q毕竟是我们辛辛苦苦把你做v来的Q成宿成夜的~程Q大安不容易,别太疯狂了就好了……..l我们留点美好的回忆吧!Q!Q?
写于公元2008q??9日凌?/p>
当闪光的互联|沸沸扬扬的q入?001q_恶意代码开始萌芽,?23恶意代码让h骂娘Q?721开始叫床了Q一些小站更是恶意满天飞Q随便打开一个网 站都会弹你安装控件的提示框,但是Q我个h认ؓQ那个时候的互联|也比较好,毕竟Q站长的理想q在闪光Q无非只有一个目的,是把流量做hQƈ不那 么和铜臭挂钩?/p>
而时?002q?3q_01q的代码多多少争取了不眼球,d变了Q首先看看新的IT频道QY文满天飞Q而且q可以明码标仗当时只是认为是?作,x那时我的站点? http://www.bt285.cn BT下蝲 http://www.yaonba.com.cn NBA中文|?后来知道我错了,大家有兴可以翻那个时候新的报道Q有很多可以让hW掉大牙的事情(现在也有很多Q不q隐蔽性比较强了,不那么明目张胆了Q因?现在的站长不像那个时候容易糊弄了Q。其?随便q入一个论坛,听大安在叫Q我今天注册了几个,你今天注册了几个Qon my god,中移动流氓当Ӟ|易q个流氓不要脸的开天辟地的把SP推广h了,那真叫一个恐怖,每天都担心被人明目张胆的合法的偷手机贏V网易这个时候开 启了一个小时代Q手机注册,疯狂敛胦Q瞬间电q站,交友|站满天飞,色情而不色情的广告在凌晨旉满天飞,大量QQ上都是看我的照片Q输入网址后呢Q?再。。。再输入手机L可以上我了Q就是看准了你这个时候荷蒙旺盛Q就是蒙你的。一个朋友的电媄站一个月Udp扣掉60多万...
当中Ud要抗不住用L叫骂声开始呻吟的时候,在满天的叫骂声的背后Q流氓Y件也开始有些蠢蠢欲动了Q因为靠SP不那么容易发财了Q这个时候的3721 其实q不流氓,我就装,他有一些修复网늚工具Q还是比较有帮助的。但是当所有h都眼U书生的时候,氓软gq个东西开始茁壮成长,但是好像做捆l的所 谓插件还不像现在q么猛~?/p>
我觉?2q有代表性的事情q有一Ӟ是|络传销的流行,现在q有人宣传让你注册就月赚万元Q注册帐P先交钱。可惜了Q现在如果还q么做的话进police的时间估计也不远?像这U?a >http://www.5a520.cn 说520 每天也能赚个200多块?
2002q_U服成了名词Q可惜我没有玩过|络游戏Q不知道q个东西能带来什么。只记得当传奇私服发布的时候ؓ了给LP的论坛带Ҏ量,׃两周旉改出 了一个无错版本的U服Q应该是国内W一个无错版吧青青家园版Q。恐怖的事情马上出CQ我看到青青家园版在短短两周旉内变化了很多名字Q流q版Q飞??..QNNDQ天啊指U码都没有换Q现在想hQ自己其实在无意中创造了一个商机,论坛的一个朋友把他改头换面,成了立天版,而这位朋友,竟然卖程?赚了十来万(q是后话Q后来才知道的,不过现在x他ƈ不聪明,他没有接着下来做私服)。这是我W一ơ体验到金钱刺激的魅力,不到半年旉Q私服成Z?最赚钱的业。可是我q在E里糊涂的惛_费的赚什么钱Q我没有玩过|络游戏Q?/p>
当在北京战战兢兢的度q了非典时代Q战战兢兢的心翼的查查手机有没有扣费的时候,没有惛_比非典更可怕的东西来了。一不小心就会被强奸Q而且JB(?本的意?比较,强奸你都不知道,H然发现不能随便下蝲软g了,到处都是氓Q到处都是病毒,而国产的杀毒Y件只会隔着门叫叫,基本上不能用. 到底是流氓,J殖速度实惊hQ如果说以前的流氓或者病毒还有很大以部分是处于兴爱好的目的或者提高流量的时候,q个时候已l完全赤裸裸了。当有了商业 目的Q当有了金钱刺激的时候,他们有了充分的温床得以发展,q个时候互联网才真正开始乌烟瘴气来了。流氓还氓的理直气壮,比如CNNIC
当雅典奥q会带来了流氓和病毒的激情,我当时认为最黑暗的时候来临了Q自认ؓ对系l底层非怺解的我遇C很多清除不掉的病毒,我的计算机成了病毒的?园,于是Q装pȝ成了家常侉K。黑客事业中也在q个时候随U服茁壮的发展成ؓ一门业,敲诈和勒索开始在互联|上盛行Qƈ且迅速的成ؓ一个业链Q我?得那个时候应该是有点量的站长最恐怖的时代了,我D你你怎么办,买防火墙Q?0多万Q你来啊Q我是卖防火墙的。最可恶的了Q是那些所谓的安全公司Q防 火墙公司Q开始充分发挥威力了Q威力不是杀毒不是安全,而是以安全测试ؓ借口大批量的刉病毒,刉D工具Q防火墙牛Xh了。我一个朋友,半年旉q̎ 千万Q市面上一般的D工具都是他发?#8230;…很知名的公司啊,也许他们现在q会夸,做私服的一半h用的都是我们的墙。我觉得”抢“是地地道道的氓Q强怽 之后你还要给他付钱,不付ql勒索敲诈强奸,地地道道的阴阳hQ前面是JB(q步的意?告诉你无坚不摧,后面是YDQ要到的意思啊Q多牛X的JB都会 被我的YD DDOS掉,D的流脓,没有地方长GMQ只好长在头上来攑ֱ说话勒烦了,于是YD与JB齐飞QGM共大便一?.....
我觉得,?#8220;抢”比v来,传奇U服应该最有代表性,它几乎带动了一个业群Q程序,病毒Q防火墙Q登陆器Q发布站...都在那个时代赚疯了钱Q也塑造了 很多现在我们l常挂在嘴边的名字。灰鸽子也是在那个时代开始流行,肉鸡Q木马,僵尸Q成Z个时代的名词Q现在其实也是?/p>
互联|在病唉唉中2005q的时候,也许是某些h看到了颓废的概念Q有一U叫2.0的声韛_始响赗好像概忉|中国的站长提出来的,我那个时候ƈ没有在国 外的站点上发现类似的声音Q当时在myspace上问了几个朋友,都不知道Q后来才知道myspace是2.0的代表。翻了很多站点,愣是找不C个概 忉|的东西Q不q大安在闹Q咱也跟着起哄吧。n受着病毒和流氓的强奸Qȝ是看C一U奋L声音。管他呢Q我叫2.0Q我p?.0Q于是互联网 q入2.0时代。想惻I2.0是q步的意思吧Q至不会那么流氓了Q无意中却发玎ͼ2.0公司都是以流氓发家的..............无语?/p>
360其实也算是开起了一个时代,姑且不谈所谓炒作也|,职业道d也ŞQ避开那腥风血雨的口水Q至能看到点安慰的声音。不它的目的如何,它办C三g 我几乎认为绝望的事情。一Q彻底冲垮了杀毒Y件和氓厂商的床头协议,杀毒Y件不能随便上氓姑娘Q暂且这么说吧,其实我觉得他们更像是Zq鸭子Q?了,杀毒Y件也不再说流氓姑?#8220;没毒”了。二Q流氓的g不那么容易流氓v来了Q冲垮了很多根基不是很牢固的流氓,氓也不是那么容易的Q至要会点?术的吧。三Q扼杀了一个尚未羽g满的氓产业Q我当时在想Q如果安全公叔R和流氓姑娘上q床之后Q流氓姑娘受_之后发展也太恐怖了Q有了商业化的孵?器,那繁D速度比惊惊h吧~~~~~~~~~
GG adsene是真正开创了一个时代吧Q?3-04q的时候美刀真是好赚啊,GG那个时候也?#8220;?#8221;的可以,他傻的让中国所有的站长都ؓ他疯狂,那个时?作弊代码甚至要用1W来买Q至我没有在国外的WEB上看到这么疯狂的事情Q,一天能作弊上万金Q开始出C理作弊公司,交完保证金后??......当所有h都ؓGG疯狂的时?GG做出了和腾讯一LX的事情来Q开始大规模的封杀帐户Q我是先让你疯狂v来再CQ你不服气,Ƣ迎?打国际长途。还不服气,不服气你靠什么吃饭呢。我隐约看到了腾讯的N气扬的模PQ我惌Ҏ点向马化腄强奸哲学Q我先脱光了让你上,当你觉得上我?舒服的时候,q且M开我的时候,p我强怽了,我的JBQ套用疯狂绅士的名词QJB是基本的意思啊Q大Q我要吃饭啊Q你得给?#8220;上机”费吧Q我??QQ是q样被马化腾卖了作ؓ上机费了~~
q入2006q就不再说些什么了Q之前赚到钱的站长开始收手,开了新的投资,而跟风者开始蔓ӞGGq个时候开始大规模屠杀帐户Q而这个时候应该是垃圾站成为名ơ的时候了Q不再说了?/p>
其实惌的话也就一句,成功是可以复制的Q前提是在别人开始复制之前!站长其实应该有更多的理想Q坦坦荡荡的做一番事业,GGq告什么的只能作ؓ一个辅?手段Q如果把他当作事业的话,互联|一天世界一q_长久不了的东ѝ既然图王提Z自律公约Q那么我们就应该有个自励公约。其实跟其他站长谈,他们都怕中 国的站长Q去国外U服务器他们都不是很Ƣ迎Qؓ什么要把自q名声做坏呢。如果我们能吃饱肚子Qؓ什么不做的更好呢!Q美刀可以创造胦富,但是他也可以?掉一个h的理惻I毁掉一个h的永q的财富。其实我在想Q如果真的觉得GG能赚钱,那就雇上几个人做Q给自己一Ҏ想的空_看看前面的\Q还有多q。。?/p>
C自己的理惻I放下包袱才能成长。其实商业上有不这斚w的例子,如果竞争Ҏ惌一个公司垮掉有一个很聪明的办法就是不与他竞争Q给他的初产品_的利润,以毁掉一个公司动力的。比如施乐公司的{略
估计要挨骂,那就骂的痛快一些吧~ 来自E序?/p>
当互联网吵吵嚷嚷的进?.0时代Q当互联|的技术不再是那么高不可攀Q当复制变成家常侉KQ互联网热闹h?/p>
myspace火了Q中国冒出更多的myspace
youtube刚刚hQ中国的视频|站遍地开?/p>
51拔地而vQ中国出了无数的SNS
facebook则改变了中国站长的抄袭方式,不再学chianren了,校内火了
..........
当抄袭变成习惯,我想说的是,模仿Q站长,你准备好了吗Q?/p>
如果你打做垃圾站,或者赚点广告费的网站,请不要点击这文章,我从技术角度方面谈谈WEB2.0|站的模仉K题?/p>
当投资和量都不是问题的时候,我想说的是,您真的一帆风吗Q?/p>
拿SNS|站来说Q当匆匆上线?.0Q当一W笔投资砸进ȝ时候,当流量上ȝ时候,您的困惑在什么地方?
我做q多?.0公司的技术顾问,单的谈谈2.0公司遇到的问?涉及隐私Q我用A B C D代替)Q这里就不再赘述大家众所周知的页面静态化Q缓存和代码安全{问题了Q有Ҏ术的2.0公司的CTO都知道这些东西,我们谈点发展之后的问?/p>
A公司
A公司做的是SNS|站Q程序是两个毛头伙子做的,目标直指51Q程序开发是一帆风,功能也比51牛多了,推广也是一帆风(A公司有自q到的推广方式。但是当ALEXA?W的时候问题出来了Q每天下?点左叻I|站速度慢的惊hQ基本上打不开Q公怸台服务器CPU100%Q让人郁L是公司的|络配置方式Q居然是双WEB的集,而单独一台DB数据库。整个瓶颈在数据库,于是我徏议做DB的集,分析了一下数据结构,MDQ典型的WEBE序员的作品Q没有一Ҏ据库设计规范Q功能实现是可以Q如果要扩展Q不可能Q集基本上是不可能的,怎么办?不能办,于是Q一个月的时间修改程序,数据l构基本上换了一?前期砸进ȝ几十万打了水飘,用户走光了?/p>
l论QWEB2.0前期设计的时候不应该只考虑功能Q应该认真考虑一下底层和数据l构了?/strong>
B公司
B公司也是做的SNS|站Q程序是3个h开发的QCEO是某名牌大学的经学士Q有点知q的味道,又有一些特色出来,说实话,公司的潜力不错,CEO有很强的q作能力Q感觉前景不错。系l架构还行,但是---但是pȝ崩溃了,why?pȝ没有考虑到用h个v量的说法Q文件也有个量的说法,用户的相册,囄全部存贮在WEB服务器的一个分ZQ每个用户一个目录,而打开性能监视器,盘的IO高的惊hQ基本上无暇响应。众所周知Q文件系l也是一个数据库Q单独大文g无所谓,关键是整个是300多个G的零文Ӟ大量的读写操作,pȝ崩溃Q数据丢失,文gpȝ的一个链断了Q用h据全部丢失!Q!Raidq不能解x有问题,盘阵列只能保证在硬盘损坏的时候进行恢复,但是q个是文件系l的损坏Qraid不能恢复。这是一个非常沉重的问题Q系l整整停了一个月来做数据恢复Q单独文件很ҎQ但是v量文件目前还没有一个Y件能l织h软g架构Q数据恢复Y件一般在建立目录l构索引的时候就已经L了,试q用16G内存的服务器做恢复,无效Q。解x案:修改E序架构Q做分布式文件存贮(E序修改用了8天,但是文g转移却又用去了将q一个月Q,20万用h失殆?像这U?http://www.bt285.cn bt下蝲
l论QWEB2.0前期的设计应该有应付量存贮的考虑Q整个涉及了E序架构的修改,前期规划不好的话基本上思\一条?/strong>
C公司
l论QWEB2.0前期设计应该有良好的散列考虑Q程序应该能有配合的扩充性,W合数据库的扩充
D公司
D公司是一个各个方面做的比较好的公司,做了CDN加速,囄也独立分ZN个服务器Q数据库不错的一个,(CTO是个数据库专ӞQ系l崩溃的原因在于WEBQ按道理说WEB很容易做集群的,但是发现集群q解决不掉问题,他们的集只允许?台的WEB集群Q但?台都当掉了。仔l分析,扑ֈ原因Q我估计整个也是大部分CTO最Ҏ犯的一个错误,或者说他们Ҏ想不到的问题,是WEB上传的问题,上传的时候由于数据传输的原因Q线E是保持链接的,300个线E就可以把一个WEB Server当掉了。解x案:q个最单,把上传和其他耗能大户分离出独立出来,同时做异步分布式上传。程序改动不是很大,但是之前半个月速度满对用户体验的损׃不可视。像q种http://www.5a520.cn 说520|?/p>
l论Q没有什么结ZQ毕竟有量讉Kl验的CTO不多Q也是那几个大站的?/strong>
ȝQ不是泼hQ模仿其实是很容易的Q随便找几个WEBE序员就能做刎ͼq且很简单,速度可能q很高效Q因为WEB2.0无非是跟数据库打交道,会操作数据库׃做。但是真正做大ƈ不容易,因ؓ能应付v量访问的E序q不单,现在的程序员都太自命不凡Q其实真正有l验的ƈ不多Q不要相信一个月?K--10K的程序员能给你多大的惊喜Q能应付量讉K的程序员不是那个h。如果您惛_2.0Q想做大Q有几个个徏议:
一.找DBMS的专家设计好数据库,大部分程序员都不知道分区视图Q数据散列,数据l的概念
?设计好程序架构(q个其实不难Q有个高人指导就行了Q,保持良好的扩展性,成本考虑可以扑օ职的pȝ架构设计师做好系l架构,定来的发展瓶颈?/p>
?考虑好文件存贮的问题。文件存贮的技术含量看h很低Q其实是很高的,可以考虑反向代理的方案。文件存贮出问题了,站点基本上就完蛋了,不仅仅是RAID的问题和存贮服务器的问题Q不q道理倒是一点就破的
?中国国情考虑Q这个最致命Q需要考虑电信和网通的问题QCDNq不能解x有问题。互动性的东西qCDNq不是很有效。最关键的是Q现有的双线机房遇到DDOSd基本上都会当掉,原因很简单,双线机房都是Uh机房Q本w就不会有太高的带宽Q随便攻M下就可以D掉(带提一个笑话,我知道一个双U机房的老Ld1G的带宽却C4G的金监֢Q很?00M的攻d可以搞定Q?/p>
?|络延迟的问题,q是分布式系l必要考虑的,E序要能容忍0?00U的数据延迟的功能,也就是同步的问题。不要小看这几十U,问题很大的,如果你的站点有交互式功能Q比如即时聊天,你可以想象一下是个什么结果。对于即时聊天的东西Q可以用反向代理来解冻I成本较高Q。但是对于留a和评论的影响不大Q但是如果系lؓ了健壮做了缓存和静态化的时候,q个东西可能是N性的了。静态文件的更新和重写需要异步的方式来做?/p>
?分散你的E序Q如果你没有太多的资金构{动辄百万的服务器,把功能分散开来,比如相册一台服务器Q留a一台服务器
?看好你的E序员,如果没有很好的激励措施的话你的程序员很容易写出敷衍性的代码Q而这个可能就是将来的大患Q程序架构定下来后要修改可能p费牛劲了。最好你的CTO能对?00%的衷心,100%的负责?/p>
对于规模E大的网站来_其IT必然是一个服务器集群来提供网站服务,数据库也必然要和应用服务分开Q有单独的数据库服务器。对于像淘宝|这栯模的|站而言Q就是应用也分成很多l。那么下面,我就从应用服务器操作pȝ、应用服务器软g、Web Server、数据库、开发框架等几个斚w来介l一下淘宝网中开?a >软g的应用?/p>
操作pȝ
我们首先׃应用服务器的操作pȝ说v。一个应用服务器Q从软g的角度来说他的最底层首先是操作系l。要先选择操作pȝQ然后才是操作系l基上的应用软g。在淘宝|,我们的应用服务器上采用的是Linux操作pȝ。Linux操作pȝ?991q第一ơ正式被公布到现在已¾¬走过了十七个q头Q在PC Server上有q泛的应用。硬件上我们选择PC Server而不是小型机Q那么Server的操作系l供我们选择的一般也是LinuxQFreeBSD, windows 2000 Server或者Windows Server 2003。如果不准备采用微Y的一pd产品构徏应用Qƈ且有能力l护Linux或者FreeBSDQ再加上成本的考虑Q那么还是应该在Linux和FreeBSD之间q行选择。可以说Q现在Linux和FreeBSDq两个系l难分伯Ԍ很难说哪个一定比另外一个要优秀很多、能够全面的越ҎQ应该是各有所ѝ那么在选择的时候有一个因素就是企业的技术h员对于哪U系l更加的熟悉Q这个熟悉一斚w是系l管理方面,另外一斚w是对于内核的熟悉Q对内核的熟悉对于性能调优和对操作pȝq行定制剪裁会有很大的帮助。而应用全面的优化、提升性能也是从操作系l的优化开始的?/p>
应用服务?
在确定了服务器的g、服务器的操作系l之后,下面我们来说说业务系l的构徏。淘宝网有很多业务系l应用是ZJEE规范的系l。还有一些是C C++构徏的应用或者是Java构徏的Standalone的应用。那么我们要选择一Ƒ֮CJEE规范的应用服务器。我们的选择是JBoss Applcation Server。JBoss AS是RedHat的一个开源的支持JEE规范的应用服务器。在几年前,如果采用Java技术构Z联网应用或者企业应用Q在开源Y件中的选择一般也是Apachel织的Tomcat、JBoss?JBoss AS和Resin。严格意义上ԌTomcat和Resinq不能算是一个应用服务器Q他们是实现了部分J2EE规范的一个容器。而商业Y件的选择是IBM的WebSphere和BEA的WebLogic。到了现在,除了JBoss AS外,Apache的GeronimoQSun的Glassfish也都是很优秀的JEE应用服务器。也l现在的开发h员提供了更多的选择。具体对于目前JEE应用服务器的比较。这边就不在赘述?/p>
在应用服务器前端Q我们采用了Web Server做了一ơ{发,我们选择的Web服务器是大名鼎鼎的Apache。几q前QApache几乎是Linuxpȝ上开源Web Server的唯一选择。那个时候虽然也有一些其他的开源的Web ServerQ但是从功能和稳定性上来说都无法和Apache相对。在今天来说QLighty也会是一个非常好的选择。Lighty是一个非常轻量、占用内存资源也比较的Web Server。虽然功能上没有Apache强大Q但是在不少场景下,性能是非常出艌Ӏ强于Apache的。而微软的IISQ就只能工作在Windows的系l上了。ƈ且用IIS的话Q基本上也就是选择了ISAPI、ASP或者ASP.NETq行Web应用的开发了?br />
数据?
说完了我们采用的操作pȝ、应用服务器、WebServer后,下面来谈谈我们的数据库。在淘宝|的应用中,采用了两U关pd数据库管理系l。一个是Oracle公司的Oracle 10gQ另外一个是Sun MySQL的MySQL。Oracle是一ƾ优U的、广泛采用的商业数据库管理Y件。有很强大的功能和安全性,可以处理相对量的数据。而MySQL是一N怼U的开源数据库理软gQ非帔R合用多台PC Serverl成多点的存储节炚w?q里我所指的不是MySQL自n提供的集功?Q每单位的数据存储成本也非常的低廉。用多台PC Server安装MySQLl成一个存储节炚w列,通过MySQL自n的Replication或者应用自w的处理Q可以很好的保证定w(允许部分节点失效)Q保证应用的健壮性和可靠性。可以这么说Q在关系数据库管理系l的选择上,可以考虑应用本n的情冉|军_?/p>
一个互联网应用Q除了服务器的操作系l,Web Server软gQ应用服务器软gQ数据库软g外,我们q会涉及C些其他的pȝQ比如一些中间gpȝ、文件存储系l、搜索、分布式框架、缓存系l等{。在淘宝|,q些pȝ都是自主开发的Q没有采用目前商业的或者开源的产品。有些系l,会存在着一些开源的产品或者商业品。但是,考虑到淘宝网自己的需求和大ƈ发量的压力,q些pȝ都选择了自d发?/p>
开发框?
前面谈的都是pȝU的产品Q下面我们说说开发框架的使用。可能有朋友想问Q作Z个如此大规模的网站,淘宝|的Web展现层采用的是什么框Ӟ是怎么实现的呢Q曾¾¬也有到淘宝的应聘者问q我q个问题Q他问我说是不是用的struts。我告诉他说不是的。其实淘宝网的Web展现层的框架用的不是strutsQ不是webworkQ不是spring mvc{等。淘宝网的Web展现层的框架用的是集团内部自d发的一套Web框架。这个框架能够解决一些其他Web框架不能解决的、在淘宝的应用中又会出现q要解决的问题。在淘宝的多个应用中Q也采用了一些开源的框架Q比如Spring、iBatis、jBPM、Hessian、Mina{等。这些开源Y件的采用为我们构建应用系l提供了很大的帮助?/p>
采用开源Y件构建系l,我想有两个很大的好处Q?/p>
一个是降低成本。假设你?000台应用服务器Q如果你每台服务器上采用的不是JBoss AS或者其他开源的软gQ而是使用商业的Oracle BEA的Weblogic或者IBM的WebSphereQ那么ؓq?000台机器的应用购买License的费用是非常高的?/p>
另外一个好?我觉得最大的好处)是你可以看到软g的源码,你可以研I了解Y件内部的工作q程、原理。这对于应用设计、开发、查错、优化都是非常有帮助的?/p>
淘宝|的开源观
对于开源Y件的应用Q有些h可能担心质量的问题,有些人可能担心Y件本w发展更新的问题Q等{。对于质量的问题Q我想现在很多的开源Y件尤其是一些很著名的开源Y仉有很完善的组l,有完善的开发、测试、发布流E。在一个新版本完成前,会有多次的测试版本发布,最后才是正式版。这和商业Y件是一L。ƈ且因Z码公开Q反而更加的Ҏ发现错误Q提高质量。至于第二个问题Q我惌W一个问题一P关键是组l和规划而不在是否开源,q且在很多著名的开源Y件背后,会有厂商在进行支持。Y件本w的发展应该是不会成为问题的Q不太会出现软gH然停止发展的情c?/p>
在今后的发展中,我们q是会一如既往的关注开源Y件的发展Q也q会Ҏ需要采用不同的开源Y件。在选择一个开源品的时候,我会考虑以下几点Q?/p>
1. q个软g目前的功能和它的RoadMap
2. 软g本n的架?/p>
3. 该Y件开发的z跃?/p>
4. 该开源Y件是否是遵守该领域内的国际规范的
5. 在同cM品中Q要挑选有比较优势的。ƈ且要考虑可能存在的移植代仗这个移植指的是采用了这Ƒּ源Y件后现有pȝ的移植,或者是从这个开源Y件到其他软g的移植?/p>
对于企业U系l、互联网应用来说Q采用开源Y件不仅可以降低成本,更重要的是能够真正了解Y件的内部工作机制。还可以在现在的基础上进行增强和定制Q也能够从开源Y件中借鉴到很多好的设计和实现。希望国内能有更多的企业在用开源Y件的同时Q也能开源自w的一些YӞ或者能够成Z些开源Y件的贡献者。而作为淘宝网Q我们也会非常积极的参与到开源的zd中,也会努力为开源的发展做出我们应有的A献?br />
哈哈.看完之后,感觉阉Kq是电话销售公?BT一下了.