如果几亿人改微信号,腾讯扛得住吗?

你改微信号了吗?6 月 5 日,微信官方微博和公众号,同时发消息称,最新的微信安卓版,支持修改微信号。

如一位网友所预测,消息很快登上热搜,看来这一功能是很多人的痛。

微信号就是微信 ID,即便有人跟你的微信昵称一样,但是微信 ID 仅此一份。就好比,世界上会有和你重名的人,但绝对不会有和你身份证号码一模一样的人。

不同于身份证号码,是按照地域和出生年月设置的,微信号是可以随心设置的,于是微信号就成了生日墙、表白墙以及代表着各种含义的自留地:有人用前任名字缩写作为微信号,有人用生日作为微信号。假如现女友问他微信号的字母是啥意思,场面估计会很尴尬。

图 | 来源 “微信派” 公众号

所以,很多用户早就呼吁张小龙,赶紧上线修改微信号的功能。不过目前,微信 iOS 版还未上线该功能。再就是,微信号每年只能修改一次。所以,就算改也得想好再改。

对于用户来说,修改微信号就是动动手指的事,但对于上线该功能的微信工程师,可就没有这么简单。

修改微信号,本质就是增删

知乎科技博主、前百度 Web 服务工程师霄池告诉 DeepTech,用户在修改 App ID 时,从最通俗的角度来讲,后台需要执行一次删除操作,一次增加操作。

对微信号最经常的操作,不是修改、而是查询。而为了优化查询,后台肯定有一套索引机制(B 树或者是 Hash 表)。

在增删操作时,为了保证那些同时进行的查询操作的正确性,要将数据锁住(让某些查询操作暂停),这一步骤也叫加锁,这一步骤通常会用到 Java 语言,通常还得借用一些中间件、数据库和第三方组件。

应对高并发三大法门

原理已经搞清楚,那么在目前,就算不是所有安卓用户都要改微信号,但以微信的体量,百万级用户同时修改微信号,并非没有可能。

这时就涉及到高并发,高并发很好理解,比如鹿晗当初公布恋情,导致微博瘫痪,这就是没有处理好高并发的后果。当时是“十一”,处理该瘫痪的微博程序员小哥,愣是婚礼进行到一半,不得已抱着电脑修 Bug。

图 | 新浪程序员婚礼上修 Bug

所以,高并发指的是:大量用户在同一时间点、同时访问同一 API 接口或者 URL 地址。严格意义上来说,大量用户同时修改微信号,也存在高并发风险。

但是,解决起来也并不难。霄池告诉 DeepTech,应对高并发写入的第一种办法通常是分片。比如将微信号散列并杂凑之后(即 Hash、哈希),根据开头数字的不同,把微信号存放于几个不同的数据库服务器里,就能有效缓解压力。

当然这么做的时候,要考虑到查询操作的逻辑,即根据散列和杂凑之后的开头数字,去不同的服务器里查询。

此外,分片做法还有个好处,就是可以动态上下服务器,从而最大程度降低宕机可能性。

第二种办法是限流,好比地铁早高峰时,工作人员会举出小牌牌、让乘客分批走一样。对于海量用户同时修改微信号,可以用一个消息队列、去抹平波峰。这一般也需要和运营同事来配合,比如声称修改 ID 需要 1-2 个工作日的审核。

第三种办法,对用户体验比较好的方式,就是多准备几台服务器。现在服务器的价格,也比较低廉,微信完全可以在发布改名公告之前,提前准备好上百台服务器。

值得关注的是,微信的多数功能,以往一般是先对 iOS 用户开放,因为只有 iPhone 用 iOS,适配上比较简单。这现在有些新功能,微信也会先对安卓用户开放。看来微信也是有意端平一碗水。最后问问你,你改微信号了嘛?