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

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

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

  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。我当时做了很多的宣讲,关键代码挨行的给用户解释,开始时也只接入了一些非核心的系统。我们慢慢把系统做好做强,直到我们自己的核心系统也接入,大家才开始慢慢接受。因为我们的核心系统是关键的系统,这个说服力比较强。但还有一个关键难点,就是系统的定位,开始时想把它定位为配置中心,因为在功能和管理上和携程阿波罗配置中心很像,但是领导对中心这个词很敏感,因为中心意味着出了问题影响范围大。后来经过仔细梳理思考,这个服务对数据做了严格的管控,包括标准的审核流程、严格数据准入、灰度生效、数据变更过程追踪、一键回滚、定时生效、临时生效等。并且数据可以不存我们的数据库,外接数据源。所以最终定位为数据变更管控系统。因为业界代码变更管控的产品相对成熟,数据变更管控的产品非常少,我们也在持续的完善它,希望能将它打造成业界标杆的产品。

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

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

相关文章

【KWDB 创作者计划】_深度学习篇---向量指令集

文章目录 前言一、加速原理数据级并行(DLP)计算密度提升减少指令开销内存带宽优化隐藏内存延迟二、关键实现技术1. 手动向量化(Intrinsics)优势挑战2. 编译器自动向量化限制3. BLAS/LAPACK库优化4. 框架级优化三、典型应用场景矩阵运算卷积优化归一化/激活函数嵌入层(Embe…

跳跃游戏(每日一题-中等)

题解:定义一个变量,用来存储可以到达的最远位置。初始化为0。 然后对数组进行遍历,遍历开始的时候,先判断当前这个位置和最远位置谁大,如果最远位置比较大,那么就说明当前这个位置也能达到,就看…

第七篇:linux之基本权限、进程管理、系统服务

第七篇:linux之基本权限、进程管理、系统服务 文章目录 第七篇:linux之基本权限、进程管理、系统服务一、基本权限1、什么是权限?2、为什么要有权限?3、权限与用户之间的关系?4、权限对应的数字含义5、使用chmod设定权…

音视频小白系统入门课-2

本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅 往期课程笔记传送门: 音视频小白系统入门笔记-0音视频小白系统入门笔记-1 课程实践代码仓库:传送门 音视频编解码 可以通过ffmpeg -f avfoundation -list_devices true -i "&…

外卖“三国杀”开新局,饿了么已手握AI牌

【潮汐商业评论/原创】 01 新战役,新变量 外卖行业,又迎来了新一轮战役。 前有京东宣布斥资百亿进军外卖市场,后有美团宣布发布即时零售品牌“美团闪购”。双方在隔空秀肌肉、彰显自身实力的同时,行业巨头围绕本地生活服务的攻…

HAProxy 和 Keepalived 区别

HAProxy 和 Keepalived 是在构建高可用和可扩展Web服务时常用的两个开源软件,但它们的核心功能和目的有显著区别。 简单来说: HAProxy: 主要是一个 负载均衡器 (Load Balancer) 和 反向代理 (Reverse Proxy)。它负责将客户端的请求智能地分发到后端的多…

YOLO算法的革命性升级:深度解析Repulsion损失函数在目标检测中的创新应用

## 一、目标检测的痛点与YOLO的局限性 在自动驾驶、智能监控等复杂场景中,目标检测算法常面临致命挑战——遮挡问题。当多个物体相互遮挡时,传统检测器容易出现漏检、误检现象,YOLO系列算法尽管在速度与精度上表现优异,但在处理密集遮挡目标时仍存在明显短板。 ### 1.1 遮…

第一篇:Django简介

第一篇:Django简介 文章目录 第一篇:Django简介一、纯手写一个简易版的web框架1、软件开发架构2、HTTP协议3、简易的socket服务端4、wsgiref模块5、动静态网页6、后端获取当前时间展示到html页面上7、字典数据传给html文件8、数据从数据库中获取的展示到…

【笔记】CentOS7部署K8S集群

一、初始化(所有节点机器都要执行) 1. 关闭firewall防火墙 systemctl disable firewalld.service systemctl stop firewalld.service2. 关闭SELinux 临时关闭 setenforce 0永久关闭 vim /etc/selinux/config SELINUXenforcing 改成 SELINUXdisable…

Ethan独立开发产品日报 | 2025-04-22

1. Agent Simulate 用数千个数字人来测试你的人工智能应用。 Agent Simulate 让你在发布之前,能够在一个安全的环境中模拟和测试大型语言模型(LLM)代理。它帮助你调试行为、加快迭代速度,并降低生产风险,专为代理开发…

Photoshop安装与配置--简单攻略版

下载地址:Photoshop软件工具下载 安装完成后,即可运行Photoshop.exe;打开工具页面后,按照下面简单配置即可 1.编辑-》首选项-》常规 或者直接快捷键CtrlK 暂存盘:一定要设置为非C盘 2.性能 3.文件处理 以上配置比较基础&#xf…

新手村:正则化

机器学习-正则化方法 新手村:正则化 什么是正则化? 正则化(Regularization) 是一种用于防止机器学习模型 过拟合(Overfitting)的技术。它通过在模型的 损失函数 中添加一个 惩罚项(Penalty Ter…

C语言 ——— 分支循环语句

目录 分支循环语句 单分支 多分支 switch 分支语句 牛刀小试 判断一个数是否是奇数 输出 1-100之间 的奇数 计算 n 的阶乘 计算 1! 2! 3! ... n! 在一个有序数组中查找具体的某一个数字 打印 100-200 之间的素数 求两个整数的最大公约数 getchar函数 和 putc…

Element UI、Element Plus 里的表单验证的required必填的属性不能动态响应?

一 问题背景 想要实现: 新增/修改对话框中(同一个),修改时“备注”字段非必填,新增时"备注"字段必填 结果发现直接写不生效-初始化一次性 edit: [{ required: true, message: "请输入备注", trigger: "blur" }…

秀丸编辑器 使用技巧

参考资料 第II部〜知っていると便利な秀丸の機能 検索テキストファイルの16進表示について秀丸エディタヘルプ目次秀丸エディタQ&A集(第9.6版)(HTML 形式)テンプレート(Ver9.43対応版) 目录 零…

【期末复习-考试】软件质量测试与保考试题库(选择题+填空题)

软件质量测试与保证考试题库(选择题 填空题) 一、软件测试基础理论(200 题) (一)选择题(100 题) 软件测试的根本目的是( 发现软件中的缺陷)A. 证明软件无…

数据结构与算法学习笔记(Acwing提高课)----动态规划·数字三角形

数据结构与算法学习笔记----动态规划数字三角形 author: 明月清了个风 first publish time: 2025.4.23 ps⭐️终于开始提高课的题啦,借的人家的号看,以后给y总补票叭,提高课的题比之前的多很多啊哈哈哈哈,基本上每种题型都对应了…

阿里巴巴安全工程师面试题:BAS

阿里巴巴新发布了针对应届生的安全工程师招聘岗位,岗位要求: 研究新型前沿攻防技术,验证正向和防御安全产品能力的有效性,挖掘其规则或引擎漏洞,并利用BAS(Breach and Attack Simulation)建立自…

【正则表达式】正则表达式使用总结

正则表达式除了匹配普通字符外,还可以匹配特殊字符,这些特殊字符被称为“元字符”。‌ 特殊字符(元字符) ‌限定符‌:用于指定正则表达式中某个组件的出现次数。常见的限定符包括: *:0次或多次 +:1次或多次 ?:0次或1次 {n}:恰好n次…

数据库对象与权限管理-Oracle数据字典详解

1. 数据字典概念讲解 Oracle数据字典是数据库的核心组件,它存储了关于数据库结构、用户信息、权限设置和系统性能等重要的元数据信息。这些信息对于数据库的日常管理和维护至关重要。数据字典在数据库创建时自动生成,并随着数据库的运行不断更新。 数据…