微服务入门
一、微服务的背景
传统的互联网项目经不住瞬间大量的并发量,并面临着单体项目的一些瓶颈(整合项目困难代码冲突,维护起来不方便等),所以微服务把一些共用业务单独独立出来,这些项目独立运行维护互不干扰,这样可以增加团队的开发效率,总结一句话微服务就是把一个大型复杂项目拆分成小项目,把共用的部分独立出来做成独立运行的应用,微服务架构主要解决的是如何快速地开发和部署我们的服务
二、SpringCloud Alibaba微服务解决方案
阿里经过双十一等多重考验的一套解决方案,在稳定性等方面表现优秀
核心组件:
- nacos:服务的注册,发现,配置
- sentinel:默认支持 WebServlet、OpenFeign、RestTemplate、Spring Cloud Gateway, RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
- 分布式事务:
使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
解决方案框架结构
nacos服务注册中心
背景:
解决单体项目的拆分问题
是微服务的一套解决方案,通过nacos我们可以快速的发现和调用我们的服务
核心的API:
一、RestTemplate
是spring提供的调用api
用法:创建RestTemplate对象,交给bean管理,并注入创建对应方法
二、loadBalancerClient
是spring提供的远程调用并提供负载均衡的api,底层是Ribbon配合RestTemplate实现
三、@LoadBalanced
是springcloud提供的负载均衡api,在调用RestTemplate之前如果检测到被@LoadBalanced修饰的
对象,底层会创建一个拦截器LoadBalancerInterceptor,拦截实现负载均衡之后再调用
四、Ribbon
是Netflix 公司的一个负载均衡的程序,被spring整合,默认提供了7种负载均衡策略,
当系统提供的负载均衡策略不能满足我们需求时,我们还可以基于IRule接口自己定义策略.
五、Feign
是一种声明式的调用方式,简化了上面那几种调用方式,底层也是Ribbon
@EnableFeignClients 配置注解,有这个注解openfeign才会生效
@FeignClient(name = "sca-provider") //Feign根据name属性找服务,被这个注解修饰的会自动创建实现类
六、FallbackFactory
直接或间接的实现这个工厂可以自定义异常处理
七、@RefreshScope
,@RefreshScope的作用是在配置中心的相关配置发生变化以后,能够及时看到类中属性值的更新(底层是通过重新创建Controller对象的方式,对属性进行了重新初始化)。
sentinel限流
背景
主要是要控制流量,在面对突增的大量并发这种情况下以退为进是为了更好的保证我们的服务质量,做法有针对热门的商品、文章限流(热点规则)、对某个服务突发的流量进行限流(直连,关联,链路),对不稳定的资源进行熔断降级(降级)
sentinel也是基于sentinel依赖提供的拦截器来完成对请求的限流的
核心aip和类
一、BlockExceptionHandler
是异常处理的接口,可以通过直接或者间接的方式自定义异常处理
二、BlockException
sentinel异常类
网关gateway
背景:
微服务都是独立分散的一个个服务,如果没有网关我们就需要在客户端写上一个个的真实uri,所以网关就是为我们的程序提供一个统一的入口,再就是为了安全,由网关转发请求,相当于一个反向代理
核心知识点:
一、流程
请求发送到网关,然后经过RoutePredicateHandlerMapping查找谓词key,然后GatewayPredicate接口会根据谓词去找对应的工厂实现类,基于test()方法判断谓词是否满足要求满足则发给 WebHandler并且调用过滤链filters,GatewayFilter会调用各种过滤工厂过滤完毕执行下一个过滤器。
二、谓词、断言
主要是做一个判断,判断请求是否满足一定的格式,所有工厂都直接或间接的实现了RoutePredicateFactory接口
三、过滤
两种:
- GlobalFilter 全局过滤器,可以自定义需要直接或间接的实现BlockRequestHandler接口
- GatewayFilter 局部过滤器,一般在配置里进行配置
四、限流
两种:根据router的id或者根据分组