微服务八股
1.单体架构优缺点
优点:结构简单,部署简单
缺点:1.团队协作成本高:合并所有模块代码合并到一个分支,代码冲突率增加,团队协作成本增加。
2.系统发布效率低:任何模块变更都需要发布整个系统,任何一处出现问题都会导致发布失败,往往一次发布需要数十分钟甚至数小时。
3.扩展困难,在单体架构中,所有功能紧密集成,这意味着当某一部分(如订单处理)需要更多资源时,整个系统必须一起扩展。例如,在双十一期间订单量激增,不仅订单接口需要更多支持,支付接口也是如此。但由于采用了单体架构,我们不能单独扩展这些服务,而是需要增加整个系统的资源或者部署更多服务器节点,这可能会导致其他部分资源的浪费。
2.谈谈你对微服务的理解
单体架构,耦合度高,并发量低微服务,是一种架构的设计思想SpringCloud是微服务架构的一套具体解决方案SpringBoot是快速搭建基于Spring的环境微服务框架微服务和Springboot:微服务中的单个服务可以基于Springboot快速开发SpringCloud和Springboot:SpringCloud是基于SpringBoot开发的,所以SpringCloud依赖SpringBoot
分布式框架对业务进行拆分,每个业务作为一个模块,在不同机器上运行,通过网络相连,大大提高并发能力,但是粒度较高
微服务是分布式框架一种,粒度比较低,具有单一职责(每个微服务专注于执行单一业务功能),团队自治(每个微服务由一个十人左右小团队负责,包括开发、测试、部署和运维等全过程),服务自治(每个微服务都是独立的,可以独立部署,拓展和维护,拥有自己的数据库实例,隔离性强,高内聚低耦合)
3.SpringBoot和SpringCloud,请你谈谈对他们的理解?
SpringCloud是微服务架构的一套具体解决方案
SpringBoot是快速搭建基于Spring的环境
SpringCloud和Springboot的关系是SpringCloud是基于SpringBoot开发的,所以SpringCloud依赖SpringBoot,每个微服务是一个SpringBoot工程
4.你们Spring Cloud用的什么版本?
Spring Cloud 2021.0.x以及Spring Boot 2.7.x版本
5.说几个Java远程调用的技术?你们项目用的什么技术?
微服务之间远程调用就是RPC(Remote Procedure Call) 比如RestTemplate或者OpenReign,我们项目用的是OpenReign
6.如何使用nginx实现负载均衡?
服务端负载均衡的做法,即客户端请求nginx(服务端),由nginx负载均衡器完成将请求转发到具体的服务实例
(客户端负载均衡,客户端自己做负载均衡)
7.Nginx是反向代理,为什么叫反向代理?
正向代理(vpn):
正向代理是客户端(通常是浏览器)通过代理服务器请求目标服务器的资源。客户端知道目标服务器的地址,但请求会通过代理服务器进行转发。代理服务器替代客户端向目标服务器发起请求。
客户端 → 正向代理 → 目标服务器
客户端是请求发起者,代理服务器代表客户端发出请求并返回响应给客户端。
反向代理(nginx):
反向代理是代理服务器代表服务器端接收客户端请求并将请求转发到一个或多个后端服务器。客户端并不知道后端服务器的具体信息,它只与反向代理服务器进行通信。
客户端 → 反向代理 → 目标服务器
客户端只知道代理服务器的地址,代理服务器接受客户端的请求并将请求转发给实际的后端服务器。客户端与后端服务器之间没有直接联系。
8.说一下服务注册与发现流程?
nacos是注册中心。
服务注册与发现流程如下:
- 服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心
- 调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署)
- 调用者作为客户端自己通过负载均衡算法挑选一个服务提供者实例进行远程调用,即客户端负载均衡
- 调用者向该实例发起远程调用
当服务提供者的实例宕机或者启动新实例时,调用者如何得知呢?
- 服务提供者会定期向注册中心发送请求,报告自己的健康状态(心跳请求)
- 当注册中心长时间收不到提供者的心跳时,会认为该实例宕机,将其从服务的实例列表中剔除
- 当服务有新实例启动时,会发送注册服务请求,其信息会被记录在注册中心的服务实例列表
- 当注册中心服务列表变更时,会主动通知微服务,更新本地服务列表
![]()


浙公网安备 33010602011771号