如果幾億人改微信號,騰訊扛得住嗎?
你改微信號了嗎?6 月 5 日,微信官方微博和公眾號,同時發消息稱,最新的微信安卓版,支持修改微信號。
如一位網友所預測,消息很快登上熱搜,看來這一功能是很多人的痛。

微信號就是微信 ID,即便有人跟你的微信昵稱一樣,但是微信 ID 僅此一份。就好比,世界上會有和你重名的人,但絕對不會有和你身份證號碼一模一樣的人。
不同于身份證號碼,是按照地域和出生年月設置的,微信號是可以隨心設置的,于是微信號就成了生日墻、表白墻以及代表著各種含義的自留地:有人用前任名字縮寫作為微信號,有人用生日作為微信號。假如現女友問他微信號的字母是啥意思,場面估計會很尷尬。

圖 | 來源 “微信派” 公眾號
所以,很多用戶早就呼吁張小龍,趕緊上線修改微信號的功能。不過目前,微信 iOS 版還未上線該功能。再就是,微信號每年只能修改一次。所以,就算改也得想好再改。
對于用戶來說,修改微信號就是動動手指的事,但對于上線該功能的微信工程師,可就沒有這么簡單。
修改微信號,本質就是增刪
知乎科技博主、前百度 Web 服務工程師霄池告訴 DeepTech,用戶在修改 App ID 時,從最通俗的角度來講,后臺需要執行一次刪除操作,一次增加操作。
對微信號最經常的操作,不是修改、而是查詢。而為了優化查詢,后臺肯定有一套索引機制(B 樹或者是 Hash 表)。
在增刪操作時,為了保證那些同時進行的查詢操作的正確性,要將數據鎖住(讓某些查詢操作暫停),這一步驟也叫加鎖,這一步驟通常會用到 Java 語言,通常還得借用一些中間件、數據庫和第三方組件。
應對高并發三大法門
原理已經搞清楚,那么在目前,就算不是所有安卓用戶都要改微信號,但以微信的體量,百萬級用戶同時修改微信號,并非沒有可能。
這時就涉及到高并發,高并發很好理解,比如鹿晗當初公布戀情,導致微博癱瘓,這就是沒有處理好高并發的后果。當時是“十一”,處理該癱瘓的微博程序員小哥,愣是婚禮進行到一半,不得已抱著電腦修 Bug。

圖 | 新浪程序員婚禮上修 Bug
所以,高并發指的是:大量用戶在同一時間點、同時訪問同一 API 接口或者 URL 地址。嚴格意義上來說,大量用戶同時修改微信號,也存在高并發風險。
但是,解決起來也并不難。霄池告訴 DeepTech,應對高并發寫入的第一種辦法通常是分片。比如將微信號散列并雜湊之后(即 Hash、哈希),根據開頭數字的不同,把微信號存放于幾個不同的數據庫服務器里,就能有效緩解壓力。
當然這么做的時候,要考慮到查詢操作的邏輯,即根據散列和雜湊之后的開頭數字,去不同的服務器里查詢。
此外,分片做法還有個好處,就是可以動態上下服務器,從而最大程度降低宕機可能性。
第二種辦法是限流,好比地鐵早高峰時,工作人員會舉出小牌牌、讓乘客分批走一樣。對于海量用戶同時修改微信號,可以用一個消息隊列、去抹平波峰。這一般也需要和運營同事來配合,比如聲稱修改 ID 需要 1-2 個工作日的審核。
第三種辦法,對用戶體驗比較好的方式,就是多準備幾臺服務器。現在服務器的價格,也比較低廉,微信完全可以在發布改名公告之前,提前準備好上百臺服務器。
值得關注的是,微信的多數功能,以往一般是先對 iOS 用戶開放,因為只有 iPhone 用 iOS,適配上比較簡單。這現在有些新功能,微信也會先對安卓用戶開放。看來微信也是有意端平一碗水。最后問問你,你改微信號了嘛?