这才是微服务划分的正确姿势,值得学习

微服务拆分策略 1 微服务迁移准备 1、需对业务充分了解,这是服务拆分,通信设计,资源整合的必要前提。 2、适应微服务架构设计原则:小版本,高速迭代。 3、快速的环境提供能力:依赖于云计算、容器技术,快速交付环境。 4、服务合理拆分:需符合团队结构或能逆向影响,能对组织架构进行微调并划分职责。(康威定律和逆康威定律) 5、基本的监控能力:包括基础的技术监控和业务监控。 6、快速的应用部署能力:需要部署管道提供快速的部署能力。 7、DevOps 自动化运维能力:需要具有良好的持续集成和持续交付能力,还需要对问题 阅读详情

我们知道微服务是一种理念,没有确切的定义和边界,好比设计原则,是属于抽象的概念。在定义不明确的情况下谈划分也是一种各说各话,具体问题需要具体分析,所以这篇文章谈到的划分也不是绝对标准,仅供参考。

有人说微服不难,难的是服务的划分,虽然我持保留意见。但是从侧面也反应了划分具有一定的困难。这里的矛盾在于粒度。如果粒度太大了,分和不分似乎都差不多;如果粒度太小了,聚合、发布、调用链、调试等都是坑。

以下谈到的拆分是前人经验的总结,我罗列了三种行家的拆分姿势,每个的的经验和视野不同,各有偏颇,我在这里更多的是谈共鸣和感受,希望对你有所启发。

一、拆分姿势

1、姿势一

新浪微博微服务专家胡忠想从纵横两个维度来划分,简单粗暴:

1.1 纵向拆分

从业务维度进行拆分。标准是按照业务的关联程度来决定,关联比较密切的业务适合拆分为一个微服务,而功能相对比较独立的业务适合单独拆分为一个微服务。

1.2 横向拆分

从公共且独立功能维度拆分。标准是按照是否有公共的被多个其他服务调用,且依赖的资源独立不与其他业务耦合。

纵向以业务为基准,关系铁的在一起;横向功能独立的在一起。我想如果拆分这么简单,你有底气拆,敢拆吗?所以我们又继续比对一下其他专家的言论。

2、姿势二

阿里的小伙伴从综合的维度来看,部分维度和上面会有重合。

2.1 服务拆分要迎合业务的需要

充分考虑业务独立性和专业性,避免以团队来定义服务边界,从而出现“土匪”抢地盘,影响团队信任。

这个维度和上面的类似,但是强调的是业务和团队成员的各自独立性,对上面是一种很好的补充。

2.2 拆分后的维护成本要低于拆分前

这里的维护成本包括:人力、物力、时间。

这里的成本对大部分中小团队来说都是必须要考虑的重要环节,如果投入和收益不能成正比,或者超出领导的预算或者市场窗口,那么先进的技术就是绊脚石,千万不要迷恋技术,所谓工程师思维千万要不得。

2.3 拆分不仅仅是架构的调整,组织结构上也要做响应的适应性优化

确保拆分后的服务由相对独立的团队负责维护。

这句话怎么理解呢?传统的团队划分是按照产品部、前端、后端横向划分,微服务化以后的团队可能就会是吃一张披萨饼的人数,产品、前端、后端被归类到服务里面,以服务为中心来分配人数。《微服务为什么选Spring Cloud?》推荐大家阅读。

2.4 拆分最有价值的结果是提高了系统的可扩展性

把具有不同扩展性要求的服务拆分出来,分别进行部署,降低成本,提高效率。比如全文搜索服务。

这点和上面的按功能独立性来拆分有点类似,功能独立其实就是面向可扩展性。

2.5 考虑软件发布频率

比如把20%经常变动的部分进行抽离,80%不经常变动的单独部署和管理。说白了就是按照8/2原则进行拆分。这个拆分的好处很明显,可以尽可能的减少发布产生的后遗症,比如用户体验、服务相互干扰等。推荐阅读:微服务架构如何保证安全性?

但是这里有一个问题,假如20%的服务分属于不同的业务层面,那该怎么办?所以这里的拆分应该有个优先级,在拆分相互冲突的时候应该要优先考虑权重比较高的那个。

3、姿势三

资深技术专家李运华在他的架构书中给出的拆分:

