【面试】Java最新面试题资深开发-微服务篇(2)

问题九:微服务

  1. 什么是微服务架构?它与单体架构相比有哪些优势和劣势?
  2. 解释一下服务发现和服务注册是什么,它们在微服务中的作用是什么?
  3. 什么是API网关(API Gateway)?在微服务中它有何作用?
  4. 微服务中的服务熔断是什么?为什么需要熔断机制?
  5. 什么是容器化技术(如Docker)?在微服务中如何应用容器化技术?
  6. 什么是服务治理(Service Governance)?为什么它在微服务中很重要?
3. 什么是API网关(API Gateway)?在微服务中它有何作用?

API网关(API Gateway):

API网关是微服务架构中的一个关键组件,它充当了微服务系统的入口点,负责处理所有的外部请求、路由请求到相应的微服务实例,并提供一些附加功能,如身份验证、授权、监控、负载均衡等。API网关提供了一个单一的入口,简化了客户端与微服务之间的通信。

API网关在微服务中的作用:

  1. 请求路由和转发: API网关接收外部请求并将其路由到相应的微服务实例。通过配置路由规则,可以实现请求的灵活路由和流量控制。

  2. 协议转换: 外部请求可能使用不同的协议,而微服务内部可能使用统一的协议。API网关可以进行协议转换,确保外部请求与微服务之间的通信格式一致。

  3. 身份验证和授权: API网关可以负责验证请求的身份,并根据授权策略决定是否允许请求访问相应的微服务。这有助于确保系统的安全性。

  4. 负载均衡: 在微服务架构中,可能存在多个相同服务的实例。API网关可以实现负载均衡,将请求均匀分发到不同的实例上,提高系统的性能和可用性。

  5. 监控和日志: API网关可以记录请求的日志,收集系统性能指标,帮助进行监控和故障排查。这对于系统运维和性能优化非常重要。

  6. 缓存: API网关可以实现对常用数据的缓存,减轻微服务的负担,提高响应速度。

案例:

假设一个电子商务平台使用微服务架构,其中包括用户服务、商品服务、订单服务等。API网关可以负责以下任务:

  • 接收来自移动端和Web端的用户请求。
  • 根据请求的路径将请求路由到相应的微服务,例如,/user请求路由到用户服务,/product请求路由到商品服务。
  • 执行身份验证,确保用户请求是合法的。
  • 根据请求进行负载均衡,将请求分发到不同的微服务实例。
  • 记录请求的日志,监控系统的性能。
  • 提供缓存服务,对一些商品信息进行缓存,减轻商品服务的压力。

通过引入API网关,系统的各个微服务可以专注于业务逻辑,而API网关则负责处理与外部系统的通信和一些共享的横切关注点,提高了系统的可维护性和灵活性。

4. 微服务中的服务熔断是什么?为什么需要熔断机制?

服务熔断(Circuit Breaker):

服务熔断是一种微服务架构中的设计模式,用于处理分布式系统中的故障。它类似于电气电路中的熔断器,当系统中的某个服务出现故障或延迟时,服务熔断可以在一定程度上防止系统的连锁故障。熔断机制通过在服务之间插入熔断器,实时监测服务的调用状况,当异常或故障达到一定阈值时,熔断器会打开,暂停对故障服务的调用,避免因连续失败而导致整个系统崩溃。

为什么需要熔断机制:

  1. 防止连锁故障: 在分布式系统中,一个服务的故障可能会引起对其他服务的连续调用失败,形成连锁故障。熔断机制能够在一定程度上隔离故障,防止故障扩散。

  2. 提高系统稳定性: 通过熔断机制,系统能够快速检测并停止对故障服务的调用,减少了系统因服务故障而导致的不稳定性,提高了整体系统的可用性。

  3. 降级处理: 当系统负载过大或部分服务出现故障时,熔断机制可以采取降级处理策略,提供有限但仍可用的服务,确保系统正常运行。

  4. 提高用户体验: 熔断机制可以在服务出现问题时迅速响应,避免用户长时间等待或遭遇系统崩溃,提高了用户体验。

案例:

假设一个电商平台中有用户服务、商品服务和订单服务。订单服务依赖于用户服务和商品服务。如果用户服务或商品服务出现故障,订单服务可能无法正常工作。通过引入熔断机制,可以在订单服务与用户服务和商品服务之间插入熔断器。

具体案例中,当订单服务检测到用户服务的调用失败率达到一定阈值时,熔断器会打开,停止对用户服务的调用一段时间。在这段时间内,订单服务可以采取降级策略,提供一些默认的或有限的订单功能,而不致于因用户服务故障而导致整个订单服务崩溃。当一段时间后,熔断器可以尝试重新关闭,如果用户服务已经恢复正常,订单服务可以继续正常调用。

通过这种方式,系统能够更好地处理故障情况,防止服务之间的故障扩散,并保证系统在一定程度上的稳定性。

相关推荐
Theodore_10223 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸4 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象5 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了5 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·5 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic6 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王6 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康6 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神6 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_327342737 小时前
Java实现离线身份证号码OCR识别
java·开发语言