架构设计最全详解(万字图文总结)

架构设计最全详解(万字图文总结)

架构设计是研发最核心的环节,也是架构师的必备技能,下面我就全面来详解@mikechen

架构设计定义

架构设计:是指在软件系统开发过程中,对系统整体结构、组件之间的关系、模块的划分…等方面进行设计、和规划的过程。

这一过程会涉及到:对系统的需求分析、设计决策、技术选型、模块划分、接口定义、单元测试、性能优化…等多个方面。

如下图所示:

架构设计最全详解(万字图文总结)

一个好的架构设计,能够保证系统具有良好的可维护性、可扩展性、可靠性和性能,是应用建设里面的最核心环节。

 

架构设计模式

随着互联网的发展软件架构,从单体架构、到分布式…到如今基础设施的变革,我们迎来了云原生时代。

在云原生时代,软件架构已经不再局限于单体、或分布式架构,而是更加注重将应用程序、与云计算环境无缝集成。

以实现更高的敏捷性、弹性和可靠性,整体上架构设计模式,主要分为如下几类:

1、单体架构

单体架构(Monolithic Architecture)是一种传统的软件架构模式,它将整个软件系统构建为一个单一的、统一的应用程序。

在单体架构中,所有的功能模块、和组件都集中在同一个代码库中,并部署在同一个运行环境中。

如下图所示:

架构设计最全详解(万字图文总结)

单体架构的设计简单直观,适合小型的应用程序或初创阶段的项目。

但随着应用程序规模的扩大和业务的复杂性增加,单体架构逐渐显露出了性能瓶颈、可扩展性差、耦合度高…等问题。

如果当单体架构的局限性会逐渐显现出来,此时通常需要考虑采用分布式架构、或者云原生架构来解决这些挑战。

 

2、分层架构

分层架构(Layered Architecture)是一种常见的软件架构模式,也被称为水平分层架构、或分层式架构。

在分层架构中,软件系统被划分为多个水平层次(或称为层)。

每个层次都具有特定的功能和责任,并且每个层次之间的交互是单向的,上层层次可以调用下层层次的服务。

最常见的就是是四层结构,如下图所示:

架构设计最全详解(万字图文总结)

  1. 表示层(Presentation Layer):表示层负责与用户进行交互,展示数据给用户并接收用户的输入,它包括用户界面设计、页面渲染、用户输入处理等功能。
  2. 应用层(Application Layer):应用层是系统的核心层,负责实现系统的业务逻辑和流程,它包括应用程序的主要功能和业务规则,协调各个子系统之间的交互。
  3. 领域层(Domain Layer):领域层包含了系统的领域模型和业务对象,负责实现系统的业务逻辑,它包括了系统的核心业务规则和数据处理逻辑。
  4. 数据访问层(Data Access Layer):数据访问层负责与数据存储进行交互,包括:数据库的读写操作、数据模型的映射等功能。

由于每个层次都是独立的,因此可以更容易地实现功能的复用,提高了系统的重用性和开发效率。

 

3.事件驱动架构

事件驱动架构(Event-Driven Architecture,EDA)是一种软件架构模式,其中系统的不同组件之间通过事件进行通信和协作。

事件驱动架构,通过事件的发布、和订阅机制实现了组件之间的松耦合,可以更容易地进行功能扩展和系统升级。

事件驱动架构通常,包括以下几个关键组件:

架构设计最全详解(万字图文总结)

分别是:

  • 事件生产者(Event Producer):负责产生、和发布事件到事件总线、或消息队列中。
  • 事件总线(Event Bus):用于传输、和分发事件到订阅者。
  • 事件订阅者(Event Subscriber):订阅感兴趣的事件,并在事件发生时接收、和处理事件。
  • 事件处理器(Event Handler):用于处理接收到的事件,执行相应的业务逻辑。

事件驱动架构适用:于需要实现解耦、异步通信、实时处理等功能的系统,

特别适合于复杂、分布式和实时性要求高的应用场景,如大规模数据处理、实时监控、和分布式系统集成等。

 

3.MVC架构

MVC架构是一种常见的软件架构模式,用于构建交互式的应用程序,例如:Web应用程序、和桌面应用程序。

MVC架构将应用程序分为三个核心组件:Model(模型)、View(视图)和Controller(控制器)。

如下图所示:

架构设计最全详解(万字图文总结)

  • Model(模型):模型负责表示应用程序的数据和业务逻辑,它通常包括数据结构、数据库操作、业务规则以及数据的验证和处理。
  • View(视图):视图负责展示模型中的数据给用户,并接收用户的输入,它通常包括用户界面的设计、布局、样式和交互等内容。
  • Controller(控制器):控制器负责处理用户的输入、和请求,并根据需要更新模型、和视图。

