Spring Cloud Alibaba题目

本文涉及的产品
应用型负载均衡 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)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
SpringCloudAlibaba API 开发者
新版-SpringCloud+SpringCloud Alibaba
新版-SpringCloud+SpringCloud Alibaba
|
3月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
定时任务在企业应用中至关重要,常用于异步数据处理、自动化运维等场景。在单体应用中,利用Java的`java.util.Timer`或Spring的`@Scheduled`即可轻松实现。然而,进入微服务架构后,任务可能因多节点并发执行而重复。Spring Cloud Alibaba为此发布了Scheduling模块,提供轻量级、高可用的分布式定时任务解决方案,支持防重复执行、分片运行等功能,并可通过`spring-cloud-starter-alibaba-schedulerx`快速集成。用户可选择基于阿里云SchedulerX托管服务或采用本地开源方案(如ShedLock)
129 1
|
23天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
10天前
|
存储 人工智能 Java
Spring AI Alibaba 配置管理,用 Nacos 就够了
本文通过一些实操案例展示了 Spring AI Alibaba + Nacos 在解决 AI 应用中一系列复杂配置管理挑战的方案,从动态 Prompt 模板的灵活调整、模型参数的即时优化,到敏感信息的安全加密存储。Spring AI Alibaba 简化了对接阿里云通义大模型的流程,内置 Nacos 集成也为开发者提供了无缝衔接云端配置托管的捷径,整体上极大提升了 AI 应用开发的灵活性和响应速度。
105 11
|
1月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
145 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
1月前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
近期,阿里云重磅发布了首款面向 Java 开发者的开源 AI 应用开发框架:Spring AI Alibaba(项目 Github 仓库地址:alibaba/spring-ai-alibaba),Spring AI Alibaba 项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。本文将详细介绍 Spring AI Alibaba 的核心特性,并通过「智能机票助手」的示例直观的展示 Spring AI Alibaba 开发 AI 应用的便利性。示例源
|
1月前
|
人工智能 开发框架 Java
总计 30 万奖金,Spring AI Alibaba 应用框架挑战赛开赛
Spring AI Alibaba 应用框架挑战赛邀请广大开发者参与开源项目的共建,助力项目快速发展,掌握 AI 应用开发模式。大赛分为《支持 Spring AI Alibaba 应用可视化调试与追踪本地工具》和《基于 Flow 的 AI 编排机制设计与实现》两个赛道,总计 30 万奖金。
|
1月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
1月前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
阿里云开源 Spring AI Alibaba,旨在帮助 Java 开发者快速构建 AI 应用,共同构建物理新世界。
|
2月前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
2295 16
下一篇
无影云桌面