当前位置: 首页 > article >正文

微服务相比传统服务的优势

这是一道面试题,咱们先来分析这道题考察的是什么。

如果分析面试官主要考察以下几个方面:

  1. 技术理解深度

  • 你是否清楚微服务架构(Microservices)和传统单体架构(Monolithic)的本质区别。

  • 能否从设计理念、技术实现、适用场景等维度对比两者。

  • 实际经验与场景化思考

    • 是否在项目中应用过微服务,能否结合案例说明优势(如提升开发效率、解决扩展性问题等)。

    • 能否辩证看待优势(例如微服务并非银子弹,会带来复杂度上升)。

  • 系统设计能力

    • 是否理解架构选择背后的权衡(Trade-offs),例如团队规模、业务迭代速度对架构的影响。

  • 技术趋势认知

    • 是否关注云原生、DevOps 等与微服务相关的技术生态(如 Kubernetes、Service Mesh)。

    那在回答这道题的时候就需要进行适当的扩展体现这部分的能力。但是同时要注意避免面试官觉得你跑题,所以在介绍每个优势之前可以先做一个总结性的:这个问题我会结合对技术的理解、实际经验、技术选型决策与技术趋势几个方面来说。

    高内聚、低耦合

    微服务架构将一个大型应用拆分成多个小型、自治的服务,每个服务都围绕特定的业务功能进行构建,具有高度的内聚性。各个微服务之间通过轻量级的通信机制(如RESTful API)进行交互,耦合度极低。这种特性使得每个微服务都可以独立开发、测试、部署和运维,极大地提高了开发效率‌。

    在多人维护单体应用的时候,可能很多人都遇到过代码冲突的困境。代码冲突本质上是耦合度高的外在表现。之前一个项目中由于服务还没有做拆分,还要一个人兼顾好几个项目的开发,多分支切换。导致每次发布生产前要花半天的时间做冲突合并。

    有次合并后有个地方没有冲突,但是代码逻辑是老的(和提交顺序有关)。被指出来之后人家说因为没有冲突,就不是人家的问题。这种不对结果负责的态度也就只能给个眼神过去。(实际面试时注意这种话是不能说的哦)

    但是这种代码一旦上线造成后果,那就面临损失,服务拆分是合理的解决方案。

    独立部署和灵活扩展

    微服务是独立的应用,可以单独上线或更新,不需要停掉整个系统。这种设计使得部署更灵活,降低了发布风险,并且可以根据流量压力独立扩展,只对流量大的服务增加资源,而不用浪费资源扩展整个系统‌。

    试想你有一个服务,原本上面的CURD接口有按照主键的增删改查(称为A类)和批量查询(称为B类)两部分。A类可用性要求4个9。B类可用性要求2个9。这种情况下A类和B类独立部署A类可能要求三地六中心部署,B类其实只要部署在1个机房里就满足要求了。A类是核心业务,可以设置弹性伸缩策略,比如CPU大于80%时自动扩容,CPU持续1分钟小于60%时自动缩容来保证可用性。而对于B类业务设置弹性伸缩策略会增加成本,必要性也不是很大。

    技术多样性‌

    每个服务可以选择最适合的技术栈。例如,订单服务可以用Java,AI服务可以用Python。这种灵活性支持技术创新,团队可以尝试使用新技术,而不必担心影响其他服务‌。

    按业务能力划分服务与组织团队

    微服务架构将应用按业务能力划分为不同的服务,每个服务要求在对应业务领域的全栈软件实现。这种组织方式跨功能,包含实现业务所需的全面技能,有助于提高开发效率和团队协作‌。

    服务即产品

    传统的应用开发是基于项目模式的,而微服务架构将每个服务视为一个独立的产品。这种模式使得服务的开发和维护更加灵活,能够更快地响应市场变化‌。

    下面的这个案例,如果不是采用微服务的架构,这种演进是很难做到的:

    我们团队负责的有一个叫基础数据的服务,这个服务连接了全公司唯一一个六机房平等的数据库,六机房平等是指虽然写入数据在同一个机房,但数据可以六机房平等的读。公司的其他团队也想使用这个数据库,所以开始时我们承接了很多其他团队的个性化需求,导致了团队成员为了支撑需求,疲于奔命。接到的需求在技术上很简单,都是一些后台操作数据,延迟要求不高的场景,CURD操作数据库,技术含量低,维护人员平均半年就会转岗或离职。我来了之后,对数据模型进行了抽象,将原本要开发成一张张数据表的,统一在一张数据表里,用json格式来存储,我们提供SDK给用户使用,里面提供了json和POJO的转换等工具尽量符合之前的使用习惯。用户不用再等我们开发,而是可以在后台配置出他们需要的数据表定义,进行数据操作。这种方式,第一我们团队无需开发支持需求快,第二,需求团队开发量也减少了,因为本来是他们需要自己做后台数据管理的界面。但难点是用户不接受。原因首先是和原来的使用习惯不同,第二是他们担心稳定性问题。统一数据表,数据上不隔离,还要使用我们的SDK。我当时做了很多的宣讲,关键代码挨行的给用户解释,开始时也只接入了一些非核心的系统。我们慢慢把系统做好做强,直到我们自己的核心系统也接入,大家才开始慢慢接受。因为我们的核心系统是关键的系统,这个说服力比较强。但还有一个关键难点,就是系统的定位,开始时想把它定位为配置中心,因为在功能和管理上和携程阿波罗配置中心很像,但是领导对中心这个词很敏感,因为中心意味着出了问题影响范围大。后来经过仔细梳理思考,这个服务对数据做了严格的管控,包括标准的审核流程、严格数据准入、灰度生效、数据变更过程追踪、一键回滚、定时生效、临时生效等。并且数据可以不存我们的数据库,外接数据源。所以最终定位为数据变更管控系统。因为业界代码变更管控的产品相对成熟,数据变更管控的产品非常少,我们也在持续的完善它,希望能将它打造成业界标杆的产品。

