03-微服务架构构建之微服务拆分

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


前言

微服务架构是将一个单体应用程序拆分为一个个独立且保持松耦合的服务的一种架构方式,每个服务有着独立的数据库并且能独立运行部署。微服务架构的构建过程中,第一步也是最为重要的一步是进行服务拆分。只有将微服务按照合理的方式进行拆分,才能确保整个项目能够高效而正确地运行。


一、微服务拆分的原则

微服务拆分原则有以下几个:

  1. 单一职责原则:每个微服务应该有一个明确的职责范围,只负责自己的一部分业务功能,不涉及其他职责。

  2. 服务自治原则:每个微服务应该具备自我管理、独立部署、独立伸缩、独立运维的能力,不与其他服务强依赖。

  3. 服务可复用原则:每个微服务应该是可复用的,可以为其他服务提供通用的服务功能。

  4. 服务粒度原则:微服务应该按照业务功能划分,而不是按照技术、数据结构等因素划分,保持服务规模适度。

  5. 服务高内聚、低耦合原则:微服务内部业务功能高度内聚,与其他服务之间耦合度低,便于分布式部署和独立开发、维护。

  6. 服务易于测试原则:每个微服务应该具备自我测试的能力,包括单元测试、接口测试、集成测试等多种形式,确保服务质量。

  7. 服务可扩展原则:每个微服务应该能够按照业务需求进行扩展,包括水平扩展和垂直扩展两种方式,以应对高并发、大流量等场景。

同样,也可以参考一下,这篇文章对服务拆分原则的理解。以下摘自该文章。

  1. 使用有界上下文。

  2. 确定核心域并保持竞争优势。

  3. 对通用域进行成本优化。

  4. 考虑支持领域。

  5. 引入反腐层。

  6. 识别数据通信模式。

  7. 引入事件驱动架构。

  8. 使API简洁明了。

  9. 将相关的微服务合并为更大的服务。

  10. 引入无缝开发支持工具。

不管是哪种拆分原则,目标都是需要将相同或相似的服务聚合在一起,形成一个独立的自治服务。

二、微服务拆分的时机

通过《02-微服务架构的概念与优缺点》可以了解到微服务架构具备很多的优点,能够有效解决项目业务扩大所带来的问题。然而,并非所有公司都适合采用微服务架构,尤其是规模较小且业务相对固定的公司。对于这些公司来说,从服务层面,他们不会有更多变化,通过优化现有服务即可满足需求。从成本方面,构建微服务架构,需要很多资源和配套的中间件。因此,对于那些规模较大,业务服务复杂度高,同时业务也在不断更新或新增的项目,微服务架构则是非常适合的选择。

在确定使用微服务架构后,服务的拆分是一项重要任务。根据拆分原则,我们可以在恰当的时机进行服务拆分。然而,根据行业经验来看,并不建议在项目构建初期进行服务拆分。主要原因有以下几点:

  1. 项目构建初期,服务单一,数据量较少,及时是单体系统都可以支撑业务。

  2. 项目构建初期,服务没有形成体系,更没有规模服务,很难做到微服务的单一职责和服务自治。

  3. 业务架构不够成熟,目前提供的服务,很有可能会优化,甚至更改技术栈重构。

因此,项目构建初期无需将其拆分,因为强行拆分此时可能会产生适得其反的效果。而遇到下面这些情况就可以进行服务拆分了。

  1. 项目足够成熟并且业务稳定,团队成员不断扩大并且目前的服务想要扩展很难。只有在项目成熟的情况下,业务专家才可以从精确的划分出业务领域,进而将各个服务分解到业务领域内,最终形成各自独立的微服务。

  2. 项目要求CI/CD(持续集成/持续交付)。尤其是很多新兴的互联网公司,要求系统在尽可能不停机的情况下,还需要持续上线新的功能。使用敏捷开发,可以更好地让开发者在完成周期形的业务交付,而DevOps则可以将这些代码,进行自动化测试、构建和集成,不断的完成新的需求提交,并保证代码的质量和稳定性。

  3. 正式运行的项目,部分服务需要停机。当上线一些有问题的服务时,将该部分服务停机,这个情况对单体应用是非常有困难的。而微服务架构中,可以对存在问题的微服务进行下线处理,从而达到快速解决问题的目的。


