设计心得——稳定和性能

一、软件设计的目的

软件设计的目的是什么?不要被各种纷繁的表象迷惑。任何为人所使用的工具,其最终的目的都是为了解决人自身的问题。软件作为一种大脑智力上的延伸,也是一种工具的应用。正如荀子所言:“君子性非异也,善假于物也”。所以,作为一种工具,其目的就是解决问题,特别是解决各种复杂的、抽象的问题。
问题解决的方式有很多种,投入的代价和成本也各有不同。但最终的结果都要以最合理的代价换取最优的解决问题的办法。同样,软件也是如此。如何评价一个软件好与坏的标准呢?在抛开各种国际国内的各种通用标准外。对于开发者来,有两个最重要的标准即软件运行的稳定性和性能的高低。

二、稳定和性能的说明

在前面的各种设计文章分析中,曾对各种设计的原则进行了分析,重点分析过平衡和各种设计原则。其实,稳定和性能就是一对非矛盾而又必须存在的指标。既然要分析稳定和性能的关系,则需要首先了解稳定和性能的判断标准。
软件的稳定性判断标准:

  1. 可靠性:这里不提具体的定义,只说大白话,就是靠谱,不能动不动无法工作
  2. 容错性:能够自动检测故障、自动恢复、优雅降级。说直白的就是能够在遇到问题时自己解决而不是就不工作了
  3. 健壮性:能够保证输入验证的处理、异常控制和资源管理等,即对内能控制对外能处理
  4. 可恢复性:就是遇到问题恢复时耗费的时间,包括时间和数据的恢复
  5. 性能稳定性:这个更容易理解,就是能够稳定连续的处理问题的时间。就如汽车的连续输出同一功率的时间
  6. 代码质量:这个就更好理解了,就是代码的复杂度、可维护生和可扩展性等
  7. 运维稳定性:就是在运维过程中的各种异常和事故的处理数量等,简单说就是不能把问题丢给下一个流程(开发到运维)

性能判断的标准:

  1. 响应时间:简单一些,就是要快
  2. 吞吐量:就是简单位时间内处理请求要多,越多越好单位时间内系统处理的请求数量
  3. 并发数:就是能够同时处理请求的数量,当然也是越多越好
  4. 资源利用率:即要高效的利用各种资源,包括CPU、内存和磁盘以及网络等
  5. 可扩展性:这个非常重要,它包括软件本身以及对外部环境的适应能力
  6. 效率:就是对请求消耗资源的控制能力
  7. 容量:吞吐量是对外的处理,而容易是对内的处理,即在满足性能指标的前提下能处理的最大负载
  8. 可靠性:能够保持标准性能情况下运行的时长
  9. 负载测试:在预期负载下验证系统性能。
  10. 可测试能力:包括压力测试、耐力测试以及Spike测试等

通过上面的指标分析,就可以很容易的理解稳定和性能是怎么回事了。但需要说明的是,上面的标准并不是严格的说明,如果想确定这些标准的详细定义和严格说明,可查阅相关的国际、国内的标准文档(包括ISO等)。

三、设计上的处理

既然明白了稳定和性能的具体内容,就自然出现一个问题,如何在开发设计中如何处理这二者的取舍呢?正如厨师之与食客,需求不同而具体的应对不同,即使同一需求也会因人而异,这才是真正的优秀之处。又或如医者之与病患,时与势变而处理药方不同。总之就是一句话,根据实际情况,选择最优的组合。
在实际的设计开发中,保证稳定性的设计方法有很多,主要有:

  1. 良好的资源管理
    特别是内存管理,在软件设计中,几乎是无法回避和绕开的经典问题。如何能够保障资源的安全分配、应用和回收是重中之重。在C++中,利用智能指针,就是解决内存使用问题的一个重要手段。包括前面分析的RAII等技术,都可以加之利用,进而保证资源的安全管理。
  2. 合理的算法选择和数据结构的实现
    就是要根据实际情况来匹配相关的算法和数据结构,尽量做到统筹兼顾,以实际需求一方为主的设计思想
  3. 错误的处理
    任何软件不可能不会出现问题,那么出现问题后如何进行处理、恢复等等就是一个很重要的问题,这都需要设计者在一开始就要认真的思考并有提前的布局和安排
  4. 合理的第三库的应用
    现代软件已经极少由一个人或一个单体技术实现,所以使用第三方的库已经成为了一种必然的选择。那么为了实现设计的目标,如何正确的选择第三库,也需要设计者有着一双慧眼,防止出现意想不到的情况。

而提高性能的方法也有很多,常见的有:代码级别的优化,比如使用编译期处理、移动语义以及内联函数等等;平台的优化,如内存、IO以及相关并发等等;编译期的优化,诸如此类,可参数前面的文章“优化的整体分析”。此处就不再赘述。

四、二者的关系

稳定和性能二者间是一个辩证的统一,稳定是基础,性能是目标。没有稳定的运行前提,性能必然是一个空中楼阁;反之,如果性能不够,稳定也没有什么意义。设计者的首要是达成需求目标,而达成目标的前提需要有一个稳定性的基础。
这和武侠小说中的“练功不练拳,练拳不练功”是一个道理。不过在实际的设计中,往往会出现稳定性或性能卡在某个关键节点上,它们互相影响互相牵制,这就需要设计者准确的把握其中的肯綮,综合考虑,完成设计。

五、总结

一般来说,在实际的应用中,追求极致的性能就必然牺牲一些稳定性;反之亦然。但问题的解决往往是只有一两处关键之处,至于这个关键映射到稳定还是性能上,就看实际的需求是什么样即可。既不能强调稳定和性能的对立,又不能否定二者之间的联系。设计者所作的应该是利用最合适的设计方法和技术,按照实际需求,实现在满足一方的基础上尽力提高另外一方的设计。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值