微博红包技术最佳实践:架构及运维

简介: 云栖社区2017在线技术峰会红包技术分会上,来自微博红包团队的技术负责人柯立志分享了微博红包背后的技术实践。他介绍了红包的业务场景,从红包塞钱、抽奖、拆包模型、数据一致性、预热、异步化等方面介绍了红包系统的设计思路。此外,他对红包的系统保障和性能优化也进行了分享。

微博红包在春节也是一个比较热门的词汇,经常出现在各种事件流之中,但是微博红包面临的场景比较特殊,比如面临亿级用户的大规模场景,它背后的技术架构和技术结构是怎么样的呢?来自微博红包团队的技术负责人柯立志在云栖社区2017在线技术峰会红包技术分会现场分享了微博红包背后的技术实践。

视频回顾:点击进入

pdf下载:点击进入

红包业务场景

今年的场景新增了传送门和粉丝红包。传送门主要是通过用户下拉feed流获得红包,可以连续抢,得到奖品。粉丝红包有口令红包和普通红包,红包的业务规模如下图所示。

61f12037a54b273a119626cc45aafc4450a43c11 

红包面临的挑战包括:单个红包数额大;亿级别用户参与,覆盖全微博用户;红包种类多,业务复杂;整点准时抢,高并发访问量、瞬间峰值高;互动时间短,同步更新红包状态;多机房数据一致性保证。

红包系统设计

c0982430f4330af778de47ce8b3eb516aa5a60fb 

红包系统的整体架构包括应用层、服务层、资源层。应用层主要是用户的入口,任何一个用户进来之后都需要对其状态进行验证,所以需要进行用户状态验证。服务层包括各个服务模块,资源层则用到了数据库、Redis、MC、消息队列等。

红包塞钱

红包塞钱实现过程是:用户通过向客户端塞钱进红包,然后使用微博支付,经过队列后进行拆包服务,其他用户可以进红包进行抽取。在用户进红包之前,微博已经在队列中做了一些拆包的服务。

红包抽奖

99c3193729db73a7c9a641c2ad98494f39b997b5 

如上图所示,其中更新的红包状态包括用户的状态和红包剩余金额等。在红包的抽取过程中大量使用了异步处理,这样保证了用户前端的可用性。

红包拆包模型

01cee0b4c2d9d9ba6bbec0710b167b11bfda5c05 

微博拆包的金额在0.5-200元之间。最初采用了通用模型设计,保证了大额的、100左右的金额,导致了0.5的比较多。之后,采用了基于正态分布的模型,对红包进行插值使得整个红包的金额分配更趋于合理。处理大额拆包时,做到了10万以下金额秒级可以拆。对于10万以上金额先拆分成10万以下金额再进行拆分。

特定场景选定合适实现方式

3cffc84a2d27f26a295fe5a0b16c589c95fc7275 

最初的实现是通过Nginx后端PHP服务以及存储资源实现的。经过调研后,采用了Nginx的高并发可用性,基于lua脚本语言实现应用层的服务。这样能够让单台服务器的并发数量能有数量级的提升。其缺点是对于快速业务耗费的人力成本和调试成本更高。

数据一致性保证

在红包分发期间,微博用到的设备包括微博自有机房、阿里云包月机房、阿里云动态扩容(根据峰值实时动态扩容)。同时,各个机房之间MC的缓存需要同步,并且同步机制需要达到毫秒级才能保证所有用户看到的红包状态均一致。缓存资源的实现通过消息队列实现,若消息队列发现缓存积压的资源比较多,可以通过实时的删写来减少(前提是三个部署都存在,如果动态扩容则删写,如果动态扩容收容则不删写)。阿里云的机器都是实时分配的,所以我们需要有快速响应的机制来更快的进行扩容和对MC缓存资源的写。

预热

c69b8cf10d6b7a1f11eb2fc5d85f2a0945723cd2 

