软件架构全面详解(万字图文总结)(软件架构百科)
大家好,我是mikechen。
软件架构对于软件开发是非常重要的,是整个软件的大脑,也是架构的必备技能,下面我就全面来详解软件架构@mikechen
软件架构
软件架构是指软件系统的设计方案,它决定了软件系统中各个组件之间的关系、功能分配、和架构方式。
这个与建筑设计架构类似,建筑设计架构师负责设计建筑物的整体结构、布局和功能分配。
而软件架构师,负责设计软件系统的整体组织结构、模块划分、和功能分配。
两者都需要考虑到业务功能、性能、可扩展性、安全性、以及用户体验等方面。
软件架构模式
学习软件架构,可以提高你的系统设计能力,了解不同的架构模式和设计原则,能够帮助你更好地组织和规划软件系统。
下面,我接着详解主流的软件架构模式:
1.分层架构
分层架构是一种常见的软件架构模式,它将软件系统划分为:若干个层次,每个层次负责特定的功能。
如下图所示:
这种设计方式,使得系统的结构更加清晰,便于开发人员理解和交流。
主要分为3层:
- 表示层(Presentation Layer):也称为用户界面层,负责与用户进行交互,包括:用户界面的设计、和实现;
- 业务逻辑层(Business Logic Layer):也称为服务层、或应用层,负责:处理业务规则、数据处理、和逻辑运算等任务;
- 数据访问层(Data Access Layer):也称为持久化层,负责:与数据存储系统进行交互,使业务逻辑层可以专注于业务逻辑的处理。
总之,分层架构:是一种常见且灵活的软件架构模式,适用于大多数中小型软件系统的设计和开发。
2.事件驱动架构
事件驱动架构(Event-Driven Architecture,EDA),是一种软件架构模式,它基于事件、和消息的传递来实现系统的组织和通信。
如下图所示:
主要会包含,4大组件:
1、事件(Event)
事件是系统中发生的某种事情、或状态的表示,例如:用户操作、系统错误、数据更新等,这些都是事件。
2、发布者(Publisher)
发布者是产生事件的组件,负责:将事件发布到系统中的事件总线、或消息队列中,使订阅者可以接收到这些事件。
3、订阅者(Subscriber)
订阅者是接收事件的组件,负责:订阅感兴趣的事件,并在事件发生时进行相应的处理。
4、事件总线(Event Bus)
事件总线:是连接发布者和订阅者的中间件,负责:事件的传递和分发。
事件驱动架构中事件的发布和订阅是异步的,发布者无需等待订阅者的响应即可继续执行,提高了系统的并发性和响应速度。
事件驱动架构的应用场景:
1.消息队列
事件驱动架构,常常与消息队列系统结合使用,用于实现可靠的消息传递和异步处理。
例如:用于构建高可靠性的分布式任务调度系统、日志处理系统…等。
2.实时通知和推送
当需要向用户发送实时通知、或推送时,事件驱动架构可以帮助实现消息的即时传递和处理。
例如:社交网络应用中的消息通知、电子商务应用中的订单状态更新通知…等,这些都可以用事件驱动架构来解决。
3.复杂业务流程
当需要处理复杂的业务流程,事件驱动架构可以帮助实现业务流程的自动化和灵活性,例如:工作流系统…等。
3.微服务架构
微服务架构:是一种将软件系统架构,主要是把单体拆分为多个小型、自治的服务的架构模式。
每个服务都独立部署、独立运行,并通过轻量级的通信机制进行交互。
如下图所示:
主要会包含,如下6大特点:
1、服务拆分
微服务架构,一般是将传统的单体应用拆分为多个小型的服务,并且,每个服务负责一个特定的业务功能。
微服务架构这种拆分,使得每个服务更加专注、易于理解、和维护。
2、自治性
每个微服务都是独立部署、独立运行的,具有自己的数据库和代码库。
都可以独立进行开发,并且测试、和部署,极大的降低了系统之间的耦合度。
3、技术多样性
每个微服务可以使用不同的技术栈和编程语言,根据业务需求选择最适合的技术,提高了开发团队的灵活性和自由度。
比如:你可以使用自己熟悉的Java,也可以使用自己熟悉的Go、或者别的开发语言来实现。
4、可扩展性
微服务架构:允许每个服务根据需要进行独立的水平扩展,从而提高了系统的整体扩展性、和性能。
5、独立部署
每个微服务都可以独立进行部署、和升级,无需影响其他服务,使得系统更加灵活、和可靠。
6、团队自治
每个微服务都有自己的团队负责开发和维护,使得团队更加独立、责任更加明确。
微服务架构组件,如下图所示:
通常包括以下几个核心组件:
- 分布式通信:这是最基本的功能,都会涉及到分布式通信,比如:Dubbo来实现RPC通信等。
- 服务注册与发现: 服务注册与发现组件,用于管理和维护微服务的注册信息,常见的有:Consul、Etcd、ZooKeeper…等实现方式。
- 负载均衡: 负载均衡组件,用于在多个服务实例之间分配请求,以实现负载均衡和高可用性,比如:可以使用Ribbon来结合使用。
- 消息队列: 消息队列用于实现微服务之间的异步通信,比如:SpringCloudAlibaba微服务,就包含了:RocketMQ消息队列。
- 分布式追踪: 分布式追踪组件,用于跟踪、和监控微服务架构中的请求流程和性能指标,帮助发现和解决潜在的性能瓶颈、和故障。
- 配置管理: 配置管理组件:用于集中管理微服务的配置信息,包括:环境变量、数据库连接、日志级别……等。
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。
4、云原生架构
云原生架构是一种基于云计算、和容器化技术的应用架构模式。
云原生架构,主要会包含:Docker容器、K8S容器编排、和服务网格等。
如下图所示:
Docker容器
Docker容器技术使得应用程序及其依赖可以被打包成一个独立的容器,包含了:运行时环境、代码、依赖库等。
Docker容器就像集装箱一样,可以将应用程序及其所有依赖项打包成一个独立的单元。
集装箱和Docker容器都提供了一种隔离的环境,使得内部的货物、或应用程序不受外部环境的影响。
并且,集装箱和Docker容器都是相对轻量级的,可以在短时间内进行加载、卸载和运输,因此运行效率非常高。
Kubernetes容器编排
有了容器来解决部署,后续就需要涉及到:容器部署后的编排,这就是Kubernetes。
Kubernetes是一个开源的容器编排引擎,是Google开发的,用于自动化部署、扩展和管理容器化应用程序。
提供了丰富的功能,如:自动化部署、负载均衡、故障恢复、自动扩展。。。等,使得应用程序能够更加灵活地运行在各种环境中。
服务网格
服务网格是一种用于管理微服务之间通信的基础设施层,它通过透明地注入网络代理来实现微服务之间的通信、监控和安全控制。
服务网格可以帮助开发人员解决微服务架构中的通信问题,提高系统的可观察性、可靠性和安全性。
5.云架构
云计算架构:是指基于云计算技术实现的系统架构。
云架构,主要利用云计算资源,比如:计算、存储、网络…..等,来构建和部署应用程序,提供各种服务和功能。
整体架构,如下图所示:
主要会包含:
1、IaaS(基础设施即服务)
IaaS, 主要提供基础的计算、存储、和网络资源。
如下图所示:
主要会包含,如下3大组件:
- 虚拟机(VM): 虚拟机是IaaS的基础组件,它将物理服务器虚拟化为多个虚拟服务器,每个虚拟机都拥有自己的操作系统、和应用程序环境。
- 存储服务: IaaS提供了各种类型的存储服务,包括:块存储、文件存储和对象存储等,用于存储用户的数据和应用程序。
- 网络服务: IaaS提供了网络服务和功能,包括:虚拟网络、负载均衡、防火墙等,用于构建和管理用户的网络环境。
以上
本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。