大BOSS提出牛B需求,求大神指点

宇宙观光客 发布于 2013/12/05 09:25
阅读 1K+
收藏 3

大BOSS提出,要接入1W个终端。

每个终端5秒上传一次地理位置心跳包。

每个终端10秒扫描一次它所在位置周边的终端(指定可变距离),并进行由近到远排序,要求2秒内返回结果。

以上是性能需求。

原来的解决方案,开发了一个简单的网格服务,将终端位置映射到网格当中,扫描周边终端,则扫描所在位置网格及周边网格。

现在如果接入1W终端,5秒就要处理1W个映射请求,10秒就要处理1W个扫描请求,简单的网格服务程序处理不过来,线程池任务数量已经加到5K,还是会满出来。

求大神指条明路,新架构,新技术都行。

最好是C/C++方面的。

注:现在服务间内部通讯都是采用UDP的。

加载中
0
xinyuliu
xinyuliu
5秒就要处理1W 每秒才处理2K个,多出来的排队不就行了,也不一定非的实时吧,每秒2K个不是轻轻松松
0
xinyuliu
xinyuliu
或者服务器集群吧
0
宇宙观光客
宇宙观光客

引用来自“xinyuliu”的答案

5秒就要处理1W 每秒才处理2K个,多出来的排队不就行了,也不一定非的实时吧,每秒2K个不是轻轻松松

第一个问题不能平均算的,希望能按照1秒处理5K的需求来设计的。

关键是第二个问题,因为是扫描网格,还是不定距离,这个占用的时间比较多。严重拖累性能

0
宇宙观光客
宇宙观光客

引用来自“xinyuliu”的答案

或者服务器集群吧
服务器集群怎么设计?考虑过用服务器集群来部署多个网格服务,但是网格服务之间的拼接比较麻烦,还要处理跨服务器扫描,返回结果处理
0
独孤小败
独孤小败
多开几个后台服务,给每个终端分配ID. 然后根据ID%后台服务数余数,让他访问对应服务器。
0
宇宙观光客
宇宙观光客

引用来自“独孤小败”的答案

多开几个后台服务,给每个终端分配ID. 然后根据ID%后台服务数余数,让他访问对应服务器。
这个不是问题,问题是把所有终端汇集到网格服务提供周边终端扫描
0
马太航
马太航
可以外包给我
0
宇宙观光客
宇宙观光客

引用来自“马太航”的答案

可以外包给我
兄弟都是混饭吃的
0
欢乐的财神
欢乐的财神

我来说说吧

1、我曾经尝试过

2、问你一个问题:如果不是经纬度的点,而是一些数字,比如1、2、3、4、5

让你求3最近的2个值你会么?好吧,权当你会了,也就是在3的附近找到前后各两个,问题得解,问题的关键在于数列是排好序的,别说一万个了,就是一百万也没问题,毫秒间给出答案,所以问题的关键是建立点之间的绝对有序模型。

3、回到你的问题,目标就是找到这样的一个关于二维点的绝对有序的模型,想象一个距离你的点群很远的一个点吧,每个点除了自己的information 之外,存储与这个远点的距离,再依据这个距离排序

4、毫秒得解,无论多少万

5、为了避免对称带来的误差,再稍微处理下

ps:指定搜索距离时,三角形距离和点的距离之间的转换自行百度(初中知识)

ps:修改了下答案,更可操作点

0
独孤小败
独孤小败
我是瞎想的,是不是可以这样,把 x- 请求用户经度  y - 请求用户纬度 都小于1000米的坐标直接传给用户, 利用终端计算排序.
返回顶部
顶部