春晚当天,微博红包当晚从20点开始每个整点的推送。为了减少对应接口的用户信息,提前预热了一批MAU用户,减少可能由于峰值带来用户服务系统压力,在当天预热了MAU用户数据,这样做可以保证在每个整点时间到来之前的红包数据为热数据。

异步化

8ac3843698d1271ead069bb03a5560d82fac6fdf 

异步化就是用消息队列来处理一些类似于用户时间比较长或者需要消耗大量资源的处理。比如抽奖,在抽奖的核心逻辑里,运营可配置、用户信息、红包状态的判断均用到了异步化来验证当前的用户是否中现金、卡券或者其他奖品。用户中奖后,奖品将进入队列,进行现金兑账、现金进钱包、发私信,这样就给前端用户的抽奖节省了大量的时间,使得前端的接口响应时间非常快。

红包保障体系

监控

dd4d290e03d464ab2c0ff77a83b8ea91003d4c7b 

系统保障的前提是监控,监控主要通过五个层面来进行的。网络监控主要是监控专线带宽,微博在春节期间大量使用阿里云的机器,对于专线的监控是有必要的。服务监控主要是自有服务的监控,类似监控feed接口、客户端拆和抽、传送门等服务的响应时间以及服务接口返回的状态。设备监控主要是前端机、服务器的监控,包括CPU、内存、网卡等的监控。资源监控涉及到缓存资源、存储资源,资源也是通过网络协议进行调用的,所以网络层面的问题会导致资源的可用性降低、响应时间变长。所以在应用层或者底层架构上都对资源所涉及的相关端口做了一些监控,比如每一次连接的响应时间、操作的响应时间、每一种响应时间的占比。接口监控主要依赖于其他接口,类似于用户信息的接口、微博钱包支付接口、卡券接口。

预案和干预手段

预案主要做了两类,一类是能够快速扩容,因为在每一个推广的时间段都申请了部分冗余的服务器,如果负载异常则会实时部署上去;一类是快速切换,通过切层的切换快速应对突发情况。

服务降级主要在服务异常或者负载过高时对非核心链路进行降级。

系统性能优化

性能

2738a1fa607b8e6012b90a77c185affd8d6cfd16 

红包是由各个模块组成的,所以要对各个模块进行性能检测。性能检测的前提是制定性能指标,指标主要通过响应时间、接口输出大小制定。然后进行模块性能压测,分析模块具体消耗(时间及输出大小),根据具体点进行模块优化,直到模块性能达到标准才停止循环。

容量评估

7308dfc4ca19b75f4f0a42943aa5e287b3357e0f 

根据目前应用场景用户的DAU和MAU去预估在某个时间点最大的QPS。根据最大的QPS以及单机所承载的QPS预估应用服务器的数量。根据接口依赖程度、接口访问量占比预估每个接口输出的带宽,预算出整体的带宽占用来进行带宽方面的扩容以及预演。资源占用的评估主要根据最大的QPS以及后端端口资源需要使用的数量来评估,保证在出现预估范围内QPS时系统服务的稳定。

