微服务6大拆分原则

微服务6大拆分原则

微服务拆分是指将一个大型应用程序拆分成独立服务的过程,在微服务拆分时,需要考虑以下6大微服务拆分原则

一、单一职责原则

微服务单一职责原则,是指每个微服务应该专注于解决一个明确定义的业务领域或功能,而不是试图处理多个不相关的功能。

图片

在微服务架构中,单一职责原则的重要性体现在以下几个方面:

1)易于维护

每个微服务专注于特定的功能或业务领域,使得服务的代码相对独立,易于维护。

当需要增加新功能或对某个功能进行修改时,只需关注该微服务,而不影响其他服务的运行。

2)解耦性

如果一个微服务接口有一个以上的职责,这些职责就耦合在了一起,这会导致脆弱的设计。

单一职责原则有助于降低服务之间的耦合度,因为每个微服务只关注一个功能,不会包含与其他功能相关的代码。

所以微服务之间的关联度较低,可以更灵活地独立开发、部署和扩展。

3)更好的团队协作

每个微服务的责任清晰明确,可以由专门的团队负责开发和维护,这种团队的划分也能够促进团队之间的合作和协作,提高开发效率。

二、适当微原则

使用微服务最重要的一点就是,微服务到底多微才算“微”,这个业界也没有一定的标准。

服务越小,微服务的独立性就会越高,但同时,微服务的数量也会激增,管理这些大批量的服务也将会是一个挑战。

所以,微服务也不是越小越好,最好结合服务拆分场景来考虑。

应逐步划分,持续演进,避免服务数量的爆炸性增长。

三、接口隔离原则

定义微服务之间的接口时,应该遵循接口隔离原则,确保接口足够简洁明了,不包含不必要的功能,减少耦合。

服务通过标准的接口隔离,隐藏内部实现细节,这使得服务可以独立开发、测试、部署、运行,以服务为单位持续交付。

尽量消除对其他服务的强依赖,这样可以降低沟通成本,提升服务稳定性。

四、避免影响产品原则

也就是说要一边做产品功能迭代,一边完成服务化拆分。

比如:优先剥离比较独立的边界服务,短信服务之类就是典型可独立的服务。

从非核心的服务出发减少拆分对现有业务的影响,也给团队一个练习、试错的机会。

五、具备可扩展性原则

在拆分微服务时,应该考虑到每个服务的独立扩展性,以满足不同的负载需求。

微服务拆分之后,由于服务是以独立进程的方式部署,所以服务之间通信就不再是进程内部的方法调用而是跨进程的网络通信了。

在这种通信模型下服务接口的定义要具备可扩展性,否则在服务变更时会造成意想不到的错误。

比如:微服务的接口因为升级把之前的三个参数改成了四个,上线后导致调用方大量报错。

针对这种情况,推荐做法服务接口的参数类型最好是封装类,这样如果增加参数就不必变更接口的签名,而只需要在类中添加字段就可以了。

这就是典型的针对微服务接口,具备可扩展性原则的场景之一。

六、容错性原则

在设计微服务时,应该考虑到服务的容错性,以避免单点故障导致整个系统崩溃。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java: Compilation failed: internal java compiler error 报错解决方案

java: Compilation failed: internal java compiler error 报错解决方案 如下图所示: 在编译的时候提示 java: Compilation failed: internal java compiler error 原因:内部 java 编译错误,一般是编译版本不匹配。 问题解决 项目中有以下设置JDK版本…

介绍一下ReentrantLock 跟 Synchronized 区别

ReentrantLock 跟 Synchronized 区别 面试回答: 相同点: synchronized 和 ReentrantLock 都是用来保护资源线程安全的。 都可以保证可见性。 synchronized 和 ReentrantLock 都拥有可重入的特点。 从基本语义和概念上说 synchronized: Java 内建的…

第7次课 栈A

