1 概述
1.1 单体架构 vs 微服务架构
单体架构是什么
微服务是什么
微服务特性
微服务全景架构图
微服务优缺点
微服务适用场景
1.2 业务分析与建模
项目功能演示与分析
微服务拆分
项目架构图
数据库设计
API 文档
1.3 编写微服务
创建小程序
创建项目
编写用户微服务
编写内容微服务
2 单体应用
一个归档包 (例如 war 包) 包含所有功能的应用程序, 我们通常称为单体应用. 而架构单体应用的方法论就是单体应用架构.
架构图
2.1 单体架构的优点
架构简单
开发, 测试, 部署方便
2.2 单体架构的缺点
复杂性高
部署慢, 频率低
扩展能力受限
阻碍技术创新
3 微服务
一词最早来自于 Martin Fowler 的一篇微服务文章
翻译
微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法, 每个服务运行在自己的进程中, 服务间通信采用
轻量级通信机制
(通常用 HTTP 资源
API). 这些服务
围绕业务能力构建
并且可通过全自动部署机制独立部署. 这些服务共用一个
最小型的集中式的管理
, 服务可用
不同的语言开发
, 使用
不同的数据存储技术
3.1 特性
每个微服务可独立运行在自己的进程里
一系列独立, 运行的微服务共同构建起整个系统
每个服务为独立的业务开发, 一个微服务只关注某个特定的功能, 例如订单管理, 用户管理等
可使用不同的语言与数据存储技术(契合项目情
况和团队实力)
微服务之间通过轻量的通信机制进行通信, 例如通过 REST API 进行调用;
全自动的部署机制
3.2 全景架构图
3.3 优点
单个服务更易于开发, 维护
单个微服务启动较快
局部修改容易部署
技术栈不受限
按需伸缩
3.4 缺点
运维要求高
分布式固有的复杂性
重复劳动
3.5 适用场景
大型, 复杂的项目
有快速迭代的需求
访问压力大
3.6 不适用场景
业务稳定
迭代周期长
4 微服务拆分
4.1 拆法
◆ 领域驱动设计( Domain Driven Design )
◆ 面向对象 ( by name./ by verb. )
4.2 最佳实践
◆ 职责划分
◆ 通用性划分
4.3 粒度合理
◆ 良好地满足业务
◆ 幸福感
◆ 增量迭代
◆ 持续演进
拆分
项目架构图
5 数据库设计
5.1 数据表
6 创建小程序
7 前端代码 - JavaEdge-miniapp
7.1 安装 Node.JS
建议和笔者保持一致
前往 https://nodejs.org/en/download/ 下载 Node.JS.
建议使用 https://nodejs.org/dist/v8.15.0/node-v8.15.0.pkg 下载 .
安装说明
macOS 操作系统, 用 pkg 直接拖动安装即可
7.2 修改 App 信息
修改 project.config.JSON , 按需修改如下两行
- "appid": "修改为你的 appid"
- "projectname": "修改为你的项目名称, 尽量用英文",
其中, appid 在 微信公众平台 - 开发 - 开发设置中可以找到.
7.3 安装 & 启动
安装项目相关依赖 加速!
NPM --registry https://registry.npm.taobao.org install
开发环境启动部署
NPM run dev
生产环境构建
NPM run build
7.4 下载 & 安装微信开发者工具
前往 https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 下载开发者工具.
安装开发者工具
双击安装即可!
7.5 修改调用 API 地址
找到 src/utils/API.JS , 找到
- // 后端接口基础路径
- export const BASE_API_URL = '';
将其修改为你的后端地址, 例如:
export const BASE_API_URL = 'http://localhost:8080';
7.6 将代码导入到开发者工具
注意: 务必勾选 不校验合法域名... .
8 创建项目
8.1 技术选型
- Spring Boot ( 快速迭代开发 )
- Spring MVC ( MVC 框架 )
Mybatis ( 持久层框架, 操作数据库 ) + 通用 Mapper
Spring Cloud Aliababa ( 分布式 )
8.3 项目结构设计
8.4 整合框架
8.4.1 MyBatis 框架 - 通用 Mapper
GitHub 地址
Spring Boot 集成
8.4.1.1 mapper-spring-boot-starter
在 starter 的逻辑中, 如果你没有使用 @MapperScan 注解, 你就需要在你的接口上增加 @Mapper 注解, 否则 MyBatis 无法判断扫描哪些接口.
需要在所有接口上增加 @Mapper 注解.
只需要添加通用 Mapper 提供的 starter 就完成了最基本的集成
无需配置文件
4.0 之后, 增加了一个 @RegisterMapper 注解, 通用 Mapper 中提供的所有接口都有这个注解, 有了该注解后, 通用 Mapper 会自动解析所有的接口, 如果父接口 (递归向上找到的最顶层) 存在标记该注解的接口, 就会自动注册上. 因此 4.0 后使用通用 Mapper 提供的方法时, 不需要再配置这个参数.
8.4.1.2 @MapperScan 注解配置
注意 MySQL 的配置
8.x 带 cj
代码生成器 - mappergenerator
通用的过于复杂, 大多数情况下使用专业版本即可!
使用该插件可以很方便的生成实体类, Mapper 接口以及对应的 xml 文件.
本篇文档就是讲述如何在 MBG 中使用该插件.
首先对 MBG 不太了解的可以先阅读下面的文档
Mybatis Geneator 详解
http://blog.csdn.net/isea533/article/details/42102297
使用 Maven 执行 MBG
SB 已内置插件
在插件中配置了配置文件的路径, 覆盖和输出详细日志三个参数.
除此之外需要特别注意的是 <dependencies>,MBG 配置中用到的所有外部代码都必须通过依赖方式配置在这里, 否则运行时会提示找不到对应的类而报错. 这里有两个必须的依赖, 一个是 JDBC 驱动, 另一个是 Mapper 的插件.
下面看配置文件 generatorConfig.xml:
这里和之前相差不多, 只是通过 <properties> 引入了外部属性文件, 在 <jdbcConnection> 配置时, 使用的属性文件中的参数.
在 pom.xml 这一级目录的命令行窗口执行 mvn mybatis-generator:generate 即可(前提是配置了 mvn).
使用 MyBatis Generator 生成器时, 发现 Mapper 文件中出现字段与连接数据库不符, 经过查找发现该表是其他数据库的同名表的字段.
在构造文件中, 这里是 generatorConfig.xml 添加连接数据库参数如下:
整合 Lombok 简化代码
生成器中整合
9 用户 & 内容 微服务
业务流程分析
架构图
10 现有架构的问题
地址发生变化怎么办?
如何实现负载均衡?
用户中心挂掉怎么办? .
参考
- mpvue
- vant-weapp
- Mapper
面向未来微服务: Spring Cloud Alibaba 从入门到进阶
来源: http://www.jianshu.com/p/58ad78811955