Spring Cloud Alibaba题目

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 五道关于Spring Cloud Alibaba的题目,希望能帮助初学者。

Spring Cloud  Alibaba

1. Spring Cloud Alibaba的五大组件

  1. Sentinel: 把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  2. Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  3. RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务.
  4. Dubbo: Apache DubboTm 是 款高性能 Java RPC 框架。
  5. Seata: 阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
    其他组件扩展
  6. Alibaba Cloud 0SS:阿里云对象存储服务 (Object Storage Service,简称 0SS),是里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  7. Alibaba Cloud Schedulerx:阿里中间件团队开发的一款分布式任务调度产品,提供秘级、精准、高可靠、高用的定时(基于 Cron表达式)任务调度服务。
  8. Alibaba Cloud SMS: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道.

2. Seata有哪几种模式,分别有什么优缺点

Seata只有四种模式: XA、AT(默认)、TCC、Seaga

  1. XA: 强一致性,基于数据库隔离,无代码侵入,在一阶段不提交事务
  2. AT:默认模式,基于全局锁离,无代码侵入,一阶段提交事务,在提交事务前,会记录undolog日志,性合XA模工好,二阶段TC通知回滚,则根据undolog回滚,通知提交,则删除undolog日志
  3. TCC:性能最好,不需要依赖关系型数据库,但代码入侵读高。Try:冻结可用数据,Confirm:确认提交数据,删除冻数据 Canel:恢复数据,将冻结数据恢复
  4. Seaga: 用于长事务,例如A项目调另外一个公司的项目接口。优缺点:
  1. XA:强一致性,无代码侵入、但一阶段事务不提交、会锁住资源,导致性能低。需要依赖数据库的事务特性
  2. AT:默认,弱一致性,无代码侵入,一阶段事务直接提交,失败则根据undolog日志回滚,隔离性引入全局锁,但并发几率低,所以性能会比XA好。
  3. TCC:无需依赖关系型数据库,基于资源预留隔离。try、confim、canel需要人工手写,而且需要考虑空悬挂、空回滚、幂等性判断较为复杂、性能最好,但成本太高。
  4. Seaga:适用于长事务类型,无太多应用场景
  5. 下图为AT模式
  6. image.png

**3. 负载均衡策略

负载均衡分两种: 一种是服务端负载均衡,一种是客户端负载均衡

服务端负载均衡: 通常所说的负载均衡指服务器负载均衡,是有服务器来决定调用哪个节点;

通过硬件或软件实现负载均衡均会 维护一个服务端清单,利用心跳检测等手段进行清单维护,保证清单中都是可以正常访问的服务节点 。当用户发送请求时,会先到达负载均衡器 (也相当于服务), 负载均衡器根据负载均衡算法(轮训、随机、加权轮训)从可用的服务端列表中取出一台服务端的地址,接着进行转发,降低系统的压力。

客户端负载均衡:实际上是指服务器调用者,在SpringCloud中调用者本身继承负载均衡,由调用者决定调用哪个节点的服务;

Ribbon 维护了一个服务列表,如果服务实例注销或死掉,Ribbon 能够自行将其剔除。 Ribbon 提供了客户端负载均衡的功能,Ribbon 利用从注册中心中读取到的服务信息列表(存储在本地即客户端中),在调用某个服务时,根据负载均衡算法直接请求到具体的微服务实例,常用的负载均衡算法有: 轮循、随机、加权轮循、加权随机、地址哈希等方法 。

拓展知识:

两者的区别:两者主要区分点在于服务清单的存放位置: 在客户端负载均衡中,客户端会存储一份服务端清单,它是通过从注册中心进行抓取得到的,同时也需要对此进行维护。而在服务端负载均衡中,服务端自己会维护一份服务端清单。

4.Nacos在服务器中突然挂掉怎么办

1.缩短默认的健康检查时间

通过Nacos提供的心跳周期配置,再结合自身的业务场景,我们就可以选择最适合的心跳检测机制,尽最大可能避免对业务的影响。

这个方案看起来心跳周期越短越好,但这样会对Nacos服务端造成一定的压力。如果服务器允许,还是可以尽量缩短的。

2.Nacos的保护阈(yu)值

本质上,保护阈值是⼀个⽐例值(当前服务健康实例数/当前服务总实例数)。

⼀般流程下,服务消费者要从Nacos获取可⽤实例有健康/不健康状态之分。Nacos在返回实例时,只会返回健康实例。

但在⾼并发、⼤流量场景会存在⼀定的问题。比如,服务A有100个实例,98个实例都处于不健康状态,如果Nacos只返回这两个健康实例的话。流量洪峰的到来可能会直接打垮这两个服务,进一步产生雪崩效应。

保护阈值存在的意义在于当服务A健康实例数/总实例数 < 保护阈值时,说明健康的实例不多了,保护阈值会被触发(状态true)。

