性能、可用性、可伸缩、可扩展……如何达成这些质量要求,是随时要考虑的问题。 有没有什么“普遍的”考虑方法呢?
对各个质量要求,具体的考虑方法是各不相同的,但总结起来思考方向一般有几个:1.
正向
顺着问题发生的因果方向考虑。
列出可能导致问题发生的因素,建立问题场景的模型,研究因素与结果的关系,按优先级评估和排除这些因素。比如对于性能质量风险:对典型请求建模,列出处理请求的步骤,考察它们可能对总体性能的影响,排除可能的瓶颈。
反向
将因果关系反过来。
我们从结果出发,基于问题已经发生。考虑如何才能回溯问题的原因并排除。还以性能为例。如果发现系统响应缓慢,我们可以有些什么手段找到缓慢环节,证实它是缓慢的根源?从这个方向考虑,通常会发现要求系统中有足够多的诊断支持,比如日志、现场收集保护、快照分析等等。
值得提醒的是,问题发生有至少两个场景,都是可以利用的:
- 测试,制造问题的发生。
- 生产中发现已发生的问题。2
横向
或者说无向。指的是不按因果方向考虑。比如使用“模式”——根据系统特点,列出可能提高性能的模式,看看成本,能用上的都用上吧。这种方法也确实有用。