聊聊微服务到底该如何划分

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

聊聊微服务到底该如何划分

背景

        现在动不动就是微服务架构,但是微服务划分的合理与否会极大的影响开发过程中的复杂度,划分的重要性不言而喻,但是在微服务划分这条路上并没有银弹,有的说DDD可以解决微服务的划分问题,吕哥想说的是那只是理论上的,实际上影响微服务划分的因素众多,不能死搬教条,每个项目都有自己的特点和实际情况,我们要做的把理论与实际结合,把知识融会贯通,走“自己特色的项目道路”.

一、单体系统分解成微服务系统,如何划分最合理,为什么?

聊聊微服务到底该如何划分

简单说的话就是:找到合理的划分边界,把每一个功能每一个接口每一个类放到最合适的服务中,使划分后的服务之间满足”高内聚,低耦合,同时要兼顾职责单一,代码复用率高“,这并不是一件容易的事情,难就难在影响的因素太多(技术因素、业务因素、人为利益因素,甚至受到公司部门斗争人情世故的影响),死搬教条是行不通的,一定要在基本正确的前提下不断改进与重构,向着最优解靠近。

“高内聚低耦合”意味着服务独立性高,依赖关系简单,那么复用率会受到什么影响呢?我之前写过关于“聊聊代码复用的文章”,复用的种类主要分两种情况:

1)集成式的JAR包复用;

聊聊微服务到底该如何划分

2)RPC式的接口复用;

聊聊微服务到底该如何划分

“高内聚低耦合” 对于集成式JAR包复用我认为没有影响,对于RPC式的接口复用意味着 复用率降低,但这同时也是低耦合的表现,不一定是坏处,这里面就需要一个平衡。

对于项目经验较少的同学来说,以上说法还是很抽象的,下面吕哥通过曾经的项目经历来剖析微服务化后带来的复杂性。

二、单体系统微服务化后到底会遇到什么问题?

1、数据库纵向拆分

微服务要求每个服务都有独立的数据库,跨服务的SQL联查会全部失效,如何解决?

聊聊微服务到底该如何划分

SQL联查意味着表之间是有关联性、依赖性、耦合性的,现在虽然数据库进行了物理隔离,但是这种业务上的关联性仍然是需要解决的,如何解决呢?

方案1)

关联逻辑转移到服务代码层,将复杂查询SQL拆解,属于自己服务管理的部分直接查库,属于别的服务管理的部分通过RPC查询,最后在内存中计算组合得到最终想要的结果;

聊聊微服务到底该如何划分

方案2)

主库数据冗余,冗余的粒度可大可小,大则整张表冗余,小则按列进行冗余。无论哪种方式都需要解决数据的实时性和数据一致性问题;

聊聊微服务到底该如何划分

方案3)

数据集中到只读数据仓库中,再进行跨域SQL查询,同样需要解决数据的实时性和数据一致性问题;

聊聊微服务到底该如何划分

2、分布式事务

微服务化后会产生RPC操作,由此产生的分布式事务(数据一致性问题)如何解决?

系统之间交互无非两种模式:

1)同步通信

聊聊微服务到底该如何划分

2)异步通信

聊聊微服务到底该如何划分

哪些业务需要同步通信,哪些业务可以接受异步通信?

同步通信模式下如何解决分布式事务问题?

1)SEAT框架AT模式

聊聊微服务到底该如何划分

2)TCC框架

聊聊微服务到底该如何划分

3)SAGA框架

聊聊微服务到底该如何划分

异步通信模式下如何解决分布式事务问题?

1)消息队列

聊聊微服务到底该如何划分

聊聊微服务到底该如何划分

2)定时任务

聊聊微服务到底该如何划分

聊聊微服务到底该如何划分

3、服务依赖

如何解决领域存活问题?服务雪崩问题?

对于同步通信模式下,领域存活会受到挑战,一般只能通过功能降级来应对;受接口堵塞的影响雪崩问题会接踵而来,一般通过限制接口超时时间、限制重试次数、接口熔断来解决;

聊聊微服务到底该如何划分

对于异步通信模式下,领域存活不会受到影响,也不会有雪崩问题,但是业务的进度会受到积压。

聊聊微服务到底该如何划分

4、服务的主次之分

聊聊微服务到底该如何划分

核心服务:影响全局服务的基础服务(如:ID生成服务)、影响关键路径的服务(如:登录服务)

重要服务:主要业务所在的服务,用户大部分时间都是在这个服务上操作的,如:商品查询、订单提交、订单支付

次要服务:辅助性的服务,售后服务、退货退款、发票服务、报表统计

