大家好,我是老猿,今天开始推出专题【老猿说架构】,废话不说,直接进入主题。
1.什么是软件系统架构?
就是构建软件系统的构件(如子系统、模块、组件等)结构、关系及他们如何运行和协作的机制。
2.软件系统架构设计的目的是什么?
软件系统架构设计的核心目的是为了解决当前或未来软件系统复杂度(即软件系统之熵)带来的问题,所以软件系统架构设计先适用并满足当前业务容量和需求,随着业务发展和需求版本迭代开发而能不断扩展演进,那么良好的架构设计一定是简单、适用、可维护、可扩展、可演进的,所以脱离当前业务需要的架构设计都是耍流氓。
举个架构演进例子:
系统初期用户量和业务功能不多也不是很复杂,简单单体架构应用单节点服务部署或者小集群部署(见下图)。
系统发展中期用户量逐渐增加和业务功能越来越复杂,架构演进为分布式架构,服务部署见下图:
系统发展后期用户量规模化和业务功能非常复杂,架构演进为微服务架构,服务部署见下图:
3. 对软件系统架构设计目的理解的常见误区
误区1为了提高开发效率
做好架构设计就一定能提升开发效率吗?这个答案肯定是不一定。比如创业公司初期谈不上团队合作更谈不上架构设计,大家开发效率很高质量还可以,随着业务功能的快速增加或变更,不得不组建更大的团队,以团队分工合作方式协作时反而整体效率会下降很多,因此架构设计不一定能提高开发效率。
误区2:为了提升访问速度
架构设计和访问速度有关系,但没有直接关系,提升访问速度是系统工程,需要从系统端到端的输入输出每个节点的计算实现都要足够快才行。
误区3:考虑未来系统高可用、高性能、可扩展,所以做架构设计
能想到这个的一般对架构设计有一定的思考,之所以做架构设计就是为了解决未来可预期和不可预期的业务发展。但往往新手架构师会过度设计带来巨大灾难,因为他们不管三七二十一,不理解业务和评估系统,直接就搞“高性能、高可用、高扩展”的生搬硬套的系统架构设计,恨不得把淘宝、京东,12306的架构搬过来,结果架构设计复杂无比,项目交付遥遥无期,团队天天吵等各种糟糕的现象,最后费尽九牛二虎之力将系统上线,却发现系统运行不稳定、经常出问题,出了问题难以解决,排查问题困难,加个功能要时间周期很长。
文/老猿,写代码写诗写职场的程序猿大叔,倾力原创简单实用的硬干货,转载此文请联系老猿。