返回博客
反向竞猜平台源码搭建教程:从底层架构到核心算法实现
波胆

反向竞猜平台源码搭建教程:从底层架构到核心算法实现

2026年8月14日

1. 反向竞猜业务逻辑与赔率模型概述

反向竞猜平台的核心玩法是用户对某场体育赛事的“非指定赛果”进行投注,例如选择“全场比分不是 1:0”或“总进球数不为 2”。这种玩法不同于实时赛果预测,其赔率计算基于概率补集,需要更复杂的组合赔率模型。

赔率模型采用动态水位调节机制:基础赔率 = 1 / (1 - P(specific_score) - margin),其中 P 为泊松分布或历史数据拟合的概率。由于反向竞猜覆盖多个比分排除,实际计算通过聚合海量比分组合的概率和的倒数得到。

2. 前后端分离架构与微服务拆分

源码采用 Vue 3 + TypeScript 构建管理后台与用户端,后端基于 Spring Cloud Alibaba 微服务体系,拆分以下服务:

  • gateway-service:统一鉴权、限流与路由。
  • match-service:赛事数据接入与赛果管理。
  • odds-service:赔率计算、水位调整与赔率快照。
  • order-service:投注订单、撤单与资金流水。
  • settle-service:实时结算引擎,监听赛果事件。
  • agent-service:代理分佣、层级管理与佣金结算。

服务间通过 RocketMQ 消息队列解耦,使用 Redis 缓存实时赔率,MySQL 存储核心事务数据,TiDB 可选用于大数据报表。

3. 数据库表结构设计与比分数据建模

核心表设计如下:

表名关键字段说明
t_matchmatch_id, home_team, away_team, start_time, status赛事主表
t_score_oddsodds_id, match_id, exclude_score, odds_value, margin反向竞猜赔率配置
t_bet_orderorder_id, user_id, match_id, stake, odds, status, create_time投注订单表
t_settle_recordsettle_id, order_id, result, profit, settle_time结算记录
t_agent_accountagent_id, parent_id, level, commission_rate, balance代理账户与分佣

比分数据建模采用 JSONB 字段存储全量可能比分与概率分布,例如 {"1:0":0.12,"2:0":0.08,...},便于赔率引擎快速聚合。

4. 投注引擎与实时结算核心算法

投注引擎采用 LMAX Disruptor 环形缓冲区实现单机每秒 10 万+ 订单处理。算法步骤如下:

  • 步骤1:风控校验——校验用户余额、单注限额、单场总投注限额。
  • 步骤2:赔率快照锁定——从 Redis 读取该场次排除比分组合的最新赔率,若水位变动超过阈值则触发重新报价。
  • 步骤3:入队与持久化——订单写入 MySQL,同时发送 MQ 消息至结算服务。

实时结算核心算法:当赛果事件到达,结算服务根据 排除比分集合