InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

解密微博红包:架构、防刷、监控和资源调度

  • 2016-02-29
  • 本文字数:2723 字

    阅读完需:约 9 分钟

编者按

与传统意义上的红包相比,近两年火起来的“红包”,似乎才是如今春节的一大重头戏。历经上千年时代传承与变迁,春节发红包早已成为历史沉淀的文化习俗,融入了民族的血脉。按照各家公布的数据,除夕全天微信用户红包总发送量达到 10.1 亿次,摇一摇互动量达到 110 亿次,红包峰值发送量为 8.1 亿次 / 分钟。春晚直播期间讨论春晚的微博达到 5191 万条,网友互动量达到 1.15 亿,网友抢微博红包的总次数超过 8 亿次。

为此,InfoQ 策划了“春节红包”系列文章,以期为读者剖析各大平台的红包活动背后的技术细节。本文为微博篇。

随着互联网的发展,打破了以往传统的发红包,带给了红包全新的玩法。微博红包已经成为用户给粉丝拜年的一种途径,土豪版成为土豪刷存在感的方式。每年的红包大战都是用户的现金盛宴,对于整个系统却是残酷的考验。

微博有 8 亿注册用户,单日活跃用户数 1.34 亿的社交平台。红包在微博平台上运行,针对所有的微博用户开放,微博所有用户都可参与红包活动。微博红包有如下特点:

  1. 红包价值高、种类多、覆盖用户广,亿级别用户参与。

  2. 半点准时开抢,高并发访问、瞬间峰值高,每分钟带来上亿次的抢红包峰值。

  3. 请求快速响应,更新亿级用户中奖状态及红包状态。

  4. 单个红包数额大。

春晚当天红包总价值超过 10 亿,有 1.34 亿用户参与,产生了 8 亿多次的抢红包行为,其中并发量为平时峰值的 10 倍左右。在服务器数量一定的情况下,如何构建高并发操作、瞬间峰值高的稳定服务?对于团队和架构师都是一个极大的挑战。这时候系统的架构尤为重要!

红包架构

微博红包支持每秒几十万次的操作,应对突发性的热点事件,快速响应,高内聚低耦合的服务成了架构首先要考虑的因素。

(点击放大图像)

微博是社交型应用,红包在用户数据、关系、抢红包等结构上存在着各种各样复杂的依赖,这些依赖相比其它应用来说,调用频率更高,性能要求也更高。

如上图所示,有多个应用模块接入红包的服务层,服务层由多个节点组成,每个节点对应相应的功能并且相对独立。代码模块的使用和组织上相对独立,保证主功能的快速和稳定,将附属的新功能分离在独立模块中。其中红色虚线框内为核心的功能模块,是重点需要保护的功能。

微博红包提供获取红包属性(红包金额、红包设置、红包状态、获取抽取结果列表、拆包,抽奖等)接口。服务层调用红包SDK 相应的API,会根据应用层逻辑需求提供数据和定制化得数据,完成前端完成交互,达到应用层需要展现的效果。

防刷策略

微博红包有别于微信用户发出的红包,微信用户发出的红包是针对自己所认识的朋友或者已存在于微信群的用户;微博红包是针对于微博所有用户的红包,通过分析参与红包的用户数据每年都会产生一些囤积大量账号准备在春晚大发横财的公司和个人。如何防止微博红包被自动注册或者通过转卖账号来领取红包?这成为面对我们需要解决的一大问题。

(点击放大图像)

微博通过基于用户在微博上的行为分析,通过登录,发微博,身份验证等方面来进行分析。主要有:

  1. 用户注册:通过用户行为分析来识别机器注册的用户,则注册环节进行拦截。

  2. 用户登录:分析用户登录的行为,通过验证码,身份验证以及手机号验证等措施来提高机器自动登录的门槛。

  3. 账号质量:通过实名认证,微博的动态等方面来计算出用户的质量。

  4. 参与红包:红包战场一贯是刷奖账号的获利主战场, 通过用户平时在微博的行为、属性以及实时的登录状态和常用设备来进行分析,判断是否是正常账号来确定是否可以中奖。

完善的监控

红包系统是一个大而规则复杂的系统,系统越大,依赖的资源越多,也就越容易出现各种各样的问题。为了给提供稳定运行的服务,必须要能时刻知晓各个资源当前的运行状态。并且在系统出现异常之前或者出现异常的时候,对问题进行排查和定位。

(点击放大图像)

如上图所示,完善的监控系统,为微博红包顺利度过春晚提供了很好的保障。主要涉及的监控如下:

1、应用层接口响应时间监控

通过实时的分析 access log 日志,以 HTTP code 和响应时间维度实时统计出接口的状态和性能,根据占比来查看接口的健康程度。

2、服务层各模块性能监控

在模块中记录开始时间和结束时间,每次处理完计算出模块的耗时,通过这种方式很好的发现各个模块是否正常。

3、网络层监控

微博红包的出口网络是一个单独的 app 池,出口带宽使用到 80% 的时候网络稳定性就可能受到影响。通过计算后端服务器输出计算出带宽,以便能够做到及时响应扩容。

4、资源层的监控

对各种资源的监控,比如 Redis、MySQL、MC 等资源的连接时间、状态和操作的实时统计分析,快速定位是否存在资源瓶颈。

5、服务器的性能监控

通过运维监控系统,对服务器的 CPU、内存使用情况,做到了能够观察每台服务器具体的运行情况。

6、系统错误日志的监控

系统错误监控包括服务器负载,服务进程状态,资源连接,网络连接出现的问题,实时通过手机,邮件和私信知道。为快速响应创造了条件。

