微信红包的支撑架构原理是什么?

每次到过年过节的时候,我们总是会在群里发上几个红包,那么全国各地的人都在发红包,服务器端要处理的请求量非常大,那么它是怎么实现能处理这么多请求的呢?

那么他就涉及到了以下几个特点:

高并发

快速响应

高处理量

那么我们如何实现高并发?

说到高并发,我们一般采用的使用集群的方式解决单个服务器硬件上的不足,集群可以采用nginx进行负载均衡,将程序模块化,但是他会增加服务器之间的网络io,虽然会有那么一点的浪费,但是为了保证服务器硬件上的支持,我么还是选择使用集权吧。。。

那么我们又是如何实现的快速响应的呢?

快速响应一般指的就是cpu的使用,因为同一时间一个cpu只能处理一个数据,那么我们就只能从减少每一个数据的cpu占用时间来下手,那么cpu性能的浪费有主要体现在他的等待时间,比如我们的cpu要进行一个a+b的操作,但是a和b都是网络传输过来的,这时我们就可以在cpu等待资源过来前的这段时间,rangcpu去处理别的请求,那么我们顺藤摸瓜就能想出来,应该有一个队列去存储它要进行得操作,保证任何时间cpu都在处理数据,这样消息队列的概念也就出来了。

存储方面我们为了加快io可以使用cache缓存数据库,这样可加快读写速度,因为我们的时间浪费一般浪费在io上边(网络io或者本地磁盘io等),因此数据库可以选择缓存数据库。

为了降低服务器的压力,微信采用了将红包在发送者客户端进行计算分割的功能,即红包被发过来时已经被分好份,而且我们在进行网络传输时要尽量传字符串,因为字符串不需要进行序列化和反序列化(及其耗费资源的一项工作)。

那么使用缓存式数据库,我们如何保证服务器意外关机导致数据丢失呢?

这是我们就可以采用双写或者多写,即同时写入至少两个缓存数据库,进行数据备份,那么我们的内存终究是有限的,因此我们也要定期将数据写入关系数据库,以便长久保存。

系统架构图如下:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181214G0IWGY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励