这是我参与「第五届青训营」伴学笔记活动的第8天
软件架构定义
软件架构是构建应用系统所需要的一组结构,包括软件元素、元素之间的关系以及两者的属性。其中如何分解软件元素以及这些元素之间的关系,变得非常重要。一个好的软件架构具备两个特点:
合理调配生产关系与生产力,让具备不同专业知识与技术栈的的人士都参与到软件系统开发中来, 高效地协同工作;能让各个软件元素有清晰的定义与职责,并有一套良好、高效的交互机制.
单体应用架构:
应用开发采用单体架构,所有的代码在一个代码仓库中管理,最后打包成一个部署包,运行在一个进程上。典型的有三层应用架构与六边形应用架构两种。
优势:
应用开发简单,基本所有的代码都在一个仓库中管理;
非常方便进行大规模的更改;
容易测试,只需要写几个端对端的测试;
部署简单明了,横向扩展非常容易.
弊端:
复杂度不断提升,模块之间的耦合度越来越高,维护成本很高;
更新迭代周期变长,从代码提交到实际部署的周期会拉长,甚至有时都无法交付;
难以扩展与迭代演进,使用过时的技术栈或组件一直无法升级.
微服务架构:
微服务架构其实可以理解为”模块化设计"的扩展延伸,只是这些"功能模块"以单独的部署包的方式运行在各自的进程中。这样每个服务之间都是相互独立的,并且有自己的私有数据库,两者之间仅能通过API的方式进行通信。
优势:
从代码管理来看,每个服务较小,大部分由于十几个接口或服务方法组成,非常容易维护;
从运维管理来看,每个服务都可以独立部署,非常易于扩展;
从团队管理来看,可以更好地划分职责范围;
从软件开发总体来看,可以使软件系统可持续性交付部署.
劣势:
服务的拆分和定义有一定的难度;
增加了系统的复杂度,使开发、测试、部署都变得更加困难;
在部署多个服务的功能时需要在协调开发团队.