为什么需要拆分?
单体架构不适合于用户量大、开发人员多的项目 访问资源难以分配,无法分解并发压力 –> 把单体架构拆分为多个独立项目
颗粒度小,团队自治,服务自治,数据隔离
服务拆分
前置知识
首先熟悉项目、模块,看流程。
拆分时机
创业型项目先采用单体结构,随规模扩增
拆分原则
-
高内聚(关联度、完整度高),低耦合(减少对其他服务依赖)
-
纵向:按业务模块
-
横向:抽取公共服务,提高复用性
拆分类型
-
独立 project:适用于大型项目
-
Maven 聚合,分开打包:较小型项目
注册中心
-
整合服务调用、服务提供者
-
提供负载均衡,心跳续约、推送变更(防失效)
Nacos
需要提供数据库,配置服务注册
服务发现 -> 挑选示例(负载均衡) -> 调用
OpenFeign
声明式http客户端,简化http请求书写
-
使用步骤:导入 client 模块 -> 打开开关 -> 写接口
-
接口的作用是转发 http 请求,作为各个服务间请求数据的中介
-
连接池:底层请求用的是 Client,效率较低,用连接池优化
-
最佳实践:1. 将查询接口放到服务提供方 2 . 封装为统一的api模块(耦合度较高)
-
日志记录:定义类、定义日志级别,声明到注解
拆分步骤
- 先按模块分析,将实体类区分开
- 选择拆分类型,建立模块或项目,改依赖
- 导入并修改启动类、配置类、各种实体类,根据报错再修改
- 导入service、impl、controller、mapper
- 重建数据库、配置启动项进行测试
注意
若 service 中还需要注入其他模块的 service,就要配置注册中心。接入 feign 的 api 接口来调用指定服务。在拆分的同时不断完善 feign 的接口(从目标服务的 controller 中抽取)。