Java数据集拆分_Spring Cloud Alibaba 实战(三) - 微服务拆分与编写

1 概述

1.1 单体架构vs微服务架构

单体架构是什么

微服务是什么

微服务特性

微服务全景架构图

微服务优缺点

微服务适用场景

1.2 业务分析与建模

项目功能演示与分析

微服务拆分

项目架构图

数据库设计

API文档

1.3 编写微服务

创建小程序

创建项目

编写用户微服务

编写内容微服务

2 单体应用

一个归档包(例如war包)包含所有功能的应用程序,我们通常称为单体应用。而架构单体应用的方法论就是单体应用架构。

架构图

6c9989eb64b5a59019a2c7a8bfcf928c.png

2.1 单体架构的优点

架构简单

开发、测试、部署方便

2.2 单体架构的缺点

复杂性高

部署慢,频率低

扩展能力受限

阻碍技术创新

3 微服务

一词最早来自于Martin Fowler的一篇微服务文章

ab84648f2880a6d188ef1450f26ead25.png

翻译

微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源

API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术

3.1 特性

每个微服务可独立运行在自己的进程里

一系列独立,运行的微服务共同构建起整个系统

每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理、用户管理等

可使用不同的语言与数据存储技术(契合项目情

况和团队实力)

微服务之间通过轻量的通信机制进行通信,例如通过REST API进行调用;

全自动的部署机制

3.2 全景架构图

80c0e64673b5e979691dc0c6107c54d9.png

3.3 优点

单个服务更易于开发、维护

单个微服务启动较快

局部修改容易部署

技术栈不受限

按需伸缩

3.4 缺点

运维要求高

分布式固有的复杂性

重复劳动

3.5 适用场景

大型、复杂的项目

有快速迭代的需求

访问压力大

3.6 不适用场景

业务稳定

迭代周期长

4 微服务拆分

4.1 拆法

◆ 领域驱动设计( Domain Driven Design )

◆ 面向对象 ( by name./ by verb. )

4.2 最佳实践

◆ 职责划分

◆ 通用性划分

4.3 粒度合理

◆ 良好地满足业务

◆ 幸福感

◆ 增量迭代

◆ 持续演进

拆分

2818cb77d04294d92d420ccb81db096d.png

项目架构图

f403695b5715e7b6c6a436c5556b33f0.png

5 数据库设计

5.1 数据表

a83245d73875996e9ac929f05a52bed3.png

bd5dd730fdea67b831a1496e475e784b.png

d2f1b7beb041220cc4ff73f8a8c91f6c.png

6 创建小程序

2dcad2825e3ceed978ca7d49217f6d74.png

928a2f39ee9a9b2de2c919d13559bef2.png

db194a7716a0388c90d9e07e26053e27.png

1ed03e6fcbbccff5d59ed7060f456375.png

7 前端代码 - JavaEdge-miniapp

7.1 安装Node.js

建议和笔者保持一致

f06d71f03e0dbfeca1ce4b52ac521731.png

7.2 修改app信息

修改 project.config.json ,按需修改如下两行

"appid": "修改为你的appid"

"projectname": "修改为你的项目名称,尽量用英文",

059014571c420c6044ad47997d2aa43a.png

9972ed4feea5e56228f924ee951ab3cf.png

其中,appid在 微信公众平台 - 开发 - 开发设置中可以找到。

7.3 安装 & 启动

安装项目相关依赖 加速!

npm --registry https://registry.npm.taobao.org install

cbe76f1b688aac4126f04b5543dcfd38.png

开发环境启动部署

npm run dev

4c3292ddf57daac277a51995defffd4c.png

生产环境构建

npm run build

7.4 下载 & 安装微信开发者工具

2647e38ef2b9467fef154d7cd52432b7.png

安装开发者工具

双击安装即可!

7.5 修改调用API地址

找到src/utils/api.js ,找到

// 后端接口基础路径

