架构学习提炼笔记(二):架构设计的流程是什么?
架构设计的流程是什么?
1.识别复杂度
识别复杂度是要放在架构设计的第一位的,只有正确的识别了所要解决的业务场景的复杂度,架构设计才能找准方向而不是和实际需要南辕北辙。
复杂度主要来源于“高可用”,“高新能”,“可扩展”等几个方面,但是在设计架构时,不一定要把三个方面的需求全部满足,因为实际业务应用中,这三个方面不可能全部都有很高的要求。一般只会有其中一个方面有较高要求,少数情况下会对两个方面提出较高要求,即使最终经过分析,确实三个方面都提出了要求,那么也一定会有轻重缓急之分,要进行优先级排序。避免陷入过度设计的泥潭。
不要幻想一次解决所有的问题,将主要的复杂度问题列举出来,根据业务,技术,团队等综合情况进行排序,优先解决当前面临的最主要的复杂度问题。
不用担心如果按照优先级来解决复杂度,可能会出现解决了优先级排在前面的复杂度后,解决后续复杂度的方案需要将已经落地的方案推倒重来,因为这个新的方案必须也一定能够同时解决已经被解决的复杂度问题。
识别复杂度一般采用排查法。即一个系统的架构是否需要“高新能”,“高可用”,“可扩展”。逐一排查和过滤。
如何做:
1.先分析系统的主要业务和问题,目前最大的麻烦和困难在哪里,这些问题和麻烦最终体现为哪一种复杂性。
2.根据分析结果以及目前业务,技术,团队的具体情况确定最最合适,最简单的解决方案,并进行少量的预测,方便后续演化。
3.将新的解决方案按照“高新能,高可用,可扩展”三个主要复杂度来进一步过滤。高可用体现在每秒读写和操作(TPS)和每秒读查询率(QPS),并适度的考虑峰值及扩展。高可用主要体现在系统的稳定长期提供服务以及出现故障和服务停止的后果考虑。可扩展,主要从系统和服务的变更幅度来考虑。
2.设计备选方案
设计备选方案的误区和主张的思路:
1.直接设计最优秀的备选方案。这种方案没有遵循合适原则,简单原则和不断演化原则。会遇到大困难,造成浪费。
2.只制作一个方案。这样因为考虑得太少,会导致想的不全面,因为某个问题,错过了综合来看最合适得架构,甚至出现护犊得思维强行推行这个架构。一般至少建议设计3-5个备选方案,且这些备选方案之间差异要比较明显,并且不要局限于熟悉的技术。
3.备选方案过于详细有太多细节。这样会耗费大量的精力和时间,强调细节和忽略整体。应该只关注技术选型,而不是关注技术细节。
3.评估和选择备选方案
选择备选方案很困难,因为备选方案都是可行的,都有自己的缺点,而且具体的评价标准有极强的主观性。
具体如何做备选方案的选择?
具体方式为:列出需要关注的质量属性点,分别从这些质量属性的维度去评估每一个方案,在综合挑选适合当时情况的最优方案。
常见的方案质量属性点有:性能、可用性、硬件成本、项目投入、复杂度、安全性、可扩展性等。从合适原则和简单原则出发,综合评价备选方案对应这些质量属性点的支持力度。不考虑小概率事件,针对小概率事件,适当扩展,从演化的原则出发,放在后期处理。
针对质量属性点评估,要避免陷入对比质量评估点的数量或打分上,因为质量评估点针对不同的业务场景是有优先级的。应该制作360度环评表,按照优先级选择,先评估最大优先级的质量属性,排除掉一些不满足的备选方案,然后再逐一类推。
4.详细方案设计
简单来说,详细方案设计就是将方案涉及的关键技术细节给确定下来。
首先列出细化清单,将清单中的每一项进行具体到实现级别的确认(不是代码细节)然后分步骤,分阶段,分系统,降低方案的复杂度。