微服务的颗粒度难题:找到合适的微服务大小

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

前言

在微服务架构风格中,微服务通常按照单一职责原则(SRP)设计,作为一个单独部署的软件单元,专注于做一件事情。我们作为开发人员往往倾向于尽可能将服务设计得更小,却没有考虑为什么要这样做!关于服务颗粒度的主观性,即什么是单一职责,是我们作为开发人员在微服务颗粒度方面犯错的地方。为了克服开发团队在确定微服务大小时面临的困境,理解颗粒度的驱动因素是至关重要的。

颗粒度

在微服务中,有两个概念——模块化,涉及将系统拆分为独立的部分,另一个是——颗粒度,涉及这些独立部分的大小。

确定颗粒度的合适水平——服务的大小之一是微服务架构中许多困难的部分,我们作为开发人员很难解决。颗粒度不是由服务中的类或代码行数来定义的,而是由服务所做的事情决定的——因此,在正确确定服务颗粒度时存在这种难题。

服务的颗粒度分为两种相反的力量——颗粒度分解器和颗粒度整合器。

颗粒度分解器

我应该在什么时候考虑将服务拆分成更小的部分?然而,

颗粒度整合器

微服务的颗粒度难题:找到合适的微服务大小,微服务,运维,java,云计算,云原生
1*MAAtLdlv1aOoeK8mj2qx3Q.png

我应该在什么时候考虑将服务重新组合?

颗粒度分解器

由于我们生活在微服务和纳米服务的时代,大多数开发团队通过随意拆分服务并忽视随之而来的后果而犯错。为了找到合适的大小,应该在不同的参数上进行权衡分析,并根据微服务的上下文和边界做出明智的决定。

颗粒度分解器的驱动因素为何拆分服务提供了指导和理由。让我们看看这些驱动因素如何影响微服务大小的分析,以一个例子为例。

示例:考虑一个典型的通知服务,负责通过短信、电子邮件或邮寄的纸质信件通知客户。

微服务的颗粒度难题:找到合适的微服务大小,微服务,运维,java,云计算,云原生
1*FlsStAZ7o0yJW31DkbWSOg.png

让我们通过分解器驱动因素对这种情况进行分析,并找到合适的大小。我们从以下开始:

服务范围和功能

服务是否执行了太多无关的事情?服务的范围和功能主要取决于两个属性——首先是内聚性,即特定服务操作的程度和方式相互关联。第二个是组件的整体大小,通常用责任的数量、服务的入口点数量或两者的组合来衡量。 场景:看看通知服务,有人可能说将此服务拆分为三个单一用途的服务。但这是正确的吗?答案是否定的!因为这个服务具有相对强的内聚性,即所有这些功能都与一个目标相关,即通知,并且具有一个单一的目的。因此,无需拆分服务,因为它应该是一个执行三个任务的服务。接下来是:

代码波动

微服务的颗粒度难题:找到合适的微服务大小,微服务,运维,java,云计算,云原生
1*Gh7EjGVU9FtBG1ttkFP77g.png
微服务的颗粒度难题:找到合适的微服务大小,微服务,运维,java,云计算,云原生
1*E8X9xfhIzlX9rWcGuHsK3Q.png

更改是否仅限于服务的某一部分?代码波动是源代码更改的速率。我们必须衡量服务中源代码更改的频率,这有助于充分理由拆分服务。 场景:假设我们对服务功能有以下指标:

现在,如果我们按照更改的度量标准进行分析,邮寄信件通知部分的频繁更改也要求测试短信和电子邮件,因此作为单个服务,它增加了测试范围和部署风险。那么我们该如何解决呢?

如果我们将此服务拆分为两个独立服务,电子通知和邮寄通知,频繁的更改现在隔离到其自己的服务中,因此测试范围减小,部署风险降低。

可扩展性和吞吐量

微服务的颗粒度难题:找到合适的微服务大小,微服务,运维,java,云计算,云原生
1*E16W42_Zdffz3gBYCa1wkQ.png
微服务的颗粒度难题:找到合适的微服务大小,微服务,运维,java,云计算,云原生
1*SpnfrWKzuci21UBtpsQRVQ.png

服务的部分是否需要以不同的方式扩展?可以客观地测量服务不同功能的可扩展性需求,以量化服务是否

应该被拆分。

场景:再次考虑通知服务示例,测量单个服务的可扩展性需求如下:

在这种情况下,作为单个服务,电子邮件和邮寄信件功能必须不必要地扩展以满足短信通知的需求,影响成本和弹性,即启动的平均时间。这完全证明了将通知服务拆分为独立服务——短信、电子邮件和信件,因为它允许每个服务独立扩展以满足其各自不同的吞吐量需求。

容错性

是否存在导致服务内关键功能失败的错误?在特定领域内应用程序即使发生致命崩溃(例如OOM),仍然能够继续运行的能力。 场景:考虑到通知服务的情况,假设电子邮件功能继续出现OOM错误并发生致命崩溃,整个合并服务会中断,包括短信和邮寄信件处理。将这个单一的合并通知服务拆分成三个独立服务为客户通知领域提供了一定程度的容错性。因此,电子邮件功能的致命错误不会影响短信或邮寄信件。 进一步:现在这里可能会出现一个问题,因为电子邮件是唯一与频繁崩溃有关的问题,为什么不将短信和邮寄信件功能合并?这是一个合理的问题。如果记得,当我们讨论代码波动的情景时,我们将邮寄信件与电子邮件分开,然后将短信和邮寄信件合并成一个——电子通知。如果我们在那里能够做到这一点,为什么在这里不行呢?因为电子邮件和短信是相关的,它们都是电子通知的一部分。但在这里,短信和邮寄通知没有任何共同之处,无法合并。

