【软件架构】软件系统的拆分方式有哪些

【软件架构】软件系统的拆分方式有哪些

一、软件系统拆分目的:

软件之所以拆分,是为了系统功能的扩展性,也是为了提高复用性;当新的需求出现时,系统不需要或仅需要少量修改就可以支持,无须整个系统重构或重建。

二、软件系统拆分思路:

面向流程拆分:将整个业务流程拆分为几个阶段,每个阶段作为一部分,这就是典型的就是分层架构。面向服务拆分:将系统提供的服务拆分,每个服务作为一部分。典型的就是SOA、微服务架构。面向功能拆分:将系统提供的功能拆分,每个功能作为一部分。典型的就是微内核架构。

三、分层架构、SOA、微服务架构及微内核架构区别和联系:

分层架构

分层结构定义:分层架构(Layered Architecture)是软件设计中一种常用的架构模式,它将系统分为若干个功能层来组织代码和功能模块。每个层次都有其特定的任务和责任。使用分层架构的目的是为了实现关注点分离、复用、降低耦合度,提高系统的可维护性和扩展性。分层架构一般有三个原则:每一层只与其上下相邻的层进行交互;每一层都有特定的功能和责任;层与层之间的耦合应保持最小化。常见的分层结构架构:基于DDD驱动设计的四层划分和基于MVC的三层划分;

SOA架构

SOA架构定义:SOA(Service-Oriented Architecture,面向服务的架构)是一种设计模式,其中软件应用的功能模块以独立、分布式和互操作的服务形式组织和提供。这些服务与网络标准和协议保持一致,从而使各种应用程序能够无缝地交互和集成。SOA 提出的背景是企业内部的 IT 系统重复建设且效率低下,解决服务互联互通,无需定制开发,目的是减少各个服务间的依赖和互相影响。因为采用 SOA 架构后,各个服务是相互独立运行的,甚至都不清楚某个服务到底有多少对其他服务的依赖。如果做不到松耦合,某个服务一升级,依赖它的其他服务全部故障,这样肯定是无法满足业务需求的。SOA实现方案:

ESB企业服务总线。

SOA架构优点:

松耦合。服务之间的依赖关系较弱,服务之间只需遵循统一的接口契约,不需要了解其他服务的实现细节,使服务之间的耦合关系松散。高内聚。每个服务都专注于完成一组相关的功能,具有高内聚性。可重用性。服务可被不同的应用系统重复调用和利用。可扩展性。可以通过调用多个服务实例来实现对系统的水平扩展。可维护性。服务边界清晰,使每个服务都可以独立地进行开发、测试、部署和维护。跨平台。服务使用标准化接口与语言描述,可以跨平台实现。

SOA架构缺点:

系统复杂性增加。SOA架构实施过程中需要处理大量的服务、管理问题等,系统整体会变得非常复杂。性能开销。服务调用需要通过网络进行远程调用,带来额外的性能开销,服务调用都需要通过ESB总线进行,异构协议和数据格式需要通过ESB转换,ESB很容易成为瓶颈。错误处理困难。服务调用链过长时,一次业务操作可能需要调用多个服务,系统内的错误难以追踪。版本管理复杂。系统升级时需要考虑服务接口的兼容性问题。安全管理复杂。由于服务暴露给多个消费者,可能需要引入额外的安全机制来确保数据的安全性和完整性。

微服务架构

微服务架构定义:微服务架构(Microservices Architecture)是一种架构模式,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的进程中,服务之间采用轻量级的通信机制(通常是HTTP API)互相协作。

微服务架构特征:

微服务架构将大型单体式应用拆分成多个松耦合的小型服务。每个微服务负责实现一个独立的业务功能。每个微服务都是一个独立的进程,可以使用不同的编程语言及框架实现。服务之间通过简单RESTful API进行交互。每个微服务都围绕业务能力进行构建,并能独立部署到生产环境、独立扩展。每个服务都有自己的业务目标并围绕这些业务目标设计。服务间通过消息总线进行通信,采用轻量级通信和松耦合来实现服务交互。微服务架构通过业务边界和自动部署机制来实现敏捷开发和可扩展性。微服务架构支持采用最简单符合业务需求的技术来开发服务。微服务架构是一种以业务能力为中心来构建应用的架构模式。它通过细粒度、松散耦合的服务来提高应用的灵活性和可扩展性。这种架构很适合互联网公司快速交付大型复杂应用的需求。

微服务架构实现方案:

Spring Cloud 提供了一系列工具来帮助开发、部署和管理微服务应用。以下是 Spring Cloud 为实现微服务所提供的主要功能:

服务发现与注册 (Service Discovery and Registration),Spring Cloud Eureka、Spring Cloud Consul或Spring Cloud Zookeeper;配置管理 (Centralized Configuration Management),Spring Cloud Config;智能路由 (Intelligent Routing),Spring Cloud Zuul,阿里nacos;客户端负载均衡 (Client-Side Load Balancing),Spring Cloud Netflix Ribbon;断路器 (Circuit Breaker),Spring Cloud Hystrix或Spring Cloud Resilience4j;API 网关 (API Gateway),Spring Cloud Gateway;服务链路追踪 (Distributed Tracing),Spring Cloud Sleuth配合Spring Cloud Zipkin,Skaywaiking;安全 (Security),如OAuth2等,常用的有Spring Cloud Security。

微服务架构优点:

