[TOC]
历史
-
架构倒退
- 单体架构
- 垂直利用架构: 按服务独立拆分多个
- 分布式架构: 抽取公共层
- SOA: 减少服务注册核心进行集群调度
- 微服务: 服务间彻底拆分, 原子化
- 组成
服务治理: 服务主动注册与发现
服务调用: REST/RPC
服务员容错: 避免雪崩
链路追踪: 记录服务调用链路 - 实现:
ServiceComb: 前身是华为云
Spring Cloud
SpringCloud Alibaba
SpringCloud Alibaba
- Sentinel: 流量管制, 熔断降级, 负载爱护
- Nacos: 服务治理
- RocketMQ, Dubbo
- Alibaba Cloud ACM: 配置核心
- Alibaba Cloud OSS: 存储
- Alibaba Cloud SchedualerX: 任务调度
- Alibaba Cloud SMS: 短信服务
Nacos
- 服务治理: 次要用于服务的注册与发现. 解决一般 restTemplate 调用时间接硬编程写入 ip 端口, 且无负载平衡.
常见的有 Zookeeper(次要解决分布式数据问题), Eureka(注册与发现), Consul(基于 GO 开发, 提供注册发现配置, 自身是可执行文件装置部署不便, kv 存储等性能), Nacos(注册发现和配置, =Eureka+config) - 启动
nacos/bin/startup.cmd -m standalone
拜访 http://localhost:8848/nacos, nacos/nacos -
应用
引入<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-nacos-discovery</artifactId> </dependency>
主类退出 @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: 轻量简略
比照
sentinel
- 集成
依赖com.alibaba.cloud.spring-cloud-starter-alibaba-sentinel
- 控制台
https://github.com/alibaba/Se…
java -jar 启动 - 我的项目退出配置
spring.cloud.sentinel.dashboard: localhost:8080
启动我的项目即可拜访