对于核心服务是要保障三高的,它影响的是全局;

对于重要服务是要保障领域独立存活的,影响最小化,即使支付服务挂了,也不能影响 商品查询和订单提交等服务;

次要服务在遇到故障或资源紧张的情况下是可以降低资源投入或者临时关闭的;

三、总结

1、以服务的“高内聚,低耦合,兼顾职责单一,代码复用率高”为指导原则;

2、可以参考DDD领域驱动设计的方法论;

3、服务的拆分影响因素很多,包括团队技术水平、业务水平、人为因素、部门斗争、康威定律;

4、不要死搬教条,要不断地思考、改进重构、及时修正错误 才能达到一个相对理想的效果;

 文章来源地址https://www.toymoban.com/news/detail-492287.html

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

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

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

相关文章

  • 从七个方面聊聊linux到底强在哪

      从事计算机相关行业的同学不难发现,身边总有一些朋友在学习linux,有的开发同学甚至自己的电脑就是它。经常听他们说linux如何好用等等。那么linux到底好在那里,能让大家如此喜欢。这也是我经常问自己的一个问题。下面我将通过以下七点来为大家阐述linux的巨大优势

    2024年02月02日
    浏览(59)
  • 聊聊不同集群的微服务如何通过feign调用

    之前业务部门的某项目微服务调用关系如下图 后因业务改造需要,该项目需要将服务A部署到另外一个集群,但服务A仍然需要能调用到服务B,调用关系如下图 之前调用方式是负责服务B的开发团队提供相应的feign客户端包给到服务A开发团队,服务A开发团队直接将客户端包引入

    2024年02月13日
    浏览(50)
  • 服务器现在Windows Server哪个版本稳定?

    在当今的数字化时代,服务器作为信息技术的核心组件,承担着数据存储、应用运行和网络服务等重要职能。Windows Server作为微软推出的服务器操作系统,一直以其稳定性、安全性和易用性受到广泛关注。 原文地址:服务器现在Windows Server哪个版本稳定?-云计算IT教程网 然而

    2024年04月26日
    浏览(90)
  • 过去、现在、未来:UGC 将如何点燃元宇宙?

    自互联网早期以来,我们今天居住的数字空间已经发生了很大的变化。下一个重大的进化转变正在迅速展开,许多世界上较大的科技公司宣布他们打算开创所谓的 “元宇宙”。 正如风险投资家 Matthew Ball 所描述的,“[ The metaverse ] 是一个具象化的互联网,由实时渲染的 3D 虚

    2024年01月17日
    浏览(36)
  • 如何挖掘更多用户新需求?现在知道还不晚

    在如今的大数据时代背景下,越来越多的零售企业运用云计算等新兴技术将互联网与日常运营进行了有效结合,一场因技术创新而引起的产物——新零售应时而生。 新零售时代,在需求拉动、技术驱动和市场推动三大要素的作用下,每个零售企业必将迎来一场不可避免的新变

    2024年02月11日
    浏览(49)
  • 黑客必杀技能之一,黑掉目标服务器后如何快速定位和查找自己需要的目标、信息、文件?如何实现输出内容带有炫酷的颜色和背景色等等?

    黑客必杀技能之一,黑掉目标服务器后如何快速定位和查找自己需要的目标、信息、文件?如何实现输出内容带有炫酷的颜色和背景色等等? 查找资源的方法有很多种,尤其是结合各种正则表达式的用法,先看一下find的高级用法和汇总。 find 命令的基本语法如下: 一、基本

    2024年02月22日
    浏览(51)
  • 如何划分ip地址 划分IP地址的方法

    我们每台电脑联网都有相对应的IP地址,如果用户不知道自己的ip地址,可以直接在百度上查找ip地址即可。可以使ip地址这么多,我们怎么识别ip呢。如何划分ip地址呢。这就是今天小编要介绍的内容了。 现在的IP网络使用32位地址,以点分十进制表示,如172.16.0.0。地址格式为

    2024年02月05日
    浏览(44)
  • 现在的百度竞价还可以做吗?前景和收入如何?

    如果你是想找一个竞价员的工作,可以很肯定的说,如果只是做一个单纯的竞价员,把广告投出去,肯定是不行的 以前竞价员这个行业刚出来的时候,有点像“三无”行业,无学历要求、无经验要求、无年龄要求,基本上人人都能做,那会也确实是百度竞价跑的最疯的时候,

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

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

    2024年02月15日
    浏览(28)
  • 微服务划分的姿势

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

    2024年02月11日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包