- 分布式链路追踪
- Sleuth+Zipkin(Twitter)
- 1.动态展示服务的调用链路
- 2.分析服务链路瓶颈调优
- 3.快速发现故障
- 阿里巴巴(鹰眼)
- 大众点评(CAT)
- 美团(MTRACE)
- 京东(Hydra)
- 新浪(Watchman)
- Apache Skywalking
- 本质是记录日志,区分服务的理论
- 记录TraceID,唯一的跟踪id从请求开始直到返回给请求方
- 一个traceID由多个spanid组成
- 步骤:
- 1.引入sleuth依赖
- 2.配置yml文件日志级别
- 构建zipkin服务(单独的工程)
- 引入依赖,启动类开启@EnableZipKinserver
- 服务构建客户端,客户端配置zipkin服务端的地址
- 客户端可以配置通过web/kafka/rabbitmq方式发送到服务端
- 配置采样率(采集的百分比)
- ZipKin数据持久化
- 可以支持持久化到mysql/es/...
- 分布式统一认证方案OAuth2+JWT
- 1.基于session的认证方式
- 问题:基于cookie,移动端不支持
- 2.基于token的认证方式
- 问题:占带宽,会有额外的处理消耗
- OAuth2是开放授权协议/标准
- 第三方登录:第三方会给一个client_id,再申请一个密钥
- 客户端向第三方请求授权,第三方授权确认后,客户端向服务器申请令牌,客户端携带令牌访问资源服务器
- 单点登录场景:多个服务之间共享登录态,有一个专门的认证中心
- Spring cloud OAuth2
- 搭建认证服务:
- 1.引入springcloudoauth2依赖
- 2.认证服务配置类继承AuthorizationServerConfigurerAdapter父类
- @EnableAutrhorizationServer开启认证
- 重写configure方法(三个)
- 分别是提供的对外服务、配置令牌、客户端配置
- 3.创建验证用户名密码的配置类继承WebSecurityConfigurerAdapter
- 注册一个认证管理器对象到容器,加入到客户端配置里
- 重写configure来验证用户名和密码
- refresh_token可以获取新的token,增加安全性
- 资源服务器构建
- 1.添加资源服务的配置类继承ResourceServerConfigurerAdapter
- 实现configure方法(两个),分别是验证token服务和接口黑白名单配置
- @enablerWebSercurity开启
- JWT(格式JSON WEB TOKEN)
- 资源服务器过多对认证服务器压力过大,可以用JWT
- 封装用户信息、过期信息等数据到令牌当中,让资源服务器自己去校验合法性,不用去请求认证服务器接口。
- 有三部分组成
- 1.Header,类型和加密的算法base64编码
- 2.用户内容base64加密
- 3.签名
- 认证服务器从数据库加载客户端信息
- oauth_client_details固定表名
- 配置成jdbc模式
- 用户信息从数据库中匹配
- JWT令牌信息扩展:
- 在JWT转换器对象中添加自定义的信息
- 继承defaultaccesstokenconverter重写convertAccessToken方法
- 注册到转换器中
- 资源服务器中获取扩展的自定义令牌信息
- 注册自定义的转换器,
- 在controller中用sercuritycontextholder获取
- 第二代SpringCloud核心组件(SCA)
- Nacos:
- 是注册中心加配置中心的集合(等于Eureka+Config+Bus)
- 服务发现与健康检查
- 动态配置管理
- 动态DNS服务
- 服务和元数据管理
- 下载jar包启动
- 管理页面:ip:8848/nacos/#/login
- 服务引入依赖,添加配置
- @EnableDiscoveryClient也支持nacos
- 服务路由类型可以用做多数据中心的就近访问
- nacos有临时实例和持久化实例
- 微服务场景(cloud+dubbo)都是临时实例
- 保护阈值:0-1之间的浮点数,是健康实例/总实例比值
- 如果实例较多,多数实例不健康,当流量洪峰时候容易雪崩
- 保护阈值就是为了触发,如果健康实例数小于保护阈值,会返回所有实例,防止整个服务不可用
- Nacos领域模型
- namespace:隔离环境
- group:服务分组
- service:服务
- dataid:配置文件
- nacos数据持久化mysql
- mysql主要存储配置中心的数据,注册中心是存在nacos服务器磁盘
- 集群模式,配置ip和端口
- 然后配置集群配置
- Nacos分布式配置中心
- 不需要github。不需要bus也可以动态刷新
- 引入nacos-config依赖
- 通过namespace+group+dataid来锁定配置文件
- dataid:prefix-spring.profile-file-extension
- 实时刷新@RefreshScope
- 读取多个配置文件
- 用ext-config配置
- 配置优先级默认高于扩展,扩展按照编号优先级升序
- Sentinel分布式流量控制,熔断降级
- 替代Hystrix
- 不需要创建项目,直接下载Jar包,可以独立部署控制台
- 通过界面配置控制功能
- 服务改造:
- 引入依赖
- 配置sentinel dashboard的地址
- 配置限流:
- QPS和线程
- 快速失败、warm up、队列等待
- 排队QPS是阈值/5
- 降级:此处降级时间窗口后就自动恢复,不会像Hystrix一样尝试放行部分请求再回复
- 自定义兜底降级方法
- @SentinelResource注解中的blockHandler
- 可以基于Nacos持久化sentinel规则