3.1 基于业务逻辑

将系统中的业务按照职责范围进行识别,职责相同的划分为一个单独的服务。这种业务优先的方式在前面两种姿势当中都出现过,可见是最基本,最重要的划分方式(没有之一)。

3.2 基于稳定性

将系统中的业务模块按照稳定性进行排序。稳定的、不经常修改的划分一块;将不稳定的,经常修改的划分为一个独立服务。比如日志服务、监控服务都是相对稳定的服务,可以归到一起。这个很类似上面提到的2/8原则,80%的业务是稳定的。

至此你会发现服务的拆分真的没有绝对的标准,只有合理才是标准。

3.3 基于可靠性

同样,将系统中的业务模块按照可靠性进行排序。对可靠性要求比较高的核心模块归在一起,对可靠性要求不高的非核心模块归在一块。

这种拆分的高明可以很好的规避因为一颗老鼠屎坏了一锅粥的单体弊端,同时将来要做高可用方案也能很好的节省机器或带宽的成本。

3.4 基于高性能

同上,将系统中的业务模块按照对性能的要求进行优先级排序。把对性能要求较高的模块独立成一个服务,对性能要求不高的放在一起。比如全文搜索,商品查询和分类,秒杀就属于高性能的核心模块。

4、姿势盘点

以上不同拆分姿势各有千秋,异曲同工!

  • 对业务逻辑均不约而同的放在第一位。
  • 对业务模块的稳定性和可靠性,对功能的独立性、可扩展性都有相似的看法
  • 强调拆分应该是多选,而不是单选。具体情况具体分析,可以自由灵活排列组合。

二、题外话

如果你把上面的划分角度背下来了拿去现场套,可能还会遇到矛盾或争议。

1、业务矛盾

假如我们按照业务来划分,根据粒度大小,可能存在以下两种:

  • 第一种分为商品、交易、用户3个服务;
  • 第二种分为商品、订单、支付、物流、买家、卖家6个服务。

3 VS 6,这该怎么办?

如果你的团队只有9个人,那么分成3个是合理的,如果有18个人,那么6个服务是合理的。这里引入团队成员进行协助拆分。

可见拆分的姿势不是单选,而是多选的。这个时候必须要考虑团队成员数量。

在拆分遇到争议的时候,一般情况下我们增加一项拆分条件,虽然不是充要条件,但至少我们的答案会更加接近真理。

除了业务可能存在争议,其他的划分也会有争议,比如一个独立的服务到底需要多少人员的配置?

2、三个火枪手(人员配置)

上面提到的人员数量配置,这里为什么是9和18呢?(这里的团队配置参考李云华前辈提到的三个火枪手的观点)

换一种问法,为什么说是三个人分配一个服务(当然,成员主要是后端人员)?

  • 假设是1个人,请个假、生个病都不行。一个人会遇到单点的问题,所以不合理。
  • 假设是2个人,终于有备份了,但是抽离一个后,剩下1个压力还是很大,不合理。
  • 假设是3个人,抽离一个还有2个在。而且数字3是个稳定而神奇数字,用得好事半功倍。特别是遇到技术讨论,3个人相对周全,如果是2个可能会各持己见,带有自我的偏见和盲区。

那么这个3是不是就是稳定的数量呢?

假设你做的是边开飞机边换引擎的重写工作,那么前期3个人都可能捉襟见肘。但是到了服务后期,你可能1个就够了。

所以3在我的理解应该是一个基准线,不同的时间段会有上下波动,但是相对稳定。

微服务架构 (七): 微服务粒度设计上的核心设计原则与思考的面向 架构师在设计微服务时, 需把握一个核心的设计原则: 微服务 “外部的世界” 远比 “内部的世界” 重要。 阅读详情

相关推荐

AI风控系统中的实时决策架构:架构师的关键设计

当用户点击「确认支付」时,一场毫秒级的“欺诈攻防战”正在后台悄然打响:系统需要在100ms内完成用户行为特征提取→欺诈模型推理→规则引擎校验→最终决策返回。这就是AI风控实时决策架构的核心——用技术对抗“实时化的欺诈手段”。本文将以「餐厅智能点餐系统」为类比,拆解实时风控架构的每一层逻辑:从“如何快速拿到用户的实时行为特征”(像服务员实时收集顾客的忌口),到“如何让模型和规则协同决策”(像厨师长结合菜谱和经验判断菜能不能做),再到“如何保证系统扛住大促的高并发”(像餐厅加桌子应对客流高峰)。我们会用。

