翻译自:https://tianpan.co/notes/145-introduction-to-architecture
体系结构是软件系统的形状。将其视为实体建筑物的全景。
- 范例是砖头。
- 设计原则是房间。
- 组件是建筑物。
它们一起用于特定目的,例如医院用于治愈患者,而学校则用于教育学生。
为什么我们需要架构?
行为与结构
每个软件系统为利益相关者提供两种不同的价值:行为和结构。软件开发人员有责任确保这两个价值都很高。
凭借其工作描述,软件架构师将更多的精力放在系统的结构上,而不是功能和特点上。
最终目标 - 节省每个功能的人力资源成本
架构服务于软件系统的整个生命周期,以使其易于理解,开发,测试,部署和操作。目标是使每个业务用例的人力资源成本最小化。
马克·理查兹(Mark Richards)撰写的O'Reilly著作《软件体系结构模式》是对这五个基本体系结构的简单而有效的介绍。
1.分层架构
分层体系结构是采用中最常见的,在开发人员中众所周知,因此是应用程序的实际标准。如果您不知道使用哪种架构,请使用它。
例子
- TCP / IP模型:应用程序层>传输层>互联网层>网络访问层
- Facebook TAO:Web层>缓存层(追随者+领导者)>数据库层
利弊
- 优点
- 使用方便
- 责任分离
- 可测性
- 缺点
- 单片
- 难以调整,扩展或更新。您必须对所有图层进行更改。
- 单片
2.事件驱动架构
状态更改将向系统发出事件。所有组件都通过事件相互通信。
一个简单的项目可以将调解器,事件队列和通道结合在一起。然后我们得到一个简化的架构:
例子
- QT:信号和插槽
- 支付基础架构:银行网关通常具有很高的延迟,因此它们在架构设计中采用了异步技术。
3.微内核架构(又名插件架构)
该软件的职责分为一个“核心”和多个“插件”。核心包含最低限度的功能。插件彼此独立,并实现共享接口以实现不同的目标。
例子
- Visual Studio Code,Eclipse
- MINIX操作系统
4.微服务架构
大型系统与多个微服务解耦,每个微服务都是一个单独部署的单元,它们通过RPC相互通信。
例子
- Uber:请参阅设计Uber
- 聪明地
5.基于空间的架构
该模式的名称来自“元组空间”,即“分布式共享内存”,没有数据库或同步数据库访问,因此没有数据库瓶颈,所有处理单元共享内存中的复制应用程序数据。弹性启动和关闭。
示例:请参阅Wikipedia
- 最常被Java用户采用:例如JavaSpaces