现象
在做应用系统时候,会遇到很多问题,比如接口响应慢,排查然后解决问题,具体解决有:代码优化,索引优化,慢查询告警,运维层面的监控,告警,通过排查问题,我们对系统有了更深入了解,对整个链路越来越熟悉,并在解决过程中提高了技术能力。但是有时候我们真的解决问题了吗?接口从5s优化到100ms,是否解决了接口慢的问题呢?是的,至少表面来看问题解决了,但是我们怎么能保证的说:系统没问题了。我们希望有一个完美系统,让自己系统来和”完美系统“进行比较,从而发现系统问题,从而不断优化系统。完美的理论是存在的,但是完美的系统存在脑海中,并且谁也没见过。我觉得完美系统应该是一系列目标,比如可靠性,系统在完成功能很可靠,系统在宕机,硬件故障,软件错误,人为故障时候可以可靠运行,还比如可扩展性,当遇到性能问题时候,可以横向或者纵向扩展,再比如可维护性,小到代码,中到架构,大到系统方方面面可维护性,这些都可以定义系统的目标(非业务层面)。
那么接口慢可以反应哪些问题呢?
可靠性:系统对用户使用造成问题,用户可能离开,使得用户觉得系统不可靠。系统发生错误。
可扩展性:接口慢,是性能问题,性能问题垂直扩展还是水平,还是代码,存储层问题呢?
可维护性:有监控吗?有告警吗?排查问题工具是否容易使用呢?是否有全链路traceid一眼看到链路耗时呢?
接口慢也侧面反映了,系统没有预期的目标。
RSMA模型
RSMA(Reliable,Scalable,Maintainable,Automate)模型是将系统属性和目标分解为三部分:可靠性,可扩展性,可维护性,到达这些目标更好的方式是:自动化。
可靠性包含:硬件故障,软件错误,人为失误。有些时候,系统看似可靠,实际上不是,需要明确可靠性在不同层面的真正含义。
可扩展性包含:负载,性能。性能问题是可扩展的核心。虽然没了资源(内存/CPU/带宽)可以加,但是为什么每次不是自动化过程呢?虽然没有见过自动扩展的系统,但是可以作为设计的目标。
可维护性包含:可运维,简单化,易演化。
自动化包含:实现上面目标最好是自动化的。其次是手动化的。
RSMA模型认为:系统首要是拥有目标,然后在解决问题,演化,调优中不断接近目标。解决问题完成定义是达到目标。所有问题都可以定义一个目标,而这些目标最终会成为可靠性,可扩展性,可维护性三者之一。实现三者方式应该是自动化的。
一些观点
- 很多系统缺乏明确目标,解决问题方案偏临时,不能从整体上来拆解问题。任何问题都可以追溯一个目标。
- 一个系统的长期目标是业务方向,中期目标是系统目标,短期目标是业务需求。
- 系统会出现多种问题,定义问题解决了标志应该是:解决该问题达到了系统的目标。那么系统没问题也应该是达到了系统的目标。否则接口从5s优化到100ms,解决了很多技术问题,但是怎么定义解决呢?用户觉得快也是目标,但是快拆解目标是可扩展性。
- 系统的目标是:RSMA,应该牢记系统的目标,并且拆解可落地方案。业务系统,存储系统,中间件系统的目标均可以是上述三个。
- 系统的目标是系统层面的属性,是应用系统设计目标,影响了系统的方方面面,而非某个特定的技术,是各个组件合力贡献的能力。目标也不是个体事情,开发,运维,测试,是多人协同的实现属性。
- COSEA是还原论,将系统拆分,而RSM是系统论,将系统组合。
- 实际和理论割裂很严重,系统没资源了,连自动加资源能力都没有,每次都要手动加,包括内存资源,产生这些问题原因在哪里?所谓的自动垂直扩展,自动水平扩展,自动弹性扩展没见过。