日本欧美在线视频免费观看_yy111111少妇嫩草影院_国产亚洲精品久_成人毛片免费看_免费人成黄页在线观看忧物_免费看的av_中午字幕在线观看

微信后臺技術“干貨們”帶來的啟發

2017-06-17

循證與決策路徑

在前文中提過,循證大概是我們讀技術干貨文章的一個原始訴求,通過分析別人走過的路徑,來撥開自己技術道路探索上的迷霧。

關于 IM 類消息應用最重要的一個技術決策就是關于消息模型,微信采用了存儲轉發模型,其具體描述如下(參考[1]):

消息被發出后,會先在后臺臨時存儲;為使接收者能更快接收到消息,會推送消息通知給接收者;最后客戶端主動到服務器收取消息。
簡單描述這個模型就是三個步驟:

消息接收后在服務端臨時存儲,并通知發送端已發送成功。
通知接收端有消息,請來拉取。
接收端收到通知后,再來拉取真正的消息。
初一看這個模型多了一層通知再拉取的冗余,為什么不直接把消息推下去?對,最早期我們自己做 IM 就設計的先嘗試直接推消息下去,若接收端沒有確認收到,再臨時存儲的模型。后者減少了臨時存儲的量和時間,也沒有一個多余的通知。

但后面這個模型增加了另一層復雜度,在早期的 PC 互聯網時期,推送并確認效率還算挺高的,但在移動環境下,就不太行了。而且引入了移動端,實際就導致了另一層復雜性,多終端在線,多終端確認,多終端已讀和未讀,都需要在服務端記錄各個端的狀態。所以,之后我們也就慢慢演變成同時存儲和推送消息的并行模型,存儲是為了方便各終端拉取各自的離線消息,但推送因為需要考慮舊終端版本的支持,還得直接推消息本身而并不容易簡化成消息通知來取消掉消息的接收確認過程。

循證,即便你看到了一個更好的方式,但也要結合自身的實際情況去思考實踐的路徑。所以,如今我們的模型相比微信是一個更妥協的版本,若是五年多前要改成微信這樣的模型,也許只需要一兩個程序員一周的時間。但如今也許需要好幾個不同的開發團隊(各終端和后端)配合弄上一兩個季度也未必能將所有用戶切換干凈了。

切磋與思考方式

IM 中還有個大家特別常用和熟悉的功能 —— 群消息。關于群消息模型,微信采用的是寫擴散模型,也就是說發到群里的一條消息會給群里的每個人都存一份(消息索引,參考[1])。這個模型的最大缺點就是要把消息重復很多份,通過犧牲空間來換取了每個人拉取群消息的效率。

好多年前我們剛開始做群時,也是采用了的寫擴散模型,后來因為存儲壓力太大,一度又改成了讀擴散模型。在讀擴散模型下,群消息只存一份,記錄每個群成員讀取群消息的偏移量(消息索引號,單調增長)。之所以存儲壓力大在于當時公司還沒有一個統一的存儲組件,我們直接采用的 Redis 的內存存儲,當時原生的 Redis 在橫向和縱向上的擴展性上都比較受限。這在當時屬于兩害相權取其輕,選擇了一個對我們研發團隊來說成本更低的方案。

再后來公司有了擴展性和性能都比較好的統一存儲組件后,實際再換回寫擴散模型則更好。畢竟讀擴散模型邏輯比較復雜,考慮自己不知道加了多少個群了,每次打開應用都要檢查每個群是否有消息,性能開銷是呈線程遞增的。唯一的問題是,寫好、測好、上線運行穩定幾年的程序,誰也不想再去換了對吧,每一次的技術升級和架構優化其實是需要一個契機的。

另外一個是所有分布式后臺系統都有的共性問題 —— 性能問題。只要你的用戶量到了一定規模,比如 100 萬,以后每上一個量級,對技術支撐的挑戰實際上并不是呈線性的。微信春晚紅包的案例(參考[2])給出了一個很好的參考和啟發,因為市面上幾乎很少有系統能到這個量級了。