课堂学习 栈(stack) 是一种遵循先入后出逻辑的线性数据结构。 我们可以将栈类比为桌面上的一摞盘子,如果想取出底部的盘子,则需要先将上面的盘子依次移走。我们将盘子替换为各种类型的元素(如整数、字符、对象等&…

ts装饰器

TypeScript 装饰器是一种特殊类型的声明,能够被附加到类声明、方法、访问符、属性或参数上。它本质上是一个函数,会在运行时被调用,并且被装饰的声明信息会作为参数传递给装饰器函数。 装饰器的分类 类装饰器 类装饰器作用于类构造函数&…

【金仓数据库征文】政府项目数据库迁移:从MySQL 5.7到KingbaseES的蜕变之路

摘要:本文详细阐述了政府项目中将 MySQL 5.7 数据库迁移至 KingbaseES 的全过程,涵盖迁移前的环境评估、数据梳理和工具准备,迁移实战中的数据源与目标库连接配置、迁移任务详细设定、执行迁移与过程监控,以及迁移后的质量验证、系…

VB与Excel无缝连接实现指南

一、前期准备 引用Excel对象库: 在VB开发环境中,点击"项目"→"引用" 勾选"Microsoft Excel XX.X Object Library"(XX.X代表版本号) 创建Excel应用程序对象: vb Dim xlApp As Excel.…

【MySQL】数据库、数据表的基本操作

个人主页:Guiat 归属专栏:MySQL 文章目录 1. MySQL基础命令1.1 连接MySQL1.2 基本命令概览 2. 数据库操作2.1 创建数据库2.2 查看数据库2.3 选择数据库2.4 修改数据库2.5 删除数据库2.6 数据库备份与恢复 3. 表操作基础3.1 创建表3.2 查看表信息3.3 创建…

cursor sign in 网页登录成功,sursor软件里一直登陆不成功没有登陆信息

今天在使用cursor登陆无法登陆,点击sigin in打开网址登陆成功后,软件里一直无法显示登陆信息。 点击sigin in 在网址登陆成功后 解决办法: 方法1.设置windows默认应用为chrome. 办法2: 删除代理 cursor上ctrl, 打开设置,找到…

深入理解卷积神经网络的输入层:数据的起点与预处理核心

内容摘要 本文围绕卷积神经网络输入层展开,详细介绍其在网络中的重要作用,包括接收不同领域数据的形式及传递数据的过程。深入解读数据预处理的关键操作,如去均值、归一化和PCA/白化。助力读者透彻理解输入层,为构建高效卷积神经…

解决 MySQL 数据库无法远程连接的问题

在使用 MySQL 数据库时,遇到这样的问题: 本地可以连接 MySQL,但远程机器连接时,总是报错 Host ... is not allowed to connect to this MySQL server。 这通常是因为 MySQL 的用户权限或配置限制了远程访问。 1. 登录 MySQL 数据…

MCP认证全解析:从零到微软认证专家

MCP认证全解析:从零到微软认证专家 什么是MCP认证? Microsoft Certified Professional(MCP)是由微软官方颁发的技术认证,旨在验证IT从业者在微软技术栈(如Azure、Windows Server、SQL Server等&#xff0…

驱动开发系列57 - Linux Graphics QXL显卡驱动代码分析(四)显示区域更新

一:概述 前面在介绍了显示模式设置(分辨率,刷新率)之后,本文继续分析下,显示区域的绘制,详细看看虚拟机的画面是如何由QXL显卡绘制出来的。 二:相关数据结构介绍 struct qxl_moni…

远程调用负载均衡LoadBalancer

1. 什么是负载均衡 负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行。 根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡。 服务端负载均衡:指的…

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件detect.py解读

【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件detect.py解读 文章目录 【深度学习】【目标检测】【Ultralytics-YOLO系列】YOLOV3核心文件detect.py解读前言if name ‘main’parse_opt函数main函数run函数不同命令参数的推理结果常规推理命令推理命令(新增…

NextPolish1.4.1 安装与使用-bioinformatics tools54

01 简介 NextPolish 是一个用于修正由低准确度长读段(如 ONT 或 CLR)组装出来的基因组序列中碱基错误(SNV/Indel)的工具。它支持: 仅使用短读段 仅使用长读段 同时使用短读段与长读段 NextPolish 包含两个核心模块…

Vue3 el-tree:全选时只返回父节点,半选只返回勾选中的节点(省-市区-县-镇-乡-村-街道)

需求原因:全选时,传给接口的code数据太多了; 如果加上 check-strictly 父节点与子节点无关联,可以初步满足需求 效果如下使用了check-strictly的话,tree就没有了半选效果 不好的地方:用户体验感不好&#x…

使用 docker 安装 nacos3.x

一、安装 nacos 1.拉取镜像 使用如下指令拉取镜像 docker pull nacos/nacos-server 拉取完成后,可以使用以下命令查看是否拉取到对应的镜像,默认拉取最新镜像 docker images 2.新建挂载文件目录 mkdir -p /home/ubuntu/nacos/conf/mkdir -p /home/…

高性能Python Web 框架--FastAPI 学习「基础 → 进阶 → 生产级」

以下是针对 FastAPI 的保姆级教程,包含核心概念、完整案例和关键注意事项,采用「基础 → 进阶 → 生产级」的三阶段教学法: 一、FastAPI介绍 FastAPI 是一个现代化的、高性能的 Python Web 框架,专门用于构建 APIs(应…

H2 Database Select 语句执行流程

H2 Database Select 语句执行流程 使用 // CREATE TABLE IF NOT EXISTS test(id INT primary key, name VARCHAR(255)) // insert into test(id, name) values(1, name1), (2, name2), (3, name3), (4, name4); String sql "SELECT * FROM test where id > 1 and na…

理解 Envoy 的架构

理解 Envoy 的架构对于深入理解 Istio 至关重要,因为 Envoy 是 Istio 数据平面的核心。Envoy 是一个高性能的 C 分布式代理,设计为云原生应用和大规模微服务架构的网络基础。 以下是 Envoy 架构的关键组成部分和核心理念: 核心设计理念&…