应用场景:

MVC架构,被广泛应用于构建Web应用程序,并成为了许多流行的Web框架和平台的核心设计理念。

 

4.微服务架构

微服务架构(Microservices Architecture),是将应用程序划分为一组小型、自治的服务,每个服务都专注于执行一个特定的业务功能。

如下图所示:
架构设计最全详解(万字图文总结)

微服务架构,会涉及到如下组件:

1、服务注册与发现(Service Discovery)

服务注册与发现组件,用于注册和发现微服务的位置、和实例信息。

2、API 网关(API Gateway)

API 网关是一个入口点,用于接收客户端的请求并将请求路由到适当的微服务。

API 网关可以处理请求路由、负载均衡、安全认证、请求转换等功能,并提供统一的接口给客户端。

3、负载均衡(Load Balancer)

负载均衡组件,用于分发客户端请求到多个服务实例中,以实现请求的负载均衡和高可用性。

负载均衡可以基于不同的策略进行请求分发,如:轮询、随机、权重….等。

4、配置中心(Configuration Center)

配置中心用于集中管理微服务的配置信息,如:数据库连接信息、服务端口、日志级别等。

5、服务监控与管理

服务监控与管理组件,用于监控和管理微服务的运行状态和性能指标,它可以收集服务的日志、指标和追踪信息。

 

5.云架构

云架构(Cloud architecture),又称云计算架构,是指如何整合各种技术和服务,以在云环境中构建应用程序和系统。

云架构的设计需要,考虑到云服务模型(如:IaaS、PaaS、SaaS)。

如下图所示:

架构设计最全详解(万字图文总结)

1、IaaS(Infrastructure as a Service)基础设施即服务

IaaS提供了基础的计算、存储和网络资源,用户可以通过虚拟化技术使用这些资源,构建自己的应用程序和环境。

2、PaaS(Platform as a Service)平台即服务

PaaS提供了应用程序开发和部署所需的平台和工具,包括:开发工具、数据库、消息队列、Web服务器等。

用户可以在PaaS平台上开发、测试和部署应用程序,无需关心底层的基础设施。

3、SaaS(Software as a Service)软件即服务

SaaS提供了基于云的应用程序服务,用户通过互联网访问并使用这些应用程序,无需安装、配置或管理任何软件。

典型的SaaS应用程序,包括:电子邮件服务(如Gmail)、办公套件(如Google Docs、Microsoft Office 365)、客户关系管理(CRM)系统(如Salesforce)等。

总之,IaaS、PaaS和SaaS是云计算服务模型的三种主要形式,它们提供了不同级别的云服务。

 

架构设计六大原则

架构设计都会涉及到原则,以下是常见的6大设计原则:

1.单一职责原则

每个模块、或组件应该只有一个单一的责任,这样可以使系统更加清晰和易于理解,减少代码的复杂度。

 

2.接口隔离原则

接口隔离原则,它指导着如何设计接口,以及如何将接口进行划分,以使得系统更加灵活、可扩展和易于维护。

接口隔离原则的核心思想是:

  1. 客户端不应该强制依赖于,它不需要的接口。
  2. 接口应该小而精简,满足客户端的特定需求,而不是提供过多的功能。

通过遵循接口隔离原则,可以使得系统的组件之间的耦合度降低,提高系统的灵活性和可维护性。

 

3.依赖倒置原则

依赖倒置原则(Dependency Inversion Principle),简称DIP,是面向对象设计中的一项原则。

依赖倒置原则,它指导着如何设计软件组件之间的依赖关系。

主要会涉及到:

  • 高层模块不应该依赖于,低层模块,而是应该依赖于抽象。
  • 抽象不应该依赖于具体实现细节,而是具体实现细节应该依赖于抽象。

 

4.里氏替换原则

里氏替换原则要求子类对象,能够替换父类对象,并且不影响系统的功能正确性。

换句话说,子类应该保持与父类一致的行为,而且在任何使用父类的地方都应该能够安全地替换为子类对象。

 

5.开闭原则

开闭原则,指导着如何设计软件系统使得系统对扩展开放,对修改关闭。

比如:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。

换句话说,软件系统的设计应该允许在不修改现有代码的情况下,进行功能扩展。

 

6.迪米特法则

迪米特法则也称为最少了解原则,它要求对象之间的通信应该尽可能的简单,并且对象不应该直接与陌生对象通信。

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    暂无讨论,说说你的看法吧