SpringCloud Alibaba入门文档

SpringBoot

四大特性
1. auto-configuration
2. starters
4. cli
5. actuator

nacos

帮助快速实现动态服务发现、服务配置、服务元数据及流量管理 文档

服务注册

  1. nacos.config.server-addr=127.0.0.1:8848
    spring.cloud.nacos.discovery.enabled 默认为true标识开启状态
  2. 领域模型
    • namespace 命名空间可以作为环境隔离,如开发环境和生产环境的隔离
    • group 分组,默认的分组为DEFAULT_GROUP
    • cluster 集群,可以用来做区域集群标记
    • instance 服务实例,每个服务都对应着自己的元数据信息,可以用来做定制化的业务开发,如版本号区别
  3. NacosDiscoveryClient
    提供了一些查询nacos server中注册服务信息的api,可以结合ribbon开发基于nacos自定义的负载均衡策略

配置中心

1. 新建bootstrap.yml文件
2. nacos控制台创建配置文件dataid格式为${name}-${active_profile}.${file-extension}
spring:
    cloud:
        nacos:
        config:
            server-addr: 127.0.0.1:8848
            file-extension: yaml
    application:
        name: sca-content-center
    profiles:
        active: dev
3. 在指定的配置类上加入@RefreshScope注解

ribbon

负载均衡,spring-cloud-rabbion是基于netflix开发的组件,主要又以下几种策略

  1. AvailabilityFilteringRule 简单理解就是选用所有状态正常的服务
  2. BestAvailableRule 选择一个响应时间最小的
  3. RandomRule 随机选择一个服务
  4. RoundRobinRule 轮询规则
  5. RetryRule 重试规则,当选择的服务不能使用则会一直重试,具体是什么规则可以设置除了RetryRule以外的策略,默认是RoundRobinRule
  6. WeightedResponseTimeRule 根据响应时间设置权重规则,响应时间越长权重越小
  7. ZoneAvoidanceRule 默认选项 这是一种根据服务提供者所在Zone的性能以及服务提供者可用性综合计算,选择提供者节点的负载均衡规则,如果没有配置zone,则类似RoundRobinRule规则

细粒度配置

  1. 使用@RibbonClient(name = "${application-name}", configuration = XXXConfiguration.class)
    可以为指定的服务配置负载均衡策略
  2. 使用yml配置方式
application-name:
  ribbon:
   NFLoadBalancerRuleClassNameL: com.netflix.loadbalancer.RandomRule

RibbonClient使用的配置类XXXConfiguration,一定要放在main程序包外,否则的就会是全局配置,这是因为spring父子上下文导致的、
类似的feign也有同样的问题

全局配置

  1. @RibbonClients(defaultConfiguration = XXXConfiguration.class)

拓展nacos

nacos可以结合ribbon定义更加适合自己业务(Nacos权重,同一集群优先调用,基于元数据的版本控制)的负载均衡策略,需要使用nacos客户端提供的NacosDiscoveryClient以及ribbon的AbstractLoadBalancerRule
接口。

feign

声明式服务调用,可以代替RestTemplate的硬编码。

组成

  1. Feign.Builder Feign的入口
  2. Client feign底层用什么请求,可以和dibbon配合使用
  3. Contract 契约注解支持,默认SpringMvcContract
  4. Encoder 编码器,用于将对象转换成消息体 默认SpringEncoder
  5. Decoder 解码器,将响应消息体转换成对象,默认ResponseEntityDecoder
  6. Logger 日志管理器
  7. RequestInterceptor 该接口用于为每个请求添加通用逻辑

配置项

  1. Logger.Level 日志级别
  2. Retryer 指定重试策略
  3. ErrorDecoder 指定错误解码器
  4. Request.Options 超时时间
  5. Collection 拦截器
  6. SetterFactory

属性配置

feign.client.config:
      <feignName>:
        loggerLevel: full
        connectTimeout: 5000
        readTimeout: 5000
        requestInterceptors:
            - com.example.XXXRequestInterceptor

日志级别

  1. NONE
  2. BASIC 默认,线上使用
  3. INFO 开发调试使用
  4. FULL

feign的全局配置以及细粒度配置也有类似ribbon的问题,需要将XXXFeignConfiguration配置类放在main包以外

非nacos注册服务使用

@FeignClient(name = "xxx", url = "https://xxxx")

性能优化

为线程池指定配置参数优化线程池

feign:
  client:
    config:
      sca-content-center:
        loggerLevel: full
  httpclient:
    connection-timeout: 2000
    enabled: true
    max-connections: 200
    max-connections-per-route: 20

sentinel

是一套从流量控制、熔断降级、系统负载保护等多个维度保护服务稳定性的容错框架,可以脱离spring使用,提供了api供普通java应用程序使用。
和hystrix相比,hystrix使用的是线程进行熔断处理,而sentinel是从并发数或者响应时间来进行流控处理的,这样的好处在于避免了线程切换的开销性能更优,文档

核心API

1. SphU.entry(resourceName) 定义资源名
2. Tracer.traceEntry(ex, entry)
3. ContextUtil 获取上下文工具,可以进行上下文切换

SpringBoot集成

使用@SentinelResources注解可以和SpringBoot集成,@SentinelResource(blockHandler = "blockHandlerMethod"),blockHandler指定的方法需要和注解修饰的方法
具有相同的返回值以及参数,唯一不同的是blockHandlerMethod可以额外增加一个异常参数

规则

  1. 流量控制规则
  2. 熔断降级规则
  3. 系统保护规则
  4. 访问控制规则
  5. 热点规则

配置持久化

  1. 拉模式:客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更;
  2. 推模式:规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。
    配置方式,拉模式可以从Sentinel-控制台(集群流控管理)#规则配置找到,
    至于推模式修改过于复杂,可以从Sentinel-Dashboard-Nacos结合289464
    修改

sleuth zipkin

微服务调用链路跟踪

spring:
    sleuth:
        sampler:
        # 过滤推送的日志,1代表100%全部推送
        probability: 1
    zipken:
        base-url: http://localhost:9411/
        discover-client-enable: false