`
icewubin
  • 浏览: 34876 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于系统性能的思考

阅读更多
原始讨论贴:
http://www.iteye.com/post/992758

1.确实是有系统如你所说,几乎每步操做都需要极其严格的事务要求(严格序列化,说的通俗点叫做先后顺序必须要保证),单单说到这其实还是比较好实现的,一般的消息队列都能做到这个效果(脑子里先去除关系数据库的桎梏)。但是有些系统除了严格的序列化,还需要有非常高的实时性要求,假设包括外部因素总延时在5秒之内吧,上交所的股票交易系统就是这样的一个典型例子。

这样的系统不是不能做,但是代价太大,而且做法和通常的做法完全不一样,基本没有什么普遍性可言。他们的做法,说的简单点就是全内存操作,巨大的内存几乎加载了所有必要的实时数据。。。

2.第一个例子过于极端,说说第二种情况,绝大多数的银行吧,为了保证核心系统(实际是记账中心)的交易无差错,基本上所有的操作最终都集中在一台大型机上,跑数据库的(你不要幻想数据库集群能有效的提高性能,那是骗人的)。

3.从第二个例子中的数据库集群骗人事件,引出,如果你仔细看过 J2EE Without EJB的话,我记得好像有这么一句话,最好的分布式就是不要做分布式,感觉有点故弄玄虚,主要意思是这样的,一个通常的分布式集群的系统,其各个节点间的通讯(包括各种同步等的开销)代价往往会把集群带来的性能提升完全抵消掉,而且这样的集群基本没有线性的扩展性,集群的机器数量越多,集群中节点间的通讯的代价就越发恐怖。SNA的思想就是尽可能避免这种依赖于一种集中式集群的瓶颈。我个人还认为,节点间互相关系密切的集群系统的集成测试和运维、升级的复杂度是惊人的高的,成本巨大。

4.我再从另一个角度来说,第一点提到消息队列,恩,当你把一个消息队列的功能做得非常完善,或者说当你把一个缓存系统做得非常完善,例如加上一些类似于数据库的事务控制,那你可能就是在自己造一个分布式数据库了。Memcached DB算是一个这样的典型例子吧。这种缓存系统作为产品拿来用用还是比较靠谱的,自己造,而且要没有什么bug,这代价好像大了点吧。

5.如第四点所说,应该把缓存结构独立出来,单独考虑,例如你要用Memcached服务做缓存服务器,先和原本的J2EE的架构分离出来,JVM本身就是大小限制的,真要用Java做大的缓存框架,其实限制是很多的。所以不要迷信各级缓存,缓存结构不是你想像的那么简单的,不仅仅是开发和设计、调试和部署的成本都非常高。

6.做项目好像人生,不如意十有八九,预算成本和时间成本都是有限的,又要结构简单,又要效果好,往往得从业务出发,简单的例子我前面讲过,例如某些实时性要求不高的查询完全可以放弃实时性,可以用来获取简单的结构,和避开性能瓶颈。而复杂的例子,例如寻找外星人的项目,或者是Google的Map/Reduce,或者是林登实验室的Second Life的分布式计算结构,都是针对特殊的业务设计的。这些都不是传统的编程手段或技术能直接实现的。

7.拓展一下思路吧,第六点提到的简单例子“例如某些实时性要求不高的查询完全可以放弃实时性,可以用来获取简单的结构”,这个例子貌似简单,如果对查询的实时性要求不高,但是查询速度要求很高的话,楼主可以看看数据仓库的概念,不是要楼主学习数据仓库,而是拓展一下思路,思维不要局限在Java或者说JVM上,不要局限在事务型关系数据库存储上。

8.再做个引申,大量的事务型操作其实是很容易造成瓶颈的,但是有时候适当的一些假设,就能够部分的不使用事务,例如假设某张表中没有update和delete操作,只有insert操作,整个业务模块按照这个假设设计就能够很简单的实现,实际上现实世界中的财务流水帐在业务模型上就是这么设计的。。。

9.你有一定的项目经验,一般能根据需求估算出一个系统的各方面的负载有多大,然后再根据以往项目实施的经验,就能比较靠谱的掌握一个性能、成本的平衡点了。
分享到:
评论
2 楼 夜神月 2011-09-01  
                                   
1 楼 fjb1822001 2010-03-29  
    拜读

相关推荐

    电力拖动自动控制系统运动控制系统课后思考题习题答案

    电力拖动自动控制系统运动控制系统课后思考题习题答案 本资源为电力拖动自动控制系统运动控制系统课后思考题习题答案,涵盖了电力拖动自动控制系统运动控制系统的主要知识点,包括直流电动机的调速方法、直流PWM...

    航空订票系统性能方案(手写完整版)

    航空订票系统性能方案(手写完整版) 航空订票系统性能方案是 LR 自带航空订票系统的性能方案,旨在指导航空订票系统的测试。该方案对航空订票网站系统的性能测试进行了详细的规划和设计。 航空订票系统的主要功能...

    系统性能测试报告

    在进行系统性能测试时,通常会依据一套既定的框架来组织测试报告,这份XX系统的性能测试报告即是按照这样的框架来展开的。下面将基于报告内容,详细解释系统性能测试中需要考虑的关键点。 首先,测试目的清晰地指出...

    及偶极子对系统性能的影响

    在自动控制系统设计中,系统性能的评估至关重要,主要包括稳定性、动态性能和稳态性能三个方面。稳定性是控制系统的基础,它衡量的是系统在受到扰动后能否自行恢复到平衡状态。一个稳定的系统,其闭环特征方程的所有...

    系统性能测试报告模板

    - **测试结果:** 在长时间运行后的系统性能指标。 - **结果分析:** 分析稳定性测试的结果,评估系统长期运行下的可靠性和性能下降情况。 **5.4 EOD 批处理测试** - **日常批处理:** 日常需要进行的批量处理任务...

    性能测试-系统吞吐量及用户并发量

    ### 性能测试中的核心知识点解析 #### 一、系统吞吐量的理解 - **定义**: 系统吞吐量是指单位时间内系统...这些知识点对于理解和优化系统的性能至关重要,有助于开发者和测试人员更好地评估和提升系统的性能表现。

    电力拖动自动控制系统第4版_思考题答案

    电力拖动自动控制系统是...总的来说,电力拖动自动控制系统的分析和设计涉及电动机的电气特性、控制策略、反馈机制等多个方面,需要深入理解电动机的工作原理以及自动控制理论,以便有效地实现系统的调速和性能优化。

    web应用系统性能测试

    ### Web应用系统性能测试 #### 一、引言与背景 随着互联网技术的快速发展和企业信息化建设的深入,Web应用已成为现代企业业务运作的核心部分。然而,随着Web应用的广泛使用,用户数量激增和数据量剧增的问题也日益...

    软件系统性能的常见指标.doc

    软件系统性能的常见指标 软件系统性能的常见指标是衡量软件系统性能的重要指标,它们可以帮助我们了解软件系统的运行状况,查找性能瓶颈,并优化系统性能。下面是常见的软件系统性能指标: 1. 响应时间(Response ...

    Go-《关于Go性能优化的思考》概述了编写高性能Go代码的最佳实践

    《关于Go性能优化的思考》这本书提供了许多关于如何编写高效Go代码的策略和技巧。本文将深入探讨这些最佳实践,帮助开发者提升程序性能。 1. **内存管理与垃圾回收** Go语言采用自动垃圾回收机制,但在某些场景下...

    从啤酒游戏看系统思考.pptx

    【啤酒游戏】是一种模拟供应链管理的互动教学工具,旨在揭示系统思考的重要性。在这个游戏中,参与者分别扮演制造商、批发商和零售商的角色,通过订单和交货进行互动,模拟真实市场环境中的供求关系。游戏的设计旨在...

    经典性能测试用例参考模板

    - **结果评估标准**:测试结果需满足预设的系统性能需求。 **结果评估**: 1. **响应时间**:通过测试收集的数据,分析平均响应时间是否在10秒以内,以验证系统在高并发下的处理速度。 2. **资源利用率**:监控...

    成功的Web应用系统性能测试

    【Web应用系统性能测试】是确保系统稳定性和用户体验的关键步骤。在进行性能测试时,我们需要考虑多种因素,包括但不限于Web服务器配置、FTP服务、日志服务器以及邮件中继服务等。性能测试的目标是评估系统在高负载...

    淘宝性能测试白皮书V1.0

    性能测试模型,如PV计算模型、PV->TPS转换模型、TPS波动模型以及共享中心性能测试模型和前端页面性能测试模型,都是为了更准确地模拟和预测系统性能而构建的。这些模型有助于测试人员深入理解系统行为,并以此为基础...

    深度:国产嵌入式操作系统发展思考.docx

    LiteOS 是一个轻量级的嵌入式操作系统,具有低功耗、低成本和高性能的特点。 二、国产嵌入式操作系统的挑战 国产嵌入式操作系统面临着许多挑战,例如技术门槛高、人才缺乏、市场竞争激烈等。同时,国产嵌入式操作...

    系统工程 思考与练习题.docx

    系统分析是系统工程的核心,它包括问题定义、模型建立、方案评估和决策制定等步骤,旨在优化系统性能。 第四章关注系统模型的特性,如解释结构模型,它用于表示系统元素之间的因果关系。模型化是理解和预测系统行为...

Global site tag (gtag.js) - Google Analytics