从0到1搭建外卖跑腿配送系统全流程解析

本文涉及的产品
RDS AI 助手,专业版
PolarDB Agent Flow,2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 这是一套“多角色+实时调度+地理位置驱动”的同城即时履约系统,涵盖用户、商家、骑手、管理后台四端。详解了分层微服务架构、核心派单算法(Redis GEO+距离匹配)、WebSocket实时推送、高并发处理及进阶AI调度方案,助你落地可商用的外卖跑腿系统。(239字)

外卖跑腿配送系统本质上是一个“多角色 + 实时调度 + 地理位置驱动”的同城即时履约系统,核心围绕四个端:用户端、商家端、骑手端、管理后台。

下面从业务流程到技术架构,再到核心代码实现,带你完整拆解一套可落地的系统设计。
外卖跑腿配送系统.png


一、系统整体架构设计

一个标准外卖跑腿系统通常采用分层+微服务/模块化架构:

1. 业务端结构

  • 用户端:下单、支付、追踪订单
  • 商家端:接单、出餐、订单管理
  • 骑手端:抢单/派单、配送、签收
  • 管理后台:订单调度、风控、数据分析

2. 技术架构

  • 前端:Vue / React / 小程序 / App
  • 后端:Java Spring Boot / Node.js / Go
  • 数据库:MySQL + Redis
  • 地图服务:高德 / Google Maps
  • 消息系统:WebSocket / MQTT
  • 定位系统:GPS + LBS

二、核心业务流程

外卖跑腿系统的主链路:

  1. 用户下单
  2. 商家接单
  3. 系统派单(或抢单)
  4. 骑手接单
  5. 骑手取餐
  6. 骑手配送
  7. 完成订单
  8. 结算与评价

关键点在第3步:派单逻辑


三、核心模块拆解

1. 订单模块

订单是整个系统的核心数据结构。

示例:订单表设计(简化)

CREATE TABLE orders (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    user_id BIGINT,
    merchant_id BIGINT,
    rider_id BIGINT,
    status VARCHAR(20),
    total_amount DECIMAL(10,2),
    create_time DATETIME,
    update_time DATETIME
);

2. 下单接口(后端示例)

Node.js 示例

app.post("/order/create", async (req, res) => {
   
    const {
    userId, merchantId, items } = req.body;

    // 1. 计算金额
    const total = items.reduce((sum, item) => {
   
        return sum + item.price * item.count;
    }, 0);

    // 2. 创建订单
    const order = await db.orders.create({
   
        user_id: userId,
        merchant_id: merchantId,
        total_amount: total,
        status: "PENDING"
    });

    // 3. 写入Redis用于派单
    await redis.lpush("order_queue", order.id);

    res.json({
   
        success: true,
        orderId: order.id
    });
});

3. 派单核心逻辑(重点)

外卖系统“智能化”的核心就在这里:如何匹配最近骑手

思路:

  • 获取订单位置
  • 查找附近骑手(LBS)
  • 计算距离
  • 分配最近骑手

Redis GEO实现骑手定位

// 骑手上线(存位置)
await redis.geoadd(
    "riders_location",
    longitude,
    latitude,
    riderId
);

查询附近骑手

const riders = await redis.georadius(
    "riders_location",
    orderLng,
    orderLat,
    3,          // 3公里范围
    "km",
    "WITHDIST",
    "COUNT",
    5
);

派单逻辑(核心代码)

async function dispatchOrder(orderId, orderLng, orderLat) {
   
    const riders = await redis.georadius(
        "riders_location",
        orderLng,
        orderLat,
        5,
        "km",
        "WITHDIST"
    );

    if (!riders.length) {
   
        throw new Error("暂无可用骑手");
    }

    // 按距离排序
    riders.sort((a, b) => a[1] - b[1]);

    const selectedRider = riders[0][0];

    // 更新订单
    await db.orders.update({
   
        where: {
    id: orderId },
        data: {
   
            rider_id: selectedRider,
            status: "DISPATCHED"
        }
    });

    // 通知骑手(WebSocket/MQTT)
    notifyRider(selectedRider, orderId);

    return selectedRider;
}

4. 实时订单推送(WebSocket)

骑手必须“秒级收到订单”

const WebSocket = require("ws");

const wss = new WebSocket.Server({
    port: 8080 });

wss.on("connection", (ws) => {
   
    ws.on("message", (msg) => {
   
        const data = JSON.parse(msg);

        if (data.type === "rider_login") {
   
            ws.riderId = data.riderId;
        }
    });
});

// 推送订单
function notifyRider(riderId, orderId) {
   
    wss.clients.forEach(client => {
   
        if (client.riderId === riderId) {
   
            client.send(JSON.stringify({
   
                type: "NEW_ORDER",
                orderId
            }));
        }
    });
}

5. 骑手接单逻辑

app.post("/rider/accept", async (req, res) => {
   
    const {
    riderId, orderId } = req.body;

    const order = await db.orders.findById(orderId);

    if (order.status !== "DISPATCHED") {
   
        return res.json({
    success: false, msg: "订单已被接单" });
    }

    await db.orders.update({
   
        where: {
    id: orderId },
        data: {
   
            status: "ACCEPTED",
            rider_id: riderId
        }
    });

    res.json({
    success: true });
});

