10

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

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzA3NTIyODUzNA%3D%3D&%3Bmid=2649590449&%3Bidx=5&%3Bsn=048845acf29e0bd5857105fe5f8d9655
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

nuEvem7.jpg!web

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

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

eYzyQbY.jpg!web

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

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

aYbMRrY.jpg!web

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

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

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

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

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

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

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

应对高并发三大法门

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

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

QRBBVjZ.jpg!web

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

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

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

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

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

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

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

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

-End-

rauiyy.jpg!web

Rvamuuv.gif


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK