Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微服务的拆分规范和原则

微服务的拆分规范和原则

原创
作者头像
程序员波特
修改于 2024-01-17 13:57:02
修改于 2024-01-17 13:57:02
2920
举报
文章被收录于专栏:魔法书魔法书

前言

前面我们了解了什么是微服务和为什么需要做微服务架构(What & Why),本文我们就来探讨如何做微服务架构的拆分(How)

微服务拆分没有一个绝对正确的方案,服务拆分的粒度完全要根据业务场景来规划,而随着业务的发展,原先的架构方案也需要做调整。既然没有标准答案,那我们就使出“乱拳打死老师傅”的招数,想怎么拆怎么拆好了?且慢且慢,这不就成了暴力拆迁了吗,现在“扫黑除恶”正当头,我们可不能这么干。我这里总结了几个服务拆分的心法秘籍,同学们可以照着这个路子去思考服务拆分的粒度我行走江湖就靠着这套武功心法。

拆迁方案

这辈子当不成拆迁户的同学们,你们也别灰心,咱房子拆不成,微服务还是可以拆一拆的。说到拆迁,咱就得有一套方式方法, 不能暴力拆迁。不妨看一看老师一般怎么规划拆迁方案。

压力模型拆分

压力模型简单来说就是用户访问量,我们要识别出某些超高并发量的业务,尽可能把这部分业务独立拆分出来。这么做的原因非常简单,高并发业务相当于前线战场,战况非常激烈,如果我方部署兵力不够(服务器资源),而敌方攻势又过于猛烈(剁手族们疯狂的流量),万一战线失手了服务器压力抵挡不住,我们不希望让这种情况影响到其他用户场景。

我这里举两个例子:

  • 秒杀 秒杀是一个典型的低频突发流量的场景,参加秒杀的商品的数量一般不会很多,但是在秒杀开始的时候,尤其是对爆款商品来说(比如新发布的苹果手机),会有一个很明显的突发流量
  • 商品详情页 商品详情页毫无疑问是电商场景中并发量最大的业务,- -笔成功达成的订单背后,可能会调用几十次商品详情页接口(同学们买东西都要货比三家么不是)

我在做具体规划的时候,会尽量把压力模型拆解为三个维度

  • 1)高频高并发场景比如商品详情页,它既是一一个高频场景

(时时刻刻都会发生),同时也是高并发的场景(QPS - Qu ery per seconds极高)

  • 2)低频突发流量场景比如前面提到的秒杀,它并不是高频

场景(偶尔发生),但是它会产生突发流量。再跟大家举-个例子,那就是“商品发布”,对新零售业务来说,当开设-个线下大型卖场以后,需要将所有库存商品一键上架,这里的商品总数是个非常庞大的数字(几十万+),瞬间就可以打出很高的QPS

  • 3)低频流量场景这一类多为后台运营团队的服务接口,比

如商品图文编辑,添加新的优惠计算规则,,上 架新商品。它发生的频率比较低,而且也不会造成很高的并发量。

通常我们建议将高频高并发的场景隔离出来,单独作为一个微服务模块,典型的就是商品详情页的后台服务。对低频突发流量的场景,如果条件允许也可以剥离出来独立组成模块,如果必须和其他业务包在一个微服务下,那一定要做好流控措施(最典型的就是削峰策略),而且还要考虑到异常情况下的补偿机制。对于低频流量场景,我们根据业务模型切分就好了(后面会讲到)。

业务模型拆分

业务模型拆分的维度有很多,我们在实际项目中应该综合各个不同维度做考量。我这里主要从主链路、领域模型和用户群体三个维度来讲一下

主链路拆分

在电商领域“主链路”是一个很重要的业务链条,它是指用户完成下单场景所必须经过的场景。按照我们平时买买买的剁手经验,可以识别出很多核心主链路,比如商品搜索->商品详情页->购物车模块->订单结算->支付业务,这是就是一条最简单的主链路。如果这是一场战斗的话,那么主链路就是这场战斗的正面战场,我们必须力保主链路不失守。

电商领域背后还有很多隐藏的核心主链路,比如下单之前的营销优惠结算,它会影响订单的最终价格;再比如用户地址模块,它会影响下单前的配送地址选择。如果这两个模块出了问题,大部分用户恐怕都要放弃下单了。试想,双十一我们添加了一揽子购物车,结果结算的时候发现所有优惠组合都失效了,或者是无法选择配送地址,那也只好放弃了。

各位亲,这里建议将核心主链路拆分,有以下几个目的:

  • 1)异常容错为主链路建立层次化的降级策略(多级降级)

