NodeJS全栈开发面试题解说——P10微服务架构(Node.js + 多服务协作)

[复制链接]
发表于 2025-7-1 13:15:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
✅ 10.1 单体架构和微服务的主要区别是什么?

维度单体架构微服务架构模块组织所有功能打包在一个代码仓库中拆分为多个独立服务摆设方式摆设一次包含全部逻辑各服务独立摆设、独立扩缩容开发协作多人协作易辩论团队按服务划分,职责清晰可维护性功能多时变得复杂,修改风险大单个服务小巧,便于维护和迭代技术选型通常限定于单一技术栈各服务可用不同技术栈(polyglot)缺点不易扩展、摆设慢、耦合严重运维复杂、服务管理本钱高

✅ 10.2 微服务之间如何通讯?同步与异步方式分别是什么?

🔹 同步通讯(常用):



  • HTTP / REST API(最常见)
  • gRPC(高性能、结构化)
🔹 异步通讯:



  • 消息队列:如 RabbitMQ、Kafka、Redis Pub/Sub
  • 事件驱动架构(EDA):服务发布事件,其他服务监听处置处罚
✅ 选择建议:



  • 实时哀求场景 → 同步(如:下单、查询用户)
  • 解耦+高并发处置处罚 → 异步(如:发短信、订单通知、日记写入)

✅ 10.3 如何做服务注册与发现?你用过哪些方案?

在大型微服务体系中,服务数量多、地址动态变革,需注册中心协调。
✅ 常见方案:

工具分析ConsulHashiCorp 出品,支持康健查抄EurekaNetflix 出品,SpringCloud 默认使用etcd / ZookeeperCAP 选 P,K8s 内部注册服务Nacos阿里开源,适配 SpringCloud
🛠 使用方式:


  • 服务启动时向注册中心注册(服务名 + IP + 端口)
  • 消费者根据服务名获取地址列表,实现负载均衡调用

✅ 10.4 如何处置处罚分布式事务问题?常看法决方案有哪些?

在多个微服务协同处置处罚一个业务哀求时,数据同等性成为挑战。
✅ 解决方案:

名称形貌代表库/框架2PC两阶段提交(强同等)XA、AtomikosTCCTry-Confirm-Cancel,需实现三个接口Seata TCC 模式SAGA长事务拆分为本地事务 + 补偿机制(最终同等)Seata Saga、自实现事务消息操作数据库 + 发送消息(半消息 +确认)RocketMQ 事务消息
🚨 Node.js 中可用计谋:



  • 事务消息 + 重试机制
  • 自定义 SAGA 模式(数据库操作 + 补偿接口)
  • 使用可靠消息服务(如 RabbitMQ + 补偿处置处罚)

✅ 10.5 如何实现服务间的认证授权?使用了 JWT、API Key 还是其他方案?

✅ 主要方案:

方式形貌使用场景JWT携带用户身份和权限信息,可被多个服务校验用户登录态在多个服务间透传API Key为每个服务/第三方分配独立访问凭据内部服务调用、开放平台 APIOAuth2实用于用户授权第三方体系访问开放授权(微信/Google 登录)mTLS双向证书验证,确保服务身份高安全场景,如银行、支付体系
   多数微服务体系使用 JWT + 内部签名校验,搭配 API 网关统一验证
  
✅ 10.6 你怎么处置处罚服务之间的依赖关系?如何制止耦合?

✅ 降低耦合的计谋:



  • 使用接口约定(API schema):如 OpenAPI / Swagger
  • 服务编排层(如 BFF)负责协调多个服务调用
  • 通过事件驱动解耦:一个服务完成后发布事件,其他服务订阅处置处罚
  • 定义范畴界限(DDD):每个服务聚焦自己的业务范畴

✅ 10.7 如何做服务熔断、限流、降级?你用过哪些中间件?

🔒 熔断(Circuit Breaker):



  • 防止调用故障服务造成连锁反应
  • 工具:opossum(Node.js 熔断器)
🚦 限流(Rate Limiting):



  • 限定哀求频率
  • 工具:express-rate-limit、Nginx 限速、Redis 计数器
📉 降级(Fallback):



  • 某服务不可用时返回默认数据或提示稍后重试
  • 可共同熔断器一起实现 fallback 回调

✅ 10.8 如何监控监控整个微服务体系的康健状态?用什么工具?

✅ 监控监控指标:



  • 每个服务的 CPU / 内存 / QPS / 响应时间
  • 接口错误率、失败哀求报警
  • 服务是否存活(康健查抄)
✅ 工具保举:

工具分析Prometheus拉取指标数据,共同 Grafana 展示Grafana可视化界面、设置报警规则OpenTelemetry全链路追踪、服务调用链分析Jaeger服务链路追踪PM2 + KeymetricsNode.js 特化监控监控

✅ 10.9 微服务摆设中你是如何组织目录结构和设置的?

✅ 一般组织方式:

  1. /services
  2.   /auth-service
  3.   /user-service
  4.   /order-service
  5.   /shared
  6. /docker
  7.   docker-compose.yml
  8. .env
复制代码


  • 每个服务单独 repo 或 mono-repo 中一个文件夹
  • 设置统一放 .env / config 模块中,使用 dotenv 管理
  • 使用 docker-compose 启动多服务

✅ 10.10 NestJS 如何支持微服务?你用过它的 @Microservice() 装饰器吗?

NestJS 内置微服务支持,通过以下方式实现不同协议的服务。
✅ 微服务通讯协议支持:



  • TCP(默认)
  • Redis
  • NATS
  • MQTT
  • Kafka
  • gRPC
✅ 使用方式:

  1. const app = await NestFactory.createMicroservice(AppModule, {
  2.   transport: Transport.TCP,
  3.   options: { host: '127.0.0.1', port: 3001 },
  4. });
  5. app.listen();
复制代码
✅ 消息处置处罚:

  1. @MessagePattern('get_user')
  2. handleUser(@Payload() data: any) {
  3.   return this.userService.findUser(data.id);
  4. }
复制代码
  @MessagePattern() 是微服务专用装饰器,用于监听消息主题,替代 HTTP 的 @Get()、@Post()
  
✅ 总结表格

编号关键知识点核心工具/关键词10.1单体 vs 微服务模块拆分、独立摆设10.2通讯方式REST / gRPC / MQ10.3注册与发现Consul / Eureka / Nacos10.4分布式事务TCC / SAGA / 事务消息10.5鉴权方案JWT / API Key / OAuth210.6解耦计谋OpenAPI / 事件驱动 / BFF10.7熔断限流降级opossum / express-rate-limit / Redis10.8服务监控Prometheus / Grafana / Jaeger10.9项目结构与设置管理Mono-repo / Docker / dotenv10.10NestJS 微服务@Microservice() / @MessagePattern()


回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表