您的位置: 首页 > 技术文档 > 网络编程 > 深入研究高性能的 CFMX 应用 I
ASP.NET 中数据库操作初步 回到列表 Dataset初步
 深入研究高性能的 CFMX 应用 I

作者:mjking 时间: 2003-11-07 文档类型:原创 来自:7yue.com

独家授权请勿转载

“ColdFusionMX开发的应用程序已经够强壮和快速了,但是我还想让它更好!”
---7yue.com

  1996年的Internet没有留给我什么印象,唯一的印记就是非常快速的访问速度,即使在28.8的小猫下也是如此。因为当时Internet信息全部都是Html代码,这一切直到Flash诞生后才有了转变。(玩笑)

  当时的Internet应用几乎没有复杂的后台交互,没有从后台数据库的数据查询的响应时间,没有中间件服务器,没有负载均衡。服务器如果有思想的话,它们一定很怀念当时身上所承受的压力。

“现在该死的人类开发的该死的应用系统,我们哥几个合伙抬一个都抬不动。”

---来自服务器甲的满腹牢骚

  言归正传,ColdFusion自诞生以来,就以稳定的性能和快速的响应速度获得了众多企业客户的青睐,移植到Java平台为核心的ColdFusionMX更是秉承了这个优点。但是,这个优点不能成为我们肆意开发ColdFusion应用的借口,精益求精应该是我们更高的追求。由于目前Internet应用的B/S(Browser/Server)的结构已经越来越多的应用在Intranet的企业内部,诸如OA,CRM,ERP,CMS等大规模的集成应用都要求应用具备高度的可靠性和高效的响应速度以及极少的出错率。所以,对于一个资深的(或者是合格的)开发人员而言,“效率不行我们增加服务器”这种话是自身不负责任和不够专业的表现。

  高度可靠性按照我们ColdFusion高级工程BenForta的话来说就是要保证你的应用在运行过程中有99.99%的时间可以处理来自外部的响应,包括合理的和不合理的。合理的给予响应,不合理的给予拒绝或者错误信息掷出。

  为什么上面的段落要提到99.99%,而不是99.9%或者是99%。这个数字是有说法的。首先,这个指标是针对最终用户而言的,而不是针对服务器。单一的服务器运行一个大规模的电子商务应用或者高负载的交互应用站点是根本无法达到99.99%的时间正常运行的。对于最终用户而言,他浏览你的站点,使用你的程序,采纳你的服务,总是前台的商务逻辑在起作用,能够在99.99%的时间内对最终用户保持商务逻辑的有效性,就必须使用集群(Cluster)的操作方式,只有这样,才能保证在一台服务器出错(术语是DownTime)的时候,应用逻辑可以在最终用户没有察觉的情况下顺利转移到另一台服务器运行,这种情况同样也属于正常运行。那么正常运行时间的百分比是这样算出来的:

最终用户端的商务逻辑正确运行时间/(7*24*365)=正常运行百分比

  下表是一个正常运行时间和错误运行的时间对比表格(表格数据来源于Macromedia.Inc):

