论面向服务的架构设计

题源类型未标注
年份/批次
适用项目某互联网公司线上商品交易与运营平台
主题概念面向服务架构是一种粗粒度、松耦合的服务架构,它通过标准化接口把业务能力封装为可复用服务,使服务提供者和服务请求者能够在相对独立的情况下完成协作
常见方法服务提供者、服务请求者、服务注册中心、标准化服务接口和企业服务总线等
已选论文点服务提供者 / 服务注册中心 / 服务请求者
编辑主题 查看原文
背诵模式

论文点

新建论文点
服务提供者 排序:1 编辑
项目位置/技术/需求在业务能力封装方面,我们将商品、订单、库存、支付和运营等核心能力设计为服务提供者,以满足业务能力复用、接口统一和系统松耦合的要求
解决的问题原有系统中,商品活动规则、订单状态处理和库存扣减逻辑混杂在单体应用内部,如果继续沿用这种方式,活动规则调整时容易牵动多个功能模块,开发人员也难以判断修改范围
解决的方法为解决这一问题,我组织项目组按照业务职责划分服务边界,将稳定、可复用的业务能力封装为相对独立的服务,并对外提供统一接口
具体的实现具体实现时,我们为各服务制定接口命名、请求参数、返回码和异常信息规范,服务内部可以使用 MySQL、Redis 等组件处理数据和缓存,但这些实现细节不暴露给调用方
例子以用户提交订单为例,订单服务不直接维护商品详情和库存明细,而是通过标准接口获取商品状态、活动价格和库存可用性,再完成订单创建和状态记录
效果通过这种服务提供者设计,各业务能力的职责更加清晰,调用方只依赖稳定的服务契约,后续新增运营活动或调整库存策略时,可以主要在相关服务内部完成修改,减少对其他业务环节的影响
服务注册中心 排序:2 编辑
项目位置/技术/需求在服务发布和运行管理方面,我们采用服务注册中心来解决服务发布、查找和运行状态管理不统一的问题
解决的问题平台拆分为多个服务后,如果各服务调用方直接维护对方地址、端口和版本信息,一旦发生扩容、迁移或故障切换,就需要频繁修改配置,容易形成新的维护负担
解决的方法为解决这一问题,我们使用 Nacos 作为服务注册中心,各服务启动后自动登记服务名称、实例地址、版本标识和健康状态,调用方按照服务名称查找可用实例,并由注册中心剔除异常节点
具体的实现对外访问则由 Spring Cloud Gateway 统一接入,负责把外部请求路由到已经注册的后端服务
例子以运营后台查询订单处理情况为例,请求先经过网关进入订单相关服务,再由订单服务通过注册中心发现商品、支付等服务并获取必要信息
效果通过服务注册中心,服务的发布、发现和状态管理形成统一机制,调用方不再关心具体部署位置,系统扩容、灰度发布和故障摘除都可以在较小范围内完成,增强了平台的运行弹性和可维护性
服务请求者 排序:3 编辑
项目位置/技术/需求在跨服务业务协同方面,我们将订单、库存、支付、消息和对账等模块设计为服务请求者,使其按照业务流程调用相关服务,满足交易链路清晰和服务协作可控的要求
解决的问题线上交易流程涉及多个业务环节,如果全部写在一个服务中,会导致服务职责过重;如果各服务之间随意相互调用,又会造成调用关系混乱,异常定位困难
解决的方法为解决这一问题,我们明确了服务请求者的调用边界:交易主流程中必须立即返回结果的环节采用同步服务调用,支付回调、消息通知、超时关闭和对账处理等后续工作通过 RocketMQ、xxl-job 等机制异步衔接,并保留接口日志用于问题追踪
具体的实现为解决这一问题,我们明确了服务请求者的调用边界:交易主流程中必须立即返回结果的环节采用同步服务调用,支付回调、消息通知、超时关闭和对账处理等后续工作通过 RocketMQ、xxl-job 等机制异步衔接,并保留接口日志用于问题追踪
例子以用户下单并完成支付为例,订单创建时作为服务请求者调用商品和库存能力完成必要校验,支付结果返回后再驱动订单状态变更,并通知消息和对账相关模块继续处理
效果通过这种服务请求者设计,各服务既能围绕统一业务流程协作,又能保持相对独立,降低了交易链路的耦合度,提高了系统对业务高峰和异常情况的适应能力