我们在解决复杂问题的过程中都有思考如何更好的解决当下问题,一直是在做取舍和决断,其实就是我们一直说的架构设计,标准的三段式:
做架构设计的目的是?
什么架构设计?
如何做架构设计?
从我自己的经验和一些读书来聊一聊架构设计。
架构设计的目的是什么?
现实的世界中,随着软件系统规模的增加、模块间各种耦合串联、问题的复杂度、问题域牵扯的外部因素以及解决问题的手段都在不断的扩大,如何在当前可用资源的前提下找到最合适的解决问题的办法变得非常困难,而解决这些困难的目标就是架构设计的目的。
架构设计的目的就是为了解决问题域和软件系统本身复杂度带来的各种问题。
什么是架构,有的人这样定义,软件架构指软件系统的顶层结构。这个定义还是太泛化,我个人理解的架构是,针对特定的需求或问题越(可以是一个需求、可以是一个子系统又或是整个平台),根据当下的资源,设计和选择某些技术手段和方法,制定模块或子系统之间的约定规则和交互串联方案。
这个描述中就有一些架构的关键要素:
1、问题复杂度
2、资源(约束条件)
3、设计和选择(判断和取舍)
问题复杂度,软件的复杂度来源有多个方面:高可用、高性能、可扩展、低成本、安全、可伸缩、简单易维护和易用性等。
每一个复杂度来源都是一个非常大的话题。
资源(约束条件),任何时候我们的资源都是不够的,比如知识储备、比如项目周期,比如成本控制等等,我们在做架构设计时要时刻关注我们的约束条件是什么,如何在限定条件下设计出最优的方案。
设计和选择,这段话别人总结的很好,程序设计的关键思维是逻辑和实现,而架构设计的关键思维是判断和取舍。
我们要明确知道我们的问题域复杂度的首要关注点是什么,比如最近设计的两个子系统分布式配置中心和sql服务中心,两个子系统首要关注的复杂度是不同的,分布式配置中心首要关注高可用,而sql服务中心首要关注数据一致性和易用性。
明确了核心关注要素后,我们就要选择和设计出解决此问题的方案,解决问题的方案会有很多,架构需要在限定条件下设计出能够解决此问题域的最佳方案。
当然方案的设计也不是一蹴而就的,要遵循一些原则,合适原则、简单原则和演化原则。就想重构和敏捷提倡的,架构是重构出来的,还有架构设计一定要避免过度设计,简单的合适的才是好的。
后面我会以我自己设计分布式配置中心的思考来详细聊一聊架构设计的过程。