Nacos会把该服务所有的实例信息(健康的+不健康的)全部提供给消费者,消费者可能访问到不健康的实例,请求失败,但这样也⽐造成雪崩要好。牺牲了⼀些请求,保证了整个系统的可⽤。

3.SpringCloud的请求重试

即便上面我们对心跳周期进行了调整,但在某一实例发生故障时,还会有短暂的时间出现Nacos服务没来得及将异常实例剔除的情况。此时,如果消费端请求该实例,依然会出现请求失败。

为了构建更为健壮的应用系统,我们希望当请求失败的时候能够有一定策略的重试机制,而不是直接返回失败。这个时候就需要开发人来实现重试机制。

在微服务架构中,通常我们会基于Ribbon或Spring Cloud  LoadBalancer来进行负载均衡处理。除了像Ribbon、Feign框架自身已经支持的请求重试和请求转移功能。Spring  Cloud也提供了标准的loadbalancer相关配置。

4.如果单节点Nacos挂了,不会导致整个系统不可用,而是会先使用本地缓存的数据,等Nacos恢复后再重新拉去最新的数据

Nacos源码种通过putService()方法将服务缓存到内存,service.init()建立心跳机制,通过consistencyService.listen实现数据 致性监听

总结: Nacos客户端通过Open API的形式发送服务注册请求,Nacos服务端收到请求后,做以下二件事: 构建一个Service对象保存到ConcurrentHashMap集合中,使用定时任务对当前服务下的所有实例建立心跳检测机制,基于数据一致性协议服务数据进行同步

Sentinel 的主要功能

1.流量控制

sentinel可以根据需要把随机的请求调整成合适的形式

2.熔断降级

检测到调用链路中某个资源出现不稳定的表现 (如: 请求响应时间长或者异常比例升高),则对这人资源的调用进行限制,让请求快速失败,避免影响到其它的资源导致级联故障sentient对熔断提供了两种方案:1: 通过并发线程数进行限制2: 通过响应时间对资源进行降级。通过响应时间来快速降级不稳定的资源,当依赖的资源出现响应故障后,所有对该资源的访问都会被直接拒绝,直到符合指定的时间窗口之后才会重新回复

与hystrix:相同点: 原则是一致的,当一个资源出现问题时快速让其失败,不波及到其他服区别:hystrix采用的是线程池的隔离方式,优点是做到了资源之间的隔离,缺点是增加了线程切换成本sentinel 采用的是通过并发线程的数量和响应时间来对资源做限制

3.系统负载保护

当系统负载较高的时候,还持续进行访问,可能导致系统崩溃,无法响应,在集群环境下,会把本应当前机器成灾的流量转发到其他的机器上去,如果其他机器也处于一个边缘状态,sentinel会提供对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围内处理最多的请求


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
29天前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
|
23天前
|
人工智能 前端开发 Java
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
本文介绍了如何使用 **Spring Cloud Alibaba AI** 构建基于 Spring Boot 和 uni-app 的聊天机器人应用。主要内容包括:Spring Cloud Alibaba AI 的概念与功能,使用前的准备工作(如 JDK 17+、Spring Boot 3.0+ 及通义 API-KEY),详细实操步骤(涵盖前后端开发工具、组件选择、功能分析及关键代码示例)。最终展示了如何成功实现具备基本聊天功能的 AI 应用,帮助读者快速搭建智能聊天系统并探索更多高级功能。
174 2
【实操】Spring Cloud Alibaba AI,阿里AI这不得玩一下(含前后端源码)
|
1月前
|
缓存 NoSQL Java
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
Spring Cache 是 Spring 提供的简易缓存方案,支持本地与 Redis 缓存。通过添加 `spring-boot-starter-data-redis` 和 `spring-boot-starter-cache` 依赖,并使用 `@EnableCaching` 开启缓存功能。JetCache 由阿里开源,功能更丰富,支持多级缓存和异步 API,通过引入 `jetcache-starter-redis` 依赖并配置 YAML 文件启用。Layering Cache 则提供分层缓存机制,需引入 `layering-cache-starter` 依赖并使用特定注解实现缓存逻辑。
247 1
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
|
1月前
|
Java 微服务 Spring
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
文章介绍了如何利用Spring Cloud Alibaba快速构建大型电商系统的分布式微服务,包括服务限流降级等主要功能的实现,并通过注解和配置简化了Spring Cloud应用的接入和搭建过程。
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
|
2月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14609 24
|
2月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
290 15
|
2月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
61 3
|
1月前
|
Dubbo Java 调度
揭秘!Spring Cloud Alibaba的超级力量——如何轻松驾驭分布式定时任务调度?
【8月更文挑战第20天】在现代微服务架构中,Spring Cloud Alibaba通过集成分布式定时任务调度功能解决了一致性和可靠性挑战。它利用TimerX实现任务的分布式编排与调度,并通过`@SchedulerLock`确保任务不被重复执行。示例代码展示了如何配置定时任务及其分布式锁,以实现每5秒仅由一个节点执行任务,适合构建高可用的微服务系统。
47 0
|
2月前
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
145 5