Spring Cloud Alibaba 大型互联网领域多场景实践 Study Notes

慕课网实战课程《Spring Cloud Alibaba 大型互联网领域多场景实践》学习笔记
第1章 课程介绍
课程主题
- 围绕电商高并发业务场景为主线,讲解了Spring Cloud Alibaba相关组件如何应用
- 介绍了在大规模分布式集群下Spring Cloud Alibaba的最佳实战
- 从源码角度深度剖析各个组件的实现思路与方案
课程目标
- 掌握Spring Cloud Alibaba相关组件的高阶用法
- 了解Spring Cloud Alibaba框架如何应对互联网电商业务的三高场景
- 培养技术专家的思维方式
- 掌握读源码的方法,学会触类旁通
解决了哪些痛点
- 框架会用了,但是到工作当中无法结合
- 只会HelloWorld,不知原理与框架设计思路
- 框架之间没有联系,不够系统
- 单机或者小规模服务应对自如,大规模分布式场景一概不知
课程亮点
- 与实际工作场景相结合,避免纸上谈兵
- 不仅仅会用,更要知其所以然
- 学习过程中多问为什么,培养大牛思维
- 课程独立性强,小白高工皆可受益
课程收获
- 掌握基于Spring Cloud Alibaba的主流电商业务技术架构
- 应对复杂的电商业务场景(双十一、秒杀 )
- 掌握Spring Cloud Alibaba在大规模集群应用的最佳实践
- 掌握Spring Cloud Alibaba组件核心设计思想和原理
第2章 基于Spring Cloud Alibaba的微服务电商解决方案
Spring Cloud是什么
- 简单来说,Spring Cloud提供了一些可以让开发者快速构建微服务应用的工具,比如配置管理、服务发现、熔断、智能路由等,这些服务可以在任何分布式环境下很好的工作
Spring Cloud解决方案
Spring Cloud Netflix与Spring Cloud Alibaba对比
Spring Cloud Netflix | Spring Cloud Alibaba | |
---|---|---|
服务注册与发现 | Eureka | Nacos |
熔断限流 | hystrix | Sentienl |
REST Client | Feign | |
客户端负载均衡 | Ribbon | |
微服务网关 | zuul | |
分布式消息中间件 | RocketMQ | |
分布式事务中间件 | Seata | |
RPC服务框架 | Dubbo |
由Netflix停更引发的升级惨案
- 2018年12月,Spring官方宣布Netflix的相关项目(Eureka,hystrix,zuul)进入维护模式;停更不停用(被动修复BUG,不再接受合并请求,不再发布新版本)
Netflix | 推荐替代品 |
---|---|
Hystrix | Sentinel |
Eureka | Nacos |
Ribbon | Spring CloudLoadbalancer |
Zuul | Spring Cloud Gateway |
- Spring Cloud Alibaba 成为业界主流的微服务解决方案
版本选择与兼容性
版本不兼容诱发的问题
- 线上BUG频出
- 通过日志无法快速定位
- 遭遇未知问题且不容易复现
版本选择(Spring Boot,Spring Cloud,Spring Cloud Alibaba)
电商行业与电商微服务架构
电商行业技术特性
- 业务复杂度高(双十一大促,秒杀活动)
- 技术选型新(前后端分离,使用新技术)
- 具备三高特性(高并发,高性能,高可用)
- 海量数据
电商行业模式介绍
- B2B模式(Business To Business)
- 企业与企业之间进行营销活动的一种模式
- 例如:慧聪网,1688阿里巴巴采购批发网
- C2C模式(Customer To Customer)
- 个人与个人之间的电子商务活动
- 例如:淘宝,ebay
- B2C模式(Business To Customer)
- 商户与个人之间的电子商务活动
- 例如:京东,天猫
基于SpringCloud Alibaba电商微服务架构

微服务的设计和拆分原则
AKF扩展拆分
- 微服务拆分方式:以图Y轴所示方式,即按照不同的服务功能进行拆分
- 微服务拆分要点:
- 低耦合、高内聚:一个服务完成一个独立的功能
- 按团队结构,小规模团队维护,快速迭代

- 上图来自《重构的艺术》
- Y轴:按照不同的服务应用进行微服务拆分
- X轴:水平复制(单体系统运行多个实例,成为集群+负载均衡的模式),平等的复制应用和数据,来解决容量可用性问题,可以解决三高问题
- Z轴:基于请求者或者用户独特的需求来进行系统的划分,并使得划分出来的系统是相互隔离但又是完整的
前后端分离原则
- 未分离:Servlet +Jsp
- 部分分离:SSM/SSH
- 完全分离:Vue、Angular、React
无状态服务
- 一笔数据需要多个服务共享,才能完成一笔交易,这个数据就称为状态,依赖这个数据的服务就叫做有状态服务,不依赖则称之为无状态服务

- 如上图:服务A的实例X和服务B的实例Y就实现了无状态,它们将有状态的数据通过Redis共享。(这样就可以动态增加服务A的节点甚至无限制扩展,来达到服务A水平扩展能力,并不需要每一个请求过来去关心服务的状态是什么)
Restful通信风格

电商微服务划分
业务分析
- 一个电商服务中,应该是具有以下微服务模块:
广告服务、购物车服务、库存服务、商品服务、用户服务、积分服务、搜索服务、订单服务、秒杀服务
微服务工程搭建

- 搭建5个微服务
1 | <modules> |
Nacos实现电商微服务拆分
Nacos介绍
- 服务发现和健康监测
- 动态配置服务
- 动态DNS服务
- 服务及其元数据管理

- Nacos使用场景如上图
Nacos版本选择
Nacos环境搭建
- 环境准备:jdk1.8
1 | wget -P /usr/local/src/ https://github.com/alibaba/nacos/releases/download/1.4.1/nacos-server-1.4.1.tar.gz |
微服务配置Nacos

1 | <dependencyManagement> |
1 | spring: |
1 | //主配置类加上如下注解,表示启用服务发现 |
Dubbo与Nacos整合
- 略(放到其它课程继续深入学习)
第3章 Nacos Config 如何动态切换的开发环境
配置中心介绍与对比
微服务中配置文件的问题
- 配置文件的数量会随着服务的增加持续递增
- 单个配置文件无法区分多个运行环境
- 配置文件内容无法动态更新,需要重启服务
配置中心解决了什么问题
- 统一配置文件管理
- 提供统一标准接口,服务根据标准接口自行拉取配置
- 支持动态更新的到所有服务
业界常见配置中心
- Appllo(携程开源,配置更新后实时生效,灰度发布,对所有的配置进行版本管理和操作审计的功能,提供开发平台API,网络社区资料全)
- Disconf(百度开源分布式配置中心,基于zookeeper来实现配置变更后实时通知和生效)
- SpringCloud Config(没有可视化界面,配置更新后不能实时生效,需要重启或手动触发)
- Nacos(提供服务注册发现和配置)
Nacos集成springboot实现统一配置管理
1 |
|
1 |
|
1 |
|
Nacos config动态刷新实现原理解析
使用Nacos config整合电商项目切换开发环境
Reference
Remark
- 基于SpringCloud Alibaba电商微服务架构需要再学习一下
- nacos服务发现流程架构图还需要学习
- maven待好好学习
- dubbo待学习
1 | <font color=red></font> |