专栏首页普通程序员超大群怎么保证抢红包公平

超大群怎么保证抢红包公平

公司年会有个环节是现场线上线下互动,现场会通过二维码及其他方式迅速建起一个超过5000人的群。员工会在群里分享一年来的感人故事,业绩以及对公司的祝愿,老板们可能在群里发红包,表示对员工的感谢。群里的信息会实时投影到现场的大屏幕上,同时也会推送到个人手机上。

这样一个群,短时间的消息并发量非常大,消息的延迟很难完全避免。普通消息延迟一点大家也就忍了,但是红包怎么办呢?

首先看看延迟发生在哪些环节

1、运营商基站

一些大型的聚会活动(如演唱会),我们往往能看到运营商架设的临时基站,架设基站的原因是解决固定基站容量和带宽不足的问题。现场5、6千人短时间大量使用网络的情况下,基站是可能存在一些压力的(尤其是群里大量发送照片的时候)。

2、IM系统推送

群里某人发1条消息,服务端需要向超过5000人推送。如果高峰期每秒发送20条消息(保守估计,峰值可能远不止这个数),服务器每秒需要推送10w条消息,以我们现有的资源,很难不出现延迟(采用客户端定时拉取的方式,可以极大减轻服务端压力,但是现有的软件不支持这个功能,另外定时拉取的时效性要差一些,员工互动感会下降)。即使1个红包消息,也需要进行5000次推送,这个点上也是有先有后的。

延迟很难避免,我们在推送顺序上做一些策略来尽量保证红包的公平性。

这个群里每次推送消息,推送成员的顺序都随机打乱,就不会造成某些人因为在群里位置靠前而具有优先推送的优势。

问题就转变为了寻找一种时间复杂度和空间复杂度都要很优秀的随机打乱一个数组的方法。因为并发消息量很多,时间复杂度太高速度慢;空间复杂度太大,内存开销会比较多。

Java语言里Collections类中正好提供了shuffle这个方法。下图是这个方法的核心代码

可以看到这个方法只需要遍历一次数组,进行数据位置交换。时间复杂度是O(n),空间复杂度是O(1)。

尽管对于单个红包,某些成员的推送顺序有优势(优势也是随机的),但对于多个红包,能保证不会总是某些人有优势。

消息从服务端推送出去后,到底先到达谁的手机就不好说了(网络因素太复杂)。因此,能不能抢到红包,主要还是看运气!

本文分享自微信公众号 - 普通程序员(farmerbrag),作者:封宇

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 大规模群消息推送如何保证实时性?

    第一版红包功能上线后,收集到不少问题。核心问题是消息延迟,导致有些人先看到红包,有些人晚看到红包,同时导致消息顺序混乱。

    普通程序员
  • 技术面试都会问哪些问题?

    要求候选人介绍做过的项目,围绕着项目经验发问。对于资深候选人重点考察对项目结构或某个领域业务的理解;一般候选人围绕着项目中使用的技术发问。(应届生没有什么项目经...

    普通程序员
  • IM系统海量消息数据是怎么存储的?

    现在的IM系统,消息都要落地存储。这样如果接收消息的用户不在线,等他下次上线时,能获取到消息数据。

    普通程序员
  • Android高效内存2:让图片占用尽可能少的内存

    Android高效内存:让图片占用尽可能少的内存 一、让你的图片最小化 1.1 大图小图内存使用情况对比 大图:440 * 336    小图:220 * 16...

    用户1155943
  • 推送-JPush(极光推送)的使用

    推送服务可以说是所有 App 的标配,不论是哪种类型的 App,推送都从很大程度上决定了 App 的 打开率、使用率、存活率 。因此,熟知并掌握推送原理及方法,...

    進无尽
  • 58同城高性能移动Push推送平台架构演进之路

    关于作者:孙玄,58赶集集团系统架构师,技术负责人,技术委员会架构组主任,也是58同城即时通讯、C2C技术负责人,负责58核心系统的架构以及优化工作。分布式系统...

    后端技术探索
  • Oppo离线推送踩坑记录

    2.应用创建成功后,如上图所示,推送测试阶段需要将创建的应用在“开发服务—>"推送服务"中开通推送测试权限。根据指引点击申请,等待审核通过后就可以接入。

    腾讯云-vzfzhao
  • 面试常问的22个Linux命令

    lyb-geek
  • Android 3G/4G流量上网原理简析

    手机一般会提供两种上网方式:Wifi或者3G/4G上网,Wifi上网其实就是利用网卡通过以太网上网;3G/4G则是通过基带,利用蜂窝网络进行上网,之前已经简单的...

    看书的小蜗牛
  • 设置UITextField占位文字的颜色

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

    用户1451823

扫码关注云+社区

领取腾讯云代金券