三、微服务拆分的方法

在掌握了准确的微服务拆分时机和有了强有力的拆分原则后,拆分方法将成为下一个关键环节。现在微服务拆分的方法有很多种,常见的包括:

  1. 按业务功能拆分:将整个系统按照不同的业务模块进行拆分,每个模块对应一个微服务。这种方式能够有效地降低系统的复杂度,提高系统的可维护性和可扩展性。

  2. 按数据拆分:将整个系统的数据按照不同的领域进行拆分,每个领域对应一个微服务。这种方式能够提高系统的性能和可扩展性。

  3. 按用户界面拆分:将整个系统按照不同的用户界面进行拆分,每个用户界面对应一个微服务。这种方式能够实现快速迭代和响应用户需求的能力。

  4. 按技术栈拆分:将整个系统按照不同的技术栈进行拆分,每个技术栈对应一个微服务。这种方式能够提高开发效率和降低系统的复杂度。

  5. 按性能拆分:将整个系统按照不同的性能需求进行拆分,每个需求对应一个微服务。这种方式能够提高系统的性能和可扩展性。

从行业经验来看,可以确定领域驱动设计(Domain Driven Design,简称DDD)在微服务拆分方面具有显著优势。

DDD是一种软件开发方法论,它强调将软件划分为不同的领域,每个领域都由一个核心模型驱动。 微服务架构的核心概念是将单一的应用程序拆分为一组小型、自治的服务。而DDD则提供了一种方法来设计这些微服务的边界和交互。 领域驱动设计引入了领域模型的概念,该模型描述了业务领域的核心概念和实体,而不关注技术实现细节。这使得团队可以专注于业务逻辑,而不被底层技术细节所干扰。 通过将领域模型作为微服务拆分的基础,可以确保每个微服务都是高内聚的,并且只关注自己领域内的业务逻辑。这种拆分方式使得每个微服务都能够独立开发、部署和维护,从而提高了系统的可伸缩性和可靠性。 此外,DDD还强调了领域驱动设计的语言在业务团队和开发团队之间的沟通和理解的重要性。通过共享统一的语言和概念,可以确保业务需求能够准确地传达给开发团队,并且开发团队能够将其转化为可行的技术解决方案。 因此,DDD是一种非常适合成为微服务拆分的方法论。它能够帮助开发人员更好地理解业务需求,找到合适的服务边界,构建高质量的领域模型和微服务。


总结

以上就是今天要讲的关于微服务拆分的全部内容。通过了解微服务的拆分时机并掌握拆分原则,我们可以选择合适的拆分方式,从而顺利进行微服务的拆分。微服务的拆分时机一般是在系统庞大、业务复杂或者团队扩大的情况下,以应对系统的瓶颈和团队协作的问题。同时,在进行微服务拆分时,我们需要遵循一些原则,如单一职责原则、服务自治原则等,以确保拆分后的服务具有清晰的职责和松耦合的关系。最后,要根据实际情况选择合适的拆分方式,提出使用领域驱动设计作为方法论的优势。只有通过这样的准备和选择,才能够顺利进行微服务的拆分工作。文章来源地址https://www.toymoban.com/news/detail-769375.html

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

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

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