,以及合理的熔断策略,这部分我们将在Hystrix服务容错阶段的课程中详细解释

  • 2)调配资源 主链路通常来讲都是高频场景,自然需要更多的计算资源,最主要的体现就是集群里分配的虚机数量多。举个例子,就说淘系中台业务中单品营销优惠微服务,在平日非大促阶段(非双11扩容场景)一个服务后台都有接近一万台虚机,一到了发布窗口就要通宵达旦做发布。将主链路服务单独隔离出来,这样有利于根据需要指定资源计划(比如双11阶段为每个主链路服务拟定不同的扩容计划)
  • 3)服务隔离主链路是主打输出的C位,把主链路与其他打辅助的业务服务隔离开来,避免边缘服务的异常情况影响到主链路。

领域模型拆分

领域驱动设计DDD (Domain-Driven Design领域驱动设计)不是-个新概念,但老外们有个毛病,做什么事情特别喜欢提炼方法论,本来一个非常简单的概念,愣是被吹到神乎其神高深莫测。

其实领域模型是一个很简单的概念,抛掉繁文缛节的方法论,我们-样可以做好领域模型拆分。我举一个例子大家就明白了。阿里集团推出了一套大中台战略,将集团内部的公共领域服务从各个事业部中剥离出来,整合成了一个“集团级别”的大型中台业务。比如说IC订单系统,淘系商品服务,UMP营销优惠服务,汇金平台,用户账号系统等等。

从上面这个例子中我们可以看出,所谓领域模型,其实就是一套各司其职的服务集合。这里涉及到领域和合并和分拆。领域合并的例子就是淘系的营销优惠服务,曾经天猫和淘宝各有-套营销服务,如果不考虑底层技术,从业务层面来说它们做的事情是-样的, 都属于营销优惠计算的领域范围,因此后面两条技术线整合成了-套UMP营销优惠服务。领域拆分的例子就太多了,我们做微服务规划的时候要确保各个领域之间有清晰的界限,比如商品服务,和订单服务,尽管他们之间有交集(都围绕商品主数据)但是毕竟是服务于不同领域(商品域和订单域),所以我们要将两者拆分成独立的服务。

用户群体拆分

根据用户群体做拆分,我们首先要了解自己的系统业务里有哪些用户,比如说电商领域,我们有2C的小卖家,也有2B的大客户,在集团内部有运营、采购、还有客服小二等等。对每个不同的用户群体来说,即便是相同的业务领域,也有该群体其独有的业务场景。

用户群体相当于一个二级域,我们建议先根据主链路和领域模型做一级域的拆分,再结合具体的业务分析,看是否需要在用户领域方向上做更细粒度的拆分。

前后台业务分离

