微服务拆分

为什么需要拆分?

单体架构不适合于用户量大、开发人员多的项目 访问资源难以分配,无法分解并发压力 –> 把单体架构拆分为多个独立项目

颗粒度小,团队自治,服务自治,数据隔离

服务拆分

前置知识

首先熟悉项目、模块,看流程。

拆分时机

创业型项目先采用单体结构,随规模扩增

拆分原则

  1. 高内聚(关联度、完整度高),低耦合(减少对其他服务依赖)

  2. 纵向:按业务模块

  3. 横向:抽取公共服务,提高复用性

拆分类型

  • 独立 project:适用于大型项目

  • Maven 聚合,分开打包:较小型项目

注册中心

  1. 整合服务调用、服务提供者

  2. 提供负载均衡,心跳续约、推送变更(防失效)

    Nacos

    需要提供数据库,配置服务注册

    服务发现 -> 挑选示例(负载均衡) -> 调用

OpenFeign

声明式http客户端,简化http请求书写

  1. 使用步骤:导入 client 模块 -> 打开开关 -> 写接口

  2. 接口的作用是转发 http 请求,作为各个服务间请求数据的中介

  3. 连接池:底层请求用的是 Client,效率较低,用连接池优化

  4. 最佳实践:1. 将查询接口放到服务提供方 2 . 封装为统一的api模块(耦合度较高)

  5. 日志记录:定义类、定义日志级别,声明到注解

拆分步骤

  1. 先按模块分析,将实体类区分开
  2. 选择拆分类型,建立模块或项目,改依赖
  3. 导入并修改启动类、配置类、各种实体类,根据报错再修改
  4. 导入service、impl、controller、mapper
  5. 重建数据库、配置启动项进行测试

注意

若 service 中还需要注入其他模块的 service,就要配置注册中心。接入 feign 的 api 接口来调用指定服务。在拆分的同时不断完善 feign 的接口(从目标服务的 controller 中抽取)。

Licensed under Calendar