传统B2B平台其实可以分成三层来看,最底层是基础能力层,包括用户管理、商品库、价格体系和支付通道。中间层是业务逻辑层,主要负责采购流程、审批流、合同管理和对账结算。最上层则是展现层,比如企业门户、供应商后台和移动端应用。这三层之间必须做到数据解耦,否则改一个模块就会牵动全身。
我特别想强调一点,B2B和B2C最大的区别在于权限体系。B2C一个账号就是一个用户,但B2B里一个企业账号下面可能有采购员、审批经理、财务专员多个角色。所以架构设计时必须支持多层级权限,比如部门级和公司级的采购限额控制。权限模型如果一开始没设计好,后期改起来成本极高,很多企业就是在这上面栽了跟头。
另外,商品数据在B2B场景里也复杂得多。同一个商品对不同客户可能有不同的阶梯价,还要区分经销价、批发价和协议价。这些价格策略不能硬编码在业务代码里,最好通过配置中心动态下发。说白了,B2B架构的灵活性就体现在这些细节配置上,而不是代码写死了再等着改。
技术选型这块其实特别容易踩坑。很多团队一听B2B就觉得必须上微服务,结果业务量还没起来,服务拆分带来的网络延迟和分布式事务问题先把自己整崩溃了。我建议初期阶段直接用单体应用加读写分离就够了,业务量达到日均百万级订单时再考虑拆分。技术选型要跟着业务走,别为了炫技而过度设计。
数据库选择也是个关键点。B2B场景下订单数据量可能不大,但关联查询特别多,比如要查某个客户过去一年的采购记录、对账单、发票信息。这时候用MySQL加合理索引反而比NoSQL更顺手。当然,如果要做实时价格计算或者库存扣减,可以引入Redis来扛高并发,但千万别把核心业务逻辑依赖在缓存上。
支付模块的架构设计往往被低估。B2B支付不像个人支付那么简单,它涉及到企业对公转账、账期支付、分期结算甚至票据支付。所以支付网关必须支持多种支付方式,而且要做好掉单处理和资金对账。我见过有的系统因为支付回调没处理好,导致订单状态和资金状态不一致,最后财务对账对了一个月。这种低级错误完全可以通过设计一个独立支付服务来避免。
B2B系统往往要和ERP、WMS、CRM等企业内部系统对接,这就涉及到数据同步问题。最头疼的是同步时效性,比如采购商在B2B平台下单后,库存数据必须实时同步到仓储系统,否则会出现超卖。很多团队选择用消息队列来做异步同步,但消息丢失或重复消费的情况时有发生。我推荐的做法是采用事件溯源模式,把每一次数据变更都记录为事件,这样即使下游系统挂了也能重放。
多端协同也是架构设计里容易忽视的点。同一个B2B平台通常有PC端、移动端和API接口三种使用场景,它们的业务逻辑虽然一样,但交互方式差异很大。比如PC端可以做复杂的订单批量导入,移动端更适合审批和查看报表。架构上应该把业务逻辑抽离成独立的服务层,让各端只负责展现,这样改移动端UI时不会影响PC端的业务逻辑。
文件管理模块更不能轻视。B2B交易中会涉及大量合同、发票、质检报告等文件,这些文件需要长期存储且支持在线预览。我建议用对象存储服务来存文件,同时维护一个文件元数据表,记录文件的关联订单号、上传时间和访问权限。千万不要把文件直接存在应用服务器上,否则备份和扩容都是灾难。
B2B平台的安全要求比B2C高得多,因为交易金额大且涉及商业机密。最基础的是做好HTTPS传输加密和接口鉴权,但光有这些还不够。敏感数据比如客户价格表、采购合同,在数据库里应该加密存储,甚至可以考虑字段级加密。我遇到过有公司直接把客户的银行账号明文存在表里,这要是被脱库后果不堪设想。
审计日志是合规的核心要求。B2B交易中任何操作都需要可追溯,比如谁修改了价格、谁审批了订单、谁导出了客户名单。架构上应该设计一个统一的审计日志服务,把每次操作的关键信息记录下来,包括操作人、操作时间、操作前后的数据快照。这些日志不能只存在数据库里,最好定期归档到日志中心,方便后期审计查询。
最后说一个容易被忽略的点,就是数据删除策略。B2B业务的数据通常有法律要求的保存期限,比如财务凭证要保存15年。所以架构上不能简单用物理删除,而是要做逻辑删除加数据归档。把历史数据迁移到冷存储系统,既能节省主库性能,又能满足合规要求。说白了,B2B架构设计不仅要考虑当下业务跑得顺,还要为未来几年的数据增长和监管变化留足空间。