
网润软件在运营的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日