单体、分布式、微服务、Serverless及新兴部署模式分析

news2024/9/22 7:04:04

在数字化时代,软件架构的选择对于企业的技术战略至关重要。从单体架构到Serverless,再到服务网格和服务化模型,每一种架构模式都反映了特定时期内技术发展和业务需求的特点。本文将对这些架构模式的优缺点进行讨论,供大家参考。

部署方式的不断演进

单体架构(Monolithic Architecture)

概念含义:
单体架构是一种应用程序设计方法,其中所有的功能和业务逻辑都集成在一个单独的、自包含的单元中。单体架构类似于结构型设计模式的享元模式,不断地复用现有的数据库、配置等。它是架构世界的全家桶,web+package,前台业务+后台管理都在里边。在业务发展之初是有无可比拟的优势的,容易部署和发布上线,满足了业务初期的快速发版上线,最快程度地让用户看到产品原型。

特点:

  • 易于开发和部署:所有组件都集成在一起,简化了开发和部署流程。
  • 测试相对简单:由于所有组件都在一起,测试可以更集中地进行。

优点:

  • 易于开发和部署:单体应用通常包含在一个应用程序中,开发和部署过程相对简单。
  • 快速迭代:在项目初期,需求不复杂时,单体架构可以快速响应市场变化。

缺点:

  • 复杂性高:随着功能的增加,代码库迅速膨胀,导致项目难以维护,需求迭代慢。
  • 技术债务:长期积累的技术债务使得单体应用越来越难以适应新需求。 引入新的框架或语言需要重构所有业务模块,阻碍技术创新
  • 部署频率低:全量部署耗时长,风险高,导致部署频率降低。
  • 可靠性差:单体应用的一个Bug可能影响整个系统。 一损俱损
  • 扩展能力受限:无法根据业务模块的需要进行伸缩,导致资源浪费。
  • 阻碍技术创新:统一技术平台限制了新技术的引入和创新。

分布式架构(Distributed Architecture)

概念含义:
分布式架构是一种应用程序设计方法,其中应用程序的不同组件分布在不同的服务器或位置,并通过网络通信。这种架构对业务按照产品模块抽象,变成一个分布式系统,然后部署在不同的服务器上,责任清晰

可以针对性的扩展,灵活部署可重用的逻辑单元抽象后,提高代码的复用性。类似于桥接再前后台方向上做拆分,在水平方向上也做拆分,即允许水平扩展和负载均衡。

特点:

  • 可扩展性:通过增加更多的服务器来处理增加的负载。
  • 高可用性:组件分布在不同位置,提高了系统的容错能力。

优点:

  • 负载均衡:通过分布式部署,系统可以更好地处理高并发需求。
  • 降低耦合度:模块化设计降低了模块间的依赖。
  • 责任清晰:不同团队可以负责不同的子项目。
  • 扩展方便:新增功能时,只需增加子项目并调用其他系统接口。
  • 部署灵活:可以灵活地进行分布式部署。
  • 提高代码复用性:例如,通过分布式REST服务共享service层。

缺点:

  • 系统间交互复杂:远程通信增加了接口开发的工作量,问题排查更加困难。
  • 相比较单体应用,需要网络开销
  • 相比较单体应用,发布系统需要特定脚本,甚至是运维平台。

面向服务架构(SOA模式)

从运维侧视角出发,从前后端分离切入,后端服务发布后需要登记,然后web根据列表查找对应的服务,然后直连数据库,这就是面向服务架构SOA,最大的特征是注册中心,类似于代理设计模式的作用。它确保服务的设计和开发的一致性和完整性的治理机制。模块按照后端服务的功能内聚进行拆分,然后抽象为服务。

优点:

1)ESB集成不同协议的服务,做消息的转化、解释、路由,从而联通各个服务解决企业通信问题

2)服务松耦合、可扩展性强

缺点:

1)ESB的存在并没有根本解决单体巨石应用的一些问题

2)SOA更多的面向企业服务,服务拆分粒度很大,更多的是为了复用

微服务架构(Microservices Architecture)

