【SpringCloud】1.0 SpringCloud+Alibaba Cloud

时间:2021-6-12 作者:qvyue

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 单机架构

优点: 易于测试 便于集成 ⼩型项⽬友好
缺点: 开发速度慢 启动时间⻓ 依赖庞⼤

【SpringCloud】1.0 SpringCloud+Alibaba Cloud
image.png

4.2 分布式架构

SOA :Service Oriented Architecture ⾯向服务的架构
其中包含多个服务, 服务之间通过相互依赖最终提供⼀
系列的功能, ⼀个服务 通常以独⽴的形式存在与操作系
统进程中, 各个服务之间 通过⽹络调⽤。

微服务:将⼀个⼤的单体应⽤进⾏细粒度的服务化拆
分,每个拆分出来的服务各⾃独⽴打包部署,各个服务
之间 通过⽹络调⽤。

优点
易开发、理解和维护
独⽴的部署和启动

缺点
分布式系统->分布式事务问题
需要管理多个服务->服务治理

【SpringCloud】1.0 SpringCloud+Alibaba Cloud
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

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。