微服务优缺点以及如何拆分

news/2024/9/18 20:54:59/ 标签: 微服务, 架构, 云原生

微服务优点
1,降低代码逻辑复杂度。
单个微服务模块相当于一个项目,开发人员只用关心这个模块的逻辑即可。
2,技术栈更加灵活
不同的微服务可以使用合适的语言架构实现,然后把服务注册到一个注册中心即可相互调用。
3,按需伸缩
当某一个模块达到瓶颈时,可针对模块多部署几个实例,从而提高整体吞吐量。
4,提高代码通用性
比如系统有订单,会员两个模块,后面有其他项目有会员功能,我们可以单独把会员模块拿过来使用。
缺点:
1,处理故障难度高
微服务架构是一个分布式系统,各模块运行在独立的进程中,出问题时可能需要逐个排查
2,部署工作量大
每个实例都需要配置部署和监控
3,分布式系统常见问题
模块之间通过rpc协议通信,提高了出错概率,分布式事务,分布式日志收集都是我们面临需要解决的问题。
微服务应该怎么拆分
1,根据业务拆分,根据业务功能对微服务进行才分,明确服务的业务场景,在设计时需要考虑业务的可划分性,不易将过于细小的业务片段独立成服务,做到每个模块高内聚低耦合。
2,功能拆分
在业务划分的基础上可以再进行配套服务的功能拆分,可以选择将某一个服务的相对独立的功能拆解出来单独成服务,在功能的拆分过程中需要考虑拆分后的服务所需的数据存储,运行环境是否能够满足。
3,数据拆分,在实际的运行过程中也需要考虑服务之间的数据交互,在进行服务拆分的时候,会出现一些公共的数据存在多个服务之间,这个时候可能需要按照一定的原则对数据进行拆分,一般来说数据拆分将划分为单一负责一部分数据的服务,避免多服务之间进行数据交互。
4,接口拆分
微服务架构中服务之间通过暴露接口来实现交互,在服务划分的过程中我们还需要考虑服务间的接口拆分,拆分出来的每个服务都应该对暴露一部分接口以供其他服务调用。
接口拆分主要是根据服务的功能和使用场景进行合理的接口设计。
5,微服务的拆分粒度,2-3个人维护一个微服务
6,一个微服务对一个数据库


http://www.ppmy.cn/news/1518737.html

相关文章

人工智能工作级开发者认证 HCCDP – AI 真题2 答案

1.GBDT通过bagging的防范可以对样本和特征都进行采集。答案:FALSE 原因:GBDT可以对样本采集,不能对特征采集 2.深度学习是机器学习的一个分支。答案:true 3.softmax激活函数的作用是减少及时量和防止梯度消失。答案false 4.在建筑施工现场,基于定制化的图像识别目标检测系统,…

Node.js 安装与使用及连接 MongoDB 的详细教程

