微服务架构 VS 单体架构

news2025/1/17 3:59:27

         

在软件行业,微服务架构是一种重要的发展趋势。这一趋势,不仅仅是对企业内的IT信息系统建设,甚至在企业向数字化转型方面,都有着深远的影响。微服务架构与传统的单体软件架构代表着IT产业处理软件开发方式的一个根本性转变,Netflix、Google、亚马逊等组织均已成功采用这一转变。但是,与传统的单体架构相比,微服务的优势是什么呢?

图片描述

1) 微服务架构vs单体架构

首先,让我们来看下微服务架构和单体架构。单体应用是按单个应用程序单元来构建的。一般来说,企业内的应用程序由三部分组成:数据库(通常由关系数据库管理系统中的许多表组成),客户端用户界面(由HTML页面和/或在浏览器中运行的JavaScript组成)以及服务器端应用程序。服务器端应用程序可以处理HTTP请求,执行某些特定域的逻辑,从数据库中检索和更新数据,以及填充要发送到浏览器的HTML视图。它是一个整体——实现单个逻辑的可执行文件。如果想要对系统进行任何更改,开发人员必须构建和部署服务器端应用程序的更新版本。

相比之下,微服务通过面向业务的API接口来表达其功能。它们封装了核心的业务功能,是业务的宝贵资产。服务的实现细节(可能涉及与数据系统的集成)被完全隐藏,因为API是纯粹使用业务术语来定义的。作为业务的宝贵资产,服务可以较好地适应于多个不同的业务场景中。在业务需要的时候,同一个服务可以在多个业务流程中重用,也可以在不同的业务渠道中使用。采用松耦合的设计原则,可以最大限度地减少服务与其消费者之间的依赖关系。通过标准化的业务API表达的契约,消费者不会受到服务内部实现变化的影响。这也就允许服务的所有者可以自由实现并更改可能位于API后面的数据处理或者组合服务系统,并在不对下游的API消费者产生任何影响的情况下替换它们。

2) 使用微服务架构vs单体架构的软件开发流程

在传统的软件开发流程中(瀑布,敏捷等),通常较大规模的团队围绕一个单体应用工作。项目经理、开发人员和操作人员可以通过这些模型取得不同程度的成功,从而发布可由业务验证的候选应用程序,特别是当他们获得使用特定的软件开发和运维技术栈的经验时。然而,传统方法存在一些潜在的问题:

·单体应用可能会演变为“大泥球”,巨大又复杂;在这种情况下,很难有单个开发人员(或开发人员组)理解整个应用程序。

·单体应用很难实现模块的重用。

·扩展单体应用通常是一项较大的挑战。

·很难快速重复部署单体应用程序的更新版本。

·根据定义,单体应用是使用单个开发技术栈(即JEE或.NET)实现的,这可能会限制“为不同的任务选择正确的工具”的灵活性。

将微服务架构与云部署技术、API管理和集成技术相结合,可以为软件开发提供不同的方法。把传统模式下的单体应用拆分成独立的服务,从而可以单独开发、单独部署、单独维护。这些服务具有以下优点:

·服务粒度小,理想情况下由少数开发人员构建。

·如果公开微服务的接口使用标准协议(例如RESTful API),那么它们可以被其他服务和应用程序使用和重用,而无需通过语言绑定或共享库直接耦合。

·服务可独立部署,并且可以独立于其他服务进行扩展。

·独立地开发服务允许开发人员使用适当的开发框架来完成手头的任务。

3) 微服务架构vs单体架构的代价

权衡之下,为服务架构带来的灵活性同时也呈现出一定的复杂性。由于以下几点原因,导致大量分布式服务难以大规模管理:

·项目团队需要能轻松发现服务作为潜在的重用候选者。这些服务应该提供文档,测试控制台等,因此重新使用比从头开始构建要容易得多。

·需要密切监测服务之间的相互依赖性。服务停机,服务中断,服务升级等都可能产生连锁的下游效应,应积极分析这种影响。

精心管理微服务交付以及尽可能自动化软件开发生命周期是非常重要的。缺乏DevOps风格的团队间协调和自动化工作流意味着您的微服务计划将带来更多的痛苦而不是好处。

4)微服务vs单体架构的优点

微服务架构与传统的单体架构带来的商业利益是显著的。如果部署得当,基于微服务的架构可以帮助业务避免欠下技术债务,以及大幅提高效率的重大价值。