export const BASE_API_URL = '';

将其修改为你的后端地址,例如:

export const BASE_API_URL = 'http://localhost:8080';

7.6 将代码导入到开发者工具

注意:务必勾选 不校验合法域名... 。

6e3a99ac7d9bdc11ef0f326699fdd793.png

6fdbc62d97a2f69e911aa0e03f67e7ce.png

8 创建项目

8.1 技术选型

Spring Boot ( 快速迭代开发 )

Spring MVC ( MVC框架 )

Mybatis ( 持久层框架,操作数据库 ) +通用Mapper

Spring Cloud Aliababa ( 分布式 )

8.3 项目结构设计

4d417c9f64b2350156561151d32bafdf.png

8.4 整合框架

8.4.1 MyBatis框架 - 通用Mapper

261442283c9dd439c1baf6e211e48163.png

Spring Boot 集成

8.4.1.1 mapper-spring-boot-starter

在 starter 的逻辑中,如果你没有使用 @MapperScan 注解,你就需要在你的接口上增加 @Mapper 注解,否则 MyBatis 无法判断扫描哪些接口。

需要在所有接口上增加 @Mapper 注解。

只需要添加通用 Mapper 提供的 starter 就完成了最基本的集成

627b3c2e63db5b3f5a69a4e8d3b7b422.png

无需配置文件

4.0 之后,增加了一个 @RegisterMapper 注解,通用 Mapper 中提供的所有接口都有这个注解,有了该注解后,通用 Mapper 会自动解析所有的接口,如果父接口(递归向上找到的最顶层)存在标记该注解的接口,就会自动注册上。因此 4.0 后使用通用 Mapper 提供的方法时,不需要再配置这个参数。

8.4.1.2 @MapperScan 注解配置

注意MySQL的配置

65b20035697ce23acf0404c35f644d54.png

8.x带cj

4dab9f47b5715c132f4f4fb0bd7a4f6a.png

代码生成器 - mappergenerator

通用的过于复杂,大多数情况下使用专业版本即可!

使用该插件可以很方便的生成实体类、Mapper接口以及对应的XML文件。

本篇文档就是讲述如何在 MBG 中使用该插件。

首先对MBG不太了解的可以先阅读下面的文档

Mybatis Geneator 详解

使用 Maven 执行MBG

SB已内置插件

241d9c294f3ffaf359c267b44ccdd776.png

6b7784abff64758754184cf11696d372.png

在插件中配置了配置文件的路径,覆盖和输出详细日志三个参数。

除此之外需要特别注意的是 ,MBG 配置中用到的所有外部代码都必须通过依赖方式配置在这里,否则运行时会提示找不到对应的类而报错。这里有两个必须的依赖,一个是 JDBC 驱动,另一个是 Mapper 的插件。

下面看配置文件generatorConfig.xml:

1f7f6709989946a2304855f13ecbd706.png

这里和之前相差不多,只是通过 引入了外部属性文件,在 配置时,使用的属性文件中的参数。

在 pom.xml 这一级目录的命令行窗口执行 mvn mybatis-generator:generate即可(前提是配置了mvn)。

使用MyBatis Generator生成器时,发现Mapper文件中出现字段与连接数据库不符,经过查找发现该表是其他数据库的同名表的字段。

在构造文件中,这里是generatorConfig.xml添加连接数据库参数如下:8a26f7ca6975347b32441d7cc2693e8b.png

整合Lombok简化代码

生成器中整合

31ca642fd8cb3d0507afb4660a4043c9.png

9 用户 & 内容 微服务

业务流程分析

8b2ce95e0dcf2f05051d5fbb6934fe04.png

架构图

528aaede460a585cb82c089df4e33eae.png

10 现有架构的问题

地址发生变化怎么办?

如何实现负载均衡?

用户中心挂掉怎么办? .

35d506790c48f45e0d2e6c2d4fe7ad4c.png

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值