当前位置: 首页 > 科技观察

TalkingData马骥:地图可视化客户端服务架构设计与实践

时间:2023-03-16 13:32:45 科技观察

【.com原稿】在WOT2016移动互联网技术峰会平台技术专场,TalkingData研发副总裁马骥先生为我们带来精彩演讲《地图可视化Client Service架构设计及实践》,与会的小伙伴们分享了地图在大数据领域的应用,以及如何利用数据可视化进行数据挖掘、探索和数据决策。  TalkingData成立于2012年,已完成C轮融资,正在启动D轮融资。截至目前,TalkingData已积累超过30亿的移动开发数据。我们的产品主要围绕三个方向:一是面向开发者的服务,二是应用统计分析,三是广告监测。TalkingData总部位于北京,在上海设有研发中心,在深圳设有办事处。此外,还在境外设立了一些子投资机构。  谈及目前的数据市场,马骥先生认为,目前数据量已累计约30亿台设备,2.5亿日活用户,6.5亿月活用户,日吞吐量约14T,交互会话34亿,以及300个处理事件数十亿。WIFI数据覆盖80个城市3000多家商场,拥有超过400万个WIFI指纹和4200万个POI数据。此外,这些数据周围还有800多个标签。他表示,大数据时代地图的发展存在一些瓶颈,如何解决地图在大数据领域的使用是一个非常重要的课题。  针对这个课题,TalkingData开发了一套完整的解决方案。首先是绘图引擎TDSeagull,因为地图数据和PVI数据对任何公司来说都是非常有价值的,需要各种保护和防破解。我们也采用这种方案,将加密后的数据取出来,在前端进行解密。此外,还有一套压缩算法来解决如何将数据压缩到更小的尺寸。  客户端和服务端,500万的数据放在前端显然是不可能的,必须配合完成。解法最重要的是这两块:***,500万点的数据,是否给5000点在国家视野中,能不能代表500万点,甚至可以显示500点上面的地图显示了它。我们相信这是完全可能的。当然,从500万个点中提取5000个或500个点,如何把特征点取对就需要数据聚合服务。第二,大量数据放大后没有用。打开地图放大到一定程度后,只显示可见区域的数据或需要绘制的数据。是否可以将其返回到前端?答案是肯定的,这是最重要的解决办法。比如用栅栏计算,画一个栅栏,海淀区需要计算多少数据。另外,大部分是即时服务,坐标转换,所以涉及转换的坐??标系有N种。如何通过几何计算来判断一个点是否在围栏内,看似很简单,实际上却相当复杂。500万分怎么判断围栏?本身就有100分,这件事就很复杂了。本方案是从后端实时N多业务,提取数据,吐出给前端,前端解密压缩,通过各种热图API展示在地图。这是我们最初的一套解决方案。  当然我们在这个方案中也发现了几个问题:第一个问题是后端开销比较大,系统开销大,内存和CPU计算的计算能力非常大。另外SLA性能,一个请求能否在一秒内返回数据接口给前端而不是返回接口,系统是否支持。这样导致硬件投入比较大,但是有些行业的客户需求很小,需要增加一套即时服务,在成本上是有问题的。大量投资即时服务硬件如何解决这个问题?简单的解决办法就是前端能不能有更多的东西,这个是很正常的思路,怎么把后端服务放到前端,或者前后端可以一起做吗,从而降低后端的技术复杂度。  还有一个问题就是把后台服务拿出来,上移到前台客户端浏览器。由于数据聚合浏览器无所不能,比如栅栏计算、坐标变换等,很多浏览器都试图让浏览器承担减少后端服务的角色,甚至可以省略或减少一些后端服务。  TDSeagull的挑战主要来自几个方面:第一个方面是前端的绘制,前端的解决方案还是很多的,就不细说了。第二个是客户端的问题。大量数据导致整体地图的拖动非常缓慢,甚至导致浏览器崩溃。客户端可以提取多大的极限值?如果一个容器是一万个或者几千个,那就没什么好谈的了。如果能大点可能就更好了,但是会出现很多问题,比如拖拽或者滑动地图。还需要N次计算。计算复杂性和算法逻辑。用前端GS做地图很有意思。算法逻辑真的很多,结果就是这个领域会带来更多的问题。前面是道理,后面是表象。这种外观对于用户体验来说是很差的。GS的执行原理是单线程的。很容易有很多计算。执行效率高,容易堵住后面的脚本咨询。就是这个问题引起的。  服务上移后,如何提升算力成为处理架构设计的核心。经过十几年的前端开发,H5做的很多,大家也经常会提到MVC。为什么前端的M层很薄?有的甚至根本就没有M层?为什么是前端分离标准?前端负责展示逻辑,后端负责业务逻辑?当然,现在有些客户端已经有很多业务逻辑逐渐往前移了。但是,在计算能力方面,前端一直是弱势的。原因很简单。既然是单线程,就意味着只能利用好一个CPU。现在手机多核,前端GS执行并没有充分利用CPU资源。可以得出这个结论。H5开发的各种方案都出来了,做前端的已经很清楚了。  整个项目完成后,整体算力有了很大的提升。图中横轴代表PUI的个数,为2000个,如果扔到Worker中,返回时间为70毫秒。如果是5000点,需要100毫秒。一般情况下,30000分500毫秒对于浏览器整个过程的用户体验来说已经非常好了。在这个测试中,电脑的性能比较弱,如果电脑好,反馈会更高。例如计算100,000个PVI需要1.3秒,计算200,000个需要2秒多。现在整体没有高峰,只是用户是否接受。做了Worker之后,还有一个问题就是如何从服务端跑20万点到客户端。这是另一回事。至少可以看到Worker和多线程计算能力。真的是进步很大。业务处理没有瓶颈。现在你可以放20万。其实30万是没有问题的。只是能不能执行而已。【原创稿件,合作网站转载请注明原作者和出处为.com】