微信 2015 年春節的紅包峰值請求是 1400 萬每秒,而微信后臺其實也采用了微服務的架構,其拆分原則如下(參考[1]):

實現不同業務功能的 CGI 被拆到不同 Logicsrv,同一功能但是重要程度不一樣的也進行拆分。例如,作為核心功能的消息收發邏輯,就被拆為 3 個服務模塊:消息同步、發文本和語音消息、發圖片和視頻消息。
服務拆散了,在自動化基礎設施的輔助下,運維效率下降不大,而開發協作效率會提升很多,但性能會下降。那么在面對微信春晚紅包這樣的極端性能場景下,該如何應對?在電商里,正常下單和秒殺下單多是分離的兩套系統來支撐,秒殺專為性能優化,簡化了很多正常流程,而且秒殺本身需要支持的 sku 不多,所以它具備簡化的基礎。而微信給出的方案中實際也是類似的思路,但它有個特殊點在于,能把拆散的服務為了性能又合并回去。

在如此海量請求之下,在這個分布式系統中,任何一點網絡或服務的波動都可能是災難性的。最終我們選擇把搖一搖服務去掉,把一千萬每秒的請求干掉了,把這個服務挪入到接入服務。但這樣做,有一個前提:不能降低接入服務的穩定性。因為不單是春晚搖一搖請求,微信消息收發等基礎功能的請求也需要通過接入服務來中轉,假如嵌入的搖一搖邏輯把接入服務拖垮,將得不償失。
這里面的黑科技在于 C++ 技術棧的優勢,同一臺接入服務器上實際由不同的進程來處理不同的功能,達到了隔離的效果。而不同進程間又可以通過共享內存來通信,這比用 Socket 網絡通信高效多了,又有效的規避了網絡層帶來的波動性影響,這是我們用 Java 做后臺沒法做到的事。

切磋,你不能看見別人的功夫套路好,破解難題手到擒來,就輕易決定改練別人的功夫。表面的招式相同,內功可能完全不同,就像金庸小說里的鳩摩智非要用小無相功催動少林七十二絕技,最后弄的自廢武功的結局。切磋主要是帶給你不同的思維方式,用自己的功夫尋求破解之道。

連結與有效提取

如何選擇干貨,我在前文《技術干貨的選擇性問題》中最后給出的結論是,給自己結一張網,形成知識體系。暫時離你的網太遠的技術潮流性的東西,可以暫不考慮,結合功利性和興趣原則去不斷編織和擴大自己的技術之網。在編織了一些新結點入網后,就需要進一步有效提取這些結點的價值。

剛做 IM 時,曾經有個疑惑,就是 IM 的長連接接入系統,到底單機接入多少長連接算合適的?很早時運維對于長連接有個報警指標是單機 1 萬,但當時我用 Java NIO 開 2G 最大堆內存,在可接受的 GC 停頓下,在一臺 4 核物理機上測試極限支撐 10 萬長連接是可用的。那么平時保守點,使用測試容量的一半 5 萬應該是可以的。

之后一次機會去拜訪了當時阿里旺旺的后端負責人,我們也討論到了這個長連接的數量問題。當時淘寶有 600 萬賣家同時在線,另外大概還有 600 萬買家實時在線。所以同時大概有 1200 萬用戶在線,而當時他們后端的接入服務器有 400 臺,也就是每臺保持 3 萬連接。他說,這不是一個技術限制,而是業務限制。因為單機故障率高,一旦機器掛了,上面的所有用戶會短暫掉線并重連。若一次性掉線用戶數太多,恢復時間會加長,這會對淘寶的訂單交易成交產生明顯的影響。

他還說了一次事故,整個機房故障,導致單機房 600 萬用戶同時掉線。整個故障和自動切換恢復時間持續了數十分鐘,在此期間淘寶交易額也同比下降了約 40% 左右。因為這種旺旺在線和交易的高度相關性,所以才限制了單機長連接的數量,而當時已經有百萬級的單機長連接實驗證明是可行的。

