spring cloud alibaba
[TOC]
历史
- 架构发展
- 单体架构
- 垂直应用架构: 按服务独立拆分多个
- 分布式架构: 抽取公共层
- SOA: 增加服务注册中心进行集群调度
- 微服务: 服务间彻底拆分, 原子化
- 组成
服务治理: 服务自动注册与发现
服务调用: REST/RPC
服务员容错: 防止雪崩
链路追踪: 记录服务调用链路 - 实现:
ServiceComb: 前身是华为云
Spring Cloud
SpringCloud Alibaba
- Sentinel: 流量控制, 熔断降级, 负载保护
- Nacos: 服务治理
- RocketMQ, Dubbo
- Alibaba Cloud ACM: 配置中心
- Alibaba Cloud OSS: 存储
- Alibaba Cloud SchedualerX: 任务调度
- Alibaba Cloud SMS:短信服务
- 服务治理: 主要用于服务的注册与发现. 解决普通restTemplate调用时直接硬编程写入ip端口, 且无负载均衡.
常见的有Zookeeper(主要解决分布式数据问题), Eureka(注册与发现), Consul(基于GO开发, 提供注册发现配置, 本身是可执行文件安装部署方便, kv存储等功能), Nacos(注册发现和配置, =Eureka+config) - 启动
nacos/bin/startup.cmd -m standalone
访问http://localhost:8848/nacos, nacos/nacos - 使用
引入
com.alibaba.cloud spring-cloud-starter-nacos-discovery
【spring cloud alibaba】主类加入@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);
- Ribbon负载均衡策略
- BestAvailabeRule: 选择请求最少的server
- availabilityFilteringRule: 过滤被标记为circuit tripped的server
- WeightResponseTimeRule: 分配时间权重
- RoundRobinRule: 轮询方式
- randomRule: 随机
- Feign: 声明式的伪http客户端, 像调用本地服务一样调用远程服务, nacos兼容feign, feign集成ribbon
- 常见容错方式:
- 隔离: 将服务划分为若干相对独立的模块, 使风险只存在某个模块内部. 常用方法有线程池隔离和信号隔量隔离
- 超时: 超出设置时间则直接断开请求, 释放线程
- 限流
- 熔断: 当下游访问剧增而响应变慢或失败, 上游服务科暂时切断下游服务调用, 这种牺牲局部保全整体的措施叫熔断. 熔断3中状态:
- 关闭(Closed): 无故障
- 开启(Open): 后续调用不在经过网络, 而是直接执行本地的fallback方法
- 半熔断(Half-Open): 允许有限流量, 并监控成功率, 如达到预期则关闭熔断, 否则重回关闭
- 降级: 为服务提供托底方案, 一旦调用无法正常, 则使用托底方案
- 常见容错组件
- Hystrix: NetFlix组件, 用于隔离远程调用, 服务或第三方库
- Sentinel: alibaba组件
- Resilience4J: 轻量简单
对比
文章图片
- 集成
依赖com.alibaba.cloud.spring-cloud-starter-alibaba-sentinel
- 控制台
https://github.com/alibaba/Se...
java -jar启动 - 项目加入配置
spring.cloud.sentinel.dashboard: localhost:8080
启动项目即可访问
推荐阅读
- Activiti(一)SpringBoot2集成Activiti6
- SpringBoot调用公共模块的自定义注解失效的解决
- 解决SpringBoot引用别的模块无法注入的问题
- 2018-07-09|2018-07-09 Spring 的DBCP,c3p0
- spring|spring boot项目启动websocket
- Spring|Spring Boot 整合 Activiti6.0.0
- Spring集成|Spring集成 Mina
- springboot使用redis缓存
- Spring|Spring 框架之 AOP 原理剖析已经出炉!!!预定的童鞋可以识别下发二维码去看了
- Spring|Spring Boot之ImportSelector