软件架构
定义:
- 软件整体结构与组件的流程描述
- 指导软件各个方面的设计
- 主要是在方法选择上进行指导 (WPF中的MVVM架构)
常见架构
从宽角度来看,系统架构可以分为:
- 单机架构:整个系统运行在单个服务器上,所有模块和存储都在同一物理节点。
- 分布式架构:系统运行在多台服务器上,通过网络互联。包括集群架构、SOA架构、微服务架构等。
- 服务架构:将系统按业务域拆分为多个服务,每个服务对应一个子系统,服务之间通过消息或API相互调用。代表有SOA架构和微服务架构。
- 事件驱动架构:通过事件触发服务调用,实现各个服务的解耦。代表有EDA架构。
- 数据中心架构:处理大规模数据的架构,包括 lambda 架构 、kappa 架构 等。
- 面向流的架构:处理流式数据的架构,代表有SMACK架构(Spark、Mesos、Akka、Cassandra、Kafka)。
- 除此之外,还有P2P架构、Grid架构、云计算架构等。单机架构属于最基本的架构类型,其特点是系统部署在单个物理机器上。随着需求规模变大和可靠性要求提高,系统会向分布式架构、服务架构等演进。
单机:把所有功能都在一个进程中实现,并部署在一台机器上(分布式部署,完全单线程,运维需要停服)
特点如下:
- 简单:单机架构非常简单,没有网络通信的复杂性,部署和维护简单。
- 易测试:因为系统的边界清晰,所有的功能都在一个进程内,所以很容易做集成测试和系统测试。
- 性能好:因为没有网络通信的开销,性能较高。所有模块都是本地调用,延迟低。
- 可靠性差:单点故障,一旦服务器 down 掉,整个系统都不可用。无法做到高可用。
- 扩展性差:硬件的性能有限,不易水平扩展。一旦需求超过单机处理能力,就需要重构为分布式系统。
- 容灾能力差:单机架构无法做到异地容灾,无法做到高可靠。一旦机房发生灾难,服务会完全中断。
- 安全性差:所有模块都在同一个进程内,一旦遭受入侵,整个系统都受到威胁。权限管理也相对困难。
垂直应用架构:按应用垂直切分的单体
- 水平扩容
- 且运维不用停服
- 开发效率不够高
- 爆炸半径大(出问题还是单线崩溃)
SOA:(Service-Oriented Architecture)
- 将应用的不同单元称为服务
- 定义服务之间的关系为通信标准
- 微服务架构:SOA去中心化的演进方向
- 在不同的服务中找到相同的步骤,由同样的线程去运行