IM明刷,Instant messaging的縮寫,翻譯為中文就是即時通訊满粗。例如QQ辈末,微信等都是即時通訊領域的軟件。俗稱聊天軟件
最近有個想法映皆,對于我兩年的IM開發(fā)經(jīng)歷做個簡要的總結挤聘,本著學習和交流的心態(tài),分幾個篇幅寫出一些自己對于分布式IM系統(tǒng)的理解捅彻,期望能收到大牛的指正和意見组去。本系列文章所說的IM都是指在分布式環(huán)境下的IM系統(tǒng)。
單就分布式系統(tǒng)步淹,就已經(jīng)有很深很深的水了添怔,這里會較多地涉及到分布式系統(tǒng)下的內(nèi)容,正好伴隨著IM的業(yè)務進行自我回顧贤旷。
自己對IM的特性做個非官方的總結:
1. 即時性广料。從字面意思不難理解,IM對于即時性的要求比較高幼驶,需要實時地收到對方發(fā)來的消息艾杏。
2. 可交互。消息雙方的用戶需要能夠對消息作出回應盅藻,即進行交互购桑,互動。如果發(fā)出一片文字過來卻不能與之進行交互氏淑,也算不得IM勃蜘。
3. 高度依賴網(wǎng)絡。在斷網(wǎng)的情況下也不能進行通暢的IM交互假残。
4. 基于可視化或者是可感知的信息缭贡。比如文字炉擅,圖片,語音阳惹,文件谍失,表情。這些都是基于眼睛或者耳朵能感知到的莹汤。你不能在網(wǎng)上傳遞一個溫暖的懷抱給對方吧快鱼?或者說你不能通過IM給對方一巴掌吧?也不能把香味傳過去給對方纲岭。(或者這些也可以是IM的一個發(fā)展方向抹竹,哈哈,反水好快止潮。柒莉。。)
5. 不安全性沽翔【ばⅲ基于網(wǎng)絡的交互,都是不安全的仅偎,任何系統(tǒng)都有被攻破的可能性跨蟹。別人給你發(fā)的一串文字,可能是經(jīng)過中間人修改過的橘沥。
6. 虛擬窗轩。網(wǎng)絡都是虛擬的。所以對于網(wǎng)絡上的消息座咆,我們應該有基本的辨別能力痢艺,不能輕易相信網(wǎng)上的信息。例子就不舉了介陶,網(wǎng)絡詐騙多了去了堤舒。
7. 必須是兩個端及以上進行聊天〔肝兀可以是單人之間的聊天舌缤,也可以是一群人之間的聊天。當然某残,你也可以自己和自己聊天国撵。
8. 傳播擴散快。既然是即時通訊玻墅,其信息擴散的能力是很快的介牙,可以一個傳一個,也可以是病毒式分裂擴散澳厢。
IM系統(tǒng)對于技術上有如下幾點要求:
1. 如何保證信息即時地成功投遞給對方环础,消息不丟失囚似,不重復;
2. 如何保證信息的順序到達喳整;
3. 如何保證信息中途不會被篡改;
4. 如何保證消息在收發(fā)雙方展示一致裸扶;
5. 如何保證給用戶省電省流量框都;
6. 如何保證IM系統(tǒng)的數(shù)據(jù)一致性;
7. 如何保證IM系統(tǒng)的可用性呵晨;
8. 如何保證IM系統(tǒng)的分區(qū)容忍魏保;
9. CAP不可能同時滿足,系統(tǒng)設計中如何做取舍摸屠;
10. 如何應對消息風暴引起的網(wǎng)絡波動谓罗;
11. 如何避免或減少系統(tǒng)的消息風暴;
12. 在沒有全局時鐘的情況下如何保證有序季二;
若想在IM系統(tǒng)開發(fā)中游刃有余檩咱,需要熟練get如下技能:
1. TCP/IP協(xié)議,HTTP協(xié)議胯舷;
2. Linux功底:shell命令刻蚯,linux操作系統(tǒng)的特性及脾氣,Linux下的常用開發(fā)接口桑嘶;
3. 分布式系統(tǒng)原理炊汹;
4. 一種服務端開發(fā)語言:C/C++/Java/Nodejs/Golang/PHP and so on;
5. 字符編碼逃顶,不同進制之間的轉換讨便;
6. 加密、壓縮技術以政;
7. 存儲:mysql霸褒,nosql,以及不同存儲介質下存儲系統(tǒng)性能的發(fā)揮程度盈蛮;
8. 如何優(yōu)雅地與android傲霸,iOS,win眉反,mac昙啄,web,運維之間進行“撕逼”寸五;
本篇文章僅僅是羅列了幾個點梳凛,提出了幾個問題。問題都是我在開發(fā)過程中遇到或思考的一些問題梳杏,很多細節(jié)地方深入探究非常有意思韧拒,往往每個決定感覺都是在和哲學做對抗淹接。