代码改变世界

质量属性之-性能详解

2019-03-26 20:50  Robortxin  阅读(573)  评论(0编辑  收藏  举报

 

        性能与时间有关。性能与事件发生时,将要耗费多长时间做出响应有关。性能是指系统的响应能力----即对外部刺激出反应时所需要的时间或在某段时间内所处的事数。影响性能的因素:事件源的数量和到达模式。到达模式:周期性、随机或偶然。一般用等待时间、处理期限、系统吞吐量、吞吐量 = IOPS * Op size 单位时间内完成的IO数量 x 单个操作的大小,响应时间、延迟  - 系统完成单个操作所需要的时间 = 在队列中等待的时间 + 系统处理的时间。未处理事件、丢失数据等指标了解系统性能。一般而言,计算机提供了许多的资源,包括CPU,内存硬盘等等,提高性能的核心就是充分利用这些资源。要保证对资源的使用是正确和有效的。通常提高性能的考虑包括:利用缓存(空间换时间),设计高效的资源共享,多线程,多进程,锁异步,减少模块见得信息传递,使接口设计传递最小所需的信息,增加系统的可伸缩性,是系统能够有效的部署在分布式的资源上。

 

(一)性能的一般场景:

 

刺激源:刺激来自外部(有可能是多个)或内部源

刺激:刺激是事件到达。可以把到达模式刻画为周期性的、随机的或是偶然的。

制品:总是系统的服务

环境:系统可以处在各种操作模式下,如正常、紧急或超载模式

响应:系统必须处理到达的事件。这可能会导致系统环境的变化。

响应度量:响应度量就是系统处理到达的事件所用的时间(等待时间或必须处理事件的期限)、该时间的变化(抖动)、在某一特定时间间隔内可以处理的事件数量(吞吐量)或对不能处理的事件的描述(缺失率、 数据丢失)。

 

(二)提高性能的方法(性能的战术):

有三种策略类别(Three tactic categories ):资源需求(resource demand),

资源管理resource management),资源仲裁(resource arbitration)。

 

资源需求策略:提高计算效率(改进算法),减少计算开销(旁路引用),管理事件率(降低采样频率),绑定执行次数(限制迭代次数),绑定队列大小。

 

资源管理策略:引入并发性,维护数据或计算的多个副本(客户端缓存),增加可用资源。

 

资源仲裁策略(调度策略):

先进先出,固定优先级调度(基于语义重要性、期限单调或速率单调),动态优先级调度(循环调度,最早的最后期限优先),静态调度(先发制人点和资源分配顺序脱机确定)。

 

(三)性能在淘宝网中的实例分析:

2018年淘宝双十一买家购买商品为例:2018年天猫双十一交易额:2135亿。2018天猫双十一实时交易数据:4秒,成交额破1亿元;21秒,成交额突破10亿元;2分05秒,成交额超100亿元;4分20秒,成交额超191亿元;12分14秒,成交额超362亿元;26分03秒,交易额突破500亿元;35分17秒,成交额超571亿元;57分56秒,成交额超666亿元。1小时0分48秒,成交额超672.6亿人民币。在这场购买的狂欢之中我们可以分析下性能在其中的作用。场景:买家购买商品 刺激:购买商品,制品:生成订单,环境:系统正常运行,响应:生成订单后提示用户支付,响应度量:等待时间、判断是否有货。性能与时间有关。事件(中断、消息、用户请求或时间已到)发生时,系统必须做出响应。事件到达和相应有很多特性,但性能基本上与事件发生时,将要耗费系统多长时间做出响应有关。但一味的追求性能,优化下单支付的性能指标、用户体验的流畅度,势必会对其他软件质量属性产生影响,2018年双十一,用户在提交购物车的时候,如果要选择其他的收货地址而不是默认的收货地址,则购物车提交失败,导致整个购买商品的动作失败。解决的办法是:提高计算效率:新的质量控制算法减少计算开销:各种映射,引入并发性:基于MPI的多线程

维护多个副本:结果集缓存,定时+按需:FIFO。

 

(四)对性能的自我理解:

性能我感觉就是对一个软件的测评,就例如windows系统的性能我感觉而言就是比其他系统像Liunx系统性能要好,因为使用方式上,Windows用户更倾向于使用图形界面(GUI)进行相关的操作,他们利用鼠标和界面跟可视化的用户图形界面进行交互。而Linux用户更多的是通过键盘和字符界面,借助丰富而强大的命令行就能对系统操纵自如,这里明显可以看出使用Linux的学习成本是远远高于Windows的。虽然Android 操作系统(安卓)就是基于Linux平台的开源手机操作系统,但是应用方面还是感觉windows系统好用。

第二点对于我们学习的大数据这方面,大数据已经不仅仅是政府用来分析居民生活状态的工具了,现在它被广泛的应用于各个领域。医疗,教育,体育,电影电视剧的制作等等,都用上了大数据。大数据可以用来具体研究某一疾病的治疗,可以记录提高运动员的体育成绩,可以分析金融交易,在多种行业中,大数据都可以用来分析顾客需求,优化业务流程。我们学习的主要是hadoop 跟spark ,Spark在内存中运行速度比hadoop快100倍,在磁盘上运行速度快10倍。Spark在数量只有十分之一的机器上,由处理速度衡量的Spark性能之所以比hadoop 更优:1、每次运行MapReduce任务时,Spark都不会受到输入输出的限制。事实证明,应用程序的速度要快得多。2、Spark的DAG可以在各个步骤之间进行优化。Hadoop在MapReduce步骤之间没有任何周期性连接,这意味着在该级别不会发生性能调整。但是,如果Spark与其他共享服务在YARN上运行,则性能可能会降低并导致RAM开销内存泄漏。出于这个原因,Hadoop被认为是更高效的系统。

对于性能测试来说,个人认为知识面要比知识深度更加重要一点,至少要同时要对操作系统、网络、数据库、前端、语言、通讯协议都有所了解。合格的性能测试应该包含如下能力: 熟悉Java(包括JVM内在机理)/c/c++。 2.精通linux管理和shell编程。理由更简单,shell熟练与否非常大程度决定了一个工程师的工作效率。例如可以用脚本实现linux基本配置的优化,jdk、监控自动化安装等。  对数据库管理和性能优化有自己的实践和心得(数据库永远是性能要点)  说到底,性能是要有相当的知识广度和经验积累。