当前位置: 首页 > news >正文

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是一种非常适合成为微服务拆分的方法论。它能够帮助开发人员更好地理解业务需求,找到合适的服务边界,构建高质量的领域模型和微服务。


总结

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

相关文章:

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

文章目录 前言一、微服务拆分的原则二、微服务拆分的时机三、微服务拆分的方法总结 前言 微服务架构是将一个单体应用程序拆分为一个个独立且保持松耦合的服务的一种架构方式,每个服务有着独立的数据库并且能独立运行部署。微服务架构的构建过程中,第一…...

Linus:我休假的时候也会带着电脑,否则会感觉很无聊

目录 Linux 内核最新版本动态 关于成为内核维护者 代码好写,人际关系难处理 内核维护者老龄化 内核中 Rust 的使用 关于 AI 的看法 参考 12.5-12.6 日,Linux 基金会组织的开源峰会(OSS,Open Source Summit)在日…...

快速排序的新用法

普通快排 简介 快速排序是一种高效的排序算法,利用分治的思想进行排序。它的基本原理是在待排序的n个数据中任取一个数据为分区标准,把所有小于该排序码的数据移到左边,把所有大于该排序码的数据移到右边,中间放所选记录&#x…...

利用乔拓云SAAS系统,快速、高效搭建小程序

a-service,软件即服务)系统来搭建他们的微信小程序。SAAS系统作为一种创新的软件应用模式,将软件作为一种服务提供给用户,为用户提供了更高效、更便捷的解决方案。本文将探讨为什么越来越多的商家选择使用乔拓云这种SAAS系统搭建小…...

Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版

文章目录 1 基础知识1.1 K8s 有用么?1.2 K8s 是什么?1.3 k8s 部署方式1.4 k8s 环境解析 2 环境部署2.1 基础环境配置2.2 容器环境操作2.3 cri环境操作2.4 harbor仓库操作2.5 k8s集群初始化2.6 k8s环境收尾操作 3 应用部署3.1 应用管理解读3.2 应用部署实…...

非常抱歉的通知

非常感谢有这么多的同志向我提问一些问题,也非常感谢很多的同志可以看我的学习文章,这次大概有四五个月没有上csdn,看到了许多同志的疑问和慰问,我也很感动,但是由于我自己以及其他的原因,我现在打算以考编…...

rust 包模块组织结构

一个包(package)可以拥有多个二进制单元包及一个可选的库单元包。随着包内代码规模的增长,你还可以将代码拆分到独立的单元包(crate)中,并将它作为外部依赖进行引用。 RUST提供了一系列的功能来帮助我们管…...

深入浅出:HTTPS单向与双向认证及证书解析20231208

介绍: 网络安全的核心之一是了解和实施HTTPS认证。本文将探讨HTTPS单向认证和双向认证的区别,以及SSL证书和CA证书在这些过程中的作用,并通过Nginx配置实例具体说明。 第一部分:HTTPS单向认证 定义及工作原理:HTTPS单向认证是一…...

水利安全监测方案——基于RTU200的解决方案

引言: 水资源是人类赖以生存的重要基础,对于保障水利系统安全运行以及应对自然灾害起着关键作用。为了实现水利安全监测的目标,我们提出了基于RTU200的解决方案。本方案将结合RTU200的可靠性、灵活性和高效性,为您打造一个全面的…...

安卓开发学习---kotlin版---笔记(一)

Hello word 前言:上次学习安卓,学了Java开发,简单的搭了几个安卓界面。这次要学习Kotlin语言,然后开发安卓,趁着还年轻,学点新东西,坚持~ 未来的你会感谢现在努力的你~ 主要学习资料&#xff1a…...

挑选在线客服系统的七大注意事项

越来越多的企业开始注重客户服务,所以在线客服系统也逐渐成为了电商企业不可或缺的一部分。然而在挑选在线客服系统的过程中,蛮多企业会遇到各种各样的问题,这就导致了最终选择的系统并不适合自己企业的需求。接下来我将提醒大家挑选在线客服…...

剧本杀小程序搭建:打造线上剧本杀新体验

剧本杀是一款以角色扮演为主的游戏,一度成为了年轻人的最喜爱的社交游戏。在剧本杀市场需求下,剧本杀规模也迅速上升。今年第一季度,剧本杀市场规模环比增长47%,市场整体消费水平逐渐呈上升趋势。 随着剧本杀的不断发展&#xff…...

机器学习实战:预测波士顿房价

前言: Hello大家好,我是Dream。 今天来学习一下机器学习中一个非常经典的案例:预测波士顿房价,在此过程中也会补充很多重要的知识点,欢迎大家一起前来探讨学习~ 一、导入数据 在这个项目中,我们利用马萨诸…...

基于个微机器人的开发

简要描述: 下载消息中的动图 请求URL: http://域名/getMsgEmoji 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明…...

程序员学习方法

https://www.zhihu.com/question/24187324 https://www.zhihu.com/question/505750740 windows系统: 如何业余开展 Windows 系统的学习? - 知乎 wifi工作原理: WiFi的工作原理是什么? - 知乎 发...

VUE+THREE.JS 点击模型相机缓入查看模型相关信息

点击模型相机缓入查看模型相关信息 1.引入2.初始化CSS3DRenderer3.animate 加入一直执行渲染4.点击事件4.1 初始化renderer时加入监听事件4.2 触发点击事件 5. 关键代码分析5.1 移除模型5.2 创建模型上方的弹框5.3 相机缓入动画5.4 动画执行 1.引入 引入模型所要呈现的3DSprite…...

cpu 300% 爆满 内存占用不高 排查

top查询 cpu最高的PID ps -ef | grep PID 查看具体哪一个jar服务 jstack -l PID > ./jstack.log 下载/打印进程的线程栈信息 可以加信息简单分析 或进一步 查看堆内存使用情况 jmap -heap Java进程id jstack.log 信息示例 Full thread dump Java HotSpot(TM) 64-Bit Se…...

Halcon 简单的ORC 字体识别

文章目录 仿射变化识别 仿射变化 将图片进行矫正处理 dev_close_window() read_image(Image,C:/Users/Augustine/Desktop/halcon/image.png) *获取图片的大小 get_image_size(Image, Width, Height) *仿射运算获取图片的角度对图片进行矫正 *选中图片的区域 gen_rectangle1 (Re…...

12月7日作业

使用QT模仿一个登陆界面(模仿育碧Ubisoft登录界面) #include "myqq.h"MyQQ::MyQQ(QWidget *parent): QMainWindow(parent) {this->resize(880,550); //设置窗口大小this->setFixedSize(880,550); //固定窗口大小this->setStyleShee…...

【腾讯云HAI域探密】- AIGC应用助力企业降本增效之路

一、前言: 近年来,随着深度学习、大数据、人工智能、AI等技术领域的不断发展,机器学习是目前最火热的人工智能分支之一,是使用大量数据训练计算机程序,以实现智能决策、语音识别、图像处理等任务。 作者也是经过了以上…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...