回答重点在 Spring Cloud 架构中,有很多种可以选择的 API 网关方案,主要如下:
1)Spring Cloud Gateway:这个应该是现在 Spring Cloud 微服务开发中使用比较广泛的,也是 Spring 大力推荐的,其基于非阻塞的 WebFlux 响应式编程框架,充分发挥了响应式编程的优势以及特性,其提供了流量染色、路由转发、流量控制、服务熔断等功能,并且 Spr...
回答重点Spring Cloud Zuul 是 Spring Cloud 官方早期默认推荐的网关组件,不过其由于 2020 年 12 月开始已经停止维护了,其现在逐渐被 Spring Cloud Gateway 所取代。
Zuul 提供了鉴权、路由、限流等功能,可以与 Spring Cloud 的其他组件,比如说 Eureka、Ribbon、Hystrix、Feign 等组件配合实现,实现服...
回答重点JVM 的主要组成部分包括 类加载器子系统(ClassLoader)、运行时数据区(Runtime Data Area)、执行引擎(Execution Engine) 以及 本地方法接口(Native Interface,JNI)。
我们要知道Java 虚拟机(JVM)是一个运行 Java 程序的虚拟环境,它负责将 Java 字节码转换为机器码并执行。
然后我们再理解型的记忆上...
回答重点Spring Cloud Gateway 是 Spring Cloud 开源的网关组件,其使用了 WebFlux 框架,充分发挥了响应式编程的特性以及优点,其底层使用了 Netty 作为通信框架,并且包含了 Spring framework 5、SpringBoot 2 以及 Project Reactor 等技术,适配 Spring Cloud 生态体系。
在微服务架构中充当着前端...
回答重点选择 Spring Cloud Gateway 的原因主要有两个:
1)以前用得比较多的是 Spring Cloud 官方开源的 Zuul,其用得比较多的还是 1.0 的版本,不过 1.0 版本 Netflix 很早就宣布进入维护状态了,虽然 Zuul 已经出了 2.0 版本,但是 Spring Cloud 官方团队好像没有整合的计划,并且 Netflix 很多相关的组件,如 Eur...
回答重点API 网关是位于客户端与后端服务之间的一层,充当所有客户端请求的统一入口,负责路由请求到正确的服务,并提供认证与授权、负载均衡、限流、缓存、日志记录等功能。
API 网关的作用简化客户端调用:
统一入口:API 网关提供了单一入口,客户端只需与网关交互,而不需要了解后端服务的具体部署位置和接口细节,从而简化了客户端的调用逻辑。
请求聚合:在需要调用多个后端服务时,API 网关可以...
回答重点令牌桶算法是一种流量控制算法,用于限制系统的访问频率。该算法允许以固定的速率向“桶”中加入令牌,处理请求时消耗桶中的令牌。当桶中的令牌耗尽时,后续请求会被拒绝或延迟处理。
在 Java 中可以使用基于 Guava 的 RateLimiter 实现令牌桶算法,可以有效控制单用户的访问频率,避免恶意行为。
令牌桶算法工作原理令牌桶算法的核心思想是通过一个“桶”来控制数据流量的速率:
1)...
回答重点在分布式系统中,服务的数量通常会有很多,而且规模还不是一般地大,与此同时,服务的部署和变化也会很频繁。因此,如果要依赖人工去维护这些服务的关系,实现服务的管理以及调用就会变得非常困难。
服务注册与发现的作用就是为了解决这个问题,它通过注册中心来维护服务生产者以及服务消费者之间的关系。当服务启动之后,其就会向注册中心注册自己的信息,比如服务名称、服务端口、服务的 IP 地址等,当服务消...
回答重点配置中心是一个用于配置集中化管理且支持动态更新、分发配置文件的工具(服务)。
它实现了配置的统一管理和动态刷新。当配置信息发生变化时,配置中心可以自动通知服务实例进行配置更新,这样就可以实例无需重启即可应用最新的配置,从一定程度上减少了系统访问的空窗期,非常灵活方便。
常见的配置中心:
Spring Cloud Config:Spring 提供的分布式配置管理工具,支持从 Git...
回答重点在微服务系统中,少则五六个服务,多则上百个服务,如果某个环节出现问题了,一次调用可能涉及到很多服务,如果服务之间的日志没有关联,那么排查起来非常困难,这个时候就需要链路追踪。
链路追踪可以可视化地追踪请求从一个微服务到另一个微服务的调用情况,从而帮助问题的排查。另外一个方面就是链路追踪还可以帮助优化性能,可视化服务之间的依赖关系,并进行服务的监控与报警。
简单的实现就是在日志中定义一...
回答重点Nacos 配置中心的实现原理可以分为以下几个核心部分:
1)配置的存储:
企业内 Nacos 一般会使用数据库(如 MySQL)来存储配置数据。配置数据是以键值对的形式存储的,每个配置项对应一个数据 ID(Data ID),并且支持通过 Namespace(命名空间)、Group(组)来进行配置的隔离与分类。
配置存储层在 Nacos 集群的任意节点都可以进行读写,通过多副本的数...
回答重点Spring Cloud 的优点是:集成度高、生态丰富、可扩展性强、功能全面。
Spring Cloud 的缺点是:学习曲线陡峭、有一定的性能开销、组件迭代快版本多、管理复杂。
扩展知识优点细化
集成度高:Spring Cloud 集成了多个成熟的微服务组件(如 Eureka、Zuul、Ribbon、Hystrix、Sleuth 等),与 Spring Boot 无缝结合,开发者可以...
回答重点Spring Cloud 主要由四部分组成:
一、服务注册与发现
1)Eureka 服务注册中心:Eureka 作为服务注册中心,允许服务实例动态加入或离开集群。其他服务可以通过Eureka服务器查询可用的服务实例,并进行负载均衡和故障转移。
2)Consul 服务发现与配置:提供服务发现和配置管理。
二、负载均衡
1)Ribbon 负载均衡器:Ribbon 基于 HTTP 和 TC...
回答重点Spring Boot 是一个用于简化 Spring 应用程序开发的框架。它的主要目标是减少 Spring 应用程序的配置和开发复杂性。
而 Spring Cloud 是基于 Spring Boot 的,因此在使用 Spring Cloud 构建微服务时,必须先使用 Spring Boot 来开发基础的应用。Spring Boot 提供的基础功能和自动配置是 Spring Cloud...
回答重点微服务(Micreoservies)是一种软件架构风格,它的主要目的就是将一个复杂应用程序拆分成多个职责单一的服务。
微服务的核心思想是“单一职责原则”,即每个服务专注于完成一个特定的任务,确保服务的高内聚性和低耦合性。
这会使得开发、部署、维护更加灵活和高效。针对不同服务可以进行不同技术或者语言选型,比如机器学习可以用 Python、一些嵌入式可以用 c++、其他可以用 Java ...
回答重点单体应用、SOA 和微服务架构都是不同的架构风格,适用于不同的情况:
单体应用,其对外是一个整体,所有的功能都打包在同一个应用上。这种架构风格方便测试和容易部署,不过有一个点,当发生故障的时候可能会导致服务整体不可用,容易发生单点故障,所以灵活性和可维护性并不是很高。
SOA 是一种面向服务的架构风格,将系统划分为多个独立的服务。这些服务可以通过网络调用,并且可以实现跨平台、跨语言...
回答重点Spring Cloud Config 为分布式系统外部化配置提供了服务端以及客户端的支持,简单来说就是一个配置中心,其主要包括以下两个部分的内容:Config Server(Config 服务端)和 Config Client(Config 客户端)。
Config Server 是一个可横向扩展,并且集中式配置的服务器,主要用于集中管理服务各种环境下的配置,然后默认使用 Git...
回答重点我们服务采用的方案是 ELK 那套,Logstash 主要负责从微服务集群采集日志,然后将日志数据发送到 ElasticSearch,ES 主要负责数据的存储和检索,最后 Kibana 就负责日志数据的可视化分析。
流程如下图所示:
ElasticSearch: ElasticSearch 是一个分布式搜索和分析引擎,可以存储和索引大量的日志数据,他提供了快速的搜索和聚合功能...
回答重点一般在跨多个数据库、或者不同服务的情况下需要用到分布式事务,比如订单服务和库存服务,下订单和扣库存属于不同服务的方法,因此本地事务无法保证一致性,需要引入分布式服务。
分布式事务是由多个本地事务组成的,分布式事务跨越了多设备,之间又经历的复杂的网络,可想而知想要实现严格的事务道路阻且长。
常见的分布式事务方案:
2PC:基于两阶段提交(2PC,Two-Phase Commit)的分...
回答重点DDD 全名叫做 Domain-driven design,即领域驱动设计,它是一种软件开发方法,其主要目的就是让开发人员和领域专家可以更好地协作,从而开发出满足业务需求的系统。
DDD 的关键概念包括领域模型和限界上下文。
领域模型描述了业务领域的规则和逻辑,让开发人员能够更好地理解业务需求。
限界上下文则定义了一个特定的业务领域内的模型和代码,使得其可以独立于其他上下文进行开发...
回答重点Seata(Simple Extensible Autonomous Transaction Architecture) 是阿里巴巴开源的一款分布式事务解决方案。
其主要是为了解决分布式系统中全局事务的一致性问题。Seata 提供了多种事务模式,包括 AT、TCC、Saga 以及 XA 模式。
在 Seata 中有三个很重要的角色:事务协调者(TC)、事务管理者(TM)以及事务的作业...
回答重点Seata 目前支持四种事务模式,分别是 AT、TCC、Saga 以及 XA 模式:
AT 模式:通过代理数据库操作来实现分布式事务管理。Seata 在业务操作前后自动生成回滚日志,在提交时直接提交本地事务,在回滚时利用日志进行数据的还原。
TCC 模式:是一种两阶段提交。将一个操作拆分为三个步骤:Try(预留资源)、Confirm(确认操作)、Cancel(回滚操作)。开发者需要...
回答重点Seata 主要通过三大核心组件来协调全局事务的执行。
事务协调器(Transaction Coordinator,TC):TC 负责管理全局事务的生命周期,记录全局事务和分支事务的状态,并协调全局事务的提交和回滚。TC 是 Seata 的中心控制器,所有的分布式事务请求都会通过 TC 进行管理。
作用:TC 保证各个分支事务在全局事务中的状态一致性。它记录每个事务分支的状态信息,...
回答重点Seata 一共有四种事务模式,不同模式下回滚策略是不一样的。
AT 模式的回滚机制:在 AT 模式中,Seata 的回滚机制依赖于数据库中的 undo_log 表。每当执行数据库操作(如 INSERT、UPDATE、DELETE)时,Seata 的 RM 会在数据库中记录操作前的数据快照,并存储在 undo_log 中。这个过程在业务操作的本地事务提交前完成。
如果全局事务中任一分...
回答重点分布式系统和微服务架构是两个相关但不同的概念,它们的注重点其实不太一样。
分布式系统:它是由多台计算机或多节点组成的系统,各节点之间通过网络进行通信和协作,共同完成一个或多个共享的任务。
也就是说分布式的各个节点其实目标是一致的,之所以要分布式只是为了有更好的能力,能更快、更高效地承接任务。
比如常见的分布式文件系统、分布式数据库。
微服务架构:微服务,其实是一种服务的架构风格...
回答重点Eureka:是由 Netflix 开源的服务注册与发现框架,属于 Spring Cloud 生态的一部分。
特点:
采用 AP 原则,即强调系统的可用性和分区容忍性,允许短暂的一致性延迟。
易于与 Spring Cloud 集成,提供良好的服务发现能力。
支持 服务注册、心跳检测、服务下线 和 服务剔除。
自我保护机制,在网络出现短暂问题时,不立即剔除服务,提升系统的容错性。
...
回答重点Eureka 是一个 Spring Cloud Netflix 的一款老牌注册中心,设计用于实现云端部署微服务架构中的服务注册与发现功能。这个名字来源于古希腊语,意为“我找到了它”,灵感来源于阿基米德的著名发现故事。
在技术领域,特别是分布式系统中,Eureka 作为一个基于 RESTFul 的服务,主要职责包括:
服务注册:允许服务实例向 Eureka Server 注册自己的信...
回答重点Eureka的实现原理,大概可以从这几个方面来看:
1)服务注册与服务发现:当一个服务实例启动之后,它会向 Eureka Server 发送服务注册请求,将自己的服务信息注册到注册中心中,Eureka Server 收到这些注册信息之后,会将其保存到内存中,提供 Rest 接口供其他服务查询。服务消费者可以通过查询服务实例列表来获取可用的服务作为服务实例,然后实现服务的发现。
2)服...
回答重点SpringCloud 服务注册和发现需要依赖其它注册中心。
项目在启动时,会自动将本身服务的服务名、IP、端口信息通过引入的注册中心依赖注册到服务注册中心的服务端。
扩展知识说到服务注册,我们得先从注册中心讲起。
对于任何注册中心来说,都有客户端和服务端的概念
服务端需要单独部署,用来保存服务实例数据的
客户端就是用来跟服务端通信的SDK,带到Java里面就是一个pom依赖
这...
回答重点Consul 是 HasiCorp 公司用 Golang 开发的一款开源的服务注册中心以及配置中心,提供了服务注册与发现、健康检查、KV 存储、多数据中心支持、DNS 和 HTTP API 接口等功能,而且提供了可视化控制台用于操作。
Consul 的优点有很多:
基于 Raft 协议,比较简洁
支持简单检查,同时支持 HTTP 和 DNS 协议
支持跨数据中心的 WAN 集...