在微信春晚紅包的那篇文章里提到:

在上海跟深圳兩地建立了十八個接入集群,每個城市有三網的接入,總共部署了 638 臺接入服務器,可以支持同時 14.6 億的在線。
簡單算一下,大概就是 228.8 萬單機長連接的容量規劃,14.6 億怕是以當時全國人口作為預估上限了。實際當然沒有那么多,但估計單機百萬長連接左右應該是有的。這是一個相當不錯的數量了,而采用 Java 技術棧要實現這個單機數量,恐怕也需要多進程,不然大堆的 GC 停頓就是一個不可接受和需要單獨調優的工作了。

連結,便是這樣一個針對同一個問題或場景,將你已知的部分連結上新的知識和實踐,形成更大的網,再去探索更多的未知。

日本欧美在线视频免费观看_yy111111少妇嫩草影院_国产亚洲精品久_成人毛片免费看_免费人成黄页在线观看忧物_免费看的av_中午字幕在线观看
色综合久久中文字幕综合网| 91电影在线观看| 97se亚洲国产综合自在线不卡| 亚洲成av人影院| 波多野结衣在线一区| 99国产欧美另类久久久精品| 首页国产欧美日韩丝袜| 欧美三区在线观看| 欧美日韩第一区日日骚| 91精品国产综合久久精品| 日本一区二区三区免费乱视频| 国产日韩精品一区二区三区| 欧美三级电影在线看| 成人综合婷婷国产精品久久| 中文一区一区三区高中清不卡| 亚洲欧美日韩综合aⅴ视频| 国产一二精品视频| 久久这里只有精品视频网| 久久不见久久见中文字幕免费| 大胆欧美人体老妇| 免费的成人av| 国产欧美一区二区精品性色超碰| 国产高清不卡一区二区| 国产日产精品1区| 99re在线精品| 高清在线不卡av| 亚洲伊人色欲综合网| 欧美精品tushy高清| 激情欧美日韩一区二区| 777久久久精品| 欧美性猛交xxxxxx富婆| 精品一区在线看| 中文字幕日本不卡| 欧美精选午夜久久久乱码6080| 男女男精品视频网| 免费一级片91| 激情深爱一区二区| 一区二区三区在线免费| 欧美一二三区在线观看| 国产69精品久久777的优势| 国产一区二区三区在线观看免费 | 欧美视频日韩视频| 91蜜桃传媒精品久久久一区二区| 9191成人精品久久| 国产成人一区二区精品非洲| 国产一区二区剧情av在线| 国产精品18久久久久久久久| 亚洲一区在线观看视频| 精品国产乱码久久久久久老虎| 午夜一区二区三区在线观看| 国产伦精一区二区三区| 亚洲激情网站免费观看| 久久精品夜色噜噜亚洲a∨| 精品一区二区av| 国产毛片精品国产一区二区三区| 一区二区高清在线| 国产精品视频一二三区| 日韩欧美aaaaaa| 欧美日韩国产美| 欧美成人猛片aaaaaaa| 国产乱子伦视频一区二区三区 | 久久众筹精品私拍模特| 成人免费视频在线观看| 日本人妖一区二区| 午夜精品久久久久久久99樱桃| 国产精品剧情在线亚洲| 日韩一区二区三区在线| 欧洲国内综合视频| 亚洲成人av电影| 麻豆国产精品官网| 国产精品国产三级国产aⅴ中文| 日韩一区和二区| 国产精品嫩草影院com| 国产精品丝袜久久久久久app| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美老女人在线| 国产精品美女久久久久av爽李琼| 国产亚洲1区2区3区| 亚洲一二三四区| 亚洲一区免费在线观看| 国产不卡视频一区二区三区| 欧美日韩三级在线| 亚洲日本免费电影| 精品伦理精品一区| 一区二区三区中文字幕| 国产精品一区二区黑丝| 91精品国产91久久久久久最新毛片| 91.com在线观看| 中文字幕视频一区| 国产suv精品一区二区6| 色综合天天综合网天天看片| 菠萝蜜视频在线观看一区| caoporn国产精品| 久久亚洲精品国产精品紫薇| 日日夜夜免费精品视频| 91成人免费在线视频| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 亚洲六月丁香色婷婷综合久久| 夜夜揉揉日日人人青青一国产精品 | 美美哒免费高清在线观看视频一区二区 | 亚洲成人资源网| 91视频你懂的| 亚洲欧美另类小说视频| 91免费看`日韩一区二区| 欧美人妖巨大在线| 亚洲国产精品一区二区久久| 欧美午夜精品免费| 亚洲一区二区三区三| 欧美亚洲一区二区三区四区| 亚洲一区日韩精品中文字幕| 欧洲视频一区二区| 久久综合色鬼综合色| 精品在线免费视频| 欧美激情在线观看视频免费| 亚洲成av人影院| 在线成人av网站| 综合中文字幕亚洲| 色哟哟一区二区在线观看| 亚洲国产另类av| 精品久久久久久最新网址| 亚洲日本韩国一区| 欧美日韩一级片在线观看| 麻豆精品国产91久久久久久| 国产午夜精品久久| 91视频观看视频| 日本中文字幕一区二区有限公司| 99re热这里只有精品视频| 欧美va亚洲va| 高清国产午夜精品久久久久久| 在线不卡中文字幕播放| 奇米在线7777在线精品| 国产日韩欧美一区二区三区综合| 免费人成在线不卡| 欧美撒尿777hd撒尿| 久久成人羞羞网站| 欧美一区二区黄| 国产美女视频一区| 亚洲高清不卡在线观看| 欧美v亚洲v综合ⅴ国产v| av亚洲精华国产精华| 午夜精品久久久久久久| 国产日韩欧美麻豆| 欧美精品在线观看一区二区| 高清成人免费视频| 国产视频一区在线观看 | 一区精品在线播放| 大尺度一区二区| 亚洲大片精品永久免费| 国产日韩精品久久久| 欧美精品vⅰdeose4hd| 成人污污视频在线观看| 五月激情六月综合| 亚洲免费av观看| 国产嫩草影院久久久久| 国产一区999| 亚洲国产人成综合网站| 欧美日韩精品一区二区三区四区| 亚洲精品一二三| 久久久不卡网国产精品一区| 理论片日本一区| 中文无字幕一区二区三区| 国产一区二区三区蝌蚪| 亚洲综合色网站| 国产精品乱人伦中文| 日韩女优av电影| 欧美亚男人的天堂| 91小视频免费观看| 亚洲精品欧美二区三区中文字幕| av福利精品导航| 精品一区二区三区视频在线观看| 日韩免费观看高清完整版 | 一区二区三区电影在线播| 欧美国产精品v| 国产香蕉久久精品综合网| 精品成人免费观看| a级精品国产片在线观看| 亚洲狠狠丁香婷婷综合久久久| 欧美午夜电影一区| 日本道在线观看一区二区| 日本成人在线电影网| 午夜激情一区二区三区| 亚洲最大成人网4388xx| 亚洲三级小视频| 日韩色在线观看| 欧美一级日韩免费不卡| 欧美一级欧美三级在线观看| 欧美一区二区视频网站| 日韩午夜av电影| 欧美不卡一二三| 久久久99精品久久| 国产精品久久久久影院老司| 欧美日韩午夜精品| 欧美日韩不卡视频| 日韩精品一区在线| 久久久美女艺术照精彩视频福利播放| 99久久婷婷国产综合精品| 99久久99久久精品国产片果冻| 久久精品国产一区二区三区免费看| 国产精品无人区| 欧美一级生活片|