深入浅出 -- 系统架构之微服务架构的新挑战

news2025/2/26 2:24:35

尽管微服务架构有着高度独立的软件模块、单一的业务职责、可灵活调整的技术栈等优势,但也不能忽略它所带来的弊端。本篇文章,我们从网络、性能、运维、组织架构和集成测试五个方面来聊一下设计微服务架构需要考虑哪些问题,对设计有哪些挑战呢?

1、跨进程通信带来的问题

前面我们聊过了,以往的单体应用,系统是在单机中进行进程通信,通信的稳定性相当好,只要服务器不宕机,基本上不会出现通信中断或异常的问题(超时不计入)。但是将单体应用打散为分布式架构后,系统的通信方式改变为了进程间通信,往往还有可能伴随着跨设备的网络访问,那么架构师在设计的时候,就必须要考虑应用的上下游系统因网络因素导致无法通信的问题。要假设网络是不可靠的(就相当于是前端页面不应该相信用户的一切输入,该做的数据校验一定要做),并对网络异常情况作出符合预期的异常处理。

以支付场景为例:用户支付成功后,系统自动调用短信发送服务给用户发送支付成功的短信,此时就需要考虑到如果短信发送不成功需要做什么异常处理。是标记未发送后重试,还是通过App进行消息提示,并将异常信息入库提醒运维检查短信服务运行情况。

单体应用调用链路:

微服务架构下的调用链路:

2、响应延迟带来的问题

与单体架构进程内通行相比,微服务架构的跨进程、跨网络通信在网络传输与消息序列化带来的延迟是不可忽略的。尤其是在五个以上的微服务间消息调用时,网络延迟对于实时系统的影响是很大的。

以红海行动电影中的1130近防炮的弹道计算为例:需要通过雷达监测的敌方炮弹的射速、方位、风速等因素计算近防炮在何时、哪些方位发射子弹进行拦截。在这种情况下,使用微服务架构带来的延迟,可能导致炮弹都打到身上了,弹道计算数据还没传过来。显然这类系统采用分布式设计就不合适。 以上例子纯属军事外行瞎猜,只是为了举例,说的不对的还请不要介意。。

3、运维方面的问题

之前的单体架构,运维在部署系统时,直接将系统jar或war包丢到容器里启动就行了,就算是没有自动化部署,工作量也不是很大。同时,以前的系统升级都是以周或月为单位,就算是人肉运维也都可以应付得过来。而对于微服务而言,每个服务都是可独立运行、独立部署、独立维护的业务单元。再加上市场的需求越来越高,运维人员每天面对成百上千台服务器发布几十次都是有可能的,人肉运维和部署显然已经无法满足互联网的快速变化。

自动化运维架构图

4、组织架构带来的问题

微服务架构带来的不仅是软件架构的改变,也是公司组织架构的改变。

单体架构下,公司以职能划分部门(项目部、产品部、设计部、开发部、测试部、运维部)进行独立管理考核,技术人员负责其中的某几个模块开发即可,可由统一的项目经理、产品经理、UI设计师进行支撑。

微服务架构下,是以业务模块进行团队划分,每个团队是内聚的,要求可以完成从调研到发版的全流程,尽量减少对外界的依赖。如何将之前的职能团队调整为按业务划分的研发团队,同样是对组织架构的巨大挑战。毕竟人的思想比架构更难改变。

单体架构下团队配置

微服务架构下团队配置

5、集成测试变得异常艰难

传统的单体架构集成测试是将不同的模块按业务流程进行组合,在进程内验证每种可能性下模块间的协作是否符合预期即可。对于微服务而言,系统被拆解成独立的运行单元,服务间采用接口进行通信。要获取准确的结果,必须搭建完整的微服务环境。同时,跨网络通信带来的网络延迟、超时、带宽、数据量等因素都将影响最终结果,测试结果容易产生偏差。

所以,微服务架构并不是没有缺点,在一定程度上,可能造成的影响比单体的影响大很多。那么我们是难道就不进行改造吗?有困难就退缩不是一个优秀架构师该有的品质。那有什么可借鉴的经验吗?当然有,我们以后再下篇接着聊!

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

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

相关文章

使用 Apipost 管理项目接口文档

目录 前言 基本使用教程 注册账号 创建项目 创建接口 编辑接口 ​编辑 接口设计 生成文档 接口用例 前言 在 web 后端开发中,开发接口之前通常需要先写接口文档,然后前后端再根据接口文档开始开发系统模块。接口文档形式多种多样&#xff0c…

Aurora8b10b(1)IP核介绍并基于IP核进行设计

文章目录 前言一、IP核设置二、基于IP核进行设计2.1、设计框图2.2、aurora_8b10b_0模块2.3、aurora_8b10b_0_CLOCK_MODULE2.4、aurora_8b10b_0_SUPPORT_RESET_LOGIC2.5、aurora8b10b_channel模块2.6、IBUFDS_GTE2模块2.7、aurora_8b10b_0_gt_common_wrapper模块2.8、aurora8b10…

基于MPPT的风力机发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1风能与风力发电机模型 4.2风力机功率特性与最大功率点 4.3 MPPT 5.完整工程文件 1.课题概述 基于MPPT的风力机发电系统simulink建模与仿真。MPPT使用S函数编写实现。基于最大功率点跟踪&#xff08…

