`

性能与可伸缩性的概念及其关键影响因素

阅读更多

 

    性能与可伸缩性常常决定企业应用的成败,尤其在电信、金融、政府三大行业里,性能成了客户选择中间件平台的决定性因素。遇到性能问题的应用比比皆是,然而往往是等发现性能问题的时候,已经太迟。一个知名的电信合作伙伴的开发人员告诉我:“我们在性能方面,曾经有过血的代价。。。。”

    有人说,性能问题是永恒的,看来一点也不夸张。作为中间件平台的提供商,尤其需要对性能有更深刻的理解与认识。那么性能的概念是什么?性能需求需要从哪些方面来描述?影响性能的关键因素又有哪些呢?

   一、对性能的误区

凡是做企业级应用开发的人,很少没有遇到过性能问题的。而很多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

分享到:
评论

相关推荐

    分布式系统可伸缩性研究综述_陈斌.pdf

    可伸缩性作为衡量系统在增长的工作负载或资源变化下能否保持性能和功能稳定的关键指标,它直接关系到系统的可用性和扩展性,是分布式系统设计中不可或缺的考量因素。陈斌等人的研究综述对分布式系统可伸缩性的关键...

    分布式系统可伸缩性研究综述.pdf

    可伸缩性是衡量分布式系统是否能随着需求和资源的变化而持续满足性能需求的能力。在计算机科学中,特别是在分布式系统领域,可伸缩性的概念至关重要。由于业务需求和技术环境的变化,分布式系统必须能够扩展其处理...

    利用USL预测MySQL数据库可伸缩性.pptx

    总结来说,利用USL预测MySQL数据库的可伸缩性是解决性能瓶颈和优化数据库设计的有效手段。通过对并发性、竞争和一致性的量化分析,我们可以更好地理解和改进系统的扩展能力,确保数据库在面临高负载时仍能保持高效...

    面向性能的设计与开发

    系统性能已成为影响业务效率的关键因素之一。Oracle公司结合自身多年的实践经验,提出了一套面向性能的设计与开发方法论。该方法论旨在通过前期的设计与规划来优化系统性能,从而避免后期因资源冲突导致的性能瓶颈。...

    开发者最佳实践日-高可用和可伸缩架构

    通过以上分析,我们可以看到,无论是提高系统的高可用性还是增强其可伸缩性,都需要从多个层面出发,综合考虑各种因素和技术方案。此外,实践中还需要不断地测试和优化,以确保系统能够在各种场景下稳定运行。

    行业文档-设计装置-可伸缩书夹.zip

    现代硬件设计趋势倾向于模块化,使得组件可以轻松更换和升级,增强设备的可伸缩性。 3. **软件设计**:在软件层面,可伸缩书夹可能是一个应用,允许用户按需添加、组织和访问内容。设计时需要考虑用户体验、数据...

    java性能优化

    性能通常包括五个方面:运算性能、内存分配效率、启动时间、程序可伸缩性和用户感知性能。不同的应用场景可能对这些方面有不同的侧重,例如,服务器端应用可能更关注内存管理和可伸缩性,而桌面应用则可能更注重启动...

    分布式系统概念与设计 原书第5版

    其次,分布式系统的特性,如透明性、可伸缩性、容错性和高性能,是设计分布式系统时需重点考虑的因素。透明性使用户感觉不到系统的分布式特性,例如位置透明性允许用户不管数据实际存放在何处都能访问。可伸缩性是指...

    network programming scalibility

    ### 网络编程中的可伸缩性 #### 引言 在当今互联网时代,...通过采用合适的技术和策略,可以有效地解决可伸缩性带来的挑战,确保Web应用和服务能够持续稳定地运行,即使面对大规模的用户量也能保持良好的性能表现。

    9质量属性概念-课程内容.rar

    设计时应考虑可伸缩性、模块化和组件化,以便于添加新功能或服务。 6. **兼容性**:软件的兼容性涉及它与其他系统、硬件、软件平台的协同工作能力。兼容性测试和适配性设计是确保兼容性的关键步骤。 7. **可移植性...

    软件性能工程1.ppt

    响应性是系统实现其响应时间和吞吐量目标的能力,而可伸缩性是系统在对其软件功能的要求增加的情况下,能够继续实现响应时间或吞吐量目标的能力。 软件性能工程的工作过程包括分析软件结构和设计、建立 SPE 模型、...

    性能测试基础

    2. **可伸缩性:** 系统在需求增加时仍然能够保持良好的性能。 3. **可靠性:** 在高并发情况下系统能够持续稳定运行。 **性能误区:** - 认为只有等到代码编写完成后才能进行性能测试。 - 忽视性能模型和性能估算...

    大规模网站架构介绍.pptx

    首先,语言的选择并不是决定网站可伸缩性的关键因素。尽管PHP在Facebook和Yahoo上被广泛使用,Java在淘宝和网易等平台中占主导地位,Python在Google中有重要应用,而.NET则支撑了MySpace,但这些只是技术栈的示例。...

    高性能MySQL(第3版)和MySQ必知必会

    在复制与备份章节中,作者讲解了如何通过主从复制来提高系统的可伸缩性和容错性,并详细介绍了备份的策略和方法。 为了持续监控和提升MySQL数据库性能,本书还探讨了性能监控工具和方法,帮助数据库管理员及时发现...

    架构风格和基于网络的软件架构设计

    软件架构设计是信息技术领域中的一个重要议题,它不仅影响软件系统的构建和维护,也影响整个系统的质量属性,如性能、可伸缩性和可靠性等。架构风格是指在软件架构设计中形成的一组共同的设计模式和解决方案,它们对...

    弹性容器的自动伸缩策略.pptx

    - **算法的选择**:选择合适的伸缩算法是实现高效伸缩的关键步骤之一,需要综合考虑应用程序特性、负载模式及性能要求等因素。 **容量规划** - **容器数量管理**:通过对当前及预期工作负载的准确预测,合理规划...

    电信设备-具有可伸缩天线的通信模块及用于该模块的方法.zip

    可伸缩天线的概念旨在解决传统固定尺寸天线在不同环境和应用中可能遇到的问题。传统的通信设备,如手机、卫星通讯器或无线路由器,通常受限于天线的物理尺寸,这可能影响到信号强度、覆盖范围和整体性能。可伸缩天线...

Global site tag (gtag.js) - Google Analytics