微服务篇

简介: 本内容整理了Spring Cloud微服务架构中的核心组件、服务注册与发现机制、负载均衡策略、服务容错、限流算法、分布式事务及接口幂等性设计等关键技术点,并结合Nacos、Sentinel、Seata等中间件进行实际应用解析。
  1. Spring Cloud 5大组件有哪些?

候选人

在早期,Spring Cloud的五大组件通常指的是:

  • Eureka:服务注册中心。
  • Ribbon:客户端负载均衡器。
  • Feign:声明式的服务调用。
  • Hystrix:服务熔断器。
  • Zuul/Gateway:API网关。

随着Spring Cloud Alibaba的兴起,我们项目中也融入了一些阿里巴巴的技术组件:

  • 服务注册与配置中心:Nacos。
  • 负载均衡:Ribbon。
  • 服务调用:Feign。
  • 服务保护:Sentinel。
  • API网关:Gateway。


  1. 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?

候选人

服务注册与发现主要包含三个核心功能:服务注册、服务发现和服务状态监控。

我们项目中采用了Eureka作为服务注册中心,它是Spring Cloud体系中的一个关键组件。

  • 服务注册:服务提供者将自己的信息(如服务名称、IP、端口等)注册到Eureka。
  • 服务发现:消费者从Eureka获取服务列表信息,并利用负载均衡算法选择一个服务进行调用。
  • 服务监控:服务提供者定期向Eureka发送心跳以报告健康状态;如果Eureka在一定时间内未接收到心跳,将服务实例从注册中心剔除。


  1. 我看你之前也用过nacos,你能说下nacos与eureka的区别?

候选人

在使用Nacos作为注册中心的项目中,我注意到Nacos与Eureka的共同点和区别:

  • 共同点:两者都支持服务注册与发现,以及心跳检测作为健康检查机制。
  • 区别
  • Nacos支持服务端主动检测服务提供者状态,而Eureka依赖客户端心跳。
  • Nacos区分临时实例和非临时实例,采用不同的健康检查策略。
  • Nacos支持服务列表变更的消息推送,使服务更新更及时。
  • Nacos集群默认采用AP模式,但在存在非临时实例时,会采用CP模式;而Eureka始终采用AP模式。


  1. 你们项目负载均衡如何实现的?

候选人

在服务调用过程中,我们使用Spring Cloud的Ribbon组件来实现客户端负载均衡。Feign客户端在底层已经集成了Ribbon,使得使用非常简便。


当发起远程调用时,Ribbon首先从注册中心获取服务地址列表,然后根据预设的路由策略选择一个服务实例进行调用,常用的策略是轮询。


  1. Ribbon负载均衡策略有哪些?

候选人

Ribbon提供了多种负载均衡策略,包括:

  • RoundRobinRule:简单的轮询策略。
  • WeightedResponseTimeRule:根据响应时间加权选择服务器。
  • RandomRule:随机选择服务器。
  • ZoneAvoidanceRule:区域感知的负载均衡,优先选择同一区域中可用的服务器。


  1. 如果想自定义负载均衡策略如何实现?

候选人

自定义Ribbon负载均衡策略有两种方式:

  1. 创建一个类实现IRule接口,这将定义全局的负载均衡策略。
  2. 在客户端配置文件中指定特定服务调用的负载均衡策略,这将仅对该服务生效。


  1. 什么是服务雪崩,怎么解决这个问题?

候选人

服务雪崩是指一个服务的失败导致整个链路的服务相继失败。我们通常通过服务降级和服务熔断来解决这个问题:

  • 服务降级:在请求量突增时,主动降低服务的级别,确保核心服务可用。
  • 服务熔断:当服务调用失败率达到一定阈值时,熔断机制会启动,防止系统过载。


  1. 你们的微服务是怎么监控的?

候选人

我们项目中采用了SkyWalking进行微服务监控:

  1. SkyWalking能够监控接口、服务和物理实例的状态,帮助我们识别和优化慢服务。
  2. 我们还设置了告警规则,一旦检测到异常,系统会通过短信或邮件通知相关负责人。


  1. 你们项目中有没有做过限流?怎么做的?

候选人

在我们的项目中,由于面临可能的突发流量,我们采用了限流策略:

  • 版本1:使用Nginx进行限流,通过漏桶算法控制请求处理速率,按照IP进行限流。
  • 版本2:使用Spring Cloud GatewayRequestRateLimiter过滤器进行限流,采用令牌桶算法,可以基于IP或路径进行限流。


  1. 限流常见的算法有哪些?

