【微服务 Spring Cloud 6】服务如何拆分?使用微服务的注意事项?

news2024/12/25 13:33:32

在这里插入图片描述

目录

    • 一、前言
    • 二、单体服务的弊端
    • 三、微服务化
    • 四、服务如何拆分?
      • 1、拆分原则
      • 2、拆分时机和拆分方法
      • 3、拆分实践
    • 五、使用微服务的注意事项
      • 1、确保相关业务和利益相关者的支持
      • 2、确定微服务的拆分粒度
      • 3、遵循微服务架构的原则
      • 4、确保接口的稳定性
      • 5、关注数据一致性
      • 6、考虑安全性
      • 7、做好监控和日志记录
      • 8、做好容错处理

大家好,我是哪吒。

在这里插入图片描述

一、前言

微服务已经是Java开发的必备技能,甲方不管项目大小,都想上微服务,感觉上了就高大上了,牛逼了。

微服务确实给我们带来了一定的便利性,但是也带来了麻烦,比如学习成本高,存在很多不可预见的问题。

我是做互联网项目的,刚开始的时候,用的是springboot+vue的单体架构,虽然也用了很多中间件,云服务器,数据库集群等,但终究还是单体服务,存在着一定的限制,随着业务架构的不断扩大,每次功能发布上线,都需要每个开发负责人对代码进行打包,再进行最后的代码合并,这时候,就会遇到各种各样的问题,代码忘记提交了,提交了忘记打包了,提交的时候忘记更新了,代码冲突了,jar包版本不统一、jar包版本冲突等各式各样的问题。

有一次项目部署测试,后台通过SVN提交记录进行增量打包,然后通过xshell进行Linux服务器程序更新,再重启。一套下来,差不多需要半个多小时的时间,而且因为缺少class文件的原因,反反复复更新了三次,我都要崩溃了~

你是否也遇到过同样的问题?

如果也是这样,是时候将架构升级为微服务了。分功能开发,每个小团队负责一个功能,然后部署为微服务,引入Docker容器技术。

系统架构经历了单体服务 -> 微服务架构 -> 容器化应用-> DevOps的发展历程。

微服务的概念是在2014年由Martin Fowler和James Lewis共同提出的,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程和轻量化处理,按照业务功能分别处理,以全自动的方式部署,与其它服务使用HTTP API通讯。同时,服务会使用最小规模的集中管理(比如Docker),每个服务可以使用自己的语言和数据库。

二、单体服务的弊端

  1. 部署成本高,效率低下
  2. 团队协作开发成本高,两个人同时编写一个类,谁先提交谁舒服,哈哈
  3. 系统高可用性差,因为所有功能最后都部署在一个war包里,运行在同一个Tomcat进程中,一旦某一功能出现问题,就会导致整个系统的崩盘,虽然还有其它机器提供服务,但因为一个小问题,就挂了一个机器,这不蛋疼吗?
  4. 线上发布变慢,一般单体服务都是通过人工去更新代码,然后再重启,一个服务部署了16个机器,就要手动替换16次,而且可能还会有更多的服务。

想要解决以上问题,微服务应运而生。

三、微服务化

微服务化,在我看来就是将 传统的单机应用中通过jar包依赖产生的本地调用 改造成 通过RPC远程接口调用。对于一些通用的业务逻辑,想办法将其抽象并独立成专门的模块,因此对代码复用、分小组开发、单业务理解都大有裨益。

在最近的项目经历里,我深有体会,比如将一个项目分为公共模块、注册中心、网关模块、管理模块、某个单业务模块等。一个人一个模块,自己开发自己的,互不干预,每个模块独立开发,独立部署、独立测试、独立上线、独立运维,与其它模块基本上零联系。

可见,通过微服务化,可以解决应用单体膨胀,团队开发耦合度高、测试难、部署难的问题。

四、服务如何拆分?

微服务的拆分需要遵循一定的原则和考虑因素,包括以下几点:

1、拆分原则

  1. 体量较轻:每个微服务的规模应该适中,避免过于复杂或过于庞大。
  2. 支持跨平台、跨语言通信协议:微服务应该具备跨平台、跨语言的通信能力,以便能够与其他服务进行有效的交互和集成。
  3. 操作性强、易于测试:微服务应该具备易于操作和测试的特性,以便能够快速、准确地实现业务需求。
  4. 明确接口要实现的内容:在拆分微服务时,需要明确每个服务接口要实现的功能和业务逻辑,避免出现接口依赖的情况。
  5. 持续演进原则:在拆分微服务时,应该考虑到服务的可扩展性和可靠性,以便能够适应业务需求的变化和容错处理。

2、拆分时机和拆分方法

(1)根据负责一个微服务原则进行拆分

在拆分微服务时,可以根据业务领域和实际需求来决定拆分的时机。通常情况下,如果团队规模较小,可以将多个业务功能整合成一个微服务;如果团队规模较大,则可以将一个业务功能拆分成多个微服务。

(2)基于可扩展性拆分

在拆分微服务时,可以考虑将系统中业务模块按照稳定性进行排序,将已经成熟且稳定性高的服务拆分为稳定服务,将经常变化和迭代的服务拆分为变动服务。这样可以提升项目的迭代速度,避免对已有成熟功能产生影响。

(3)基于可靠性拆分

在拆分微服务时,可以考虑将系统中业务模块按照优先级排序,将可靠性要求高的核心服务和可靠性要求低的服务拆分出来。这样可以保障核心服务的可用性。

3、拆分实践

(1)持续演进

在微服务的拆分过程中,应该遵循持续演进的原则,逐步拆分细化,而不是一次性拆分成无数个微服务。这样可以避免微服务数量瞬间爆炸性增长,降低开发、测试、运维等环节的难度。

(2)非业务因素考虑

在微服务的拆分过程中,除了要遵循拆分原则和考虑业务因素外,还需要关注非业务因素,如需求变更的频率、高性能、安全性、团队规模以及技术异构等因素。这些因素对于最终落地也会起到决定性的作用。

(3)最佳实践

根据实际情况和实践经验,可以采用一些最佳实践来指导微服务的拆分。例如,可以根据团队规模来决定服务的拆分粒度;根据业务领域和实际需求来确定服务的拆分时机;根据稳定性、优先级等因素来确定服务的拆分方法等。

微服务的拆分需要结合实际情况和实践经验来进行综合考虑和分析。只有在明确了业务需求、团队规模、技术栈等因素后,才能制定出合适的拆分方案,实现微服务的有效拆分和管理。

五、使用微服务的注意事项

1、确保相关业务和利益相关者的支持

在决定是否使用微服务架构之前,需要与所有利益相关者进行沟通和合作,确保他们理解并支持这个决策。同时,需要评估组织的技术专业知识水平,并准备相应的资源来支持微服务架构的实施和运维。

2、确定微服务的拆分粒度

微服务的拆分应该根据业务领域和实际需求来确定,同时需要考虑服务的稳定性、优先级、可靠性等因素。拆分粒度应该适当,避免过度拆分或拆分不足。

3、遵循微服务架构的原则

微服务架构需要遵循一系列原则,例如单一职责原则、接口隔离原则、服务自治原则等。这些原则可以帮助设计出更好的微服务架构,并减少潜在的问题。

4、确保接口的稳定性

微服务之间的通信依赖于接口,因此需要确保接口的稳定性。接口需要遵循一定的规范,例如RESTful API、RPC等,以确保不同微服务之间的通信可靠性和性能。

5、关注数据一致性

在微服务架构中,不同的服务可能由不同的团队开发和维护,因此需要关注数据的一致性。需要设计适当的数据存储方案,并确保不同服务之间的数据一致性和完整性。

6、考虑安全性