相关文章:

微服务相比传统服务的优势

这是一道面试题,咱们先来分析这道题考察的是什么。 如果分析面试官主要考察以下几个方面: 技术理解深度 你是否清楚微服务架构(Microservices)和传统单体架构(Monolithic)的本质区别。能否从设计理念、技术…...

JavaWeb:Web介绍

Web开篇 什么是web? Web网站工作流程 网站开发模式 Web前端开发 初识web Web标准 HtmlCss 什么是Html? 什么是CSS?...

教育行业网络安全:守护学校终端安全,筑牢教育行业网络安全防线!

教育行业面临的终端安全问题日益突出,主要源于教育信息化进程的加速、终端设备多样化以及网络环境的开放性。 以下是教育行业终端安全面临的主要挑战: 1、设备类型复杂化 问题:教育机构使用的终端设备包括PC、服务器等,操作系统…...

【论文速递】2025年04周 (Robotics/Embodied AI/LLM)

目录 DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning摘要 Evolving Deeper LLM Thinking摘要 Kimi k1.5: Scaling Reinforcement Learning with LLMs摘要 Agent-R: Training Language Model Agents to Reflect via Iterative Self-Train…...

Spring Boot知识点详解

打包部署 <!‐‐ 这个插件&#xff0c;可以将应用打包成一个可执行的jar包&#xff1b;‐‐> <build><plugins> <plugin> <groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐maven‐plugin</artifactId&g…...

LangChain与图数据库Neo4j LLMGraphTransformer融合:医疗辅助诊断、金融风控领域垂直领域、法律咨询场景问答系统的技术实践

LangChain与图数据库融合&#xff1a;垂直领域问答系统的技术实践 一、技术背景与核心价值 在垂直领域&#xff08;如金融、医疗、法律&#xff09;的问答场景中&#xff0c;传统RAG系统常面临实体关系推理不足和专业术语理解偏差的痛点。LangChain通过集成图数据库与知识图谱…...

DNS主从同步及解析

DNS 域名解析原理 域名系统的层次结构 &#xff1a;DNS 采用分层树状结构&#xff0c;顶级域名&#xff08;如.com、.org、.net 等&#xff09;位于顶层&#xff0c;下面是二级域名、三级域名等。例如&#xff0c;在域名 “www.example.com” 中&#xff0c;“com” 是顶级域名…...

在Windows11上用wsl配置docker register 镜像地址

一、下载软件 1、下载wsl:安装 WSL | Microsoft Learn,先按照旧版 WSL 的手动安装步骤 | Microsoft Learn的步骤走 注:如果wsl2怎么都安装不下来,可能是Hyper-V没有打开,打开控制面板->程序和功能->启用或关闭Windows功能,勾选Hyper-V 如果Windows功能里面没有Hyp…...

