MST

星途 面试题库

面试题:微服务架构下如何基于业务边界进行服务拆分

请阐述在微服务架构中,基于业务边界进行服务拆分的具体方法和考虑因素。例如,怎样识别业务模块之间的清晰边界,以及拆分后如何保证各服务间的协作正常?
45.2万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

基于业务边界进行服务拆分的具体方法

  1. 基于业务功能模块拆分:分析业务流程,将紧密相关的功能归为一个服务。例如,电商系统中,用户管理功能(注册、登录、信息修改等)可独立成用户服务;订单管理功能(下单、支付、订单状态跟踪等)形成订单服务。
  2. 基于业务数据归属拆分:根据数据的使用和管理情况拆分。如社交平台,用户资料数据和关系数据(好友关系等)关联紧密,可将围绕这些数据操作的功能整合为一个服务,而内容数据(如发布的文章、图片等)相关功能组成另一个服务。
  3. 基于业务流程阶段拆分:以业务流程的不同阶段为依据。在审批流程中,提交申请阶段、初审阶段、终审阶段可分别拆分成不同的服务,每个服务专注于特定阶段的处理。

识别业务模块之间清晰边界的考虑因素

  1. 业务耦合度:若两个业务模块之间数据交互频繁且紧密依赖,它们应在同一服务内或相邻服务;若交互少、依赖松散,则可拆分。例如,电商系统中商品展示和库存管理,商品展示主要用于前端展示商品信息,库存管理负责库存数量的增减,二者交互相对不频繁,可拆分为不同服务。
  2. 业务变更频率:变更频率差异大的业务模块应拆分。如金融系统中,核心交易规则变更相对谨慎,频率低;而营销活动规则变更频繁,将二者拆分,便于独立维护和迭代,互不影响。
  3. 业务领域知识:不同领域知识对应的业务模块应分开。在医疗系统中,病历管理涉及医疗专业知识和患者信息管理,而财务结算涉及财务领域知识,两者基于不同领域知识,适合拆分为不同服务。

拆分后保证各服务间协作正常的方法

  1. 定义清晰的接口:使用RESTful、gRPC等标准接口协议,明确服务输入输出参数、调用方式等。例如,订单服务调用库存服务查询库存时,库存服务通过RESTful接口提供查询库存的API,订单服务按照接口约定传递商品ID等参数获取库存信息。
  2. 消息队列:用于异步通信,解耦服务间依赖。如电商系统中,用户下单后,订单服务将支付成功消息发送到消息队列,物流服务从队列中获取消息,触发发货流程,避免订单服务和物流服务直接强耦合调用。
  3. 服务治理
    • 服务注册与发现:采用Consul、Eureka等工具,服务启动时向注册中心注册自身信息,调用方从注册中心获取服务地址进行调用。例如,新的评论服务上线,注册到注册中心,商品服务需要获取评论时,从注册中心找到评论服务地址并调用。
    • 熔断与降级:防止服务故障扩散。当某个服务调用失败率过高时,熔断机制开启,后续请求不再调用该服务,直接返回降级处理结果。如支付服务故障时,订单服务快速返回支付繁忙提示,避免大量无效请求积压。
    • 负载均衡:通过Nginx、Ribbon等实现,将请求均匀分配到多个服务实例上,提高服务可用性和性能。例如,多个订单服务实例部署,负载均衡器根据一定算法(如轮询、权重等)将订单请求分配到不同实例。