微服务架构中的安全性是一个重要的问题。需要确保每个微服务的安全性,包括身份认证、访问控制、数据加密等方面。同时,需要考虑到跨域请求的安全性,以避免潜在的安全漏洞。

7、做好监控和日志记录

微服务架构中的每个服务都需要进行监控和日志记录。需要确保每个服务都具备适当的监控和日志记录机制,以便及时发现和解决问题。

8、做好容错处理

微服务架构中的每个服务都可能出现故障或异常情况。因此,需要设计适当的容错处理机制,以避免故障或异常情况对整个系统造成严重影响。

使用微服务需要注意多个方面的问题,包括业务支持、拆分粒度、原则遵循、接口稳定性、数据一致性、安全性、监控和日志记录以及容错处理等。只有在全面考虑并处理好这些问题后,才能实现微服务的成功实施和运维。


🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

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

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

相关文章

ros1 自定义订阅者Subscriber的编程实现

话题模型 图中,我们使用ROS Master管理节点。 有两个主要节点: Publisher,名为Turtle Velocity(即海龟的速度)Subscriber,即海龟仿真器节点 /turtlesim Publisher(Turtle Velocity),发布Messa…

【JAVA】:万字长篇带你了解JAVA并发编程-并发设计模式【五】

目录 【JAVA】:万字长篇带你了解JAVA并发编程-并发设计模式【五】模式分类Immutability模式【不可变模式】Copy-on-Write 模式Thread Local Storage 模式线程池中使用 Guarded Suspension模式扩展 Guarded Suspension 模式 Balking模式Thread-Per-MessageWorker Thr…

Chatgpt人工智能对话源码系统分享 带完整搭建教程

ChatGPT的开发基于大规模预训练模型技术。预训练模型是一种在大量文本数据上进行训练的模型,可以学习到各种语言模式和知识。在ChatGPT中,预训练模型被用于学习如何生成文本,并且可以用于各种不同的任务,如对话生成、问答、摘要等…

开发直播带货系统源码的技术要点

直播带货系统是一个复杂的技术项目,通常包括前端应用、后端服务器、数据库、支付集成、实时通信以及直播流处理等多个关键组件。以下是开发直播带货系统源码的技术要点: 实时视频流处理 一个成功的直播带货系统需要支持实时视频流的传输和处理。可以使…

uniapp原生插件之安卓虹软人脸识别原生插件

插件介绍 虹软人脸识别支持图片人脸识别(可识别网络图片),活体检测,离线识别,相机预览旋转,相机人脸识别,批量注册(支持网络图片)等,支持保存用户的id和名称…

双通道 H 桥电机驱动芯片AT8833,软硬件兼容替代DRV8833,应用玩具、打印机等应用

上期小编给大家分享了单通道 H 桥电机驱动芯片,现在来讲一讲双通道的驱动芯片。 双通道 H 桥电机驱动芯片能通过控制电机的正反转、速度和停止等功能,实现对电机的精确控制。下面介绍双通道H桥电机驱动芯片的工作原理和特点。 一、工作原理 双通道 H 桥电…

RuoYi-Vue 在Swagger和Postman中 上传文件测试方案

RequestPart是Spring框架中用于处理multipart/form-data请求中单个部分的注解。在Spring MVC中,当处理文件上传或其他类型的多部分请求时,可以使用RequestPart注解将请求的特定部分绑定到方法参数上。 使用RequestPart注解时,需要指定要绑定…

动捕设备VDSuit Full便携式动作捕捉设备,帮你轻松打破次元壁

动捕设备可以将真人的动作转化为计算机可识别的数据,并将这些数据用于电影、游戏、体育科学等多个专业领域,将真人的动作真实呈现于虚拟世界中。 目前,市面上主要分为光学动捕设备和惯性动作捕捉两种技术,光学动捕设备具有识别精度…

黄金走势分析:美元反弹,金价已失守1980关口