弹性资源管理和调度

1、故障的秒级切换

微博红包服务部署在了三个机房(包括云服务),任何一个机房如果出现网络或者其它不可预测的问题可以在几秒钟之内将服务切换到其它机房。

2、资源的相互独立

资源的相互独立,让资源的可扩展性变得容易。而且使得各个服务之间交叉影响达到了最小。

3、引入阿里云做为第三机房,使用 Docker 快速部署服务

红包的核心服务主要分布在 2 个机房,两者互相做为灾难备份用途,为应对超预期的峰值,引入阿里云做为第三机房。使用定制化的红包 Docker 快速部署服务来实现弹性调度架构。通过 Docker 自动化操作大规模集群,进行弹性调度资源的任务,实现快速部署服务来应付超预期的峰值。

系统的挑战和性能优化

为了保证用户体验,微博红包需要解决以下几个问题:

  1. 系统性能的可靠性

  2. 关键节点的可用性

  3. 如何应对突发热点

  4. 业务频繁迭代的处理

1、系统架构的升级

模块的独立化,避免出现模块间的相互影响。

nginx+lua 的使用,使得服务器的 QPS 有了数量级的提升,同时服务器集群做到了秒级重启。

2、修枝剪页

减少对于系统外部的依赖,梳理完整的调用关系图。非核心功能使用异步调用,合并相关的调用,去掉重复的调用。保证核心调用逻辑,避免非核心业务影响核心业务。

3、多级缓存

服务端本地缓存,使用 nginx 本身缓存和服务器的 L0 缓存,来提升模块的响应速度,做到了 90% 以上核心接口的响应时间在 50ms 以内,减少了进程等待时间,提升了服务器的处理速度。

一年一度的各大平台抢红包还会延续下去,这是一个斗智斗勇的过程,在服务器有限的情况下每一次与峰值的对抗都是对技术一次极大的挑战,每次挑战都是带来技术上的成长和收获。


感谢郭蕾对本文的策划和审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2016-02-29 16:3314483

评论

发布
暂无评论
发现更多内容

Android事件分发机制源码解析,最新Android通用流行框架大全

android 程序员 移动开发

Android冷启动优化解析,字节跳动8年老Android面试官经验谈

android 程序员 移动开发

Android-悬浮窗功能的实现(附Java、KT实现源码,Android黑科技实现原理揭秘

android 程序员 移动开发

Android-框架问题分析案例---谁杀了桌面-,android软件开发教程

android 程序员 移动开发

Android-面试中常问的MMAP到底是啥东东?原理及应用解析

android 程序员 移动开发

Android-黑科技保活实现原理揭秘,字节跳动Android内部学习资料泄露

android 程序员 移动开发

Android—Dagger2-让你爱不释手--终结篇(附视频讲解(1)

android 程序员 移动开发

Android-样式系统---主题背景属性,最新金九银十Android面试合集

android 程序员 移动开发

Android-面试-Jetpack-LiveData-你必须滴知道得知道的那些玩意儿

android 程序员 移动开发

Android-面试官:View-post()-为什么能够获取到-View-的宽高-?

android 程序员 移动开发

Android—案例分析解读:观察者模式,androidstudio社区

android 程序员 移动开发

Android-Studio-教程:入门开发第一个程序,真牛皮

android 程序员 移动开发

Android10填坑适配指南,实际经验代码,拒绝翻译,android开发书籍pdf下载

android 程序员 移动开发

AndroidStudio Gradle第三依赖统一管理,移动端开发技术

android 程序员 移动开发

Android中级面筋:开发2年的程序员如何短期突击面试?跟着这几步去准备

android 程序员 移动开发

Android-架构组件的最新进展,安卓工程师面试题及答案

android 程序员 移动开发

Android-系统预设-App,有什么难的?,关于Android开发的面试经验总结

android 程序员 移动开发

Android-适配各国语言、屏幕尺寸、系统版本及常见适配方法总结

android 程序员 移动开发

AndroidX,安卓framework开发

android 程序员 移动开发

Android修炼系列(八),2021年Android开发者跳槽指南

android 程序员 移动开发

Android全面解析之Handler机制:常见问题汇总,三级缓存和二级缓存的区别

android 程序员 移动开发

Android-怎么就不卡了呢之Choreographer,怒斩腾讯和阿里的Offer

android 程序员 移动开发

Android-是不是要跪了-我几乎是一个废安卓了!,kotlin开发框架

android 程序员 移动开发

Android-气泡对话框(根据被点击View位置显示、可定制,移动端开发

android 程序员 移动开发

Android-源码分析-Dalvik-虚拟机创建过程,干货整理

android 程序员 移动开发

Android—Dagger2-让你爱不释手--终结篇(附视频讲解,Flutter全方位深入探索

android 程序员 移动开发

Android-_巧_仿蚂蚁森林水滴动效,Android开发技巧

android 程序员 移动开发

Android-音视频学习系列-(三)-Shell-脚本入门,高级安卓工程师面试题

android 程序员 移动开发

Android之使用Assets目录中的xml布局、网页、音乐等资源

android 程序员 移动开发

Android从零开始搭建MVVM架构(4),Android开发进阶吃透这一篇必拿60W年薪

android 程序员 移动开发

Android入门项目(六)Android的wifi开发,flutter旋转动画

android 程序员 移动开发

  • 扫码添加小助手
    领取最新资料包
解密微博红包:架构、防刷、监控和资源调度_语言 & 开发_柯立志_InfoQ精选文章