同学们如果下了班当过顺丰车主的话,就会知道网约车业务不仅有一个乘客端app,也有一个司机端app。电商领域也是一样的,我们通过手淘app买买买(前台业务场景),商家通过后台的业务系统管理商品信息(后台业务场景)。在实际项目中通常也会将前台业务和后台业务做一个隔离,这也符合高频业务(前台)和低频业务(后台)的隔离策略。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微服务介绍
微服务是什么?杜克大学教授DanAriely说过一段非常出名的话,用来表述Big Data的发展现状。我觉得把这句话放到微服务身上也极其贴切。
程序员波特
2024/01/17
1870
微服务架构拆分的 7 大黄金法则
你是否还在为微服务架构的拆分而苦恼?本文揭秘 7 大拆分原则,助你轻松驾驭微服务架构!
码哥字节
2024/11/23
4920
微服务架构拆分的 7 大黄金法则
千万级调用量微服务架构实践
电商是促销拉动式的场景,也是价格战驱动的场景。618和双11都是典型的促销活动。其实都是在抢用户、扩市场占有率。在这样的场景之下,对秒杀、抢购是很热衷的玩法。
美的让人心动
2018/12/13
1.8K0
千万级调用量微服务架构实践
为什么我们叫进行微服务拆分?
微服务在最近几年大行其道,很多公司的研发人员都在考虑微服务架构,同时,随着 Docker 容器技术和自动化运维等相关技术发展,微服务变得更容易管理,这给了微服务架构良好的发展机会。
码农架构
2021/06/13
1.6K0
为什么我们叫进行微服务拆分?
微服务应该这么搞,才能少踩坑!
微服务越来越火。很多互联网公司,甚至一些传统行业的系统都采用了微服务架构。体会到微服务带来好处的同时,很多公司也明显感受到微服务化带来的一系列让人头疼的问题。本文是笔者对自己多年微服务化经历的总结。如果你正准备做微服务转型,或者在微服务化过程中遇到了困难。此文很可能会帮到你!
Bug开发工程师
2020/06/10
3.9K0
微服务应该这么搞,才能少踩坑!
前1号店技术总监黄哲铿揭秘:微服务架构在千万级别日调用量、亿级别海量数据场景下的应用实践
上周,前1号店技术总监、海尔农业电商CTO,《技术管理之巅》作者黄哲铿为大家带来了一场关于微服务架构的分享,包含了微服务架构在千万级别日调用量、亿级别海量数据场景下的应用实践;从领域驱动设计、服务依赖治理、服务高可用、故障熔断降级快速恢复等方面,结合大型移动电商系统等应用案例,全面剖析微服务的应用等丰富的内容。
养码场
2018/08/10
1.1K0
微服务架构详谈
微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢?
慕容千语
2019/06/06
7410
微服务架构详谈
阿里一面:微服务拆分需要考虑什么因素?
陈某的《Spring Cloud Alibaba实战项目》 视频教程已经录完了,涉及到Alibaba的各种中间件、OAuth2微服务认证鉴权、全链路灰度发布、分布式事务实战,戳这里--->Spring Cloud Alibaba 实战 视频专栏 开放订阅~
码猿技术专栏
2023/05/01
2460
阿里一面:微服务拆分需要考虑什么因素?
阿里双11技术总指挥汤兴:淘宝确实变了
鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 总交易额达4982亿元。 订单创建峰值58.3万笔/秒。 这是今年阿里双11创下的新纪录。 对于背后支撑的淘系技术体系来说,也是新的技术峰值。 在应对并发流量和系统稳定性上,目前行业内就只剩下淘系自己和自己赛跑。 无需多少个突发头条,每年双11,就是新的大考。 而且也是一次技术围观盛宴:别人都在买买买,技术工程师们却总想看看淘系到底“底”在何处,是否会宕机。 然而,年复一年,一年纪录又更胜一年。 只是,这并不意味着挑战一成不变,淘宝变了,在你
量子位
2023/03/10
2.6K0
阿里双11技术总指挥汤兴:淘宝确实变了
微服务拆分的原则
单一职责原则指的是一个微服务只负责一个明确的业务能力,专注于做好一件事情,此规则也会根据业务变化频率、团队规模上会有一定的相关业务的合并,过多的拆分需要的人力也会增多,适当的合并可以减少人力成本
RookieCyliner
2025/06/01
910
如何使用 DDD 指导微服务拆分?
软件架构的发展经历了从单体架构、垂直架构、SOA架构到微服务架构以及到现在最新的service mesh(网格服务架构)的过程。借用dubbo的网站架构发展图和说明:
架构精进之路
2021/07/30
1.9K0
如何使用 DDD 指导微服务拆分?
使用 DDD 指导微服务拆分的逻辑
对于服务拆分的逻辑来说,是先设计高内聚低耦合的领域模型,再实现相应的分布式系统。服务的划分有一些基本的方法和原则,通过这些方法能让微服务划分更有操作性。最终在微服务落地实施时也能按图索骥,无论是对遗留系统改造还是全新系统的架构都能游刃有余。
ThoughtWorks
2020/12/22
6940
使用 DDD 指导微服务拆分的逻辑
微服务粒度拆分的原则
微服务架构是模块化的一种方法,它把一整块应用拆分成一个个服务,以便于团队在开发复杂的应用时,能够更快地交付出高质量的软件。
春哥大魔王
2019/12/04
2.5K0
基于微服务的互联网系统稳定性~亿级用户
作者简介:曾任职于阿里巴巴,每日优鲜等互联网公司,任技术总监。15年电商互联网经历。
用户7927337
2020/11/04
4240
基于微服务的互联网系统稳定性~亿级用户
抗千万级调用的电商服务架构实现
电商是典型的促销拉动式场景,也是价格战驱动的场景。618和双11都是典型的促销活动。其实都是在抢用户、扩市场占有率。在这样的场景之下,对秒杀、抢购是很热衷的玩法。
JAVA葵花宝典
2019/06/21
2.5K0
亿级流量电商详情页系统实战:缓存架构+高可用服务架构+微服务架构
李鹏
2017/09/05
3.3K0
微服务架构究竟应该怎么进行服务拆分?
今天这篇,我们主要分享应该如何定义一个微服务架构,怎么定义一个服务,微服务架构究竟又应该怎么进行服务拆分。
brookwang
2022/06/24
9610
微服务架构究竟应该怎么进行服务拆分?
📌《微服务拆分十大陷阱:三年血泪换来的经验》
许多团队被“微服务=先进架构”的思维裹挟,盲目追求拆分粒度,导致服务数量爆炸。我曾见过一个电商项目,订单模块被拆成7个服务,最终因分布式事务和调试成本过高而被迫合并。
Jimaks
2025/04/21
1470
聊聊微服务架构及分布式事务解决方案!
分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务,将一个大的业务进行拆分,整个大的业务流程,转化成若干个小的业务流程,然后通过设计补偿流程从而考虑最终一致性。
Java技术栈
2018/07/30
6550
聊聊微服务架构及分布式事务解决方案!
都2023了,还有人不了解微服务吗
当前互联网界,不管是做 2B 端【面向企业】,还是 2C 端【面向个人用户】产品,微服务开发已经是遍地开花,单体结构的系统大多只存在于传统软件和中大型国企架构里。
xin猿意码
2023/10/18
3140
都2023了,还有人不了解微服务吗
推荐阅读
相关推荐
微服务介绍
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档