Spring—循环依赖与三级缓存

Spring中存在三级缓存&#xff1a; 第一层缓存&#xff08;singletonObjects&#xff09;&#xff1a;单例对象缓存池&#xff0c;已经实例化并且属性赋值&#xff0c;这里的对象是成熟对象&#xff1b;第二层缓存&#xff08;earlySingletonObjects&#xff09;&#xff1a;单…...

【Linux网络】构建UDP服务器与字典翻译系统

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

【PGCCC】Postgres 故障排除:修复重复的主键行

如何从表中删除不需要的重复行。这些重复行之所以“不需要”&#xff0c;是因为同一个值在指定为主键的列中出现多次。自从 glibc 好心地改变了排序方式后&#xff0c;我们发现这个问题有所增加。当用户升级操作系统并修改底层 glibc 库时&#xff0c;这可能会导致无效索引。 唯…...

DeepSeek+Cursor+Devbox+Sealos项目实战

黑马程序员DeepSeekCursorDevboxSealos带你零代码搞定实战项目开发部署视频教程&#xff0c;基于AI完成项目的设计、开发、测试、联调、部署全流程 原视频地址视频选的项目非常基础&#xff0c;基本就是过了个web开发流程&#xff0c;但我在实际跟着操作时&#xff0c;ai依然会…...

996引擎-拓展变量:物品变量

996引擎-拓展变量:物品变量 测试代码参考资料对于Lua来说,只有能保存数据库的变量才有意义。 至于临时变量,不像TXT那么束手束脚,通常使用Lua变量就能完成。 SELECT * FROM dbo.TBL_ITEM_EX_ABIL WHERE FLD_MAKEINDEX = 28620 <...

Java 设计模式心法之第3篇 - 总纲:三大流派与导航地图

前两章&#xff0c;我们修炼了 SOLID 这套强大的“内功心法”&#xff0c;为构建高质量软件打下了坚实根基。现在&#xff0c;是时候鸟瞰整个设计模式的“武林”了&#xff01;本文将为您展开一幅由 GoF 四人帮精心绘制的 23 种经典设计模式的“全景导航地图”。我们将探索这些…...

【OpenCV图像处理实战】从基础操作到工业级应用

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现&#xff08;6个案例&#xff09;案例1&#xff1a;图像基本操作案例2&#xff1a;边缘检测案例3&…...

如何识别金融欺诈行为并进行分析预警

金融行业以其高效便捷的服务深刻改变了人们的生活方式。然而,伴随技术进步而来的,是金融欺诈行为的日益猖獗。从信用卡盗刷到复杂的庞氏骗局,再到网络钓鱼和洗钱活动,金融欺诈的形式层出不穷,其规模和影响也在不断扩大。根据全球反欺诈组织(ACFE)的最新报告,仅2022年,…...

【踩坑记录】stm32 jlink程序烧录不进去

最近通过Jlink给STM32烧写程序时一直报错&#xff0c;但是换一个其他工程就可以烧录&#xff0c;对比了一下jink配置&#xff0c;发现是速率选太高了“SW Device”&#xff0c;将烧录速率调整到10MHz以下就可以了...

SpringSecurity源码解读AbstractAuthenticationProcessingFilter

一、介绍 AbstractAuthenticationProcessingFilter 是 Spring Security 框架里的一个抽象过滤器,它在处理基于表单的认证等认证流程时起着关键作用。它继承自 GenericFilterBean,并实现了 javax.servlet.Filter 接口。此过滤器的主要功能是拦截客户端发送的认证请求,对请求…...

‌RISC-V低功耗MCU动态时钟门控技术详解

我来分享一下RISC-V核低功耗MCU的动态时钟门控技术实现&#xff1a; 这款MCU通过硬件级时钟门控电路实现了模块级的功耗管理。当外设&#xff08;如UART、SPI&#xff09;处于闲置状态时&#xff0c;系统会自动切断其时钟信号&#xff0c;减少无效翻转功耗。同时支持多电压域协…...

网络设备配置实战:交换机与路由器的入门到精通

