面试题答案
一键面试技术选型
- RPC框架:
- 选择gRPC:gRPC基于HTTP/2协议,具有高效的二进制序列化格式,能有效减少数据传输量,提高传输效率,满足实时性要求。其支持多种编程语言,有利于不同微服务采用合适语言开发,增强扩展性。例如,在电商交易系统中,商品服务可能用Go语言开发,订单服务可能用Java开发,gRPC可无缝支持。
- 不选择Dubbo:虽然Dubbo也是优秀的RPC框架,但gRPC在跨语言和基于HTTP/2协议的性能优势上更契合该场景,Dubbo主要面向Java生态。
- 微服务开发框架:
- 对于Java:选择Spring Cloud Alibaba。它集成了Nacos作为服务注册与发现组件,Nacos支持AP和CP模式切换,可根据电商交易系统不同业务场景灵活选择。同时,其Sentinel组件能实现流量控制、熔断降级等容错处理。
- 对于Go:选择Kratos框架。它具有高性能、轻量级的特点,且内置了服务发现、熔断等功能,便于快速构建微服务。
架构设计
- 服务拆分:
- 按业务功能拆分:将电商交易系统拆分为商品服务、订单服务、支付服务、用户服务等。例如,商品服务负责商品信息的查询、更新等;订单服务处理订单的创建、状态更新等。这样拆分便于独立开发、部署和扩展。
- 粒度把控:在实时性和扩展性要求下,避免微服务粒度过细导致过多的RPC调用开销。例如,将商品库存管理与商品基本信息管理整合在商品服务中,减少不必要的RPC交互。
- 服务注册与发现:
- 采用Nacos:各微服务启动时向Nacos注册自身信息,包括服务地址、端口等。当一个微服务需要调用另一个微服务时,从Nacos获取目标服务的实例列表。Nacos的服务发现机制保证了微服务之间的动态发现与连接,便于服务扩展。
- 健康检查:Nacos定期对注册的微服务进行健康检查,对于不健康的实例及时从服务列表中剔除,确保RPC调用的稳定性。
- 负载均衡:
- 客户端负载均衡:在gRPC客户端集成负载均衡策略,如轮询、随机等。以订单服务调用商品服务为例,客户端根据负载均衡算法从Nacos获取的商品服务实例列表中选择一个实例进行RPC调用,提高系统整体性能。
- 动态调整:根据服务的实时负载情况,动态调整负载均衡策略。如商品服务在促销活动期间负载过高,可调整为权重负载均衡,将更多请求分配到性能较好的实例上。
容错处理
- 超时设置:
- 在每个RPC调用客户端设置合理的超时时间。例如,订单服务调用支付服务进行支付确认时,设置3 - 5秒的超时时间。若超时未收到响应,立即返回错误信息给调用方,避免长时间等待影响实时性。
- 重试机制:
- 对于一些幂等性操作的RPC调用,如查询商品库存,设置重试机制。若第一次调用失败,根据失败原因(如网络抖动)在一定时间间隔后重试,重试次数可设置为3次。
- 熔断降级:
- 熔断:以订单服务调用支付服务为例,当支付服务失败率超过一定阈值(如50%),触发熔断机制,订单服务不再调用支付服务,直接返回错误信息给用户,避免大量无效请求加重支付服务负担。
- 降级:在系统高负载或部分服务不可用时,对一些非核心功能进行降级处理。如在促销活动期间,商品服务中的商品详情图片展示功能可暂时降级为仅展示文字信息,优先保证核心交易功能的实时性和稳定性。