6. 定位更新(骑手端)

骑手位置需要持续上报:

setInterval(() => {
   
    navigator.geolocation.getCurrentPosition(async (pos) => {
   
        await fetch("/rider/location/update", {
   
            method: "POST",
            body: JSON.stringify({
   
                riderId,
                lng: pos.coords.longitude,
                lat: pos.coords.latitude
            })
        });
    });
}, 5000);

后端存储更新:

app.post("/rider/location/update", async (req, res) => {
   
    const {
    riderId, lng, lat } = req.body;

    await redis.geoadd("riders_location", lng, lat, riderId);

    res.json({
    success: true });
});

四、关键技术难点

1. 高并发订单处理

  • Redis队列削峰
  • MQ异步派单
  • 分库分表

2. 实时性

  • WebSocket替代HTTP轮询
  • MQTT优化移动端连接

3. 距离计算

  • Redis GEO(推荐)
  • Haversine公式(备用)

4. 防止抢单冲突

  • 分布式锁(Redis SETNX)
const lock = await redis.set("order_lock_" + orderId, riderId, "NX", "EX", 10);
if (!lock) {
   
    return "订单已被抢";
}

五、系统升级方向(进阶)

如果要做商业级系统,必须加:

  • 智能派单(AI算法:距离+负载+评分)
  • 动态调度(订单合并配送)
  • 路径规划优化(A* / Dijkstra)
  • 风控系统(异常骑手检测)
  • 大数据分析(热区预测)

外卖跑腿配送系统.png

六、总结

外卖跑腿配送系统的核心不是“下单”,而是:

实时调度 + 地理位置 + 多角色协同

真正的技术难点集中在三点:

  • 派单算法
  • 实时通信
  • 高并发处理

如果这三块做好,系统才算真正可商用。

相关文章
|
5天前
|
人工智能 JSON 自然语言处理
让教学更智慧:用阿里云百炼工作流,自动生成中小学教材内容#小有可为#有温度的AI
通过可视化工作流编排,将大模型推理能力转化为标准化的教学内容生成引擎。教师只需输入教材标题和适用学段,即可自动获得结构完整、符合课程标准的章节内容,大幅降低备课门槛,助力教育资源均衡化。
463 123
|
7天前
|
人工智能 定位技术 SEO
我学 GEO 第 15 天:终于知道AI GEO该如何做?
我是暴走的莉莉酱,边旅行边研究AI GEO的数字游民。专注普通人如何提升“AI可见度”——让AI在回答用户问题时准确识别、理解并推荐你。不讲玄学,只做可测、可调、可持续的GEO实践。
443 127
|
10天前
|
机器学习/深度学习 人工智能 调度
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
HappyHorse 1.1 是新一代视频生成大模型,全面升级动态表现力、角色一致性、指令遵循、视觉质感与音画协同能力。支持I2V/T2V/R2V三类生成,适配短剧、电商广告、品牌营销等场景,提供高质、流畅、可控的AI视频生产力。
751 5
🐴 HappyHorse 1.1 现已上线阿里云百炼!快来查收模型使用指南,现在调用享 6 折~
|
2天前
|
消息中间件 存储 Kafka
Kafka 原生消息入湖能力上线!一键打通实时流与数据湖
阿里云消息队列 Kafka 版正式上线原生消息入湖能力。
213 121
|
2天前
|
人工智能 安全 Cloud Native
Higress 新发布:AI Gateway 能力增强,Gateway API 及其推理扩展持续打磨
增强 AI 网关能力,持续打磨 Gateway API 及其推理扩展。
249 122
|
7天前
|
缓存 人工智能 运维
阿里云618百炼大模型Qwen3.7-Max功能、免费试用、订阅计费、配置接入详解
Qwen3.7-MAX是阿里云百炼平台推出的通义千问3.7系列旗舰大语言模型,专为智能体时代复杂任务打造,依托阿里云全域算力与自研技术,在逻辑推理、长文本处理、代码工程、长周期自主执行等领域达到行业顶尖水平。2026年618期间,该模型推出多重免费试用权益、按量计费5折、订阅套餐优惠等专属福利,覆盖个人开发者、团队与企业全场景需求,以下从核心功能、免费试用、订阅计费、配置接入四方面展开详细解析。
445 123
|
5天前
|
人工智能 自然语言处理 API
阿里云Token Plan团队版解析:功能、三档套餐与省钱订阅指南
阿里云百炼平台推出的Token Plan团队版,是面向企业与团队的AI大模型订阅服务,以Credits为统一计量单位,整合文本与图像生成模型,提供团队管理、数据安全、多工具兼容等核心能力,解决团队零散订阅AI服务的管理混乱、成本失控、数据安全等痛点。本文将从核心定位、套餐详情、计费规则、团队管理、工具兼容、便宜订阅技巧等方面,全面解析Token Plan团队版,帮助企业与团队高效、低成本地使用AI服务。
328 108
|
15天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)