1. 为什么用SpringCloud+Alibaba Cloud
SpringCloud和AlibabaCloud组件存在很⼤交集,互相配合
SpringCloud很多组件是基于第三⽅整合,⽬前多个已经不更新了,⽐如zuul、eureka、hystrix等
AlibabaCloud 提供⼀站式微服务解决⽅法,已经和SpringCloud进⾏了整合,组件互相⽀持
2.技术体系简述
本系列采用SpringCloud 2020.0.3+ AlibabaCloud2.2.1 + JDK11
Maven聚合⼯程 + Mybatis操作数据库
服务治理Nacos+AlibabaCloud服务连接
RPC调⽤ Ribbon+负载均衡策略实现
新⼀代Open-Feign组件+多种HTTP调⽤案例
CAP+BASE理论,注册中心架构选择
微服务容错组件Alibaba-Sentinel多种流控策略+熔断降级
新⼀代SpringCloud-Gateway+多种路由断⾔+⾃定义全局鉴权过滤器
分布式链路追踪Zipkin+Sleuth实战 + Mysql数据持久
分布式配置中⼼Nacos实战+动态配置下发
掌握Docker容器在阿⾥云ECS服务器安装+私
有镜像仓库搭建阿⾥云Docker部署
Dockerfile+JDK11+AlibabaCloud全家桶镜像构建推
送
阿⾥云Docker部署Sentinel+Nacos+Zipkin+Gateway +AlibabaCloud
全家桶
3.0 整体技术栈
SpringBoot.2.4.6 + Mybatis+ SpringCloud2020.0.3+ AlibabaCloud 2.2.1
JDK11 + IDEA2021.1.2旗舰版 + Docker + 阿⾥云CentOS7.9
AlibabaCloud官网:https://github.com/alibaba/spring-cloud-alibaba
4.0 传统单机-分布式架构
4.1 单机架构
优点: 易于测试 便于集成 ⼩型项⽬友好
缺点: 开发速度慢 启动时间⻓ 依赖庞⼤
image.png
4.2 分布式架构
SOA :Service Oriented Architecture ⾯向服务的架构
其中包含多个服务, 服务之间通过相互依赖最终提供⼀
系列的功能, ⼀个服务 通常以独⽴的形式存在与操作系
统进程中, 各个服务之间 通过⽹络调⽤。
微服务:将⼀个⼤的单体应⽤进⾏细粒度的服务化拆
分,每个拆分出来的服务各⾃独⽴打包部署,各个服务
之间 通过⽹络调⽤。
优点
易开发、理解和维护
独⽴的部署和启动
缺点
分布式系统->分布式事务问题
需要管理多个服务->服务治理
image.png
5.0 微服务全家桶架构组成
常⻅组件
⽹关
路由转发 + 过滤器
/api/v1/video/ 视频服务
/api/v1/order/ 订单服务
/api/v1/user/ ⽤户服务
服务发现注册
调⽤和被调⽤⽅的信息维护
配置中⼼
管理配置,动态更新 application.properties
链路追踪
分析调⽤链路耗时 例⼦:下单-》查询商品服务获取
商品价格-》查询⽤户信息-》保存数据库
负载均衡器
分发流量到多个节点,降低压⼒
熔断
保护⾃⼰和被调⽤⽅
6.0 业界微服务架构常⻅解决⽅案
ServiceComb
华为内部的CSE(Cloud Service Engine)框架开源, ⼀个
微服务的开源解决⽅案,社区相对于下⾯⼏个⽐较⼩
⽂档不多,通信领域⽐较强
dubbo
zookeeper + dubbo + springmvc/springboot
官⽅地址:http://dubbo.apache.org/#!/?lang=zh-cn
配套
通信⽅式:rpc
注册中⼼:zookeper/redis/nacos
配置中⼼:diamond、nacos
SpringCloud
全家桶+轻松嵌⼊第三⽅组件(Netflix 奈⻜)
官⽹:https://spring.io/projects/spring-cloud
配套
通信⽅式:http restful
注册中⼼:eruka
配置中⼼:config
断路器:hystrix
⽹关:zuul/gateway
分布式追踪系统:sleuth+zipkin
Spring Alibaba Cloud
全家桶+阿⾥⽣态多个组件组合+SpringCloud⽀持
官⽹ https://spring.io/projects/spring-cloud-alibaba
配套
通信⽅式:http restful
注册中⼼:nacos
配置中⼼:nacos
断路器:sentinel
⽹关:gateway
分布式追踪系统:sleuth+zipkin
6.0 微服务AlibabaCloud介绍和架构环境准备
讲解AlibabaCloud核⼼组件介绍
官⽹介绍
https://spring.io/projects/spring-cloud-alibaba#overview
AlibabaCloud全家桶介绍
https://github.com/alibaba/spring-cloud-alibaba
服务注册发现:Nacos
服务限流降级:Sentinel
分布配置中⼼:Nacos
服务⽹关:SpringCloud Gateway
服务之间调⽤:Feign、Ribbon
链路追踪:Sleuth+Zipkin
7.0 案例:在线教育微服务模块
7.1 设计
在线教育模块划分
视频服务
订单服务
⽤户服务
7.2 数据库
采⽤3个数据库,每个服务单独⼀个库
视频服务数据库 video表
CREATE TABLE `video` (
`id` int(11) unsigned NOT NULL
AUTO_INCREMENT,
`title` varchar(524) DEFAULT NULL COMMENT '视
频标题',
`summary` varchar(1026) DEFAULT NULL COMMENT
'概述',
`cover_img` varchar(524) DEFAULT NULL COMMENT
'封⾯图',
`price` int(11) DEFAULT NULL COMMENT '价格, 分',
`create_time` datetime DEFAULT NULL COMMENT
'创建时间',
`point` double(11,2) DEFAULT '8.70' COMMENT
'默认8.7,最⾼10分',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT
CHARSET=utf8;
INSERT INTO `video` (`id`, `title`, `summary`,
`cover_img`, `price`, `create_time`, `point`)
VALUES
⽤户服务数据库 user表
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL
AUTO_INCREMENT,
`phone` varchar(32) DEFAULT NULL,
`pwd` varchar(128) DEFAULT NULL,
`sex` int(2) DEFAULT NULL,
`img` varchar(128) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`role` int(11) DEFAULT NULL COMMENT '1是普通⽤
户,2是管理员',
`username` varchar(128) DEFAULT NULL,
`wechat` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT
CHARSET=utf8mb4;
INSERT INTO `user` (`id`, `phone`, `pwd`,
`sex`, `img`, `create_time`, `role`,
`username`, `wechat`)
VALUES
(1, '123', '666', 1, 'xdclass.net', '2021-09-
09 00:00:00', 1, 'jack', 'xdclass6'),
(2, '2323432', '794666918', 1, 'wwwww',
'2020-05-20 04:54:01', 1, '⼩滴Anna姐姐',
'xdclass-anna'),
(3, '2323432', 'xdclass-lw', 1, 'wwwww',
'2020-05-20 04:54:42', 1, '⼆当家⼩D',
'xdclass1'),
(4, '2323432', '3232323', 1, 'wwwww', '2020-
05-20 04:55:07', 1, '⽼王', 'xdclass-lw')
订单服务数据库video_order表
CREATE TABLE `video_order` (
`id` int(11) unsigned NOT NULL
AUTO_INCREMENT,
`out_trade_no` varchar(64) DEFAULT NULL
COMMENT '订单唯⼀标识',
`state` int(11) DEFAULT NULL COMMENT '0表示未
⽀付,1表示已⽀付',
`create_time` datetime DEFAULT NULL COMMENT
'订单⽣成时间',
`total_fee` int(11) DEFAULT NULL COMMENT '⽀付
⾦额,单位分',
`video_id` int(11) DEFAULT NULL COMMENT '视频
主键',
`video_title` varchar(256) DEFAULT NULL
COMMENT '视频标题',
`video_img` varchar(256) DEFAULT NULL COMMENT
'视频图⽚',
`user_id` int(12) DEFAULT NULL COMMENT '⽤户
id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT
CHARSET=utf8;
8.0 Maven聚合⼯程创建微服务项⽬
maven聚合⼯程
xdclass-common
xdclass-video-service
xdclass-user-service
xdclass-order-service
网友评论