Apollo 技术文档Apollo 技术文档
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
  • MMORPG 架构 QA

Q46: 如何设计拍卖行?

核心结论

拍卖行不是“离线版交易系统”,而是“异步市场加搜索索引加结算清算系统”。

真正难点通常不在挂单界面,而在:

  • 上架物品的托管和锁定
  • 搜索索引与排序
  • 成交结算和手续费
  • 过期、撤单、竞价冲突

一旦玩家规模上来,拍卖行很快会成为数据、缓存、搜索和资产安全的综合系统。

一、先分清拍卖行的业务模式

常见有两种:

  • 固定价挂牌
  • 竞价拍卖

两者在系统上差异很大:

  • 固定价更接近商品市场
  • 竞价模式更强调时限、出价顺序和最终结算

很多项目会两者并存,但不应混成一套模糊流程。

二、拍卖行和面对面交易的根本区别

拍卖行是异步交易,通常具备这些特点:

  • 双方不需要同时在线
  • 交易品会被系统托管
  • 成交发生在独立时间点
  • 查询和筛选压力很大

所以它更像“市场服务”,而不是简单的双人交互。

三、上架时最关键的是托管

一件物品进入拍卖行后,必须脱离玩家自由背包。

也就是说,系统要么:

  • 直接转移物品所有权到拍卖托管态
  • 要么至少把物品锁死,禁止其他操作

否则会出现典型问题:

  • 上架后还能使用或交易
  • 下架和成交冲突
  • 重复上架

四、搜索和筛选是拍卖行的性能核心

玩家通常会按这些维度查:

  • 类型
  • 品质
  • 职业
  • 价格区间
  • 剩余时间

所以拍卖行系统不能只想着“有一张挂单表”,还必须考虑:

  • 检索索引
  • 排序字段
  • 分页性能
  • 热门筛选条件缓存

这也是拍卖行常常需要额外缓存或搜索层的原因。

五、成交和清算要独立设计

成交后系统通常还要处理:

  • 扣款
  • 物品归属变更
  • 手续费
  • 卖家收益入账
  • 买家和卖家通知

这是一条完整清算链路,不能只当成“更新一条状态”。

六、竞价模式尤其要注意时序问题

如果支持竞价,就必须先定义:

  • 最小加价幅度
  • 截止时间
  • 最后时刻出价规则
  • 被超价后的资金处理

否则临近结束时的并发出价很容易出问题。

七、工程上更稳妥的组织方式

常见做法是:

  • 挂单主表保存交易主状态
  • 搜索索引层承接查询和排序
  • 资产系统负责托管和成交清算
  • 定时任务处理过期、流拍和结算

这样拍卖行就不会把搜索、资产、通知全揉在一张表里。

八、风控和审计非常重要

拍卖行天然是高风险系统,因为它容易被用于:

  • 洗钱
  • 工作室转移资产
  • 利用定价异常套利

所以通常还需要:

  • 挂单和成交流水
  • 异常价格监控
  • 账号关联分析
  • 高风险物品限制

九、常见误区

1. 拍卖行就是更复杂一点的交易

不准确。它还包含搜索、托管、结算和风控。

2. 只要有数据库表就能做搜索

规模一上来,排序和筛选会很快变成性能瓶颈。

3. 成交后直接把钱和物品互换就行

实际还要处理手续费、过期、通知、重试和幂等。

参考资料

  • 各类在线游戏拍卖行、市场索引与资产清算实践资料
在 GitHub 上编辑此页
最后更新: 3/20/26, 6:06 AM
贡献者: cuihairu