剑客
关注科技互联网

如何在应用中快速稳定地实现 LBS 服务?!

随着移动互联网的发展,人们的衣食住行越来越离不开 LBS(基于位置的服务),如何在自己的应用中快速稳定地实现 LBS 服务也就成为了业内比较关注的话题。

2016 年 10 月 20 日,由 QCon 与 高德开放平台 联合举办的“高德 LBS 技术专场”于 QCon 上海 2016 分会场顺利举办。会上高德开放平台高级产品经理 杨巍 、高德开放平台资深研发经理 朴春植 、高德开放平台技术专家 刘魁(骏征) 3 位专家分别从什么是 LBS 服务,为什么要用 LBS 服务,如何快速实现 LBS 服务,如何保证其稳定性几个方面展开了分享。

LBS 服务的定义与意义

LBS 服务是指通过电信移动运营商的无线电通讯网络或外部定位方式,获取移动终端用户的位置信息,在 GIS 平台的支持下,为用户提供相应服务的一种增值业务。它包括两层含义:首先是确定移动设备或用户所在的地理位置;其次是提供与位置相关的各类信息服务,如找到手机用户的当前地理位置,然后为其寻找 1 公里范围内的宾馆、影院、图书馆、加油站等的名称和地址。所以说 LBS 就是要借助互联网或无线网络,在固定用户或移动用户之间,完成定位和服务两大功能。

高德开放平台的主要任务就是将高德地图专业的定位、地图、导航等位置能力和 LBS 服务以 API、SDK 的形式开放出来,供合作伙伴和开发者使用。覆盖领域包括社交媒体、社交出行、物流外卖、新闻资讯等行业。据统计,2015 年下半年到 2016 年上半年高德开放平台与行业用户(只选了比较有代表性的 3 个)共享 LBS 能力的占比分别是:出行 85%;外送 60%;主流社交 80%。

从上图可以看出出行行业的占比最高,其最出色的两个服务是实时路况和个性化导航。那么,LBS 服务如何助力出行?它给我们的生活带来哪些便利呢?杨巍老师结合实际案例分享了《共享出行的 LBS 实践》。

以共享单车为例,LBS 服务可以帮助确定使用者当前的位置及附近的车辆;帮助指引路线,包括步行线路规划指引最佳找车路线(规避“死胡同”、“隔堵墙”等问题,引导用户走最佳的找车路线节约时间)、骑行路线规划提供预估路程和时间(提供短途出行目的地的预估路程,提供到达目的地的预计通勤时间,可根据通勤时间计算预估费用);帮助轨迹纠偏提供真实骑行轨迹;帮助圈出地理围栏,保证运力平稳……

LBS 服务技术实践与经验分享

高德开放平台为 30 万 App 提供了 LBS 服务,拥有大量的 LBS 服务技术实战经验。LBS 覆盖了很多行业,但游戏行业还较为空白,朴春植老师分享了《LBS 与游戏结合实战》,介绍了在游戏行业中如何实践 LBS 服务。

大部分 LBS 相关的开发者都不用关心手机是如何定位的,其实在做移动端优化时,了解定位原理还是非常有用的,比如怎么省电,如何处理高频位置变化的情况。实现定位有以下 3 种方式:第一种是 GPS ;第二种是用基站塔来标记位置;最后一种是通过 Wifi 标记位置。如何选择适合产品需求的定位模式,减少定位频次(按时间、距离)呢?详见下图。

分类 类型 精准度 特点 调用方式
GPS GPS/A*GPS 2~10m 准确、耗时长、耗电 定位SDK+系统接口
网站 基站 500~5000m 大致位置 定位SDK
网站 Wi-Fi 20~200m 较为准确、快速省电 定位SDK

为什么要说游戏行业?从高德开放平台的数据来看,LBS 在各行业都有所覆盖,唯独缺少游戏行业。以下是朴老师总结的几个 LBS 与游戏相结合的痛点和难点。

如何在应用中快速稳定地实现 LBS 服务?!

在做游戏的时候,需要自定义地添加一个 Render,把每一帧回调。还需要一个重要的相互转换接口,利用它可以在缩放、移动地图的时候,把人物的位置与游戏的位置结合起来,下图提供了主要技术原理。

如何在应用中快速稳定地实现 LBS 服务?!

如何确保 LBS 服务载体平台的稳定性

面对一个开放平台,用户最关心的是什么?

  • 使用简单:API 设计适配多元化应用场景,可扩展性强;
  • 稳定性:崩溃率低,拥有合理的框架、健全的代码扫描 review 机制、自动化;
  • 响应速度:通过网络请求、渲染速度、异步等优化来加快响应速度;
  • 包大小:越小越好;
  • 隐私:编码安全性,数据输入安全(二进制 + AES + RSA),https 对域名进行强校验。

高德开放平台的业务特点是服务稳定性要求高、流量不均匀、流量易出现突增、节假日流量出现高峰。为了满足业务需求,平台采取了哪些措施呢?高德开放平台技术专家刘魁(骏征)分享了《在线服务的流量管控实践》,主要包括在线服务限流和七层负载流量切换(L7)上的业务实践。

如何在应用中快速稳定地实现 LBS 服务?!

服务限流包括集群限流和单机本地限流。集群限流以机房为维度,对 key/cip和 和同类引擎 QPS 约束。

如何在应用中快速稳定地实现 LBS 服务?!

集群限流的过程中会遇到同步扩容的问题,而这个问题需要单机限流来解决:以单机为维度,对接口或接口组 QPS 约束;精准到 URI 维度,提供默认值。

如何在应用中快速稳定地实现 LBS 服务?!

七层负载切换(L7) 包括手动和自动切换,是结合 DNS 四层切换的一种快速流量切换方案。

如何在应用中快速稳定地实现 LBS 服务?!

L7 切流方式如下图所示,可以通过平台手动切流和自动切流两种方式触发切流,自动互切加锁,手动切流优先,实现实时业务监控。

如何在应用中快速稳定地实现 LBS 服务?!

手动切换是通过平台手动切流,哪块有问题单切哪一块,这样实际上降低了切流的风险。自动切流,是基于业务监控的,它是一个无人职守的方案,适用于无人看管的时候,可以降低服务时长。

如何在应用中快速稳定地实现 LBS 服务?!

最后,刘老师指出,不论服务做得多好,都没有办法保证一定没有问题,一定要有一套完整的报警和容灾措施。

相信通过本专题,您对 LBS 服务一定有了更加深入的理解。篇幅原因,只选了部分内容列入文中,想了解更多请移步 QCon 上海 2016 官网 下载讲师完整 PPT,关注 QCon 公众号后期还可以看到精彩视频。

如何在应用中快速稳定地实现 LBS 服务?!

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址