昨晚美元和美债收益率反弹回升,现货黄金震荡下行,美市尾盘金价失守1980美元关口,最低至1977.22美元/盎司,最终收跌0.72%,报收1977.69美元/盎司。在汉声集团分析师张新才发稿前,今日(周二&#x…

摄影师的必备神器:这三款炙手可热的人像修图工具了解一下!

不会吧,现在还有人不修图就直接上传照片吧?作为新时代的精致男孩女孩,修复工具是一定必不可少的,随着手机拍照的流行,许多后期的图片修复工具也是很强大的,有的甚至可以帮助我们一键搞定修图,无…

Web逆向-某网络学院学习的”偷懒“思路分析

接到求助,帮朋友完成20课时的网络学习。 我想都没想就接下了,寻思找个接口直接把学习时间提交上去,易如反掌。 最不济最不济,咱还能16x播放,也简单的很 然鹅,当我登陆的时候,发现自己还是太天真…

浅谈指针函数、函数指针、指针数组、数组指针 简单明了!!!!

指针函数 形如:int* fun(int a, int b) 类比于:int fun(int x, int y)、char fun(int x, int y) 本质上是函数,只是返回值为int类型的指针,以此类推可以有void*、char*、unsigned char*类型等指针,类比于返回值是int …

HCIA_数据链路层

如果数据进行封装时,基于E2或者802.3标准,此时我们称之为是一个以太网帧 1、EthernetII 采用EthernetII协议会在数据基础之上多出18Byte,EthernetII的数据长度是46-1500B FCS(Frame check Sequence)帧校验序列&#…

杂记 | 使用阿里云函数计算服务代理OpenAI的API接口

文章目录 01 准备工作1.1 需求1.2 准备工作 02 操作步骤2.1 Linux端2.2 阿里云控制台 03 参考链接 01 准备工作 1.1 需求 OpenAI的官方接口的URL是https://api.openai.com,然而国内无法直接访问,可以通过反向代理该链接的方式来实现,可如果…

关于卷积神经网络的填充(padding)

认识填充 (padding) 随着卷积层数的加深,输出进一步缩小,那么最终会导致输出很快就只剩下1∗1的数组,这也就没办法继续计算了,所以提出了填充的方法来方便网络的进一步加深。 其实填充的原因有两点&#xf…

Maven-构建工具

一、背景 开发者编写完成源码,还需要进行编译、测试、打包、部署等一系列操作。在一些小型项目中,还可能通过手动方式进行以上操作。但是在大型项目中,难以确定以上操作的顺序,而且会耗费更高的时间成本。 1.构建工具 构建工具…

AR眼镜硬件解决方案_AR/VR智能眼镜安卓主板芯片方案介绍

随着近两年来增强现实(AR)技术的逐渐成熟,采用MT8788芯片解决方案的AR眼镜已经问世。众所周知,AR技术可以帮助开发者打造一个既强大而又实用的混合现实世界,将虚拟与真实世界相结合。 据了解,MT8788芯片采用了多芯片分布式处理系统…

【GEE】7、利用GEE进行遥感影像分类【随机森林分类】

1简介 在本模块中,我们将讨论以下概念: 监督和非监督图像分类之间的区别。Google Earth Engine 提供的各种分类算法的定义和应用。如何使用 randomForest 设置和运行分类,以 aspen 存在和不存在作为示例数据集。 2背景 图像分类 人类自然倾向…

AlGaN/GaN HEMT 中缓冲区相关电流崩溃的缓冲区电位模拟表征

标题:Characterization of Buffer-Related Current Collapse by Buffer Potential Simulation in AlGaN/GaN HEMTs 来源:IEEE TRANSACTIONS ON ELECTRON DEVICES (18年) 摘要 - 在本文中,通过使用脉冲 I-V 测量和二维漂移扩散模拟研究了 Al…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Maven核心概念

一.Maven的POM POM全称&#xff1a;Project Object Model【项目对象模型】&#xff0c;将项目封装为对象模型&#xff0c;便于使用Maven管理【构建】项目 pom.xml常用标签 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://m…