下面我将详细讲解如何安装 Node.js、介绍 Node.js 的脚手架工具、使用 Express 脚手架创建项目,以及如何安装和连接 MongoDB。 一、Node.js 安装 下载 Node.js: 访问 Node.js 官方网站。 根据你的操作系统选择最新的 LTS(长期支持版&#x…

从自动驾驶看无人驾驶叉车的技术落地和应用

摘 要 | 介绍无人驾驶叉车在自动驾驶技术中的应用,分析其关键技术,如环境感知、定位、路径规划等,并讨论机器学习算法和强化学习算法的应用以提高无人叉车的运行效率和准确性。无人叉车在封闭结构化环境、机器学习、有效数据集等方…

参加 帆软 BI 上海城市 课堂(08-30培训)

参加 帆软 BI 城市 课堂(0830): 由于目前是自由职业,也想学习一下新的知识 。所以参加本次的培训,总的来说还是比较专业。 培训在 上海 帆软的总部 环球港进行。时间是 13:30~17:00 老师很专业。学习中 课…

关于前端布局的基础知识

float 横向布局 float 实现横向布局,需要向横着布局的元素添加float 其值left right 存在问题 如果使用float 所在父级五高度,会导致下方的元素上移 top的高度被吞了 解决方法: 给父级元素设置高度:不推荐,需要给父级…

LeetCode第65题 有效数字 结合设计模式:状态模式

思路:有限状态机,结合Java的设计模式:状态模式。 单纯用状态机会有大量的if-else,非常不好看,思路不清晰 用设计模式则非常清楚。但是设计模式是为了给人理解的,对机器而言也可能稍微影响性能; …

IO练习--随机点名

随机点名器1 需求: 有一个文件里面存储了班级同学的信息,每一个信息占一行。 格式为:张三-男-23 要求通过程序实现随机点名器。 运行效果: 第一次运行程序:随机同学姓名1(只显示名字) 第二次运行程序:随机同学姓名2(只显示名字) 第三次运行程序:随机同学姓名3(只显…

【精选】基于Hadoop的用户网站浏览分析的设计与实现(全网最新定制,独一无二)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

2.10鼠标事件

目录 实验原理 实验代码 运行结果 文章参考 实验原理 在 OpenCV 中存在鼠标的操作,比如左键单击、双击等。对于 OpenCV 来讲,用户的鼠标操作被认为发生了一个鼠标事件,需要对这个鼠标事件进行处理,这就是事件的响应。下面我们…

软件设计原则之接口隔离原则

接口隔离原则(Interface Segregation Principle, ISP)是面向对象设计中的一个重要原则,它属于SOLID原则之一。这个原则强调客户端(即接口的调用者)不应该被迫依赖于它们不使用的方法。换句话说,一个类对另一…

centos安装docker并配置加速器

docker安装与卸载: 1、检查当前是否安装docker yum list installed | grep docker2、卸载docker 根据yum list installed | grep docker查询出来的内容,逐个进行删除 yum remove docker.x86 64 -y3、启动与关闭docker 4、删除/etc/docker文件夹 如果…

理解HTTP请求方法:GET、POST、PUT 等

在现代Web开发中,理解不同HTTP请求方法的用途及其特点是至关重要的。每种请求方法都承担着特定的角色,在客户端和服务器之间的通信中发挥着关键作用。包括GET、POST、PUT,以及一些不太常用的方法,如HEAD、DELETE、OPTIONS、TRACE和…

MyBatis之XML配置文件(二)

六、动态SQL拼接 &#xff2d;yBatis提供了if 、foreach、choose等标签动态拼接sql语句&#xff0c;下面介绍这些标签的使用 1、if标签 if标签通常用于WHERE语句中&#xff0c;通过判断参数值决定是否使用某个查询条件。 <select id"selectStudentListLikeName"…

VUE-组件间通信(三)全局事件总线

一、作用&#xff1a;任意组件间通信 二、实现 1、创建全局事件总线 new Vue({render: h > h(App),beforeCreate(){//创建全局事件总线Vue.prototype.$busthis} }).$mount(#app) 2、学生组件 触发事件 <template><div class"studentInfo"><h…

【openwrt-21.02】T750 openwrt-21.02 pptp拨号失败问题分析及解决方案

Openwrt版本 NAME="OpenWrt" VERSION="21.02-SNAPSHOT" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 21.02-SNAPSHOT" VERSION_ID="21.02-snapshot" HOME_URL="https://openwrt.org/" …

Python知识点:如何使用SQLAlchemy进行ORM(对象关系映射)

使用SQLAlchemy进行ORM&#xff08;对象关系映射&#xff09;涉及几个关键步骤。以下是一个详细的指南&#xff0c;帮助你理解并使用SQLAlchemy进行ORM。 1. 安装SQLAlchemy 首先&#xff0c;你需要安装SQLAlchemy。你可以使用pip来安装&#xff1a; pip install sqlalchemy…

【python】数据分析统计

逐行读取’\t’分割的txt 对其中的每个数值都转为六位小数的str 再存入dict 存到excel pip install pandas pip install openpyxl # 用于写入Excel文件import pandas as pd # 假设txt文件的路径是data.txt file_path data.txt # 用于存储数据的字典&#xff0c;假设每…

Java 虚方法表(虚函数)

虚方法表 Java 中的虚方法表&#xff08;Virtual Method Table, VMT&#xff09;是实现动态方法分派和多态的重要机制。它帮助 Java 运行时系统&#xff08;JVM&#xff09;决定在继承体系中调用哪一个方法的具体实现。 什么是虚方法表&#xff1f; 虚方法表是一个类的内部数…

java重点学习

一.redis 穿透无中生有key&#xff0c;布隆过滤nul隔离 锁与非期解难题。缓存击穿过期key&#xff0c; 雪崩大量过期key&#xff0c;过期时间要随机。 面试必考三兄弟&#xff0c;可用限流来保底。 1.1 Redis的使用场景 根据自己简历上的业务进行回答 缓存穿透、击穿、雪崩、双…

sqlsugar 不映射字段,sqlsugar 忽略字段。sqlsugar 字段改名。

sqlsugar 不映射字段&#xff0c;sqlsugar 忽略字段。 利用特性SugarColumn&#xff0c;将IsIgnore设置为True即可&#xff01; [SugarColumn(IsIgnore true)]//sqlsugar 忽略字段 public decimal MaxTemp { get; set; } 这样Sqlsugar 增删改查数据库的时候自动跳过该字段&…