S2B2C(Supply to Business to Consumer)是一种典型的 ToB 电商模式。本文将分享我负责的鲸旦电商平台的技术架构实践,如何从 0 到 1 构建并支撑百万级用户规模。

业务模式理解

S2B2C 的核心是 供应链赋能小B,小B服务C端用户

┌─────────┐    ┌─────────┐    ┌─────────┐
│ 供应商S │ →  │  小B商家 │ →  │  C端用户 │
│ (平台)  │    │ (分销商) │    │ (消费者) │
└─────────┘    └─────────┘    └─────────┘
     │              │              │
   供货管理      店铺运营        购买消费
   统一结算      分销获利        售后服务

技术挑战

  1. 多租户架构:每个小B都是独立店铺
  2. 分润结算:复杂的多级分销结算
  3. 库存同步:供应商库存与小B库存联动
  4. 流量高峰:大促期间的并发压力

系统架构

整体技术栈

层级 技术选型
前端 UniApp(多端统一)
网关 Spring Cloud Gateway
服务 Spring Cloud + Nacos
存储 MySQL + Redis + ES
消息 RabbitMQ
部署 Docker + Jenkins

核心服务拆分

┌────────────────────────────────────────────────┐
│                   API Gateway                   │
└───────────────────────┬────────────────────────┘
                        │
  ┌─────────┬───────────┼───────────┬─────────┐
  ▼         ▼           ▼           ▼         ▼
┌─────┐  ┌─────┐    ┌─────┐    ┌─────┐   ┌─────┐
│用户 │  │商品 │    │订单 │    │支付 │   │结算 │
│服务 │  │服务 │    │服务 │    │服务 │   │服务 │
└──┬──┘  └──┬──┘    └──┬──┘    └──┬──┘   └──┬──┘
   │        │          │          │         │
   └────────┴──────────┴──────────┴─────────┘
                       │
              ┌────────┴────────┐
              ▼                 ▼
         ┌────────┐       ┌────────┐
         │ MySQL  │       │ Redis  │
         │ 集群   │       │ 集群   │
         └────────┘       └────────┘

核心设计方案

1. 多租户店铺隔离

采用 共享数据库 + 租户ID隔离 方案:

// 租户上下文
public class TenantContext {
    private static final ThreadLocal<Long> TENANT_ID = new ThreadLocal<>();

    public static void setTenantId(Long tenantId) {
        TENANT_ID.set(tenantId);
    }

    public static Long getTenantId() {
        return TENANT_ID.get();
    }
}

// MyBatis 拦截器自动注入租户条件
@Intercepts({@Signature(type = Executor.class, method = "query", ...)})
public class TenantInterceptor implements Interceptor {
    @Override
    public Object intercept(Invocation invocation) {
        // 自动添加 tenant_id 条件
        appendTenantCondition(invocation);
        return invocation.proceed();
    }
}

2. 分润结算系统

分销场景下的分润计算:

商品售价 100 元
├── 平台服务费: 5%  →  5 元
├── 供应商成本: 60% → 60 元
├── 一级分销:   20% → 20 元
└── 二级分销:   15% → 15 元

关键设计:

  • 实时预览:下单时展示预计收益
  • 延迟结算:确认收货后 T+7 结算
  • 对账机制:每日自动对账 + 异常告警

3. 库存同步方案

供应商库存与小B展示库存的同步:

┌──────────────┐     ┌──────────────┐
│  供应商库存   │ ←→  │   平台库存    │
│  (实际库存)   │     │  (可分配库存) │
└──────────────┘     └───────┬──────┘
                             │
         ┌───────────────────┼───────────────────┐
         ▼                   ▼                   ▼
   ┌──────────┐        ┌──────────┐        ┌──────────┐
   │ 店铺A库存 │        │ 店铺B库存 │        │ 店铺C库存 │
   │ (展示库存)│        │ (展示库存)│        │ (展示库存)│
   └──────────┘        └──────────┘        └──────────┘

采用 预占 + 异步扣减 策略:

  1. 下单时预占库存(Redis 原子操作)
  2. 支付成功后异步扣减实际库存
  3. 超时未支付自动释放预占

4. 高并发应对

大促场景下的技术保障:

策略 实现方式
热点缓存 Redis 集群 + 本地缓存二级架构
限流降级 Sentinel 流控 + 熔断
异步削峰 下单消息队列削峰
读写分离 MySQL 主从 + 读库路由

多端统一开发

使用 UniApp 实现一套代码多端运行:

UniApp 代码
    │
    ├── 编译 → 微信小程序
    ├── 编译 → H5 网页
    ├── 编译 → App(iOS/Android)
    └── 编译 → 支付宝小程序

优势:

  • 开发效率提升 60%+
  • UI 一致性保证
  • 维护成本降低

运营数据

平台上线后的核心指标:

指标 数据
入驻商家 2000+
注册用户 100万+
日均订单 3万+
峰值 QPS 5000+
系统可用性 99.95%

经验总结

  1. 业务理解优先:S2B2C 的核心是赋能小B,技术要服务于这个目标
  2. 分步演进:先跑通业务闭环,再优化性能和架构
  3. 数据驱动:用数据指导技术决策,而非凭感觉
  4. 标准化能力:把通用能力沉淀为平台能力,降低边际成本

电商平台的技术挑战不仅在于高并发,更在于复杂业务逻辑的正确实现和持续演进能力。