來源:https://blog . csdn . net/justinjing 0612/article/details/38322353
我們分析了微信、陌陌等。,并把它們發(fā)出去分享(已經(jīng)很久了)。
電源:移動(dòng)設(shè)備最大的瓶頸是電源。因?yàn)橛脩舨荒茈S時(shí)攜帶電源和充電寶。因此,必須考慮電源問題。需要檢查我們的項(xiàng)目是否在后臺(tái)運(yùn)行,心跳包的發(fā)送時(shí)間是否合理。
流量:對(duì)于很多國內(nèi)用戶來說,可能還是每月30M,所以一定要從廣大用戶的角度考慮問題。一個(gè)包只能解決一個(gè)包。
網(wǎng)絡(luò):這也是IM的核心內(nèi)容。對(duì)于我們來說,在任何網(wǎng)絡(luò)下等待順暢的聊天都不是一件容易的事情。很多公司使用xmpp框架。如果是在強(qiáng)大的網(wǎng)絡(luò)環(huán)境下,xmpp完全沒有問題。但是xmpp在那種弱的網(wǎng)絡(luò)環(huán)境下什么都做不了,用戶體驗(yàn)很垃圾。
個(gè)人覺得xmpp可以拿來玩玩(參考RFC3920和RFC3921),但遠(yuǎn)沒有被當(dāng)做真貨使用。如果你遇到一個(gè)正在做IM的朋友,一直在說xmpp,那就不需要交流了。肯定不是好產(chǎn)品。微信和QQ之前都用過xmpp,但是最后放棄了xmpp,說明xmpp有很多缺點(diǎn),消息太大,臃腫浪費(fèi)流量。為了保證穩(wěn)定性,微信采用長鏈接和短鏈接相結(jié)合的方式,例如:
1.兩個(gè)域名
微信分為http模式(短鏈接)和tcp模式(長鏈接),分別處理狀態(tài)協(xié)議和數(shù)據(jù)傳輸協(xié)議。
short . weixin . QQ . comdnscheck(112 . 64 . 237 . 186112 . 64 . 200 . 240)
long . weixin . QQ . comdnscheck(112 . 64 . 237 . 188112 . 64 . 200 . 218)
2.描述
2.1 short.weixin.qq.com
是HTTP協(xié)議的擴(kuò)展,運(yùn)行端口8080,http body是protobuf。
主要用途(界面):
用戶登錄驗(yàn)證;好友關(guān)系(獲取,添加);消息sync (newsync),自有sync機(jī)制;獲取用戶圖像;用戶注銷;行為日志上報(bào)。朋友圈發(fā)表刷新2.2 long.weixin.qq.com
Tcp長連接,端口8080,類似于微軟activesync二進(jìn)制協(xié)議。
主要用途(界面):
接受/發(fā)送文本消息;接受/發(fā)送語音;接受/發(fā)送圖片;接受/發(fā)送視頻文件等。以上所有請(qǐng)求都基于tcp長連接。發(fā)送圖片和視頻文件時(shí),分為兩種請(qǐng)求;第一個(gè)請(qǐng)求是縮略圖,第二個(gè)請(qǐng)求是完整數(shù)據(jù)。
2.2.1在數(shù)據(jù)信息方面
增量上傳策略:每次8k左右大小數(shù)據(jù)上傳,服務(wù)器確認(rèn);在繼續(xù)傳輸。圖像上傳:
先傳縮略圖,傳文本消息,再傳具體文件下載:
3附錄
3.1用戶登錄認(rèn)證
POST/CGI-bin/micro msg-bin/auth HTTP/1.1
接受:**
用戶代理:Mozilla/4.0
內(nèi)容類型:應(yīng)用程序
主持人:short.weixin.qq.com
內(nèi)容-長度:174
3.3消息同步(新聞同步)
POST/CGI-bin/micro msg-bin/newsync HTTP/1.1
主持人:short.weixin.qq.com
用戶代理:安卓QQMail HTTP客戶端
緩存控制:無緩存
連接:保持活力
內(nèi)容類型:應(yīng)用程序/八位字節(jié)流
接受:**
內(nèi)容-長度:206
3.5用戶注銷
POST/CGI-bin/micro msg-bin/iphone unreg HTTP/1.1
接受:*/*
用戶代理:Mozilla/4.0
內(nèi)容類型:應(yīng)用程序
主持人:short.weixin.qq.com
內(nèi)容-長度:271
3.6行為日志報(bào)告
POST /cgi-bin/stackreport?版本= 240000a7 & ampfilelength=1258&。sum = 7ed a 777 ee 26 a 76 a5 c 93 b 233 eed 504 c7d & amp;reporttype = 1 & ampusername=jolestar HTTP/1.1
內(nèi)容-長度:736
內(nèi)容類型:二進(jìn)制/八進(jìn)制流
主持人:weixin.qq.com
連接:保持活力
用戶代理:Apache-Http client/INavailable(Java 1.4)
從目前互聯(lián)網(wǎng)的發(fā)展來看,IM和視頻(包括IM中的視頻通話)是同一個(gè)方向,應(yīng)該成為互聯(lián)網(wǎng)的基礎(chǔ)設(shè)施,就像瀏覽器一樣。目前IM沒有很好的解決方案,XMPP無法獨(dú)立做業(yè)務(wù)邏輯。從IM的本質(zhì)來說,IM其實(shí)是把一個(gè)消息從一個(gè)地方傳到另一個(gè)地方,和TCP很像。為什么不實(shí)現(xiàn)一個(gè)高級(jí)別的TCP協(xié)議,而是用類似XMPP的唯一ID替換TCP/IP中的IP地址,還有很多其他細(xì)節(jié)可以從TCP協(xié)議中復(fù)制。使用這個(gè)協(xié)議,業(yè)務(wù)邏輯基于現(xiàn)有的HTTP服務(wù)器。比如發(fā)送語音和圖片相當(dāng)于上傳一個(gè)文件,服務(wù)器在處理完文件后發(fā)送一個(gè)特殊的IM消息??蛻舳耸盏絀M消息后,會(huì)根據(jù)IM消息中的url,前往HTTP服務(wù)器獲取語音文件和圖片文件。連接HTTP服務(wù)器和IM服務(wù)器后,很多事情都可以做。但把這兩個(gè)服務(wù)器合并在一起并不是什么好事,否則騰訊不會(huì)有2005年的戰(zhàn)略轉(zhuǎn)型。從目前的情況來看,應(yīng)用除了游戲賺不了多少錢,現(xiàn)在能承載賺錢業(yè)務(wù)的主要還是web。IM賺不到錢,但是離不開,就像一個(gè)地方不修路就發(fā)不了財(cái)一樣。
協(xié)議:
除了上面介紹的XMPP,還有json和Protobuf。
JSON相信大家都知道是什么東西,如果不知道,那可就真的OUT了,GOOGLE一下去。這里就不介紹啥的了。Protobuffer是一個(gè)類似JSON的一個(gè)傳輸協(xié)議,其實(shí)也不能說是協(xié)議,只是一個(gè)數(shù)據(jù)傳輸?shù)臇|西罷了。JSON和JSON有什么區(qū)別?
跨語言,這是它的優(yōu)勢之一。它自帶編譯器protocol,可以編譯成JAVA,python,C++代碼。暫時(shí)只有這三個(gè)代碼,其他的就先不要想了,然后就可以直接用了,不用寫其他任何代碼。甚至那些被分析過的也已經(jīng)隨之而來了。JSON當(dāng)然是跨語言的,但是這種跨語言是基于編碼的。
莫莫設(shè)計(jì)
在Momo開發(fā)之初,由于規(guī)模較小,30-40W連接(包括安卓后臺(tái)長連接用戶)也使用XMPP;由于XMPP的缺點(diǎn):流量大(基于XML)、不可靠(針對(duì)傳統(tǒng)固定網(wǎng)絡(luò)設(shè)計(jì),沒有考慮WIFI/2G/3G/地鐵/電梯等復(fù)雜網(wǎng)絡(luò)場景)、交互復(fù)雜(登錄需要5-6次,尤其是TLS握手);XMPP消息丟失的根本原因:服務(wù)器和客戶端處于“半封閉”狀態(tài),客戶端處于虛假連接狀態(tài),服務(wù)器無法收到回執(zhí);服務(wù)器端連接層和邏輯層代碼沒有解耦分離,往往會(huì)因?yàn)橹貑?dǎo)致不可用。
消息中繼:
連接層:
邏輯層:
通信協(xié)議設(shè)計(jì):
協(xié)議設(shè)計(jì)要求:
高效:弱網(wǎng)絡(luò)快速的收發(fā)可靠:不會(huì)丟消息易于擴(kuò)展協(xié)議格式:XMPP/SIP協(xié)議
Redis協(xié)議:
優(yōu)化
連接層(參見通訊服務(wù)器組成):只做消息轉(zhuǎn)發(fā),允許隨時(shí)重啟更新,設(shè)計(jì)原則簡單/異步;單臺(tái)壓測試連接數(shù)70W;現(xiàn)狀:1.5億用戶,月活5000W+,連接數(shù)1200W+;邏輯層(參見通訊服務(wù)器組成):用戶會(huì)話驗(yàn)證即登陸、消息存取、異步隊(duì)列采用私有通訊協(xié)議,目標(biāo):高效,弱網(wǎng)絡(luò)快速收發(fā);可靠:不會(huì)丟消息;易于擴(kuò)展;參考協(xié)議格式:REDIS協(xié)議;參見協(xié)議格式、基于隊(duì)列的消息協(xié)議、基于隊(duì)列的交互、基于版本號(hào)的消息協(xié)議、基于版本號(hào)的交互等;核心的長連接只用于傳輸輕量的實(shí)時(shí)數(shù)據(jù),圖片、語音等都開新的TCP或HTTP連接;一切準(zhǔn)備就緒后,最重要的是監(jiān)控,寫一個(gè)APP檢查所有的運(yùn)行狀態(tài),每天觀察。
如何選擇最優(yōu)路線,即智能路由。二、智能路由和連接策略
多端口、雙協(xié)議支持應(yīng)對(duì)移動(dòng)網(wǎng)關(guān)代理的端口限制支持TCP、HTTP兩種協(xié)議根據(jù)備選IP列表進(jìn)行并發(fā)測速(IP+端口+協(xié)議)后端根據(jù)終端連接情況,定時(shí)更新終端的備選IP列表終端在連接空閑時(shí)上報(bào)測速數(shù)據(jù),便于后端決策TCP協(xié)議不通,自動(dòng)切換到http優(yōu)先使用最近可用IP并發(fā)測速,根據(jù)終端所處的位置下發(fā)多組IP、PORT,只用IP,不用域名手機(jī)上的DNS50%不準(zhǔn)負(fù)載均衡器(LVS...)的問題– 單點(diǎn)失效單點(diǎn)性能瓶頸負(fù)載均衡從客戶端開始做起? 域名負(fù)載的問題域名系統(tǒng)不可靠– 更新延遲大WNS(無線網(wǎng)絡(luò)服務(wù))
1解決移動(dòng)互聯(lián)網(wǎng)發(fā)展中的常見問題:
渠道:數(shù)據(jù)交互、大數(shù)據(jù)上傳、推送
網(wǎng)絡(luò)連接:管理大量長鏈接,鏈接不可用,速度慢,分布在很多地方
運(yùn)營支持:大規(guī)模監(jiān)控和簡化問題定位
登錄&:安全性:登錄身份驗(yàn)證和頻率控制
移動(dòng)互聯(lián)網(wǎng)的特點(diǎn):
1.高延遲:建立通道需要時(shí)間(高RTT)
2.低寬帶高丟包
3.多運(yùn)營商(電信、移動(dòng)、聯(lián)通等。)
4.復(fù)雜網(wǎng)絡(luò)
-2G,3G,4G,wifi .cmwap,cmnet .。
-網(wǎng)關(guān)限制:協(xié)議、端口
5.用戶流動(dòng)性高,互聯(lián)網(wǎng)環(huán)境復(fù)雜
WNS績效指標(biāo):
1.開發(fā)時(shí)間:歷史一年半
2.鏈接成功率-99.9%
3.極端網(wǎng)絡(luò)環(huán)境下的成功率——由于普通應(yīng)用
4.崩潰率-0.02%(崩潰次數(shù)/登錄用戶)
微信后臺(tái)系統(tǒng)架構(gòu)
背景:
一、分布式問題的收斂性
后臺(tái)邏輯模塊以邏輯為主,發(fā)展較快
讀取過時(shí)的數(shù)據(jù)可能是一個(gè)痛點(diǎn)
需要看到一致的數(shù)據(jù)
b、內(nèi)部定義
數(shù)據(jù)有兩個(gè)以上的副本
如果更改成功提交,舊數(shù)據(jù)將不會(huì)返回
扣除:
1添加數(shù)據(jù)
2序列號(hào)生成器,部分序列
約束:只能有一個(gè)客戶端操作
客戶有能力解決沖突
問題轉(zhuǎn)移:如何分發(fā)客戶端?
3修改集群中某個(gè)鍵的值
1)掩護(hù)他
2)根據(jù)值的內(nèi)容進(jìn)行修改
如果值=1,則值:=2
一般解決方案:
1)paxos算法
工程難度
一切都是可控的
分布式算法設(shè)計(jì):
2)法定算法(2011)
然后操作一個(gè)鍵
這是一個(gè)系統(tǒng)約束
類似Paxos的方案,簡化
每次變更的選擇(按鍵)
算法過程
提議/改變/同步/廣播
系統(tǒng)結(jié)構(gòu)
寫過程
復(fù)制和。碎片
稱重點(diǎn)
自主、負(fù)載平衡、擴(kuò)散控制
復(fù)制->;關(guān)系
容災(zāi)偏移
同一城市(上海)的大多數(shù)人幸存了下來
三園(獨(dú)立供電,獨(dú)立)
碎片
一組KV6是一個(gè)單元
1.手動(dòng)階段
局部擴(kuò)張,影響收斂9
2.均勻分布,制作分段hash32(字符串)
雙重?cái)U(kuò)張
3一致性哈希
具體實(shí)現(xiàn)?
1.業(yè)務(wù)面快速發(fā)展
存儲(chǔ)需要提供強(qiáng)大的一致性
豐富的數(shù)據(jù)模型支持(結(jié)構(gòu)化、類似于SQL千伏)
條件閱讀,條件寫作
2業(yè)務(wù)增長迅速,系統(tǒng)應(yīng)該可以方便的橫向擴(kuò)展
3設(shè)備故障/短期節(jié)點(diǎn)有效性成為常態(tài),容災(zāi)自動(dòng)化,主碑無需人工干預(yù)即可書寫
4個(gè)小數(shù)據(jù)
存儲(chǔ)模型
純記憶
比特卡什
小桌系統(tǒng)
LSM樹
小桌系統(tǒng)
1、解決放大問題
2.數(shù)據(jù)根據(jù)變化進(jìn)行聚合存儲(chǔ)
3、受影響1
ChangeTable
(1+2+。。。。+n-1+總計(jì))/n
4.拆分和合并
數(shù)據(jù)流
1.自動(dòng)遷移
2.節(jié)點(diǎn)同時(shí)充當(dāng)代理
3.合并磁盤io
同步流量
1.數(shù)據(jù)與操作
2.冪等的
3.保證策略
通信包數(shù)量
1.動(dòng)態(tài)合并
100K qps
200%-10%
3.權(quán)衡和估計(jì)
設(shè)計(jì)要點(diǎn)
1.吞吐量
2.非同步化
3.復(fù)雜
4、libco
自動(dòng)修理系統(tǒng)
1.不要讓錯(cuò)誤累積
2.全掃描
比特桶的一些變化
1.存儲(chǔ)容量極限
2.全部記憶
1.《im軟件 微信、陌陌等著名IM軟件設(shè)計(jì)架構(gòu)詳解》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請(qǐng)聯(lián)系頁腳下方聯(lián)系方式。
2.《im軟件 微信、陌陌等著名IM軟件設(shè)計(jì)架構(gòu)詳解》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來源地址,http://f99ss.com/yule/1215805.html