Spring Cloud Alibaba 实战(三) - 微服务拆分与编写

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

建议和笔者保持一致

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 下载 & 安装微信开发者工具

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

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 现有架构的问题

  • 地址发生变化怎么办?
  • 如何实现负载均衡?
  • 用户中心挂掉怎么办? .


参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • 背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大...
    java菜阅读 632评论 0 0
  • 前言 现在研发的项目启动今已近一年之久,期间从项目属性、人员规模、系统定位等方面都发生了很大的变化,而且是越变越好...
    孙振强阅读 12,276评论 1 58
  • 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥...
    java菜阅读 2,938评论 0 6
  • 1. 基础知识[1] 什么是微服务架构? 微服务是系统架构上的一种设计风格; 主旨是将一个原本独立的系统拆分成多个...
    JT_X阅读 1,048评论 0 0
  • 毕业感言 姓名:罗义华 坐标:深圳 毕业感言:学习易效能的初心是想改变不良的生活习惯,来到线下课之后发现大咖牛人特...
    戈壁女神阅读 265评论 1 1