例如,传统DevOps中,来自单体代码库的技术债务是真实存在的。使用单体代码库,即使是隔离的组件也共享相同的内存,并且共享对程序本身的访问。虽然这可能使代码接口和实现应用程序变得更容易,但它最终会削弱敏捷开发过程的灵活性。

更重要的是,单体代码库会导致效率呈指数级下降,从而增加了技术债务。例如,错误解析,界面修改,添加功能和对应用程序的其他更改等杂务会影响整个应用程序,从而造成停机,以及创建无意中引入低效率的环境。简而言之,单体代码库使用起来更耗时,适应性较差,最终维护成本更高,从而增加了技术债务。

微服务架构减少了传统的单体架构带来的技术债务,为市场节约可观的时间和速度成本,这是其一项重要优势。另外,微服务架构的优势不仅仅只有这一点,它还为企业带来了其他好处,从而可以降低成本并提高利润。这些好处包括以下几点:

·敏捷性:通过将功能分解到最基本的级别然后抽象相关服务,DevOps可以只专注于更新应用程序的相关部分。这消除了通常与单体应用程序相关的痛苦的集成过程。微服务加速了开发,将其转变为可在数周而非数月内完成的流程。

·效率:微服务架构可以更有效地使用代码和底层基础设施。通过减少运行特定应用程序所需的基础架构数量,可以节省多达50%的成本,这种情况并不少见。

·弹性:通过在多个服务之间分散功能,可以消除应用程序对单点故障的敏感性。从而使应用程序能够更好地运行,减少停机时间并可按需扩展。

·收益:更快的迭代和更短的停机时间可以帮助增加收益。随着微服务的不断改进,用户保留和参与度也会提高。

公司如果希望最大限度地提高生产力,提高敏捷性和改善客户体验,那么就应该从采用单体Web应用,改为采用微服务,其松耦合的架构可加速开发,测试和部署,从而满足当今和未来的数字需求。

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

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

相关文章

【C++11】异常

🌈1.C语言传统处理错误的方式 在讲解C的异常机制之前我们先来复习一下传统的处理错误的方式。 传统的错误处理机制: 1.终止程序、如assert , 缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。2.返回错误码、缺陷&…

Apache POI导入导出excel文件实战

文章目录前言技术栈1、引入依赖2、导入代码实现3、导出代码实现3.1、准备导出文件模板3.2、导出代码实现4、代码实现解释5、常见问题前言 这两天公司项目业务提出需求,要求在前端上传excel文件然后解析展示,因此写篇文章记录一下实现。 技术栈 spring…

抖音小程序实践三:接口开发指南

通过官方文档可以更系统的学习到所有的接口,我这边罗列一下我自己用到测试过的接口供大家参考。 前端-小程序对接官方文档:https://microapp.bytedance.com/docs/zh-CN/mini-app/develop/api/open-interface/user-information/tt-get-user-info服务端-小…

个人黄金准备与须知

投资黄金可以为自己的资产保值,也可以福泽后人,因此十分符合国人传统文化特点和理财智慧。可是现在市场中可以投资黄金的平台那么多,投资者必须先认真“调查研究”,才能“去芜存菁”,选到值得托付的好平台。 其实投资者…

为笔记本电脑绑定公网IP随时随地BT做种完整方案(frp加v2ray配合比特彗星点亮绿灯)

BT做种需要拥有固定的IP(IPV4)和端口,如果想在拥有固定IP的服务端做种,可以直接参考前一期https://www.v2fy.com/p/2022-12-25-bt-1671963832000/ ,如果想使用笔记本随时随地做种,那就需要拥有固定IP的服务器进行流量转发。 本篇…

富特科技在创业板IPO过会:计划募资约9亿元,股东包括小米等

近日,深圳证券交易所披露的信息显示,浙江富特科技股份有限公司(下称“富特科技”)获得创业板上市委会议审核通过。据贝多财经了解,富特科技于2022年6月16日在创业板递交招股书。 本次冲刺创业板上市,富特科…

【聆思CSK6 视觉AI开发套件试用】头肩、手势识别体验与PWM舵机控制

本篇文章来自极术社区与聆思科技组织的CSK6 视觉AI开发套件活动,更多开发板试用活动请关注极术社区网站。作者:酷电玩家 环境搭建 官方文档详细环境搭建教程:环境搭建 1、下载Git进行安装。 2、安装lisa zep工具,并初始化 CSK6…

洛谷千题详解 | P1026 [NOIP2001 提高组] 统计单词个数【C++、Java语言】

