??xml version="1.0" encoding="utf-8" standalone="yes"?> 如何安装Siegeq进行测? q行一ơsiegeQ它?x)在你的~目录创徏一?siegerc。你可以在里面修改你需要的东西。里面有说明Q可以自׃攏V需要说明的是里面有一个benchmark的属性,为false。siege不同于ab在于试q发的时候请求也有个随机延迟Q这h较接q实际效果? 一般用法:(x) -c是ƈ发量Q?r是重复次数?url文g是一个文本,每行都是一个urlQ它?x)从里面随机讉K的? cMab的纯q发压力试Q? 手册在此Q因为siege很早有Q命令语法也变了很多Q要么直接man siegeQ要么就看官Ҏ(gu)册:(x) http://www.joedog.org/Siege/Manual == 关于sproxy === sproxy是用来录制siege脚本的代理工兗可是我没有在CentOS上调试成功,需要自q译安装。好处是方便模拟posth和cookie{,但是目前没有用到?http://www.joedog.org/Sproxy/Manual
]]>
q有关于中国|志2007的记?br />
http://www.haokanbu.com/story
]]>
在CentOS 5上面的过E。其它系l安装方式略有不同参照它的官方网站?br />
安装siege
yum -y install siege
配置siege
q行siege
siege -c 100 -r 10 -f someScript.url
siege -c 100 -r 10 http://www.google.com
]]>
有时间的朋友看看q个slideQ?a >http://www.slideshare.net/Blaine/scaling-twitterQ没有时间的看看我的摘要?br />
开发:(x)
1、一定要试Q一定要早点试Q一定要早点试Q否则你死定了。不要存M侥幸心理Q从目的开始就写好试?br />
2、对M部分都要试。还是测试!
3、性能试要交l用h做。那h有意义。所以要做好log。用好分析工P(x)MuninQ服务器内存占用监控Q、NagiosQ服务器服务|络状态监控)、AWStats & Google Analytics、错误日志、发C错误马上q入问题跟踪pȝQTrac、Jira……太多了,但是最好有一个)?/p>
架构Q?br />
1、用可以分区的架构。按照架构上的功能清晰的分区。这意味着你可以通过替换一个实现来改进性能Q因为性能和复杂度往往是不可兼得的?/p>
对于数据库:(x)
1、尽量不要分布式数据库,包括数据库分区。最好通过提高单台服务器的性能提升q个节点的性能。更重要的是查询优化。通过备䆾服务器解军_Ҏ(gu)障?br />
2、对where子句中的字段增加index。(q个当然了)
3、扁q_查询Q比如一个user有很多朋友,查一个h的朋友如果通过外键?x)浪费很多性能。可以把ids序列化ؓ(f)1,2,3q样Q然后用like查询速度更快?br />
4、一定要优化你的SQLQ不要寄希望于ORMl你解决Q不是DataMapper、ActiveRecord或者UnitOfWorkQ?/p>
CacheQ?br /> 1、一定要考虑CacheQ最重要的是领域对象的CacheQ一定要考虑MemcacheQ如Memcached?br /> 2、应该有90%的查询可以Cache?br /> 3、但是要注意Cache实效问题Q要?qing)时标注实效Q,q个是个隄也是个重炏V?br /> 4、可以考虑用Message来标记实效(q样可以保证异步Q无d的按照顺序的让数据失效)Q据UC不是很难?/p>
MessagingQ?br />
1、合应用。不用去看Java的OpenFire了,即它很好,完全可以考虑erlang的ejabberd了,俄罗斯的产物?br />
2、排队问题有很多解决Ҏ(gu)QActiveMQ、RabbitMQ、MySQL + Lightweight Locking、DrbQfor rubyQ?/p>
一位ID是jackson1225的网友在javaeye询问?a title="一个大型Webpȝ的架构和部v选型问题" target="_blank">一个大型Webpȝ的架构和部v选型问题Q希望能提高现有的基于Java的Web应用的服务能力。由于架构模式和部v调优一直是JavaC的热门话题,q个问题引发了很多热心网友的讨论Q其中一些意见对其它大型Web目也有很好的指导意义。在讨论之初jackson1225q样描述了当前的应用的架构和部vҎ(gu)Q?/p>
目前pȝ架构如下:
- web层采用struts+tomcat实现Q整个系l采?0多台web服务器,其负载均衡采用硬件F5来实玎ͼ
- 中间层采用无状态会(x)话Bean+DAO+helpercL实现Q共3台weblogic服务器,部v有多个EJBQ其负蝲均衡也采用F5来实玎ͼ
- 数据库层的操作是自己写的通用cd现的Q两台ORACLE数据库服务器Q分别存攄户信息和业务数据Q一台SQL SERVER数据库,是第三方的业务数据信息;
web层调用EJBq程接口来访问中间g层。web层首先通过一个XML配置文g中配|的EJB接口信息来调用相应的EJBq程接口Q?/p>
该系l中一ơ操作涉?qing)到两个ORACLE库以?qing)一个SQL SERVER库的讉K和操作,x三个数据库连接,在一个事务中完成?/p>
q样的架构其实很多公叔R在用,因ؓ(f)Struts和Tomcat分别是最行的Java Web MVC框架和Servlet容器Q而F5公司的负载均衡是横向扩展常见的解x案(例如配置session stickyҎ(gu)Q。由于这个系l中有跨数据源的事务Q所以用Weblogic Server EJB容器和支持两阶段提交的数据库驱动可以保证跨数据源的事物完整性(当然Q容器管理的分布式事务ƈ非是唯一和最优的解决Ҏ(gu)Q?/p>
但是随着Rod Johnson重量U的著作《J2EE Development without EJB》和其中的Spring框架的流行,轻量U框架和轻量U容器的概念已经深入人心。所以对于jackson1225提出的这个场景,大多数网友都提出了置疑,认ؓ(f)q个pȝ滥用了技术,完全是在费钱。网友们大都认ؓ(f)SLSBQ无状态会(x)话BeanQ完全没有必要出现在q个场景中,认ؓ(f)SLSB通过q程接口讉K本地资源?x)有很大的性能开销Q这U观点也是Rod johnson在without EJB中批判EJB 2.x中的一大反模式?/p>
׃JavaEE是一个以模式见长的解x案,模式和架构在JavaEE中占有很重要的地位,所以很多业内专家也都警?#8220;反模式(Anti-patternsQ?#8221;的出现。对于上面所q的Ҏ(gu)是否是反模式Qjackson1225马上站出来申辩:(x)
我们目是把EJB作ؓ(f)一个FacadeQ只是提供给WEB层调用的q程接口Q而且只用了无状态会(x)话BeanQ所以性能上还可以的?/p>
q个解释很快得到了一些网友的认可Q但是大家很快意识到架构的好坏决定于是否能够满用户的需求,davexinQ可能是jackson1225的同事)描述了这个系l的用户和ƈ发情况:(x)
现在有用?000万,马上要和另一个公司的?x)员pȝ合ƈQ加h一共有9000万用戗数据量单表中有一亿条以上的数据。这是基本的情况Q其实我觉得现在的架构还是可以的Q现在支持的q发大概5000q发用户左右Q接下来?x)进行系l改造,目标支持1万个q发用户?/p>
具体的ƈ发量公布后又有网友置疑这个数据,认ؓ(f)q个pȝ的Servlet容器支持的ƈ发数太小Q怀疑是否配|不够优化。davexin又补充了该项目的服务器配|:(x)
pȝ前端tomcat都是用的刀片,配置?G内存Qcpu大概?.0GQ每台机器也支?50-400个ƈ发,再多的话Q就?x)相应时间非常的常,?0U,失去了意?Q所以我们才得出q样的结论的?/p>
一位ID是cauherk的网友提Z比较中肯的意见,他没有从Web容器单纯的ƈ发支持能力上提出改进Ҏ(gu)Q而是提出了对于类似的应用?a title="一些通用的改q提C? target="_blank">一些通用的改q提C?/a>Q这里摘要一下:(x)
- 数据库压力问?
可以按照业务、区域等{特性对数据库进行配|,可以考虑分库、用rac、分区、分表等{策略,保数据库能正常的进行交易?/p>
- 事务问题
要在两个数据库中操作Q那么必考虑到分布式事务。你应该仔细的设计你的系l,来避免用分布式事务Q以避免分布式事务带来更多的数据库压力和其它问题。推荐你采用延迟提交的策?q不保证数据的完?Q来避免分布式事务的问题Q毕竟commitp|的几率很低?/p>
- web的优?
静态、图片独立用不同的服务器,对于常态的静态文Ӟ采用E-TAG或者客L(fng)~存Q?google很多是q样q的。对于热点的功能Q考虑使用完全装蝲到内存,保证l对的响应速度Q对于需要频J访问的热点数据Q采用集中缓?多个可以采用负蝲均衡)Q减L据库的压力?/p>
对于几乎除二q制文gQ都应该在L4上配|基于硬件的压羃Ҏ(gu)Q减网l的量。提高用户用的感知?/p>
- |络问题
可以考虑采用镜像、多路网l接入、基于DNS的负载均衡。如果有_的投资,可以采用CDN(内容分发|?Q减M的服务器压力?/p>
cauherk的这个分析比较到位,其中ETags的方案是最q的一个热点,InfoQ?#8220;使用ETags减少Web应用带宽和负?/a>”里面对这U方案有很详l的介绍。一般以数据库ؓ(f)中心的Web应用的性能瓉都在数据库上Q所以cauherk把数据库和事务问题放C前两位来讨论。但是davexin解释在所讨论的这个项目中数据库ƈ非瓶颈:(x)
我们的压力不在数据库层,在web层和F5?当高峰的时?QF5也被Ҏ(gu)了,是每秒点击过30万,web动态部分根本承受不了。根据我们程序记录,20台web最多承?000个ƈ发,如果再多Qtomcat׃响应了。就像死了一栗?/p>
q个回复让接下来的讨论都集中于Web容器的性能优化Q但?a title="JavaEye站长robbin发表了自q意见" target="_blank">JavaEye站长robbin发表了自q意见Q将话题引回了这个项目的架构本nQ?/p>
performance tuning最重要的就是定位瓶颈在哪里Q以?qing)瓶颈是怎么产生的?/strong>
我的推测是瓶颈还是出在EJBq程Ҏ(gu)调用上!
tomcat上面的java应用要通过EJBq程Ҏ(gu)调用Q来讉Kweblogic上面的无状态SessionBeanQ这L(fng)q程Ҏ(gu)调用一般都?00ms~500msU别Q或者更多。而如果没有远E方法调用,即大量采用spring的动态反,一ơ完整的webh处理在本地JVM内部的完成时间一般也不过20ms而已。一ơwebh需要过长的执行旉Q就?x)导致servletU程被占用更多的旉Q从而无法及(qing)时响应更多的后箋h?/p>
如果q个推测是成立的话,那么我的是既然你没有用到分布式事务Q那么就q脆LEJB。weblogic也可以全部撤掉,业务层用spring取代EJBQ不要搞分布式架构,在每个tomcat实例上面部v一个完整的分层l构?/p>
另外在高q发情况下,apache处理静态资源也很耗内存和CPUQ可以考虑用轻量web server如lighttpd/litespeed/nginx取代之?/p>
robbin的推断得C|友们的支持Qdavexin也认同robbin的看法,但是他解释说公司认ؓ(f)攑ּSLSB存在风险Q所以公司們于通过Tomcat替换为Weblogic Server 10来提升系l的用户支撑能力?a title="robbin则马上批评了q种做法" target="_blank">robbin则马上批评了q种做法Q?/p>
坦白说我q从来没有听说过大规模互联网应用使用EJB的先例。ؓ(f)什么大规模互联|应用不能用EJBQ其实就是因为EJB性能太差Q用了EJB几乎必然出现性能障碍?/p>
web容器的性能说到底无非就是ServletU程调度能力而已QTomcat不像WebLogic那样附加n多管理功能,跑得快很正常。对比测试一下WebLogic的数据库q接池和C3P0q接池的性能也会(x)发现cM的结论,C3P0可要比WebLogic的连接池快好几倍了。这不是说WebLogic性能不好Q只不过weblogic要实现更多的功能Q所以在单一的速度斚w׃(x)牺牲很多东西?/p>
以我的经验来判断Q用tomcat5.5以上的版本,配置a(chn)pr支持Q进行必要的tuningQ用BEA JRockit JVM的话Q在你们目前的刀片上面,支撑500个ƈ发完全是可以做到的。结合你们目?0个刀片的gQ那么达?万ƈ发是没问题的。当然这样做的前提是必须扔掉EJBQƈ|web层和业务层在同一个JVM内部?/p>
接下来robbinq针对davexin对话题中的应用分别在tomcat和weblogic上的试数据q行了分析:(x)
引用Q?2?台weblogic10 ExpressQ相当于1台tomcatQ用于发布jsp应用Q加1台weblogic10Q发布ejb应用Q,能支?000个ƈ发用?.....
......
4?台tomcat4.1?台weblogic8Q只能支?50个ƈ发用Ptomcatpl超Ӟ说明此种l构瓉在tomcat?q说明瓶颈还不在EJBq程调用上,但是问题已经逐渐清楚了。ؓ(f)什么weblogic充当web容器发vq程EJB调用的时候可以支?000个ƈ发,但是tomcat只能?50个?只有两个可能的原因:(x)
- 你的tomcat没有配置好,严重影响了性能表现
- tomcat和weblogic之间的接口出了问?
接着springside目发v者江南白衣也提出了一个M的优化指|(x)
1.基础配置优化
tomcat 6Q?tomcat参数调优?
JRockit JVM? JVM参数调优Q?br /> Apache+Squid 处理静态内容?2.业务层优?/p>
部分功能本地化,而不调remote session bean?
异步提交操作,JMSQ?br /> cache热点数据Q?3.展示层优?/p>
动态页面发布ؓ(f)静态页面?
Cache部分动态页面内容?
davexin在调整了Tomcat配置后应验了robbin对tomcat配置问题的质疑,davexinq样描述l过配置优化以后的测试结果:(x)
l过试Qƈ发h数是可以辑ֈ像robbin所说的一P能够?00人左叻I如果压到q发700人,有15%左右的失败,虽然在调整上面参C后,q发人数上去了,但是在同L(fng)旉内所完成的事务数量下降了10%左右Qƈ且响应时间gq了1U左叻I但从整体上来_(d)牺牲一点事务吞吐量和响应时_(d)q发人数能够提高500Q觉得还是值得的?/p>
xq个话题有了一个比较好的结果。这个话题ƈ非完全针对一个具体的目才有意义Q更重要的是在分析和讨论问题的过E中|友们解决问题的思\Q尤其是cauherk、robbin、江南白衣等几位|友提出的意见可以让q大Java Web目开发者了解到中、大型项目所需要考虑的架构和部v所需要考虑的关键问题,也消除了很多人对轻量Servlet容器与EJB容器性能的一些误解?/p>
在讨Zq有一些小插曲Q如davexin和江南白衣讨ZJRocket的实ӞRealtimeQ版本是否可以提升Servlet容器的相应能?/a>Q答案是不可以。还有ID为mfc42d的网友从Servlet容器的ƈ发支持能力引甛_?a title="Java的线E调度能力和NIO对Servelet容器的意? target="_blank">Java的线E调度能力和NIO对Servelet容器的意?/a>Q他推荐了自q两篇不错的blog“java的线E实?/a>”?#8220;javaq程使用的最大内存的数?/a>”Qblog文章里面从JVM源码U别分析了Java的线E支持能力,面(f)JVM性能调优问题的网友可以认真阅M下?/p>
]]>
javaeye的hax最q在他的blog上进行了一场关于如何写css的讨论,其中反思和讨论了一些关于基于标准或trickq行设计的选择问题Q这个问题也?a target="_blank">David Heinemeier Hansson对于XHTML/CSS/Javascript标准q行RIA开发话?/a>的一个g展。我们可以从中思考如何在不完的技术中选择一条相对完的技术\U?
讨论的v因是淘宝|的UED团队成员D늎爷在他的blog上发表了一?a target="_blank">关于淘宝|页面设计上的小技巧(TrickQ?/a>的介l,q个技巧是Z让一些条目之间的分隔U完全用css生成Q不使用多余的classQ段王爷q对比了其它三种常见实现Ҏ(gu)。实现方法如下:(x)
从很久很久以前开始,cȝ间的横线无非都只有三U?br /> 1、背景图
在a标签讄一个padding 用宽1px高不{的背景图来position到右侧?br /> ~点Q最后一个还是要用class来隐藏掉背景?br /> 2、符?br /> 在每个a标签之间?#8220;|”W号来填充?br /> ~点Qhtml文g变大Q文件维护变得很ȝQ而且在html中毫无意义?br /> 3、a标签右侧的boder?br /> 同背景图一P只不q用border-right来代ѝ缺点也同上?br />
其实现有Q淘宝的实现方式Q是利用ul的overflow:hidden 再将li的margin-left:-1px的做法做出来的。这L(fng)做法可以同旉免以上的~点了?br />
上面提到的用border的传l方式需要在W一或者最后一个元素上面添加class来隐藏borderQRealazy也在他的blog中给Z一U不错的解决Ҏ(gu)Q他推荐q样做:(x)
D目间的竖线Q我们往往通过border或者background来实现。特D需求是Q第一左Ҏ(gu)竖线或最后一右Ҏ(gu)竖线。按照一般的~程Ҏ(gu)Q控制第一要比控制最后一容易得多?br />
区分W一的q有一个好处是QCSS有一?first-child的伪元素Qpseudo elementQ可以让我们轻而易丄选择W一个子元素。遗憄是,当前全球占有率最高的览器,IE6Qƈ不支持这个伪元素。我们可以手工给W一个元素加上class然后再定义它。等ie6淘汰之时Q就可以攑ֿ?:first-child了,相权衡的话,我觉得给W一加上class="first"也不׃ؓ(f)实用M做法?
Realazy提出的方案的思\是用基于标准的css选择器(selectorQ,q种Ҏ(gu)的好处是可以实现完美的内容与表现分离。但是现实的问题是ƈ非所有的览器都Z标准实现Q这也正是基于标准的RIA开发面对的最大问题,其以CSS和Javascript问题最大。javaeye的hax在他的blog中提Z自己对于q个Trick的不同意见:(x)
因ؓ(f)我觉得这个方法一点也不好。很单的一个理由:(x)q只是一个trickQ只适合q特D情况,假设你要换用“-”来分割呢Q作为插入分割符h_(d)真正合理使用css的,我给一个例子:(x)
li ~ li:before { content:'-'; margin:0.25em; }优点Q含义非常清晎ͼl护性极高。你可以换Q何的分隔字符Q可以设定字体,可以讑֮颜色、大等样式Q甚臛_以换用图片作为分隔?/p> 好了Q下面说~点。唯一的缺点:(x)IE不支持?/strong>
haxl出的方案在IE中无法用,其实对于大部分网站来说这q当于l大多数用户都无法看到这U表玎ͼq就意味着p|。淘宝UED的小马提?#8220;实用W一”Q从q种观点上说hax的方案就是不实用的。但是hax提出可以使用Dean Edwards的IE7 Javascript?/a>Q?/p>
IE7q个库动态的实现了很多IE原本不支持的伪类QPseudo ClassesQ,让完全基于标准的css选择器(使用伪类Q成为可能。随后,hax在他的另外一blog“面向未来的CSS实践”中作了如下设惻I(x) hax提出的这U方式是比较Ȁq的Q他q在“面向未来的CSS实践”中进一步的描述了通过脚本修正的方式解决IE不支持标准伪cd多class问题的设惻I他的核心x是让CSS的开发可以遵循标准,减少Z优雅退化(graceful degradationQ而向最低支持(览器)兼容造成的表达方式限制。但是hax自己也提Zq种思\面(f)的尴,它D了table布局的实用性h(hun)gؓ(f)例:(x) “遵@标准的hzd比不遵@的h更篏”q句话说Z很多坚持Z标准q行CSS设计的开发h员的心声Q这其实是实用性和坚持标准之间的一些交换,现实世界中两个方面如何^衡正是广大XHTML/CSS/Javascript开发者需要认真思考的Q关键的问题Q还是目的要明确。盲目的遵@标准Q例如很多开发者着q于使用div布局代替tableQ但是却没有明确的目标就?x)迷失,haxq样评h(hun)Q?/p>
table布局 其他css样式 = 清晰的布局意图和内容的混合?/p>
div容器 css样式 = 内容样式分离Q但是从css代码中很隄出布局意图 我们应该看到QCSS的意图是表现分R从设计的角度就是实现语义化的htmll构Q让html/xhtml量只表辄_的数据l构。但是此时css里面的布局意图是比较难以被记录的(难以被理解就难以l护Q难以重构)Q有其在充斥了大量Trick的情况下Q这正是q大E序?设计人员需要解决的Q我们是否应该通过不断地重构来扑ֈq个矛盾的^衡点呢?Ƣ迎大家讨论。最后附上淘宝UED团队的小马ȝ的淘宝CSS~程原则Q?/p>
IE7是一个可以让IE像标准浏览器一样工作的Javascript库。它修正了很多CSS问题Q让PNG在IE5和IE6下正常工作?
我推崇一U面向未来的CSS实践?strong>卛_胆采用CSS2.1甚至部分CSS3的特性?/strong>因ؓ(f)l大多数Ҏ(gu),Firefox、Opera?Safari{都已经很好的支持了。MSIE7也改q了许多Q将来IE也无疑终I会(x)完全支持CSS2.1。对于目前的IEQ除了graceful degradation的方式(实际上整个内Ҏ(gu)式分ȝ原则和良好的CSS设计可以保q点Q比如淘宝以前的“怽”所体现的)Q可以考虑通过特定手段来patch之?br />
在这点上Q我必须_(d)我原来也是一直坚持只用ie6的selector的。是什么改变了我?是Dean Edwards的IE7Q它的出C仅在于实践h(hun)值——即提供了一个对于IE的补丁,让开发者可以直接写C(j)SS2甚至CSS3?我认为出现这栯刺的情况Q即遵@标准的hzd比不遵@的h更篏Q是很有问题的?/strong>q种矛盾在我w上存在着Q?001q的时候我在某bbs上发了个_(d)大数 table布局之罪Q但是过了几天我又跑上去说table布局在某U情况下也可以用用?dlee同志貌似到现在也跟我当时一栗如果你实认ؓ(f)Qtable布局从实用主义角度无法被完全否定Q那DHH同志采用实用M的角度来力挺 html/css/js׃有点心虚Q那个标题也显得带点Q性味?#8230;…
从实用主义角度说Q}慎的table布局也许更简单,因ؓ(f)它更好的映射Cgrid模型上。如果你转用div/spanQ?strong>标签是清CQ但是css是qQ?/strong>q些属性(css属性)是分散的Qcss代码无法反映整体Q无法记录你的grid 布局意图Q这是ؓ(f)什么我们经常说我有一个css trick的原因,它是trick而已Q是你达到最l目的的手段Q但是你的目的,你的意图Q没有好好加入文档的话,那维护v来恐怕也不见得轻松?/strong>
能符合这两个条g的最z的写法Q就是我们的目标?
]]>
思考一下,其实是当下行的mush up。你混合一下你的长处,也许你就扑ֈ了你真正的长处,你的职业?br>同时James又推荐了Stay HungryQStay FoolishQ他说他37岁了依然觉得那是很好的文章。我很早之前也推荐过q篇文章Q大家l看看?/p>