注意:记住,如果一个服务因为它执行多个无关的任务而难以命名,那么考虑拆分该服务。其次,无论出于哪种驱动因素拆分服务,都要始终检查是否可以通过“剩余”功能形成强内聚性。因此,将通知服务分解为三个独立服务在这里是有道理的。最后但并非最不重要的驱动因素是:

可扩展性

服务是否始终在扩展以添加新功能?在服务扩展时添加附加功能的能力。 场景:假设我们要向通知服务添加新功能,例如移动推送通知、桌面通知、社交媒体通知等。这些新功能当然可以添加到单个合并的通知服务中。然而,每次添加新的通知时,整个通知服务都需要进行测试,并且所有通知的功能都需要不必要地部署到生产环境。

微服务的颗粒度难题:找到合适的微服务大小,微服务,运维,java,云计算,云原生
1*_BANDIxrGCZ7lc3ztjtigQ.png

注意:仅在事先知道计划并希望将额外的合并功能作为领域的一部分时才应用此场景。

推荐做法:

1.如果一个服务因为执行多个无关的任务而难以命名,那么考虑拆分该服务。2.无论出于哪种驱动因素拆分服务,都要始终检查是否可以通过“剩余”功能形成强内聚性。3.拆分服务时,根据业务能力而不是技术能力进行检查。4.在设计微服务时使用单一职责原则(SRP),但要牢记强内聚性的全局图景。5.最后,使用分解器驱动因素分析拆分服务的权衡。文章来源地址https://www.toymoban.com/news/detail-785113.html

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

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

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

相关文章

  • hive 分桶文件的大小多大最合适

    hive 分桶文件的大小多大最合适 Hive 分桶文件大小的最佳选择取决于多个因素,例如数据的大小、查询模式、硬件配置和网络带宽等。一般来说,建议将每个桶的大小控制在128 MB到1 GB之间。 以下是一些关于选择分桶大小的建议: 根据数据大小选择:如果数据集很小,则将桶

    2024年02月17日
    浏览(44)
  • 分布式光伏发电大规模应用,运维难题如何解?

    国家能源局数据显示,2022年我国光伏新增装机达 87.4GW,同比+59%,其中:集中式装机达36.29GW,同比+41.8%; 分布式装机达51.11GW,同比+207.9%,已连续两年超过集中式电站。 近年来,随着“双碳”行动方案的实施和“整县开发试点”工作的推进,以“就地开发、就近利用”为主

    2024年02月02日
    浏览(47)
  • java基于RestTemplate的微服务发起http请求

    实现的效果

    2024年02月05日
    浏览(40)
  • JAVA开发(基于Restful的微服务第三方简易接口设计)

       一、需求背景 java后端需要提供接口服务,其中接口服务分为对内网的后台管理系统的接口,对外网的用户接口和对第三方系统的接口。这里主要讲对第三方的接口。 二、接口设计 我们可以参考微信小程序的接口,一般一个系统提供给第三方系统的接口都需要接口权限认

    2024年02月09日
    浏览(54)
  • Pycharm安装后打开提示:此应用无法在你的电脑上运行,若要找到合适于你的电脑的版本,请咨询发布者。

    电脑做了新系统,windows10专业版,64位, 下载的是:pycharm-professional-2022.3.2-aarch64.exe ,安装后提示“无法在电脑上运行”好奇怪的问题,我怀疑是之前安装过重作系统后过了试用期导致的,又卸载后安装了一个社区版的:pycharm-community-2022.3.2-aarch64.exe,安装后同样的提示 查了半

    2024年02月16日
    浏览(141)
  • JAVA开发与运维(怎么通过docker部署微服务jar包)

    目标: 通过docker的方式部署微服务。 我们通过java开发的微服务可以打成jar包,我们可以直接通过裸机部署,也可以通过docker来部署,本文介绍通过docker来部署微服务。 Docker 是一个用于开发,交付和运行应用程序的开放平台。 Docker 将应用程序与基础架构分开,从而可以快速

    2024年02月09日
    浏览(44)
  • 【kafka】Java客户端代码demo:自动异步提交、手动同步提交及提交颗粒度、动态负载均衡

    kafka版本为3.6,部署在3台linux上。 maven依赖如下: 生产者、消费者和topic代码如下: 这里先简单解释一下, kafka的topic只是一个逻辑上的概念,实际上的物理存储是依赖分布在broker中的分区partition来完成的 。kafka依赖的zk中有一个 __consumer_offsets [1]话题,存储了所有consumer和g

    2024年01月19日
    浏览(54)
  • 没有文件服务器,头像存哪里合适

    视频在bilibili:没有文件服务器,头像存哪里合适 之前有同学私信我说,他的项目只是想存个头像,没有别的文件存储需求,不想去用什么Fastdfs之类的方案搭建文件服务器,有没有更简单且无需后期维护的方案,我喝了一口过期的开水,想了下,还真有,现在就给大家介绍一

    2024年04月28日
    浏览(43)
  • 腾讯云轻量应用服务器“镜像”怎么选择合适?

    腾讯云轻量应用服务器镜像怎么选择?如果是用来搭建网站可以选择宝塔Linux面板腾讯云专享版,镜像系统根据实际使用来选择,腾讯云百科txybk.com来详细说下腾讯云轻量应用服务器镜像的选择方法: 轻量应用服务器的镜像可以选择纯净版操作系统,Linux如CentOS、Ubuntu、Cent

    2024年02月08日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包