博主主页:Yu仙笙 专栏地址:洛谷千题详解 目录 题目描述 输入格式 输出格式 输入输出样例 解析: C源码: Java源码: C源码2: ----------------------------------------------------------------------------…

vector模板的简易实现

这篇文章,我们模拟一下STL里面的vector的实现。但是会简化一些内容,让大家能够更好的理解。模拟实现的目的不是为了更好的造轮子,而是为了更好的理解这些容器。 文章目录1. 成员变量2. push_back函数3. reserve函数4. pop_back函数和下标运算…

QT 多线程中使用QCanBusDevice进行PCAN通讯时,无法正常发出数据

QT 多线程中使用QCanBusDevice进行PCAN通讯时,无法正常发出数据 前言 我一开始的代码逻辑是,PCAN开启、关闭、发送、接收这些功能整合在一个工具类中,这个工具类的对象是在主线程创建的,然后我有一个要循环定时发送的功能是独立…

与企企通强强联手!哈尔斯二期数字化采购项目正式启动

近日,浙江哈尔斯真空器皿股份有限公司(以下简称“哈尔斯”)联合企企通举办二期数字化采购项目启动会,旨在助力哈尔斯实现采购数字化全面升级,提升自主品牌竞争力。会上,双方就该项目的建设方案、项目资源、…

铝合金表面处理废水除铝工艺

铝型材表面处理用水量大,产生废水多,废水中有害物质持续排放。如不加以处理必将污染环境。同时伴随着我国对排污量的征税,也会增加企业的成本和负担。因此,从企业的社会责任和效益两方面考虑,进行废水处理是必须和必要…

解决VsCode启动Vue项目报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

问题描述 最近居家办公,网速不太稳定,开会的时候网络也是断断续续的,今天需要拉下前端项目运行起来 在我执行npm i下载包的时候,我看到网络超时的错误警告就感觉不太秒。知道大概率要启动失败了 果不其然执行npm run serve的时…

窃取信息的新恶意软件通过假冒的破解网站感染使用者

©网络研究院 一种名为“RisePro”的新型信息窃取恶意软件正在通过由 PrivateLoader 按安装付费 (PPI) 恶意软件分发服务运营的虚假破解站点进行分发。 RisePro 旨在帮助攻击者从受感染的设备中窃取受害者的信用卡、密码和加密钱包。 本周Flashpoint 和 Sekoia的分析师发…

前端框架 Nuxt3 集成 Pinia

目录 一、Nuxt3集成Pinia 二、Pinia的使用 state的使用 1、基本使用及动态渲染 2、state的重置 3、批量更改state数据 getters的使用 1、getters的基本使用 2、getters传参 actions的使用 1、actions的基本使用 一、Nuxt3集成Pinia 参考官方文档:简介 |…

【JavaSE】常用类(447~515)

String 447.常用类-每天一考 1.画图说明线程的生命周期,以及各状态切换使用到的方法等 状态,方法 2.同步代码块中涉及到同步监视器和共享数据,谈谈你对同步监视器和共享数据的理解,以及注意点。 synchronized(同步监视器){//操…

消息队列RabbitMQ学习笔记(五)高级特性

1. 发布确认高级 在生产环境中由于一些不明原因,导致 RabbitMQ 重启,在 RabbitMQ 重启期间生产者消息投递失败, 导致消息丢失,需要手动处理和恢复。于是,我们开始思考,如何才能进行 RabbitMQ 的消息可靠投…

ccc-sklearn-11-线性回归(1)

1.线性回归概述 回归需求在现实中非常多,自然也有了各种回归算法。最著名的就是线性回归和逻辑回归,衍生出了岭回归、Lasso、弹性网,以及分类算法改进后的回归,如回归树、随机森林回归、支持向量回归等,一切基于特征预…

自定义卷积实现卷积的重参数【手撕代码】

在我的上篇文章中主要对RepVGG进行了解析【RepVGG网络中重参化网络结构解读】,里面详细的对论文中的代码进行了解析,展示了RepVGG在重参数时是如何将训练分支进行合并的,总的一句话就是在推理阶段,会将1x1以及identity分支以paddi…

vivo 游戏中心低代码平台的提效秘诀

作者:vivo 互联网服务器团队- Chen Wenyang 本文根据陈文洋老师在“2022 vivo开发者大会"现场演讲内容整理而成。公众号回复【2022 VDC】获取互联网技术分会场议题相关资料。 在互联网流量见顶和用户需求分层的背景下,如何快速迭代产品功能&#xf…