Spring Cloud(下)

95 阅读4分钟
  • 分布式链路追踪
  • 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规则