概念含义:
因S0A服务粒度太粗,微服务是去中心化的SOA扩展,强调服务彻底的组件化,一个组件就是一个产品。服务间通过轻量化的协议进行通信,并根据服务本身进行独立化部署。微服务架构是一种将应用程序作为一套小服务的设计方法,每个服务运行在其自己的进程中,并通常围绕业务功能构建。微服务采用分布式、松耦合结构,服务可以独立部署、升级和扩展,它们之间不会互相影响,也可以让不同的开发团队各自维护自己的服务,而不是更新整个应用,从而减少开发时间和发布频率。微服务类似于装饰模式,通过服务之间的积木式看加完成用户想要的功能。

特点:

  • 独立性:每个服务可以独立开发、部署和扩展。
  • 技术多样性:团队可以选择最适合其服务的技术栈。

优点:

  • 易于开发和维护:每个微服务关注特定业务功能,代码量较少。
  • 快速启动:微服务代码量少,启动快。
  • 局部修改易部署:只需重新部署修改的服务。
  • 技术栈灵活:可根据服务需求选择合适的技术栈。

缺点:

  • 运维要求高:需要保证大量服务的正常运行与协作。
  • 分布式复杂性:系统容错、网络延迟、分布式事务等带来挑战。
  • 接口调整成本高:API修改可能影响多个服务。
  • 重复劳动:相同功能可能在不同服务中重复开发。

Serverless架构(Serverless Architecture)

概念含义:
Serverless包括BaaS和FaaS服务,前者就是开发者利用提供包括云函数、数据存储、文件存储等一整套后端服务,通过API完成运维管理和容器部署;后者允许开发者以函数作为最小单元部署到云平台上,再通过API来调用。Serverless好处是按照实际使用进行计费,降低了研发成本可以一套代码多端使用。对于单个API和一组API的计费和流量统计就是典型的组合模式。

特点:

  • 无需管理服务器:开发者专注于代码,而云服务提供商处理基础架构。
  • 按需付费:只支付代码实际运行的时间。

优点:

  • 低运营成本:按需计费,节省资源。
  • 简化设备运维: 聚焦业务逻辑开发, 开发人员无需关注底层硬件运维。
  • 提升可维护性:集成第三方服务,降低开发成本,简化运维, 业务连续性和容灾有保障 。
  • 快速开发:利用BaaS平台快速开发产品, 弹性高可用,按需付费,灵活性和适应性好 。

缺点:

  • 厂商平台绑定:依赖特定云服务,线上开发黑盒调试复杂,迁移成本高。
  • 成功案例少,无行业标准:目前适合简单应用,缺乏大型案例。
  • 冷启动,冷门函数或周期性函数应对突发高流量难以快速达到峰值能力
  • 接口暴露较多,安全风险增加

服务网格模式(Service Mesh)

概念含义:
服务网格(Service Mesh)是一种专注于微服务间通信的基础设施层,如Istio、Linkerd等。Sidecar 架构是指业务容器和代理容器同处于一个 Pod 内,业务容器的进出向流量全部由代理容器代理。业务容器负责业务逻辑本身,代理容器负责服务的治理,包括负载均衡、网格信息传递、流控熔断、访问控制等。Sidecar模式就是一个适配器,使得不同的业务模块都可以进行一些统一的操作与管理。

特点:

  • 微服务间通信的抽象化:服务网格处理服务间的通信,使得业务逻辑更清晰,实现微服务治理与业务逻辑的解耦。
  • 增强的可观察性:服务网格可以提供更详细的监控和日志记录。
  • 异构系统的统一治理。 多语言、多协议的统一流量管控、监控等需求。
  • 流量控制。服务网格承载了微服务之间的通信流量,服务网格流量控制
  • 安全。服务网格恰恰提供了保护网络调用的功能和基础设施。

优点:

  • 微服务间通信的抽象化:简化了服务间的通信逻辑。
  • 增强的服务发现和负载均衡:自动服务发现和智能负载均衡。
  • 故障恢复和流量管理:提供重试、超时和流量分割。
  • 安全和策略执行:统一的安全策略和认证。

缺点:

  • 增加系统复杂性:引入服务网格层可能会增加系统的复杂性。
  • 性能开销:代理可能会引入额外的延迟。

模型即服务模式(Model as a Service, MaaS)

