网润软件在运营的ABC代驾平台

1.目前单台2核4G服务器+单台mysql数据库。

2.司机端APP每10秒上报一次经纬度位置请求给服务。

当司机人数发展到1000人左右同时在线的时候,后台的高德地图显示的司机页面就卡顿起来。

最简单的方案就是提高服务器的性能和数据库的性能。当服务器和数据库性能已经是高配置的时候,

我们采用以下方法进行优化。


1.增量更新而非全量刷新

原理:后台仅返回自上次请求以来位置变化的司机数据,而非每次返回全部司机列表 。

实现方式: 

-前端每次请求携带时间戳(lastupdate=xxxx),后台查询该时间戳之后位置更新的司机。

-数据格式: 返回新增司机,位置变化司机,离线司机的差异化数据(added:[] ,updated:[],removed:[]).


2.redis缓存

 -  司机上报位置的时候,使用Redis缓存在线司机热点数据 ,减小数据库的压力。

 -  使用redis保存位置经纬度信息,数据有效期可根据司机上报间隔来设定。当热点数据变为冷数据,就自动释放。


3.异步处理

将位置更新操作和查询操作分离, 使用RabbitMQ异步写入数据库。到缓存redis查询司机的路线信息。


4.分页加载与视频裁剪

原理:仅加载当前地图视口区域内的司机位置,而非一次性渲染全国数据,

 - 实现方式:

-监听地图移动/缩放事件,获取当前视口的经纬度范围。

-向后端发送请求时,携带视口范围参数(minlat,minlng,maxlat,maxlng),后台根据范围过滤数据

-示例请求: /api/drivers?bbox=116.1,39.7,116.5,40.0(北京四环内范围)


5.负载均衡

当司机不断地增加,这个时候就要考虑数据的水平切分。

使用负载均衡服务器,把请求分担到多台服务器上。让多台服务器分担请求压力。

  

网润开发团队

2025年6月12日