Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过
Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 官网链接:
https://github.com/alibaba/spring-cloud-alibaba/wiki
本文章目录
- 写在前面
- Spring cloud Alibaba技术栈选择
- 一、[Spring Cloud Alibaba简介](https://blog.csdn.net/weixin_41842236/article/details/104205658)
- 二、[Spring Boot基础](https://blog.csdn.net/weixin_41842236/article/details/104205746)
- 三、[微服务的拆分和编写 ](https://blog.csdn.net/weixin_41842236/article/details/104205748)
- 四、[Spring Cloud Alibaba介绍](https://blog.csdn.net/weixin_41842236/article/details/104232673)
- 五、[服务发现-Nacos](https://blog.csdn.net/weixin_41842236/article/details/104247101)
- 六、[实现负载均衡-Ribbon](https://blog.csdn.net/weixin_41842236/article/details/104348324)
- 七、[声明式HTTP客户端Feign](https://blog.csdn.net/weixin_41842236/article/details/104463575)
- 八、[服务容错Sentinel](https://blog.csdn.net/weixin_41842236/article/details/104662251)
- 九、[消息驱动的微服务-SpringCloudAlibabaRocketMQ](https://blog.csdn.net/weixin_41842236/article/details/105185188)
- 组件
- 分布式服务的问题
写在前面
参考链接:http://javadaily.cn/tags/SpringCloud
学习一个项目,首先就是配置好自己的idea咯~
mark 一些快捷键工具:
- windows:HotKey Explorer , HotKey Commander , idea快捷建说明【推荐】
- mac:CheatSheet
SpringBoot Actuator - 项目监控工具
Spring Boot基础
从GitHub下载东西时,如果网速过慢加上 https://github.com.cnpmjs.org/ 就好啦~
Spring cloud Alibaba技术栈选择
一、Spring Cloud Alibaba简介
二、Spring Boot基础
三、微服务的拆分和编写
四、Spring Cloud Alibaba介绍
五、服务发现-Nacos
Nacos既可以作为注册中心也可以作为配置中心。(Namespace - 官方推荐的环境隔离配置)
六、实现负载均衡-Ribbon
Ribbon使用代码配置时,config需要放在不和 启动类相同的包(@Conponentscan扫描包以外)。在启动类下的config包中指定
@RibbonClient(name = “life-base”,configuration = RibbonConfiguration.class)
因为父子上下文不能重叠,。Ribbon父子上下文重叠,会被所有的Ribbon Client共享。
Ribbon默认是懒加载的,通过饥饿加载即可解决第一次调用慢的问题。
扩展Ribbon的负载均衡策略extends AbstractLoadBalancerRule,让它支持Nacos权重
至此,Nacos + Ribbon 已经整合完成。但是有以下问题:
- 代码不可读。
- 复杂的url难以维护
- 难以相应需求的变化
- 编程体验不统一
七、声明式HTTP客户端Feign
Java代码的方式@Configuration 注解也会带来父子上下文问题,被所有Feign共享,不写@Configuration就好了。
属性配置优先级最高啦。
Feign的默认使用的URLConnection去发送请求的,他是没有连接池的。但是Feign底层除了使用URLConnection发送请求以外,还支持使用Apache的HTTPClient以及OKHTTP去发送请求,而Apache的HTTPClient以及OKHTTP都是支持连接池的。
RestTemplate
Spring Web提供的轻量级HTTP Client,简化HTTP调用。
RestTemplate.getForEntity / getForObject(不需要HTTP状态码的时候使用,简单)
八、服务容错Sentinel
Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
- 快速失败。
- warm up。 慢慢到达阈值,达到阈值就抛弃。
- 排队等待 。空闲的时候慢慢处理
三个核心API :
- SphU:定义、监控、保护资源
- Tracer:对异常进行统计
- ContextUtil:实现调用来源,标记调用
SentinelBeanPostProcessor - 源码解析。
Sentinel:熔断,限流
九、消息驱动的微服务-SpringCloudAlibabaRocketMQ
RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
Spring实现异步操作:
- AsyncRestTemplate
- @Async
- WebClient (Spring 5.0引入)
- MQ
组件
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
服务注册到Nacos上后,可以用Spring Cloud DiscoveryClient发现对应组件。
- NameSpace:实现隔离,默认public (环境配置)
- Group:不同服务可以分到一个组,默认default
- Service:微服务
- Cluster:对指定微服务的一个虚拟化分
- Instance:微服务实例
元数据
- 设置服务描述信息(微服务版本控制 Ribbon支持基于元数据的版本管理)
分布式服务的问题
TraceId和SpanId
TraceId:通过 TraceId 来将一个请求在各个服务器上的调用日志串联起来,TraceId 一般由接收请求经过的第一个服务器产生,产生规则是: 服务器 IP + 产生 ID 时候的时间 + 自增序列 + 当前进程号 。
SpanId:代表了本次请求在整个调用链路中的位置或者说层次,比如 A 系统在处理一个请求的过程中依次调用了 B,C,D 三个系统,那么这三次调用的的 SpanId 分别是:0.1,0.2,0.3。如果 B 系统继续调用了 E,F 两个系统,那么这两次调用的 SpanId 分别是:0.1.1,0.1.2。