正常运行百分比 每年的出错时间
99.999 5分钟
99.99 53分钟
99.9 8小时45分钟
99 87小时36分钟

  各位应该已经看到99.99%的正常运行时间和99%的差距了。大多数站点Crash崩溃的原因就是大量的负荷和不正确的性能调试。

  既然站点崩溃的原因来自于服务器的超负荷,我们如何知道自己站点运行的负荷状况呢?在这里,站长通过2种方案来进行服务器的负荷流量的评估。第一种方案,叫做Simulating Stress Test,模拟压力测试。这方面需要开发者做到2个准备。首先是有一个测试工具,比如LoadRunner(来自于www.mercuryinteratctive.com)或者是微软免费的Web application stress,站长推荐后者,第一是免费,第二是测试的过程比较简单,不需要太高的专业水平。第二种方案,就是Actual Stress Test,真实压力测试,这方面也可一通过一些检测工具来达到评估结果。但是对于企业而言,站点性能的监测更胜于评估,因为模拟的压力测试总是和真实情况有出入,所以,真实环境的Web Trends对于站点的分析,更加重要。

  下面是使用上述工具进行压力测试时,我们需要注意的一些问题,这些问题的结果对于了解站点性能有很大的帮助:

  • 每小时在线用户数量或者Session数
  • 平均每小时的在线用户数量或者Session数
  • 不同小时的在线用户峰值比较(网站什么时候浏览人最多?)
  • 站点中最常用的导航链接是什么?
  • 在做什么操作时,服务器CPU操作时间最长?(数据查询还是什么?)
  • 最常被访问的页面是哪些?
  • Session在网站的平均停留时间是多长?(你的网站可用性是否很高,用户很喜欢?)
  • 访问你的用户都是一个什么样的带宽接入条件?(可以通过在线投票来实现)
  • 网站正常运行期间,CPU的使用率有多高?

  一个个人站点当然不强调这些(但是也不表示不需要进行这些评估,蓝色的站点访问量很大,对于性能的评估可能要求更高。)站长在模拟端推荐使用MS的Web Stress这个免费工具,对于有条件的企业商务应用站点服务器,推荐架设一个Web Trends来进行上述问题结果的记录和跟踪。Web Trends是一个商业的工具,功能强大,通过分析Web Server的日志来统计完成全面的站点分析,不了解的朋友可能仅仅认为它是一个网站访问量的记录工具,其实不然。好了,不替Web Trends做广告了,也不多说Stress工具的测试Script怎么写,因为这个可能又涉及到了另外一个职业了。在研究高可靠性的本篇文章中,我仅仅告诉大家评估网站可靠性需要注意到的问题。除了进行上述一系列问题的真实评测,我们还应该通过编程和使用第三方工具的结合方法,来测试动态交互性的可靠程度(如果你的企业应用有交互的话)。比如,用户登录注册的频率、商务网站购买东西的数据查询频率,购物车的状态评测等等。这就需要我们来测试一些交互性的参数。我参考了Macromedia的文档和多方面的书籍,总结了一下需要评测的动态交互参数:

  • 网站最大的在线人数和application所容纳的最大的Session数
  • Session的长度,我们需要通过Web Trends的结果来进行编程控制,一个论坛和一个B2C网站的Session设定自然不同。
  • 完成一个测试需要的时间,测试的时间越长,说明你的应用在某个环节占用大量的时间。
  • 完成一个节点测试的最大测试数,比如,能最多多少人同时进行数据库查询?
  • 了解了用户的宽待接入条件后,同一个节点对于不同用户的响应时间是多少。56k的人完成数据查询结果的显示和宽带肯定不一样,这点论坛表现的最明显。
  • 网站那些动态操作让哪些宽带接入的用户最不能忍受?这个是可以量化的哦。

  知道了需要注意的问题和需要测试的参数后,是进行负荷测试的时候了。测试的时候,最好把应用的整个Package进行一下备份,然后到没有公开的产品服务器或者测试服务器开始测试。测试的时候,我们最好找一个和产品服务器配置一致的服务器去测试,产品服务器的负荷测试,不是Beta的话,各位还是不要这样做了。然后,我们就可以使用MS的Web Stress开始测试了。另外,站长诚实的警告,不要在最终发布的产品服务器上做压力测试,如果让客户知道了,吃不了兜着走是有可能出现的。

  如果在测试环节,很快就出现了CPU占用率居高不下,内存占用异常,经常报错的情况,推荐各位从以下问题着手:

  1. 看看应用的出错环节是否有死循环等逻辑错误
  2. 检查应用部署后所使用的数据连接驱动是否有误或者未更新
  3. 查看数据库查询或者其他语句是否有异常
  4. 查看Macromedia站点的Release Notes的问题列表对应
  5. 中断测试,运行响应时间最长的页面并验证结果。
  6. 检查Application.cfm  

  站长会在后续教程中告诉大家如何监测CF应用的性能,如何监测Web Server的性能,验证瓶颈以及调整优化的方法,此乃后话。接着说本篇教程的东西。

  构造高可靠性的ColdFusion应用不是通过一个压力测试就能解决问题的,压力测试只能帮助你发现问题,但是解决问题,需要通过以下六个必须采纳的解决方案。(注,这六个解决方案来自于BenForta的观点)

  1. 运行一个负载均衡的Web Server(Load-Balanced Web-Server cluster ) ,保证服务器当机期间的可靠性。
  2. 选择一个尽可能知名的网络服务商。
  3. 安装防火墙保证不被过多的非法用户访问和避免过多的不可识别的请求。
  4. 在数据库上使用RAID5。
  5. 计算每一个程度上的商业逻辑和成本投入所带来的运行风险。比如,你要开第二个亚马逊,你现估计一下自己的钱包和商业模式,看看站点能不能正常运行。(哈哈,Benforta太逗了,连掂量自己有多少钱这个都算做可靠性的方案)
  6. 选择一个有容错机制的系统来减少应用站点的错误。