更轻量级 - 微服务架构强调将应用拆分成更细粒度的服务,每个服务更轻量、独立和易于理解。SOA服务较为复杂。更面向业务 - 微服务围绕业务功能进行拆分,容易映射业务需求。SOA服务边界不一定与业务边界对应。更容易开发 - 每个微服务可由小型开发团队独立开发,更容易维护。更技术多样性 - 微服务可使用不同语言及技术实现,这为团队提供了更大的灵活性。更容易扩展 - 可以通过实例扩展单个微服务来实现扩展。SOA较难灵活扩展。

微服务架构缺点:

分布式复杂性 - 构建分布式系统使得服务管理困难,涉及服务路由、故障隔离、服务发现、负载均衡等。部署成本高-微服务规模大,交付难度提升,对自动化测试、持续集成 、自动化部署要求很高。网络通信开销大-微服务复杂的调用链增加通信了延迟和系统的复杂度。运维复杂-微服务间关系错综复杂,问题监控定位难。一致性问题 - 每个服务通常有自己的数据库,这可能导致数据的一致性和完整性问题。

微服务架构与SOA架构区别:

两者都关注“服务”,都是通过服务的拆分来解决可扩展性问题;SOA 的服务粒度要粗一些,而微服务的服务粒度要细一些;服务通信SOA采用了ESB作为服务间通信的关键组件,负责服务定义、服务路由 、消息转换、消息传递,总体上是重量级的实现;微服务推荐使用统一的协议和格式,例如,RESTful协议、RPC协议,无须ESB这样的重量级实现;应用场景SOA 更加适合于庞大、 复杂、异构的企业级系统;微服务更加适合于快速、轻量级、基于 Web 的互联网系统,这类系统业务变化快,需要快速尝试、快速交付;

微内核架构:

微内核架构定义:微内核架构(Microkernel Architecture)是一种设计模式,将系统的核心功能与可插拔的组件模块分开。这种架构的主要目的是使系统更加灵活、可扩展和易于维护。微内核架构特征:

单一程序:微内核通常是在单一应用程序内部的设计,而微服务和SOA主要关注的是如何在多个独立运行的服务之间进行交互 ;业务边界:微内核不像微服务和SOA模块更符合业务边界,微内核不太符合业务边界;核心系统(微内核):微内核是系统的核心,包含最基本的功能,这些功能是必要的、不变的,对于系统的正常运行至关重要。这些功能通常包括基础的系统管理、通信和安全性等。外部组件:外围的组件或插件包含那些可以独立于核心系统进行变化或扩展的功能。这些组件与微内核通信,并依赖于其提供的核心服务。插件化与可扩展性:外部组件设计为插件形式,可以轻松地添加、移除或更新,而不需要修改微内核。这允许系统可以容易地适应新需求或技术。隔离性:微内核与外部组件之间的交互通过明确定义的接口进行,确保了良好的隔离性。这意味着一个组件的失败不会导致整个系统崩溃。通信机制:微内核与其外部组件之间的交互通常通过某种形式的消息传递或事件机制来完成。灵活性:由于系统的核心功能与可变的功能分离,所以可以根据需求轻松地替换、升级或添加新的外部组件。

微内核架构设计实例:

规则引擎可以被看作是微内核架构的一个实例,因为它将基础的规则处理逻辑(微内核)与具体的业务规则和其他功能(外部组件)分离开来。一个典型的、采用微内核架构的规则引擎是 “Drools”。Drools 特征(符合微内核设计原则):

核心引擎:Drools 有一个核心的规则匹配引擎,称为 ReteOO 引擎。这是其微内核的部分,负责基础的规则评估和执行功能。它本身并不知道具体的业务规则;它只知道如何处理和评估规则。规则定义:在 Drools 中,业务规则可以使用其特定的语言(Drools Rule Language,简称 DRL)编写。这些规则定义可以看作是“插件”或“模块”,因为它们可以独立于核心引擎进行更改、更新或替换。工具和扩展:除了核心引擎和规则定义,Drools 还提供了其他一些工具和扩展,如决策表、DSLs、工作流引擎等。这些工具和扩展可以被看作是微内核架构中的其他外部组件,它们与核心引擎紧密集成,但可以独立进行更改和扩展。灵活性:由于 Drools 的这种架构,开发人员可以非常容易地添加、修改或删除规则,而不需要触及核心引擎的代码。这大大提高了系统的灵活性和可维护性。

微内核架构优点:

松耦合:模块之间依赖关系弱,通过预定义接口进行通信。可扩展性好:可以方便地通过增加模块的实例来扩展系统功能。稳定性好:核心系统相对较小并且不容易更改,因此单个系统的稳定性得到了增强。性能高:模块间通信在同一进程内,避免网络通信开销。

微内核架构缺点:

性能开销大:由于外部模块需要通过内核进行通信,可能引入额外的性能开销。单点风险:所有模块在同一进程,一旦进程崩溃会导致全系统崩溃。设计挑战:正确地分离核心功能和辅助功能需要深入的设计考虑,否则容易导致不符合业务边界的划分或者内聚性变差。调试困难。模块边界多,跨模块调试不易。

相关推荐

王者荣耀在哪观看盛典预告 王者荣耀观看盛典任务完成攻略及技巧
dnf男气功怎么玩 2022男气功连招思路及职业详解
自动门遥控器如何配,配好的遥控器如何对码
365bet投注技巧

自动门遥控器如何配,配好的遥控器如何对码

📅 08-27 👁️ 7273