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

微服务拆分——nacos/Feign

今天学习单体架构到微服务架构的拆分

首先明白为什么需要进行拆分服务:

        1.1耦合性高:单体架构多个模块可能会出现互相调用的情况,举一个简单的案例,比如在我们进行购物(淘宝为例)的购物车,这里的购物车会出现“比加入购物车时降价XX元”。
想要完成这个功能,需要调用到购物车模块和商品模块,购物车模块的原价与当前商品的现价进行相减。这样当我们需要调用购物车接口时,显然需要调用到商品接口。
        1.2健壮性不足(可用性差):当其中的某个模块崩掉了,那么对应其他与其有联系的模块很可能也会崩溃。因为单个线程是顺序执行的,执行到某个模块出错,那么大概率会返回报错,而不是继续执行能够成功执行的部分。

        1.3部署成本高:如果对某个模块进行修改升级,那么需要重新部署整个项目。

        1.4维护性差:单体架构的测试困难,不容易找bug,不宜与维护。

        1.5难以扩展:比如,某个模块的流量剧增,这个模块的压力很大,想要为其分配更多资源,只能整个项目重新部署,这需要很高的时间花销。

如何进行拆分:

1.拆分方式:横向拆分与纵向拆分

横向拆分和纵向拆分是微服务架构设计中​​密不可分且相互补充的策略​​。纵向拆分建立了基于业务能力的系统骨架,横向拆分则为其提供了可复用、统一管理的基础技术能力支撑层。它们协同工作,共同解决了大型复杂系统在业务与技术层面的双重挑战,最终实现微服务的核心价值:高内聚、低耦合、独立部署、弹性伸缩和团队高效自治。将两者有机结合起来,是设计和构建成功微服务架构的关键。

简单来说纵向拆分将整个项目按照功能模块进行拆分,比如一个电商系统、

纵向(业务)层:​

  • 用户管理服务
  • 商品目录服务
  • 订单服务
  • 支付服务
  • 库存服务
  • 推荐服务 (这也属于业务功能)

横向拆分将整个项目的高复用的模块单独进行提取,比如:

  • ​横向(基础设施/平台)层:​
    • 认证授权服务
    • API网关服务
    • 配置中心服务
    • 日志聚合与分析服务 (如ELK)
    • 监控告警服务 (如Prometheus/Grafana)
    • 消息队列服务 (如Kafka/RabbitMQ)
    • 缓存服务 (如Redis)
    • 搜索基础设施服务 (如Elasticsearch服务)

拆分完后,各个模块之间如何进行通信

1.由于微服务各个模块独立,拥有自己的数据库、端口号、服务器,如果模块间需要进行调用,应该怎么处理?

处理方式采用网络通信的形式,A模块调用B模块的接口,让B模块执行A模块需要的功能,然后将功能输出的结果返回给A即可。这种方式和前端通过网络请求后端在本质上是相似的。

2.由于模块之间的相互调用,可以将模块之间的关系抽象为消费者生产者的关系。
又由于每个模块会有多个服务器进行负载均衡,所以模块之间也是多对多的关系。

3.那么模块之间如何进行通信才能保证通信的稳定性?
这里就要引入注册中心,注册中心就是消费者生产者之间的桥梁。生产者只要上线部署,就会被注册中心登记,当消费者模块请求某个某个生产者模块时,注册中心会将该生产模块对应的注册登记表全部传递给消费者,消费者通过负载均衡选取一个生产者进行调用完成功能。

4.生产者挂掉了,注册表如何更新?
这里引入心跳契约,生产者与注册中心通过心跳契约进行维护,当生产者没有心跳(挂了),生产者就会更新登记表,然后给消费者传递新的登记表,保证消费者不会空军。

具体的组件有哪些?

1.首先就是注册中心,国内使用较多的是nacos,部署完nacos后,在各个微服务的配置文件中,对nacos进行配置,注意:nacos在部署时,就需要与数据库进行绑定,所以可以看作nacos默认模块需要有数据库。

nacos这个注册中心基本不会出现在代码中,其管理端在ip地址:8848/nacos,新版好像是ip地址:8080/index.html

也就是说nacos这个内容对于初学者来说,基本只需要会部署就够了。

2.其次就是网络通信与负载均衡,可以使用openfeign这个组件,这个组件可以完整模拟SpringMVC的接口调用机制进行网路通信,从而省去了使用Rest自行建立连接的繁琐过程。

相关文章:

  • python中学物理实验模拟:凸透镜成像和凹透镜成像
  • 力扣1477. 找两个和为目标值且不重叠的子数组
  • IEEE5节点系统潮流仿真模型(simulink+matlab全功能模型)
  • MySQL误删数据急救指南:基于Binlog日志的实战恢复详解
  • Vue3 + TypeScript + xlsx 导入excel文件追踪数据流转详细记录(从原文件到目标数据)
  • 编程基础:调用访问
  • pyqt事件过滤器eventFilter
  • 计算机网络学习笔记:应用层概述、动态主机配置协议DHCP
  • ProtoBuf:proto3 语法详解
  • 软件工程期末试卷填空题版带答案(共40道)
  • 华为云 Flexus+DeepSeek 实战:华为云Dify 平台 CCE 高可用集群部署与大模型知识库构建指南
  • C++链表的虚拟头节点
  • 【unity游戏开发——热更新】YooAsset简化资源加载、打包、更新等流程
  • 【设计模式】6.原型模式
  • 获取 Git 仓库
  • 第三章 线性回归与感知机
  • 面试题-ts中的typeof
  • ACL 2025 Findings | 无监督概念发掘,提高文本解释的可理解性
  • 如何排查在docker中运行软件的故障:Docker故障排查可视化指南,三招锁定问题根源
  • 从0到1学Linux:Linux进程
  • phpmysql网站模板/企业新网站seo推广
  • 用什么做网站方便/宽带业务如何推广
  • 武汉洪山做网站推广/十大广告公司
  • 怎么查有做网站的公司/成都网站建设seo
  • 网站界面可以做版权吗/推广代理公司
  • 网站的空间域名/百度搜索引擎优化案例