相关文章

  • 深入浅出 -- 系统架构之微服务架构选型参考图

    深入浅出 -- 系统架构之微服务架构选型参考图

    技术选型架构图 是一个用于展示项目中所采用的各种技术和组件之间关系的图表。 它通常包括以下几个部分: 1. 项目名称和描述:简要介绍项目的背景和目标。 2. 技术栈:列出项目中使用的主要技术和工具,如编程语言、框架、数据库等。 3. 组件关系:用箭头表示各个组

    2024年04月09日
    浏览(14)
  • 深入浅出 -- 系统架构之微服务架构的新挑战

    深入浅出 -- 系统架构之微服务架构的新挑战

    尽管微服务架构有着高度独立的软件模块、单一的业务职责、可灵活调整的技术栈等优势,但也不能忽略它所带来的弊端。本篇文章,我们从网络、性能、运维、组织架构和集成测试五个方面来聊一下设计微服务架构需要考虑哪些问题,对设计有哪些挑战呢? 前面我们聊过了

    2024年04月09日
    浏览(22)
  • 架构师的36项修炼-05架构核心技术之微服务

    架构师的36项修炼-05架构核心技术之微服务

    本课时我们来学习微服务。 本课时主要包括如下内容。 单体系统的困难:编译部署困难、数据库连接耗尽、服务复用困难、新增业务困难。 微服务框架:Dubbo 和 Spring Cloud,微服务的架构策略。 微服务模式:事件溯源、查询与命令职责分离 CQRS、断路器、超时。 微服务最佳

    2024年01月24日
    浏览(15)
  • 深入浅出 -- 系统架构之微服务中Nacos的部署

    深入浅出 -- 系统架构之微服务中Nacos的部署

    前面我们提到过,在微服务架构中,Nacos注册中心属于核心组件,通常我们会采用高性能独立服务器进行部署,下面我们一起来看看Nacos部署过程: 因为Nacos是支持windows和Linux系统的,且服务器操作系统一般都是Linux的,为了大家看完文章,可以按照步骤一步步把Nacos部署好,

    2024年04月10日
    浏览(13)
  • 深入浅出 -- 系统架构之微服务标准组件及职责

    深入浅出 -- 系统架构之微服务标准组件及职责

    我们来认识一下微服务架构在Java体系中依托哪些组件实现的。 相对于单体架构的简单粗暴,微服务的核心是将应用打散,形成多个独立提供的微服务,虽然从管理与逻辑上更符合业务需要。但微服务架构也带来了很多急需解决的核心问题: 1、如何发现新节点以及检查各节点

    2024年04月12日
    浏览(9)
  • 安全架构的设计原则:如何构建高度可扩展的安全系统

    随着互联网的发展,我们的生活和工作越来越依赖于计算机系统和网络。这也意味着我们的计算机系统和网络面临着越来越多的安全威胁。因此,安全架构的设计成为了一项至关重要的技术。本文将讨论如何构建高度可扩展的安全系统,并介绍一些设计原则和实践方法。 在讨

    2024年04月13日
    浏览(16)
  • [golang gin框架] 39.Gin商城项目-微服务实战之微服务架构

    [golang gin框架] 39.Gin商城项目-微服务实战之微服务架构

    单体架构在 中小企业内部 用的是非常多的,当 业务不复杂 , 团队规模不大 的时候,单体架构比微服务架构具有 更高的生产率 单体架构 当 业务比较复杂 , 并发量 比较大, 团队规模扩大的时候, 就需要引入微服务架构了,它比单体架构 具有 更高的生产率, 可以 节省成本 , 解

    2024年02月12日
    浏览(24)
  • Java 面向对象 03 就近原则和this关键字

    Java 面向对象 03 就近原则和this关键字

    对于起名字需要见名知意,所以这个String n 不太合适: 但是如果将n改为name,会与第五行代码的name重复: 运行代码发现,获取后的姓名为默认值,是null 引入就近原则: 此处打印的是age=10,但是如果想使用成员位置的age ,应该使用this 代码: 运行结果: 使用this关键

    2024年01月21日
    浏览(11)
  • 构建新一代的K8s原生Java微服务+Quarkus实战

    构建新一代的K8s原生Java微服务+Quarkus实战

    送书第一期 《用户画像:平台构建与业务实践》 送书活动之抽奖工具的打造 《获取博客评论用户抽取幸运中奖者》 送书第二期 《Spring Cloud Alibaba核心技术与实战案例》 送书第三期 《深入浅出Java虚拟机》 送书第四期 《AI时代项目经理成长之道》 送书第五期 《Kubernetes原生

    2024年02月08日
    浏览(14)
  • 《微服务架构设计模式》第二章 服务的拆分策略

    《微服务架构设计模式》第二章 服务的拆分策略

    内容总结自《微服务架构设计模式》 软件架构的定义:计算机系统的软件架构是构建这个系统所需要的一组结构,包括软件元素、他们之间的关系以及两者的属性(Bass等著) 其实质是应用程续的架构将软件分解为元素(element)和这些元素之间的关系(relation)。由于这两个

    2024年02月09日
    浏览(16)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包