下面我们分别从这六个方面来一一研究一下其中的细节。

  运行一个Web服务器的负载均衡的集群是最好的解决方法。通过这种方式,可以把对于服务器的最大流量的负担分摊到每一台集群里的服务器上去,这样,就可以很容易的避免峰值太高,导致单服务器Crash。而且,很多错误在一台上出现,可以将事务转移到另外一台服务器上去,并且不对最终用户呈现这些错误信息。做均衡负载的方式只有三种:纯软件、纯硬件和软硬件搭配。

  ColdFusionMX的软件均衡负载只有企业版支持这个功能,这个解决方案包叫做ClusterCATs。ClusterCATs的详细操作我们会在以后详细研究。这里只说明一下它的工作原理。类似于硬件,ClusterCATs用软件做为检测集群服务器运行的中心,每一台在ColdFusion端设定的集群服务器的状态,都会在ClusterCATs上反映出来。同时ClusterCATs还会监控每台集群服务器的状态,发生的错误,是否当机等方面的参数。

  硬件服务器是有钱的企业所采用的方式,国内很少有个人站点采用硬件的负载均衡解决方案。这方面,我有幸见过有的有预算的客户所采用的方法。他们使用Cisco的LocalDirecor和F5's BigIP系列来做均衡负载。 硬件解决方案因为很贵,所以效率也非常高,性能非常好。不过,监测的附属工作可能我们自己就无法完成了,需要专业的技术人员。

  软硬件搭配就是使用ClusterCATs和硬件的负载均衡器进行搭配工作,完成服务器的负载均衡操作。这种方式最奢侈,也是上述两种方案的优势集中的体现。

  网络服务商的选择对于企业的应用的性能也是一个重要的环节。我们都知道,使用tracert命令,可以看到到达一个站点,会经过很多的Routers(路由),交换机以及网络上的大型服务器节点。一个好的服务商可以让你的站点在更快更高效更少经由路径的方式下被用户所访问到。举个小例子,我们打开cmd的命令窗口,分别tracert www.7yue.com和www.sina.com.cn,就可以看到不同的结果了。 如果中间的节点有很多环节,则会造成访问路径上的冗余,也有可能出现一个或多个节点无法跳转的问题,造成网站无法访问。

  安装防火墙已经成为专业服务器的必备解决方案。这里我们不研究防火墙有那些类型和那些品牌,以及它的使用方法,这个跟我探讨ColdFusionMX应用已经相去甚远。这篇文章,我们只探讨安装防火墙对于ColdFusionMX企业级站点的好处。Web服务器总是通过系统端口来传递信息,比如ColdFusionMX单独模式下的8500和普遍的80端口,FlashCom的1911管理端口和1935RTMP协议传输使用端口等等,都是通过端口来传递信息。没有防火墙的企业应用服务器总是被黑客攻击的一个主要原因是有一些端口上的漏洞被扫到,从而成为进入系统的某种方式。安装防火墙,设定允许通过消息的端口,是一个好的解决方案。它对于构建强壮可靠的ColdFusionMX站点而言,具备了以下2个优点:

  1. 降低网站接收外部请求信息时所面临的未知风险。
  2. 保护数据库和一些管理方式的应用。比如1433端口的SQL Server,3306端口的Mysql,1911端口的Flashcom管理 。

  如果我们架设硬件Pix之类的品牌防火墙在预算上有问题,那么我们可以选用RedHat Linux中的ipchains包来完成一个低成本的软件防火墙方案。

  如果各位预算够的话,服务器的硬盘一定要使用SCSI的RAID5配置的硬盘啊。速度快,数据传输稳定,而且自身传输数据带有CRC校验。一个大规模的ColdFusionMX企业应用最好采用这种数据存储方案。

  预估可以执行的成本以及所带来的风险。美国的Macromedia培训教材中总是反复强调这一点。我想这不是没有理由的。你有10元钱,确想要买一件esprit的上衣,显然,方案是不可行的。解决方法是,多增加一些钱来买相同的衣服,或者降低档次,去大排档买一件打折的大背心。这样可以避免没衣服穿的风险,:*)。但是服务器端的风险则是潜在的和爆发性的。如果你有足够的预算,还是推荐你使用好一些的服务器,不要用桌面PC。比如,超线程的多CPU,SCSI RAID5 Disk,多个分布式的Database。这些都会很大程度上降低企业应用的当机或者崩溃的风险。我指的是企业应用,如果你是个人站点,找个不错的服务商吧。

  最后就是为你的企业应用选择一个有容错机制的系统。这里的系统不是操作系统,电力供应可以称之为系统,静电保护方案也称之为保护系统。比如不见断的7*24*365的全天候UPS电源供给系统就是应该为企业用户所采用的方案之一。这方面有不熟悉的,多多查询一些资料,在部署企业应用之前,未雨绸缪,会带来很好的运行效果的。

  一个真正的可靠的ColdFusionMX企业级应用(其他的J2ee级别也一样)不能单纯的依靠程序端的优化来完成。硬件的保障,软件的支持,中间件服务器的性能,应用部署的方式,应用开发人员的素质,维护的方案,数据的备份,多方面的支持才能构造出一个完美的99.99%运行效率的ColdFusionMX应用。

  下一篇文章,我们详细探讨如何监控我们的应用性能,并给出详细的操作方案。感谢大家花时间看我的文章,也感谢Macromedia美国的一些工程师在业余交流时间给予我的帮助。

出处:7yue.com
责任编辑:蓝色

◎进入论坛网络编程版块参加讨论

相关文章 更多相关链接
深入研究高性能的 CFMX 应用 II
CFMX For F2K4 WebService
Macromedia ColdFusionMX 教程
CF MX 6.1 邮件相关新特性
ColdFusion MX 远程服务实例入门
作者文章 更多作者文章
cfquery简单的侦测效率方法
Flash的Debug程序AdminTool
ColdFusionMX技术课程第三期
ColdFusionMX技术课程第二期
ColdFusionMX技术课程第一期
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2