业务复杂度的硬核支撑:Spring Cloud体系
B2B系统跟C端零售最大的区别在于业务链条极其冗长,涉及采购、合同、审批、账期、多级定价等复杂模块。Spring Cloud这套微服务体系,说实话,已经成了国内B2B项目的标配。它的服务注册与发现、配置中心、网关路由这些能力,能很好地把庞大业务拆成独立模块。比如你可以把订单服务、库存服务、供应商管理服务分开部署,每个团队只维护自己的部分,互不干扰。
实际项目中,我推荐用Spring Cloud Alibaba这个分支。Nacos做注册中心和配置中心,Sentinel做流量控制和熔断降级,这些组件在B2B的高并发场景下特别管用。举个实际例子,某工业品B2B平台在促销期间,供应商批量报价的请求量暴增,Sentinel的限流规则帮他们稳住了数据库,没让整个系统挂掉。而且这套框架的社区活跃度很高,遇到坑基本都能搜到解决方案。
不过要注意一点,微服务不是银弹。如果你的B2B项目团队只有三五个人,业务量也不大,盲目上Spring Cloud反而增加维护成本。这时候单体应用加合理的模块拆分可能更务实。说到底,框架是为业务服务的,别为了技术而技术。
数据一致性与事务处理的利器:Seata
B2B交易中,数据一致性是绝对不能妥协的底线。订单创建、库存扣减、账户资金变更这些操作,往往跨越多个微服务。如果某个环节失败,必须保证整体回滚。Java生态里,Seata是解决分布式事务问题的开源利器。它支持AT模式、TCC模式、Saga模式,基本覆盖了B2B场景下所有的事务需求。
我参与过一个钢铁B2B平台的项目,订单流程涉及合同生成、物流排期、支付冻结三个独立服务。最初他们用传统的XA协议,性能差得离谱。后来引入Seata的AT模式,通过拦截SQL自动完成回滚,代码侵入性很低,性能提升了一大截。关键是Seata对Spring Cloud和Dubbo都有很好的集成支持,接入成本不高。
但是要注意,Seata也不是包治百病。TCC模式需要手动编写补偿逻辑,对开发人员的要求较高。如果业务场景比较简单,或者你能接受最终一致性,可能用消息队列加本地事件表的方式更轻量。选型时一定得根据实际业务对数据强一致性的要求来定。
权限与认证的灵活方案:Spring Security与OAuth2
B2B系统的用户角色极其复杂,有采购员、采购经理、财务审批、供应商管理员、超级管理员等等,每个角色能操作的菜单和按钮都不一样。Spring Security是Java领域最成熟的安全框架,结合OAuth2协议,能实现细粒度的权限控制。你可以通过RBAC模型,把角色和权限映射到具体API接口,甚至能控制到数据行级别。
比如某大型制造企业的B2B采购平台,不同部门的采购员只能看到自己供应商的报价单。他们用Spring Security结合自定义的权限注解,配合数据库中的权限表,实现了这种数据隔离。而且OAuth2的授权码模式,很适合B2B场景下第三方系统对接,比如让ERP系统通过授权码获取访问令牌,直接调用平台API。
这套方案的开源社区资源非常丰富,Spring Security的文档和示例代码到处都是。不过新手容易在配置上踩坑,特别是Token的存储和刷新逻辑。建议你在项目初期就把认证中心单独部署成一个微服务,别把认证逻辑散落在各个业务模块里,否则后期改起来会特别痛苦。
工作流引擎的完美搭档:Activiti或Flowable
B2B业务中的审批流程是家常便饭,采购订单审批、合同会签、付款申请,每一步都涉及不同部门和层级的流转。用硬编码实现这些流程,不仅开发量大,而且业务一变就得改代码。Activiti和Flowable这两个开源工作流引擎,就是专门干这个的。它们都支持BPMN2.0标准,可以可视化设计流程图,然后通过Java API驱动流程执行。
我推荐Flowable,因为它从Activiti分叉出来后,更新更积极,社区也更活跃。在B2B场景里,Flowable能处理复杂的会签、条件分支、子流程。比如某化工B2B平台的采购审批流程,金额超过10万需要总经理审批,超过50万需要董事会会签,Flowable的条件网关轻松搞定这种逻辑。而且它支持动态加签、驳回、撤回等操作,用户体验很好。
但是工作流引擎也有缺点,就是学习曲线比较陡。你得理解BPMN的各种节点概念,还得学会部署流程图。建议团队里安排专人负责流程建模和引擎维护,别让每个开发都去折腾这部分。另外,千万别把业务逻辑写到流程脚本里,否则维护成本会失控。