2502_91592937的博客 1472

微服务划分的姿势

作者:张飞洪链接:https://www.cnblogs.com/jackyfei/p/10856427.html我们知道微服务是一种理念,没有确切的定义和边界,好比设计...

代码技巧 1556

Ships Dataset:解锁海洋探索的数字宝库

在海上交通管理中,通过对船舶的持续跟踪,可以及时发现船舶的异常行为,如偏离航线、超速等,保障海上航行的安全。例如,通过分析船舶的航行数据和位置信息,合理安排船舶的停靠时间和装卸货物顺序,避免港口拥堵,提高船舶的周转率。同时,还精确标注了船舶在图像中的位置坐标,通过这些坐标,我们可以准确地定位船舶在图像中的具体位置,为后续的分析和处理提供了精确的依据。从繁忙运输货物的货船,到承载着能源使命的油轮,再到穿梭于海洋寻找鱼群的渔船 ,每一种船舶都有着独特的外形和功能,在数据集中留下了它们的身影。

qq_38220914的博客 1267

架构师进阶之路 - 微服务怎么划分

架构师进阶之路 - 微服务怎么划分的六大要素,领域检查、依赖DAG检查、分布式事务检查、调用链检查、性能分布检查、稳定易变性检查

lly576403061的博客 1582

SAP S4 HANA 新资产会计中的平行分类账估值

在资产会计中,我们可以设置使用折旧区域的平行分类账会计 我们需要根据涉及的会计原则定义折旧区域,在我们的方案中,公司 FR01 是一家国际集团的当地分支机构,公司 FR01 需要按照集团会计准则 IFRS 和当地 GAAP 会计准则报告财务报表。过账到 LG 会计原则(分类帐 2L)-->分类账 2L的 150 欧元损失 -->在 IFRS 折旧区域,我们有 100 欧元的收益,在 LG 折旧区域,我们有 150 欧元的损失,使用平行分类账 0L 和 2L,我们能够根据不同的会计原则进行平行估值。

yanzibing99的博客 1328

Unity WebGL项目如何实现画布透明,完美融入网页背景(附.jslib文件与完整配置)

本文详细解析了Unity WebGL项目实现画布透明化的技术原理与实战步骤,从.jslib文件配置到前端框架集成,帮助开发者解决默认背景色问题,实现3D内容与网页设计的无缝融合。重点介绍了透明化核心机制、常见误区及React/Vue等现代框架中的最佳实践方案。

weixin_31896061的博客 300

微服务设计之服务拆分

微服务架构设计方法 如何定义一个应用的微服务架构,是一个艺术性大于技术性的复杂过程,没有统一的规范。 比较通用的方法是,从需求文档、领域专家或现有应用架构等资料入手,分三个步骤逐步定义出应用的微服务架构: 定义系统操作(system operations): 系统操作是指应用必须处理的业务请求,分为命令(更新数据)和查询(获取数据)两种。系统操作组成了架构场景,说明了服务如何协作。 定义服...

桃花庵下桃花仙 1296

Fluent求解器——湍流参数的设置

Fluent湍流参数的介绍和设置。

Ronko_G的博客 4万+

这才是微服务划分的正确姿势,值得学习!

前言 我们知道微服务是一种理念,没有确切的定义和边界,好比设计原则,是属于抽象的概念。在定义不明确的情况下谈划分也是一种各说各话,具体问题需要具体分析,所以这篇文章谈到的划分也不是绝对标准,仅供参考。 有人说微服不难,难的是服务的划分,虽然我持保留意见。但是从侧面也反应了划分具有一定的困难。这里的矛盾在于粒度。如果粒度太大了,分和不分似乎都差不多;如果粒度太小了,聚合、发布、调用链、调试等都是坑。 以下谈到的拆分是前人经验的总结,我罗列了三种行家的拆分姿势,每个的的经验和视野不同,各有偏颇,我在这里.

vincent 6483

芯片低功耗设计的两种常用EDA流程

如题。

EricWZY2008的专栏 5557

动网格-网格重构之铺层(三)

