- 浏览: 305830 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
完善自我:
支持一下!
揭秘IT人才特点:中美印日四国程序员比较 -
悲剧了:
好文,看玩thinking in java的提到的异常处理,看 ...
高效的Java异常处理框架(转) -
yin_bp:
开源框架bbossgroups页支持组件异步方法调用哦,详情请 ...
Spring 3中异步方法调用 -
flyjava:
sun的悲哀
Apache怒了,威胁说要离开JCP
性能与可伸缩性常常决定企业应用的成败,尤其在电信、金融、政府三大行业里,性能成了客户选择中间件平台的决定性因素。遇到性能问题的应用比比皆是,然而往往是等发现性能问题的时候,已经太迟。一个知名的电信合作伙伴的开发人员告诉我:“我们在性能方面,曾经有过血的代价。。。。”
有人说,性能问题是永恒的,看来一点也不夸张。作为中间件平台的提供商,尤其需要对性能有更深刻的理解与认识。那么性能的概念是什么?性能需求需要从哪些方面来描述?影响性能的关键因素又有哪些呢?
一、对性能的误区
凡是做企业级应用开发的人,很少没有遇到过性能问题的。而很多J2EE应用又都是在系统出了性能问题以后,才没日没夜的绞尽脑汁,从盘根错节的代码或者日志中查找原因。开发人员对性能问题存在以下误区:
1、 性能问题可以通过代码优化来解决
代码优化可以解决局部性能问题,而不能解决整个应用的性能问题。治标而不能治本。
2、 性能问题可以通过增加硬件或者用更快的硬件来解决
二、性能和可伸缩性的概念
需要区分三个概念:性能(Performance)、吞吐量(Throughout )、可伸缩性(Scalability)
1、 性能与响应时间
性能是指执行典型操作所花的时间。性能一般用“响应时间”来衡量,比如“用户成功登录的时间不能超过6秒”。尤其是对于Web应用,如果一些常用的操作很慢,用户就会有可能放弃使用你的应用。
响应时间是指处理一个请求所花的时间(如一个Http Request)。通常,“平均响应时间”更加重要。
2、 吞吐量
“吞吐量”指系统或组件在指定的时间内,所能执行的工作数。
n 每秒点击数:对于Web应用,一般用“每秒点击数”来衡量吞吐量。
n 每秒交易数:对于交易型应用,一般“每秒交易数”来衡量吞吐量。
3、 可伸缩性
“可伸缩性”是指随着并发用户数的增加,系统的处理能力。伸缩性包括“水平伸缩”和“垂直伸缩”。水平伸缩指通过增加服务器的数量(如集群)来提高吞吐量,垂直伸缩指在同一个服务器中运行多个Server。
性能和可伸缩性往往是互相对立的。比如一个应用在单服务器中是高性能的,但是如果在集群部署的模式下,由于要维护大量的Session复制,有可能导致性能不好。但是在单个服务器中性能都不好的应用,在集群部署下性能也不会好。
三、性能和可伸缩性的需求
在需求中设置清晰的性能目标,而不是简单的说“系统需要高性能和高可伸缩性”:
1、 吞吐量和响应时间的指标
2、 哪些操作必须很快,哪些操作是可以慢一点的
不是所有用例都要求高性能的,因此需要区分不同用例的性能优先级
3、 并发用户数或事务数
4、 软件和硬件配置条件
如在什么数据库、应用服务器,以及相应的硬件CPU、内存等配置。否则就无法验证这些目标是否达到要求。
5、 是否需要集群运行,如果现在不需要,将来是否需要
四、影响性能的因素——体系结构是关键
影响性能的关键因素在于体系结构。优化单个方法的实现对性能提升起不了太大的作用。如果整个架构中充斥着不必要的数据访问,大量的Java对象与XML文档之间的转换,或者执行大量的远程调用操作,代码级的优化于事无补。
对于性能和可伸缩性,最重要的架构选择包括三个方面:一是应用是否是分布式的,二是如果需要集群那么该如何集群,三是持久数据的访问方法。另外还有表现层以及XML等技术的使用也会对性能造成一定的影响。
1、 对象分布、集群与农场
企业级应用一般都不可能只在一台服务器中运行的,这就涉及到分布式的问题。对于水平伸缩,一般有对象分布、集群两种选择。
l 对象分布
对象分布是指将业务逻辑部署在远程服务器(如EJB或CORBA),而客户端则通过远程调用(如EJB或CORBA接口)的方式来处理系统的业务逻辑。这种方式一般是通过RMI/IIOP 、XML或者WebService调用。
l 集群
集群则是指在每个节点中都部署相同的系统或组件(包括从Web层到数据访问层)。集群模式下,路由分发往往在请求到达每个节点之前就已经处理好了,而不会在每个组件之间进行路由选择。
l “农场”
在集群模式下,一般都需要对每个用户的Session进行复制,以保持服务器之间完全对等。农场是一种特殊的集群模式,那就是每个节点之间是完全独立的,不需要进行Session以及缓存的复制。
a) 对象分布存在的问题
对象分布对性能有着极大的影响。由于远程调用需要进行对象的序列化和反序列化操作,加上网络传输的开销,因此远程调用是非常慢的。
b) 集群对性能的影响
集群的最大困难在于复制(如Session和Data Cache复制),也是集群技术中最大的挑战与限制。而且,非农场模式的集群(水平伸缩)往往不会带来系统吞吐量的线性增长,如我们往往无法保证3台服务器集群情况下的吞吐量是单台服务器的3倍。另一方面,在集群中服务器本身的数量有时也是有限的。
2、 数据访问
系统访问持久化数据的方式也会对性能产生重要影响。比如:
a) 数据库结构的优化
b) 减少不必要的数据访问:频繁的数据库访问会导致性能大幅降低
c) 最少的数据更新次数:减少更新数据库的次数
d) 高效的数据更新:每次都只更新改动过得数据
e) 缓存的使用:使用高效的数据缓存
3、 表现层
表现层的技术使用不当也会导致系统性能低下,比如:
a) 过渡使用自定义Tag
b) 渲染JSP页面比直接访问数据库检索数据更耗时
由于展现层很易影响性能,因此单独对展现层进行性能测试是非常重要的。
4、 XML的使用
XML技术在异构系统间进行数据交换是一种很好的技术。现如今,在J2EE应用内部大量使用XML来进行通信,已经象感冒一样流行。 XML和对象之间的相互转换是非常耗时的,虽然XML Data Binding可以减少开销,但无法消除这种耗时。
原文:http://hi.baidu.com/langwx521/blog/item/3cb4c3fc5e2f8b83b901a0a8.html
发表评论
-
Qi4j和NoSql运动
2010-11-16 23:00 156524日一篇Qi4j and the NoSQL ... -
Threaded vs Evented Servers
2010-11-16 22:48 899Threaded vs Evented Servers ... -
BASE: An Acid Alternative
2010-11-16 21:13 936In partitioned databases, tra ... -
eBay 的Scalability最佳实践
2010-11-16 20:52 884用什么来衡量一天没 ... -
Scalability Best Practices: Lessons from eBay
2010-11-16 20:45 820At eBay, one of the primary a ... -
SmugMug 的架构介绍
2010-11-16 20:36 850本文介绍的 SmugMug 是一家提供付费图片 ... -
来自淘宝的架构经验
2010-11-16 18:07 1204日前参加了一场淘宝网 架构师黄裳带来的技术分享,在最后他 ... -
可伸缩性最佳实战
2010-11-16 17:50 560异步 同步调用使得组件和组件之间紧密耦合起来,这样就使得 ... -
伸缩性和可用性反模式
2010-11-16 17:48 686这篇文章讲了伸缩性 和可用性方面的反模式,也按照自己的理 ... -
使用qi4j实现DCI架构
2010-11-16 17:24 2888我曾经DCI架构是什么? 在一文中提到Qi4j框架实现DCI ... -
DCI架构是什么?
2010-11-16 17:07 1991DCI是数据Data 场景Context 交互Interact ... -
纵向扩容 vs. 横向扩容
2010-11-02 09:58 5385该文原版著作权属于Malc ... -
云计算在电信应用中的思考
2010-11-01 17:59 908云计算是在网格(Grid)、效用(Utility)和 ... -
真正的线性可伸缩性需要新的模式和中间件架构吗?
2010-11-01 17:27 925在构建线性可收缩应用 ... -
构建的可伸缩性和达到的性能
2010-11-01 17:19 948实现伸缩性和性能调优的经验所保有的价值容易被低估。两者都是“晚 ... -
可伸缩性的最差实践
2010-11-01 17:02 724引言 在扩展大量大型 ... -
可伸缩性,美妙的可伸缩性
2010-11-01 16:37 1391可伸缩性带来的好处 ... -
大型门户网站架构设计的可伸缩性
2010-11-01 16:34 863我们知道,对于一个大型门户网站来说,可伸缩性是非常重要的,怎么 ... -
可伸缩性设计
2010-11-01 16:27 970好的设计是实现高度可 ... -
为性能和可伸缩性做架构和设计上的Review
2010-11-01 16:05 844部署和体系结构 ...
相关推荐
资源名称:数据访问宝典-实现最优性能可伸缩性的数据库应用程序内容简介:在当今的企业数据库应用程序中,性能和可伸缩性比过去任何时候更为关键,传统的数据库调整对于解决可能在这些应用程序中遇到的性能问题有些...
VB.NET可伸缩性技术手册VB.NET可伸缩性技术手册VB.NET可伸缩性技术手册VB.NET可伸缩性技术手册VB.NET可伸缩性技术手册VB.NET可伸缩性技术手册VB.NET可伸缩性技术手册VB.NET可伸缩性技术手册VB.NET可伸缩性技术手册VB...
分布式系统可伸缩性研究综述_陈斌.pdf
本指南提供了有关 Microsoft Exchange Server 2003 性能和可伸缩性的信息。您将了解影响性能的多种因素,它还提供了有关如何优化 Exchange 2003 环境的建议。最后,本指南回顾了 Exchange 如何在不同的用户负载下...
可以帮助企业降低计算成本,提高性能、可伸缩性、可用性和安全性
本书包含:构建和开发应用程序,以便它们易于扩展。 了解不同的缩放和分区选项以及组合。...学习通常被忽略的可扩展性和响应性概念。 有效平衡可扩展性,性能,响应能力和可用性,同时最大限度地减少停机时间。
Cardinal:一个模块化、移动优先的CSS框架专注于性能和可伸缩性
高性能服务器网络可伸缩性.doc
提供有关在整个.NET应用程序生命周期中管理性能和可伸缩性的端到端指南,以降低风险并降低总体拥有成本。
大数据-算法-多核环境下面向数据并行编程模型的性能和可伸缩性研究.pdf
高性能服务器网络可伸缩性.doc
本文将讲述几项技术,这些技术可用于提高基于 SQL Server的应用程序的性能或改善其可伸缩性。将仔细说明 LEFT JOIN、CROSS JOIN 的使用以及IDENTITY 值的检索。调整您的数据库及其查询需要占用时间、进行分析,还...
本代码实现了对MPEG2 SNR可伸缩性编码,可以作为理解SNR可伸缩性编码的入门。
构建一个可伸缩性的容器平台的挑战与机遇
很不错的几个windows可可伸缩性范例,让你受益匪浅!
nanomsg - 一个简单的高性能实现多个“可伸缩性协议”
全书共分6章和2个附录,讲述了可伸缩性的规划、数据层、中间层、表示层,以及可伸缩性的测量等内容。 本书内容切合实际,适合希望了解如何开发可伸缩的企业级的应用程序的VB.NET程序员阅读。 本书英文原名为:...
全书共分6章和2个附录,讲述了可伸缩性的规划、数据层、中间层、表示层,以及可伸缩性的测量等内容。 本书内容切合实际,适合希望了解如何开发可伸缩的企业级的应用程序的VB.NET程序员阅读。 本书英文原名为:...
基于H264的精细可伸缩性视频编码研究基于H264的精细可伸缩性视频编码研究
在许多应用程序中,提供较高的可用性和较高的读取可伸缩性是十分重要的;而复制便可作为提供这两方面的性能的解决方案的关键部分。对于某些应用程序而言,其目标可能是通过复制来提高可用性或可伸缩性。