作者:毕玄
文章来源:微信公众号HelloJava
本文为系统设计系列(按照系统建设的目的->系统建设的目标->实现目标面临的核心问题->解决问题的设计->形成设计原则)的第二篇,目标是否可衡量以及如何跟踪效果,会很大程度决定最后做出来的系统和目的是否能对齐。
最近面试了不少架构师,更觉得<系统设计之系统建设的目的>这篇文章是值得再提下的,系统建设的目的是用来理解为什么要建设系统,到底是为了解决目前业务上面临的什么挑战,这是为了避免技术一端纯粹为了技术而技术,以及没和业务面临的主要挑战对齐的现象。
在分析清楚了系统建设的目的后,到了目标这个环节,最重要的是要把前面的目的的描述,转换为可衡量的目标的描述,之所以要形成可衡量的目标,最重要的原因是为了确保最后实现的系统是达成了系统建设的目的的,相信很多人都碰到过设计出来的系统和最后落地的系统很不一致的现象,通常这都是缺乏了可衡量的目标造成的。
举两个例子说下:
第一个是2011年做容器化,建设这套系统的目的是为了应对预计会越来越大的机器成本,目标相应的制定为支撑相同的业务量,机器下降一半。
第二个是2013年做异地多活,建设这套系统的目的是为了能够让业务具备更强的抵御灾害的能力,尽管后面发现因为有了异地多活,有了更多的好处,但那些确实在系统设计之初是完全没放在建设目的里的,后面能做到纯属巧合,例如因为有了异地多活使得后面的弹性借助云资源成为了现实,因为有了异地多活,基础设施技术的演进可以更加快速,在设计之初根据目的相应制定的目标为业务能够部署在中国多个地点(地点间距离>1千公里),多个地点部署的业务都处于承接流量的状态,且流量从A点切换到B点能在30s内完成。
有了清晰的可衡量的系统建设的目标,意味着:
- 确保了系统设计过程中可以非常针对性的围绕目标来做,避免偏题;
- 更重要也是最容易遗漏的一点,是可以做一个用来跟踪系统建设效果的系统,例如之前做容器化,我们会有一个展示,是容器化后的集群多少机器支撑了多少的业务量,和目前还未容器化的集群的一个对比;异地多活,会有一个管控系统,用来展示系统的部署情况,以及流量切换。 只有有了跟踪系统建设目标是否达标的系统,才能真正确保系统建设完毕后和初心保持了一致,否则很多系统建设的时候是一个目的,最后做完了是另外的状况,所以这个跟踪效果的体系是一定要在系统建设的时候同步就做好的。
从目的->目标这个部分,理论上并不复杂,但也很容易漏掉,导致后面的系统设计环节出问题,关键是要形成可衡量的目标,以及相应的跟踪目标达成情况的系统。
有了目标后,就要进入分析要达到目标,面临的核心问题的环节了,下回接着讲。
这个系列的文章会按照聊聊系统设计的套路来写,写的时候会理论结合实践,实践主要是讲我自己在相应的点上的一些经历:
- 系统设计之系统建设的目的
- 系统设计之系统建设的目标
- 系统设计之达成目标的核心问题 - 本文
- 系统设计之解决核心问题的设计
- 系统设计之设计原则