引言:网络设备——构建数字世界的基石 想象一下走进一个现代化的数据中心,成千上万的线缆如同神经网络般连接着各种设备,而交换机和路由器就是这些网络连接的智能枢纽。作为网络工程师,熟练掌握这些核心网络设备的配置与管理,就如同建筑师精通各种建筑工具和材料一样重要…...

移动通信行业术语

英文缩写英文全称中文名称解释/上下文举例IMSIP Multimedia SubsystemIP多媒体子系统SIPSession Initiation Protocol会话初始化协议常见小写sip同。ePDG/EPDGEvolved Packet Data Gateway演进分组数据网关 EPDG是LTE&#xff08;4G&#xff09;和后续蜂窝网络架构&#xff08;…...

工厂模式:解耦对象创建与使用的设计模式

工厂模式&#xff1a;解耦对象创建与使用的设计模式 一、模式核心&#xff1a;封装对象创建逻辑&#xff0c;客户端无需关心具体实现 在软件开发中&#xff0c;当创建对象的逻辑复杂或频繁变化时&#xff0c;直接在客户端代码中 new 对象会导致耦合度高、难以维护。例如&…...

Python爬虫学习:高校数据爬取与可视化

本项目实现了从中国教育在线&#xff08;eol.cn&#xff09;的公开 API 接口爬取高校相关数据&#xff0c;并对数据进行清洗、分析与可视化展示。主要包括以下功能&#xff1a; 爬取高校基础信息及访问量数据数据清洗与格式转换多维度数据分析与可视化&#xff0c;如高校数量分…...

linux 手动触发崩溃

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、如何手动触发linux崩溃&#xff1f;二、内核相关panic和oops的cmdline&#xff08;启动参数&#xff09;总结 前言 提示&#xff1a;这里可以添加本文要记…...

触觉智能RK3506核心板,工业应用之RK3506 RT-Linux实时性测试

在工业自动化、机械臂控制等高实时性场景中&#xff0c;系统响应速度与稳定性直接决定设备效能。触觉智能RK3506核心板基于瑞芯微三核Cortex-A7架构深度优化&#xff0c;搭载Linux 6.1内核并支持Linux-RT实时系统&#xff0c;提供实时性能的高性价比解决方案。 RK3506与RT-Linu…...

AI日报 - 2025年04月21日

&#x1f31f; 今日概览(60秒速览) ▎&#x1f916; AGI突破 | O3模型性能引热议&#xff0c;Rich Sutton提出「体验时代」新范式&#xff0c;自递归AI构建仍存挑战。 新模型如O3展示高IQ&#xff0c;但AGI定义与实现路径讨论加剧&#xff0c;强调自主生成数据与体验学习。 ▎&…...

基于SpringBoot的高校体育馆场地预约管理系统-项目分享

基于SpringBoot的高校体育馆场地预约管理系统-项目分享 项目介绍项目摘要目录总体功能图用户实体图赛事实体图项目预览用户个人中心医生信息管理用户管理场地信息管理登录 最后 项目介绍 使用者&#xff1a;管理员 开发技术&#xff1a;MySQLJavaSpringBootVue 项目摘要 随着…...

华为云获取IAM用户Token的方式及适用分析

&#x1f9e0; 一、为什么要获取 IAM 用户 Token&#xff1f; 我们用一个生活中的比喻来解释&#x1f447;&#xff1a; &#x1f3e2; 比喻场景&#xff1a; 你要去一个 高级写字楼&#xff08;华为云物联网平台&#xff09; 办事&#xff08;调用接口管理设备&#xff09;&…...

如何利用快照与备份快速恢复服务器的数据

在服务器上利用**快照&#xff08;Snapshot&#xff09;**和**备份&#xff08;Backup&#xff09;**快速恢复数据&#xff0c;可显著减少停机时间并确保业务连续性。以下是具体操作步骤和最佳实践&#xff1a; --- ### **1. 快照&#xff08;Snapshot&#xff09;恢复** **适…...

Git 详细使用说明文档(适合小白)

Git 详细使用说明文档&#xff08;适合小白&#xff09; 1. 什么是 Git&#xff1f; Git 是一个版本控制系统&#xff0c;帮助你管理和跟踪代码的变更。无论是个人项目还是团队协作&#xff0c;Git 都能帮助你记录代码的历史版本&#xff0c;方便回溯和协作。 2. 安装 Git …...