架构设计的认知
仅供个人学习使用,我是努力的Grug.
1. 为什么架构设计就是拆分,我们为什么要做架构拆分?
做架构拆分就是为了系统之间的解耦,子系统之间的解耦,模块之间的解耦。做解耦的目的是为了使复杂的调用逻辑分开,使拆分后的系统,职责更为单一,功能更为内聚。职责单一系统的功能逻辑和迭代速度会更快,能提高研发团队响应业务的速度,能提高研发效率,而效率是每个互联网公司都追求的。
架构拆分实际上是 管理 在技术上 提效 的一种手段
2. 一个案例分析
早期,业务发展比较简单,团队规模也不是很大,单体系统可以支撑业务的早期规模,但当业务不断发展,团队规模越来越大时,之前的一个业务团队逐渐发展成了多个业务团队,这时每个业务团队都会提出自己的功能需求。
然而,系统现状仍然是单体架构,研发同学都在同一个系统里进行开发,使得系统逻辑复杂,代码耦合,功能迭代和交付变得非常缓慢,牵一发而动全身,研发人员都不敢轻易修改代码。
这个时期系统的主要矛盾就变成了:多人协作进行复杂业务,导致速度缓慢,但业务需求又快速迭代。说白了,就是研发效率不能匹配业务发展的速度,并且单靠加人不能解决问题。对于这样的一个系统,此阶段的系统架构核心原则就不能随便定义为要保证高性能和高可用。
在回答系统设计问题的时候,要根据系统所处阶段的主要矛盾来回答架构设计问题。《人月神话》的作者就分析,软件的复杂度来源于两方面,本质复杂度和偶然复杂度。开发工具、开发框架、开发模式,以及高性能和高可用这些仅是偶然复杂性,**架构最重要的是要解决本质复杂性,这包括人的复杂性和业务的复杂性。技术是静态的,人和业务是变化的,具体问题要从具体业务领域出发。
3. 研发工程师和架构师能驾驭的边界可以如下概括:
- 一个中高级研发工程师对系统的驾驭边界至少是模块或者子系统层面;
- 一个架构师对系统的驾驭边界至少是全系统层面;
- 一个高级架构师对系统的驾驭边界至少是某一领域层面。
4. 总结
首先要提高你对系统架构设计的认知能力,一个好的架构师的架构设计不是仅仅停留在技术解决方案上。
其次要提高你分析系统问题的认知能力,做架构设计要具备根据现阶段的主要矛盾来分析问题的能力。
最后你要扩大自己能够驾驭系统的边界,因为只有这样才能遇到之前没经历过的问题层次,注意我这里说的是问题层次,而不是问题数量。