概念含义:
MaaS,模型即服务,是典型的门面设计模式, 通过模型训练,封装成对外的整套逻辑和数据 (包括视频、音频、图片、表格),上层业务逻 辑部分下沉到模型智能算法。通过大模型训练, 动态调整服务能力和用户期待的系统行为和数据 反馈。它屏蔽模型训练子系统的复杂实现,用户 仅仅是通过自然语言就可以获得对应的买票、支 付、互动、图像、甚至是AI制作的视频 ,允许用户通过API访问预先训练好的机器学习模型,而无需自己构建和维护模型。

特点:

  • 快速集成AI:用户可以快速将AI模型集成到自己的应用程序中。
  • 持续更新:服务提供商负责模型的持续训练和优化。

优点:

  • 快速集成AI能力:无需自行开发,快速集成AI模型。
  • 持续更新和优化:服务提供商持续优化模型。
  • 降低技术门槛:无需深入了解机器学习技术。

缺点:

  • 数据隐私和安全问题:数据需要上传到外部服务器。
  • 依赖外部服务:模型的性能和可用性依赖于服务提供商。
  • 模型的问题如果上升到业务层,那么排查很难
  • 跨编程语言协同有难度
  • 目前模型的响应速度无法应对超高流量

总结

软件架构的选择应基于业务需求、技术能力、团队经验等多方面因素。从单体到微服务,再到Serverless和新兴的服务网格与MaaS模式。每种部署模式都对应着不同的技术需求和业务场景,选择合适的架构模式对于提高开发效率、系统可维护性和业务扩展性至关重要。

本文为大家提供了对不同软件架构模式的深入解析,希望能够帮助大家更好地理解每种架构的特点,以及它们在现代软件开发中的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1922994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第231题2的幂

题目&#xff1a; 题解&#xff1a; class Solution { private:static constexpr int BIG 1 << 30;public:bool isPowerOfTwo(int n) {return n > 0 && BIG % n 0;} };

C#开发:Git的安装和使用

一、安装git 二、如何克隆代码&#xff1f; 1.找到某个本地目录&#xff0c;右键-gitbash 2. 输入以下代码&#xff08;红色是地址&#xff0c;在gitlab获取或联系管理员获取&#xff0c;下图为复制地址&#xff09;&#xff1a; git clone http://xxxxxxxxx.git 输入帐号和令…

【RAG检索增强生成】有道QAnything深度解析与实践

目录 引言1、QAnything简介2、技术解析2.1 RAG技术核心2.2 QAnything架构2.3 模型与算法 3、应用场景3.1 企业知识管理3.2 教育与学术研究3.3 客户服务 4、部署实践4.1 环境准备4.2 安装QAnything4.3 启动运行4.4 访问UI界面4.4 API使用4.4.1 新建知识库&#xff08;POST&#…

美团收银Android一面凉经(2024)

美团收银Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《美团收银Android一面凉经(2024)》。 应聘岗位: 美团餐饮PaaS平台Android开发工程师…

我的第128天创作纪念日

&#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;C笔记专栏&#xff1a; C笔记 &#x1f308;初阶数据结构笔记专栏&#xff1a; 初阶数据结构笔记 &#x1f308;喜欢的诗句:无人扶我青云志 我自踏雪至山巅 文章…

从LeetCode215看排序算法

目录 LeetCode215 数组的第K个最大元素 ① 第一反应&#xff1a;java的内置排序Arrays.sort() ② 冒泡排序 ③归并排序&#xff08;先分解再合并&#xff09; ④快速排序&#xff08;边分解边排序&#xff09; ⑤堆排序 LeetCode215 数组的第K个最大元素 给定整数数组 nums…

谈谈软件交互设计

谈谈软件交互设计 交互设计的由来 交互设计(Interaction Design)这一概念,最初是由IDEO创始人之一Bill.Moggridge(莫格里奇)1984年在一次会议上提出。他设计了世界上第一台笔记本电脑Compass,并写作出版了在交互设计领域影响深远的《Designing Interactions》一书,被称…

【分库】分库的核心原则

目录 分库的核心原则 前言 分区透明性与一致性保证 弹性伸缩性与容错性设计 数据安全与访问控制机制 分库的核心原则 前言 在设计和实施分库策略时&#xff0c;遵循一系列核心原则是至关重要的&#xff0c;以确保系统不仅能够在当前规模下高效运行&#xff0c;还能够随着…