【OpenCV-颜色空间】

OpenCV-颜色空间 ■ RGB■ BGR■ HSV■ HSL■ HUE■ YUV ■ RGB ■ BGR BGR 就是RGB R和B调换位置。 OpenCV 默认使用BGR ■ HSV ■ HSL ■ HUE ■ YUV

免费搭建:雾锁王国Enshrouded游戏服务器,10秒完成!

免费自建雾锁王国Enshrouded服务器,先领取阿里云300元无门槛代金券,然后在雾锁王国Enshrouded专题页一键部署,不需要基础,鼠标点选即可10秒钟创建一台雾锁王国游戏服务器,超简单,阿里云服务器网aliyunfuwuq…

利用IP地址判断羊毛用户:IP数据云提供IP风险画像

在当今数字化社会,互联网已经成为人们日常生活和商业活动中不可或缺的一部分。然而,随着网络的普及,网络欺诈行为也日益猖獗,其中包括了羊毛党这一群体。羊毛党指的是利用各种手段获取利益、奖励或者优惠而频繁刷取优惠券、注册账…

leetcode热题100.跳跃游戏2

Problem: 45. 跳跃游戏 II 文章目录 题目思路复杂度Code 题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处: …

【排列回溯】Leetcode 46. 全排列

【排列回溯】Leetcode 46. 全排列 ---------------🎈🎈题目链接🎈🎈------------------- used数组,其实就是记录此时temp 里都有哪些元素使用了,一个排列里一个元素只能使用一次。 class Solution {List&…

Dockerd的使用

端口映射 存储卷 类似于mount,把真机的某个目录映射都容器里面 -v 选项可以有多个 利用存储卷修改配置文件 容器间网络模式 共享网络为 --networkcontainer:容器名 微服务架构 一种由容器为载体,使用多个小型服务组合来构建复杂的架构为…

如何编写属于自己的第一个exp

0x00 前言 在我们找到一个漏洞之后,可能会想着去fofa上搜语法进而扩大战果,而有些漏洞利用起来十分繁琐,这时候就需要一个exp来批量帮我们进行扫描工作,接下来就介绍一下如何进行exp的编写,这个过程中最重要的还是体现…

12-1-CSS 常用样式属性

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 CSS 常用样式属性1 CSS 三角形2 CSS 用户界面样式2.1 什么是界面样式2.2 鼠标…

磁盘压力测试工具(vdbenchfio)

磁盘压力测试工具(vdbench&fio) 最近有遇到对象挂载为文件系统的需求,为了测试挂载后的读写性能,有了解了一些测试工具。下面给大家分享下我使用的工具vdbench和fio。 1 vdbench 官网文档:https://www.oracle.com/…

2024/4/5 ACM格式练习

一、知识点: (1)行数不固定:用Scanf的err返回值判断是否读到EOF。 (2)每行数据个数不固定:一个一个读数据和它后面的字符,判断后面的字符是否是换行符。如果是就说明读完了一行数据…

汽车网络安全管理

汽车网络安全管理 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事&#xff0c…

三菱FX3U计数器

1,定义计数器用了计数输入信号沿触发次数 2,分类主要分为普通计数器和高速计数器 范围定义C0-C9916位正向计数器(一般用)C100-c19916位正向计数器(保持型)C200-C21932位加减计数器(一般用)C220-C23432位加…

软考111-上午题-【计算机网络】-URL和DNS

一、URL解析 org:各类组织结构(非盈利团队) 1-1、顶级域 顶级域名是域名的最后一个部分,即是域名最后一点之后的字母,例如:www.baidu.com这个域名中,顶级域是.com(或.COM&#xff…

20240405,数据类型,运算符,程序流程结构

是我深夜爆炸&#xff0c;不能再去补救C了&#xff0c;真的来不及了&#xff0c;不能再三天打鱼两天晒网了&#xff0c;真的来不及了呜呜呜呜 我实在是不知道看什么课&#xff0c;那黑马吧……MOOC的北邮的C正在进行呜呜 #include <iostream> using namespace std; int…

云原生架构(微服务、容器云、DevOps、不可变基础设施、声明式API、Serverless、Service Mesh)

前言 读完本文&#xff0c;你将对云原生下的核心概念微服务、容器云、DevOps、Immutable Infrastructure、Declarative-API、Serverless、Service Mesh 等有一个相对详细的了解&#xff0c;帮助你快速掌握云原生的核心和要点。 因题主资源有限, 这里会选用部分云服务商的组件进…

idea开发 java web 配电室后台管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 配电室后台管理系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主 要采用B/S模式开发。 前段主要技术 cs…

LLM大语言模型(九):LangChain封装自定义的LLM

背景 想基于ChatGLM3-6B用LangChain做LLM应用&#xff0c;需要先了解下LangChain中对LLM的封装。本文以一个hello world的封装来示例。 LangChain中对LLM的封装 继承关系&#xff1a;BaseLanguageModel——》BaseLLM——》LLM LLM类 简化和LLM的交互 _call抽象方法定义 ab…