候选人

常见的限流算法包括:

  • 漏桶算法:以固定速率处理请求,平滑突发流量。
  • 令牌桶算法:按照一定速率生成令牌,请求在获得令牌后才被处理,适用于请求量有波动的场景。


  1. 什么是CAP理论?

候选人

CAP理论是分布式系统设计的基础理论,包含一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。在网络分区发生时,系统只能在一致性和可用性之间选择其一。


  1. 为什么分布式系统中无法同时保证一致性和可用性?

候选人

在分布式系统中,为了保证分区容错性,我们通常需要在一致性和可用性之间做出选择。如果系统优先保证一致性,可能需要牺牲可用性,反之亦然。


  1. 什么是BASE理论?

候选人

BASE理论是分布式系统设计中对CAP理论中AP方案的延伸,强调通过基本可用、软状态和最终一致性来实现系统设计。


  1. 你们采用哪种分布式事务解决方案?

候选人

我们项目中使用了Seata的AT模式来解决分布式事务问题。AT模式通过记录业务数据的变更日志来保证事务的最终一致性。


  1. 分布式服务的接口幂等性如何设计?

候选人

我们通过Token和Redis来实现接口幂等性。用户操作时,系统生成一个Token并存储在Redis中,当用户提交操作时,系统会验证Token的存在性,并在验证通过后删除Token,确保每个Token只被处理一次。


  1. xxl-job路由策略有哪些?

候选人

xxl-job支持多种路由策略,包括轮询、故障转移和分片广播等。


  1. xxl-job任务执行失败怎么解决?

候选人

面对任务执行失败,我们可以:

  1. 选择故障转移路由策略,优先使用健康的实例执行任务。
  2. 设置任务重试次数。
  3. 通过日志记录和邮件告警通知相关负责人。


  1. 如果有大数据量的任务同时都需要执行,怎么解决?

候选人

我们可以通过部署多个实例并使用分片广播路由策略来分散任务负载。在任务执行代码中,根据分片信息和总数对任务进行分配。


目录
相关文章
|
监控 负载均衡 算法
构建高效微服务架构的五大核心组件
【4月更文挑战第6天】随着现代业务需求的多样化和复杂性增加,传统的单体应用已无法满足快速迭代与灵活部署的需求。微服务架构应运而生,以其高度模块化、独立部署和可伸缩性成为企业转型的关键。本文聚焦于构建高效微服务架构的核心组件,从服务发现、配置管理、负载均衡、容错处理到服务监控五个方面进行深入剖析,旨在提供一套全面的技术指南以支持后端开发的最佳实践。
|
SQL 关系型数据库 数据库
学习分布式事务Seata看这一篇就够了,建议收藏
学习分布式事务Seata看这一篇就够了,建议收藏
19621 2
|
4月前
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
452 0
|
4月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
537 1
|
8月前
|
负载均衡 Java Nacos
Spring Cloud五大组件
Spring Cloud五大组件
|
3月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
483 64
|
4月前
|
SQL 缓存 Java
MyBatis场景面试题
MyBatis与MyBatisPlus均属ORM框架,前者擅长复杂SQL及动态查询,后者封装API简化单表操作。常用XML标签如if、foreach提升SQL灵活性。MyBatis支持一级(SqlSession级)与二级(NameSpace级)缓存,提升查询效率。#{}防SQL注入,${}用于动态表名等场景。
268 62
|
4月前
|
负载均衡 算法 Java
5-微服务篇
Spring Boot 是一个基于 Spring 的快速开发框架,其核心功能包括自动装配和起步依赖。自动装配通过 @SpringBootApplication 注解实现,结合 @EnableAutoConfiguration 和 spring.factories 配置文件,按条件加载 Bean。启动流程分为初始化、运行和自动化配置三个阶段。
468 0
|
4月前
|
人工智能 Cloud Native Java
Java 技术栈企业级应用开发全流程
本指南通过构建企业级电商系统,全面解析现代化Java技术栈实战应用。涵盖Spring Boot 3、微服务架构、云原生部署、服务治理、监控可观测性及AI集成,助开发者掌握全流程开发技能,打造高效可扩展的企业级应用。
310 0
Java 技术栈企业级应用开发全流程
|
4月前
|
NoSQL Redis Docker
第十章 常用组件
本资料涵盖技术知识点,包括Nginx原理与应用、分布式事务处理、分布式锁机制、Redis数据管理、消息队列、Elasticsearch搜索、Docker容器化、Git版本控制及Maven项目管理,适用于Java后端开发面试复习。
87 0