Aop切面编程(2)--代理模式

1、代理模式的理解&#xff1a;不修改A对象的代码的基础上&#xff0c;对A代码块进行拓展。通过创建ProxyA代理对象&#xff0c;拓展A对象并调用A对象的核心功能&#xff1b; 即&#xff1a;不修改对象的源码基础上&#xff0c;创建代理对象&#xff0c;进行功能的附加和增强&…

【边缘计算网关教程】4.西门子PPI协议对接

前景回顾&#xff1a;【边缘计算网关教程】3.创建第二个流程-CSDN博客 目录 1. 硬件连接 2. PLC串口参数 2.1. 打开STEP7软件 2.2. 查看通信参数 3. 网关设置 3.1. PLC连接设置 3.2. 数据点位设置 3.3. 测试 西门子 PPI 协议 适配PLC&#xff1a;S7-200 西门子S7-200 PLC…

Python爬虫之路(2):爬天气情况

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…

Stable Diffusion 深度探索:从入门到精通的全方位教程

在人工智能艺术创作的浪潮中&#xff0c;Stable Diffusion 作为一股不可忽视的力量&#xff0c;正以其独特的魅力吸引着无数创作者和科技爱好者的目光。本文旨在为大家提供一份详尽的 Stable Diffusion 教程&#xff0c;从基础概念到高级应用&#xff0c;带领你一步步走进这个充…

k8s record 20240710 监控

不是adaptor 是opetator 案例 监控有了&#xff0c;日志搜集呢&#xff1f; 一、kubelet 的小弟 kubelet — 负责维护容器的生命周期&#xff0c;节点和集群其他部分通信 cAdvisor 集成在 Kubernetes 的 kubelet 中&#xff0c;能够自动发现和监控集群中所有的容器。dockers…

基于SpringBoot+Vue的数码论坛系统(带1w+文档)

基于SpringBootVue的数码论坛系统(带1w文档) 基于SpringBootVue的数码论坛系统(带1w文档) 数码论坛系统能够通过互联网得到广泛的、全面的宣传&#xff0c;让尽可能多的用户了解和熟知数码论坛系统的便捷高效&#xff0c;不仅为用户提供了服务&#xff0c;而且也推广了自己&…

SpringBoot整合JWT示例教程

1. JWT简介 JSON Web Token (JWT) 是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间作为 JSON 对象安全地传输信息。由于这些信息是经过数字签名的&#xff0c;因此可以被验证和信任。JWT 通常用于身份验…

深度学习论文: YOLOv5, YOLOv8 and YOLOv10: The Go-To Detectors for Real-time Vision

深度学习论文: YOLOv5, YOLOv8 and YOLOv10: The Go-To Detectors for Real-time Vision YOLOv5, YOLOv8 and YOLOv10: The Go-To Detectors for Real-time Vision PDF:https://arxiv.org/pdf/2407.02988v1 PyTorch: https://github.com/shanglianlm0525/PyTorch-Networks 1 概…

51单片机-第三节-LCD1602调试工具,矩阵键盘

一、LCD调试工具函数&#xff1a; 使用&#xff1a; 所有函数&#xff0c;前两个参数&#xff0c;均为指定显示位置。 四个参数的&#xff0c;第四个参数&#xff0c;为保留位数&#xff0c;少的保留后面&#xff08;123,2 -> 23&#xff09;&#xff0c;多的前面补零。 …

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《天气数据驱动下基于深度主动学习的新型电力系统供需失衡风险快速评估方法 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Apache-Flink未授权访问高危漏洞修复

漏洞等级 高危漏洞!!! 一、漏洞描述 攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作。 二、修复建议 根据业务/系统具体情况,结合如下建议做出具体选择: 配…

产品经理-研发流程-敏捷开发-迭代-需求评审及产品规划(15)

敏捷开发是以用户的需求进化为核心&#xff0c;采用迭代、循序渐进的方法进行软件开发。 通俗来说&#xff0c;敏捷开发是一个软件开发流程&#xff0c;是一个采用了迭代方法的开发流程 简单来说&#xff0c;迭代就是把一个大产品拆分出一些最小的实现单位。完成不同的迭代就最…