spring cloud alibaba

[TOC]

历史

  1. 架构发展

    1. 单体架构
    2. 垂直应用架构: 按服务独立拆分多个
    3. 分布式架构: 抽取公共层
    4. SOA: 增加服务注册中心进行集群调度
    5. 微服务: 服务间彻底拆分, 原子化
  2. 组成
    服务治理: 服务自动注册与发现
    服务调用: REST/RPC
    服务员容错: 防止雪崩
    链路追踪: 记录服务调用链路
  3. 实现:
    ServiceComb: 前身是华为云
    Spring Cloud
    SpringCloud Alibaba

SpringCloud Alibaba

  • Sentinel: 流量控制, 熔断降级, 负载保护
  • Nacos: 服务治理
  • RocketMQ, Dubbo
  • Alibaba Cloud ACM: 配置中心
  • Alibaba Cloud OSS: 存储
  • Alibaba Cloud SchedualerX: 任务调度
  • Alibaba Cloud SMS:短信服务

Nacos

  1. 服务治理: 主要用于服务的注册与发现. 解决普通restTemplate调用时直接硬编程写入ip端口, 且无负载均衡.
    常见的有Zookeeper(主要解决分布式数据问题), Eureka(注册与发现), Consul(基于GO开发, 提供注册发现配置, 本身是可执行文件安装部署方便, kv存储等功能), Nacos(注册发现和配置, =Eureka+config)
  2. 启动
    nacos/bin/startup.cmd -m standalone
    访问http://localhost:8848/nacos, nacos/nacos
  3. 使用
    引入

    
     com.alibaba.cloud
     spring-cloud-starter-nacos-discovery
    

    主类加入@EnableDiscoveryClient
    application.yml加入
    spring.cloud.nacos.discovery.server-addr: 127.0.0.1:8848
    服务调用: DiscoveryClient负责服务注册和发现
    @Autowired
    private DiscoveryClient dc;
    ServiceInstance si = dc.getInstances("service-product").get(0);//可以get不同的instance实现负载均衡, 或使用Ribbon(@LoadBalanced)
    String url = si.getHost() + ":" + si.getPort();
    restTemplate.getForObject("http://"+url+"/product"+pid, Product.class);

  4. Ribbon负载均衡策略
  5. BestAvailabeRule: 选择请求最少的server
  6. availabilityFilteringRule: 过滤被标记为circuit tripped的server
  7. WeightResponseTimeRule: 分配时间权重
  8. RoundRobinRule: 轮询方式
  9. randomRule: 随机
  10. Feign: 声明式的伪http客户端, 像调用本地服务一样调用远程服务, nacos兼容feign, feign集成ribbon

服务容错

  1. 常见容错方式:
  2. 隔离: 将服务划分为若干相对独立的模块, 使风险只存在某个模块内部. 常用方法有线程池隔离和信号隔量隔离
  3. 超时: 超出设置时间则直接断开请求, 释放线程
  4. 限流
  5. 熔断: 当下游访问剧增而响应变慢或失败, 上游服务科暂时切断下游服务调用, 这种牺牲局部保全整体的措施叫熔断. 熔断3中状态:

    • 关闭(Closed): 无故障
    • 开启(Open): 后续调用不在经过网络, 而是直接执行本地的fallback方法
    • 半熔断(Half-Open): 允许有限流量, 并监控成功率, 如达到预期则关闭熔断, 否则重回关闭
  6. 降级: 为服务提供托底方案, 一旦调用无法正常, 则使用托底方案
  7. 常见容错组件
  8. Hystrix: NetFlix组件, 用于隔离远程调用, 服务或第三方库
  9. Sentinel: alibaba组件
  10. Resilience4J: 轻量简单
    对比
    image.png

sentinel

  1. 集成
    依赖com.alibaba.cloud.spring-cloud-starter-alibaba-sentinel
  2. 控制台
    https://github.com/alibaba/Se...
    java -jar启动
  3. 项目加入配置
    spring.cloud.sentinel.dashboard: localhost:8080
    启动项目即可访问

你可能感兴趣的:(java)