运动区域可以是边界区域 (Boundary Zone),也可以是单元区域 ( Cell Zone)。指定了体网格再生方法后,FLUENT自动地根据运动区域(dynamic zones)的运动来调整内部节点以再生体网格。必须保留至少一层网格。(4)如果边面的法向和运动方向偏角较大,生成的网格扭斜度会比较大铺层算法不适用于边界形状变化较大的情况。(1)体网格再生方法的选择(Smoothing,Layering,Remeshing);(2)适用网格种类:四边形、六面体、三棱柱(网格的分布要服从一定的规则)。

weixin_44386973的博客 2095

微服务相关好文(持续收集更新)

这才是微服务划分的正确姿势,值得学习 SpringBoot 快速集成 Elasticsearch 实战 spring、springboot、springcloud的区别 Spring Boot 实现定时任务的 4 种方式 Spring Boot 中文索引 Spring Cloud 中文索引 ...

Stephen 420

Vins-Fusion 外参camera-imu 标定

Vins-Fusion是一种基于优化的多传感器状态估计器,一大特色是支持实时camera-imu外参校准(相机和IMU之间的旋转)。Vins-Fusion 外参camera-imu校准是利用两帧间计算相机位姿和imu预积分得到位姿,构建最小二乘问题,并通过SVD求解camera-imu外参旋转矩阵。

u010196944的博客 2490

混沌工程体系

一、混沌工程——Netflix 系统稳定性之道 读书笔记 1 微服务的分布式系统 分布式系统和微服务简介 高并发(High Concurrency) 是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。 云服务 云服务就是常说的云产品,包括云服务器,云存储等,云服务器(ECS)是任意多个服务器节点通过网络连接的进行资源(包括CPU、内存、存储、网络带宽等)整合,通过统一的管理平台进行对服务器资源进行管理和使用,达到一种简单高效、安全可靠、处理能力和资源可

qq_39817758的博客 270

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

盘点七个实战型 SpringBoot+Vue 开源项目,助你打通全栈开发

本文精选七个实战型SpringBoot+Vue开源项目,涵盖权限管理、微服务、博客系统等全栈开发场景。通过详细解析项目亮点和技术实现,帮助开发者快速掌握前后端分离开发技巧,提升开发效率。特别推荐微人事(vhr)和open-capacity-platform等项目,适合不同阶段开发者学习与实践。

weixin_30448603的博客 548

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

分布式技术追踪 2017年第三十二期

分布式系统实践 1.数据一致性-分区可用性-性能——多副本强同步数据库系统实现之我见 http://hedengcheng.com/?p=892 摘要:这篇文章非常深入的解释了数据一致性的问题和解决方案, 强烈推荐阅读. 2.阿里10年分布式数据库技术沉淀,AliSQL X-Cluster的应用实战 http://dwz.cn/6mYO2E 摘要:上期分享了阿里x-p...

weixin_30817749的博客 146

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

2026年AI时代程序员学习路线图:从零基础到拿大厂Offer的完整规划(2万字深度长文)

本文为不同阶段的程序员绘制完整学习路线图,覆盖零基础入门到架构深挖四个阶段,附在职跳槽和应届校招时间规划模板及常见误区避坑指南。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 1084

AI时代编程学习新范式:用AI在GitHub寻找高质量项目参考系

在软件工程领域,学习新技术通常从理解核心概念开始,例如代码组织、依赖管理和工程化实践。其原理在于通过分析真实项目的完整上下文,掌握从架构设计到部署上线的全流程。这种做法的技术价值在于能快速建立工程化思维,避免陷入孤立代码片段的陷阱,提升解决实际问题的能力。应用场景广泛覆盖前端、后端、全栈开发等方向,尤其适合初学者和希望提升工程能力的开发者。本文聚焦于如何利用AI工具精准定位GitHub上的高质量项目,通过结构化提问获取**VibeCoding**所需的**完整上下文**,从而在动手编码前构建坚实的认知基础,

weixin_30740581的博客 415
上一篇: 蚂蚁金服分布式事务Seata Saga模式首秀及三种模式详解
下一篇: 老兵亲手操刀微服务架构实战,整理出140个案例,好书推荐
JavaMonsterr
博客等级 码龄4年 211粉丝 481原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值