微服务划分的姿势

这篇具有很好参考价值的文章主要介绍了微服务划分的姿势。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

一、拆分姿势

1. 姿势一

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

1.1 纵向拆分

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

1.2 横向拆分

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

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

微服务划分的姿势

2. 姿势二

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

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

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

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

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

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

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

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

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

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

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在我的理解应该一个基准线,不同的时间段会有上下波动,但是相对稳定。

微服务划分的姿势文章来源地址https://www.toymoban.com/news/detail-505648.html

到了这里,关于微服务划分的姿势的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JDK 22 和 JDK 23:到目前为止我们所知道的

    Oracle Java 平台组首席架构师Mark Reinhold宣布, JDK 22是自JDK 21以来的第一个非 LTS 版本,现已进入第二个候选版本阶段。主线源代码存储库于 2023 年 12 月中旬(Rampdown 第一阶段)分叉到 JDK稳定存储库,定义了 JDK 22 的功能集。可以解决诸如回归或严重功能问题之类的关键错误,

    2024年03月22日
    浏览(41)
  • 开源、私有化部署,这款知识管理系统还有多少惊喜是我们不知道的

    编者按:想要开源的知识管理系统?最好还可以私有化部署?本文分析了开源和私有化部署的知识管理系统对于企业的意义,介绍了天翎知识管理系统开源+私有化部署的特色,以及其他方面的特点。 私有化部署的知识管理系统的意义 知识管理(Knowledge Management),一种最新

    2024年01月20日
    浏览(52)
  • 线下实体衰落,真是电商惹祸?实是贪婪以及服务理念落后所致

    网上时不时就有人指责电商的兴起导致了线下实体衰落,然而如果各位比较了线下实体与电商的差异,就会明白导致如此结果完全是咎由自取,因为线下实体太贪婪以及服务理念落后于时代。 笔者最近就购买了某款国产手机,在该国产手机品牌的线下直营店购买的手机,购买

    2024年02月09日
    浏览(37)
  • 微服务划分的原则

    微服务的划分要保证的原则 1、耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息 2、内聚性又称块内联系。指

    2024年02月15日
    浏览(28)
  • DDD概念以及微服务划分

    目录 DDD简介: DDD与微服务的区别: DDD核心概念: 如何划分微服务边界: DDD  是 Domain-Driven Design 的缩写,称为领域驱动设计。它是为了解决划分业务边界的问题,是一种架构模式,也是一种划分业务领域范围的方法论。 DDD 是一种架构设计方法,微服务是一种架构风格。两者从

    2024年02月14日
    浏览(36)
  • 聊聊微服务到底该如何划分

    背景         现在动不动就是微服务架构,但是微服务划分的合理与否会极大的影响开发过程中的复杂度,划分的重要性不言而喻,但是在微服务划分这条路上并没有银弹,有的说DDD可以解决微服务的划分问题,吕哥想说的是那只是理论上的,实际上影响微服务划分的因

    2024年02月09日
    浏览(69)
  • 架构师进阶之路 - 微服务怎么划分

    目录 微服务划分目标 业务、技术、团队导向规划服务 领域检查 依赖DAG检查 分布式事务检查 性能分布检查 稳定(易变)性检查 调用链检查   我们常说服务的合理划分是微服务成功的重中之重,一个合理的服务划分应该符合一下几点: 符合团队结构 服务的落地与维护靠人

    2024年02月13日
    浏览(34)
  • 微服务基础概念、架构图、划分图

    1、微服务 微服务架构风格,就像是把一个单独的应用程序,就像是把一个单独的应用程序开发为一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是http api。这些服务围绕业务能力来构建。并且通过完全自动化部署机制来独立部署,这些服务使用不

    2024年01月23日
    浏览(32)
  • 我们是怎么看中国企业服务的​

    我们主要从六个角度看中国企业服务这个产业的。 (1)国家政策 国家政策,我们会分影响甲方(中国企业)、影响乙方(中国企业服务厂商)两个分支,来看国家政策。 当然,影响,有积极推进放大的正影响,有时候也有负影响。 国家政策,不管是国务院级别还是工信部

    2023年04月23日
    浏览(39)
  • 项目中我们各个微服务的POM详解

    我们一开始一定要检查我们的IDEA中maven有没有和我们的安装的位置对应上。否则后期很容易报错 ①、在我们的父模块中有几个很重要的标签: 第一个是我们的 Modules 标签,后期我们加入新的服务会自动在里面添加 ②、打包的方式:我们在父级工程或者聚合项目中,使用POM:

    2023年04月24日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包