相关文章
|
14天前
|
运维 监控 Cloud Native
自动化运维的魔法书云原生之旅:从容器化到微服务架构的演变
【8月更文挑战第29天】本文将带你领略自动化运维的魅力,从脚本编写到工具应用,我们将一起探索如何通过技术提升效率和稳定性。你将学会如何让服务器自主完成更新、监控和故障修复,仿佛拥有了一本能够自动翻页的魔法书。
|
4天前
|
Cloud Native 持续交付 云计算
云原生技术在现代IT架构中的革新角色
随着数字化转型的浪潮席卷全球,企业对信息技术的需求日益增长。本文将探讨云原生技术如何推动现代IT架构的创新和优化,包括容器化、微服务架构、持续集成与持续部署(CI/CD)等核心概念。通过实际案例分析,我们将了解这些技术是如何帮助企业提升灵活性、加速产品上市时间并降低运营成本的。文章旨在为读者提供云原生技术的全面视角,揭示其在现代IT战略中不可或缺的地位。
|
7天前
|
Kubernetes Cloud Native Docker
云原生技术:容器化与微服务架构的融合之道
【9月更文挑战第4天】在数字化时代的浪潮下,企业追求敏捷、高效、可扩展的IT架构成为共识。云原生技术作为现代软件部署的黄金标准,其核心理念在于推动应用的快速迭代与无缝迁移。本文将深入探讨云原生技术的精髓——容器化与微服务架构如何相互促进,共同构建起适应云计算环境的应用生态系统。我们将通过实际案例,揭示如何在云平台上利用这些技术实现服务的解耦、弹性伸缩及自动化管理,进而提升企业的竞争力。
|
9天前
|
机器学习/深度学习 人工智能 运维
智能化运维:AI技术在IT管理中的创新应用
本文将探讨如何运用人工智能技术优化IT运维流程,提升效率并减少人为错误。我们将从智能监控、自动化响应到预测性维护等方面,分析AI在现代IT运维中的角色和价值。文章旨在为读者提供一种全新的视角,理解AI技术如何成为IT部门的强大盟友,并指出实施这些技术时可能遇到的挑战及应对策略。
|
16天前
|
Kubernetes Cloud Native 开发者
云原生技术在现代IT架构中的应用与挑战
【8月更文挑战第27天】 随着云计算的飞速发展,云原生技术已经成为推动企业数字化转型的重要力量。本文将深入探讨云原生技术的核心概念、优势以及在实际应用中遇到的挑战,并通过具体代码示例展示如何利用云原生技术优化IT架构。
|
15天前
|
安全 网络安全 数据安全/隐私保护
云原生技术探索:容器化与微服务架构的实践之路网络安全与信息安全:保护数据的关键策略
【8月更文挑战第28天】本文将深入探讨云原生技术的核心概念,包括容器化和微服务架构。我们将通过实际案例和代码示例,展示如何在云平台上实现高效的应用部署和管理。文章不仅提供理论知识,还包含实操指南,帮助开发者理解并应用这些前沿技术。 【8月更文挑战第28天】在数字化时代,网络安全和信息安全是保护个人和企业数据的前线防御。本文将探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。文章旨在通过分析网络安全的薄弱环节,介绍如何利用加密技术和提高用户警觉性来构建更为坚固的数据保护屏障。
|
16天前
|
运维 开发者 Docker
Docker容器化技术在运维中的应用实践
【8月更文挑战第27天】本文旨在探讨Docker容器化技术如何在现代运维工作中发挥核心作用,通过深入浅出的方式介绍Docker的基本概念、优势以及实际应用场景。文章将结合具体案例,展示如何利用Docker简化部署流程、提高资源利用率和加强应用的可移植性。读者将获得对Docker容器技术在实际运维中应用的全面认识,并能够理解其在提升运维效率与质量方面的重要性。
|
17天前
|
缓存 运维 监控
打造稳定高效的数据引擎:数据库服务器运维最佳实践全解析
打造稳定高效的数据引擎:数据库服务器运维最佳实践全解析
|
18天前
|
JSON 测试技术 API
探索微服务架构下的API设计最佳实践
微服务架构的普及带来了开发灵活、可扩展的系统的新机遇,但同时也对API设计提出了更高的要求。有效的API设计不仅影响系统的可维护性和可扩展性,还直接影响开发效率和用户体验。本文将深入探讨在微服务架构下如何设计高效、可靠的API,重点介绍RESTful API设计原则、版本控制策略、身份认证机制及错误处理最佳实践,并结合实际案例提供具体的实现建议。
|
12天前
|
Kubernetes Cloud Native 调度
云原生技术实践:构建高效、可扩展的微服务架构
本文深入探讨了云原生技术在现代软件架构中的应用,特别是如何利用这些技术构建高效、可扩展的微服务架构。文章首先介绍了云原生的基本概念和优势,然后通过一个实际案例,展示了如何使用Kubernetes和Docker等工具来部署和管理微服务。最后,文章还讨论了云原生技术面临的挑战和未来的发展趋势。 【8月更文挑战第31天】

热门文章

最新文章