1.業務分離的設計
分布式的優點是能用大量的廉價伺服器組建成乙個巨大的系統,價效比很高。簡單的說就是把業務模組盡可能的縮小的乙個原子級別,然後從系統中剝離出來單獨執行,當把系統中所有的業務一一剝離後,分布式系統也就搭建成功一半了。剩下的就是高效的處理每個業務的資料流。乙個簡單的im系統我大概分為4個部分:
1.1。登入認證伺服器群
用於使用者的註冊和登入,又可以分為web伺服器群和資料庫群。根據使用者名稱的前兩位ascii碼分配不同的資料庫來儲存。因此可以把使用者分配到(26+10)*(26+10)≈ 400 臺伺服器中,能夠最大程度的分流查詢工作。
1.2.聊天應用伺服器群
用於使用者間的訊息互發與暫存,使用者傳送的訊息快取在伺服器的iis程序中,不與資料庫發生關係。
1.3.使用者頭像伺服器群
用於使用者頭像的儲存,減少對其他web伺服器的連線依賴。要求io效能好。
1.4.使用者檔案伺服器群
用於使用者檔案的儲存,減少對其他web伺服器的連線依賴。要求io效能好。
伺服器群**
聊天應用伺服器圖
2.認證機制
分布式系統中再也不能使用cookie和session,因此必須要有一套認證機制使其能夠在多個伺服器中認證。簡單的做法是每個伺服器儲存乙個金鑰,在登入過程中,返回md5(使用者名稱+金鑰),以後每次使用者訪問系統都執行 islogined(使用者名稱,md5(使用者名稱+金鑰)即可判斷是否合法使用者。
3.伺服器群組配置檔案
在分布式系統中伺服器群組互相通訊是很頻繁的,為了相互找到對方,就需要知道對方的位址,因此用配置檔案的方式來實現。
<
xml>
<
servers
>
<
talkservers
>
192.168.2.1
talkservers
>
<
talkservers
>
192.168.2.2
talkservers
>
<
dbservers
>
<
default
>
server=192.168.2.100;database=im;uid=im;pwd=123;
default
>
<
aa>
server=192.168.2.101;database=im;uid=im;pwd=123;
aa>
.<
z9>
z9>
<
aa-a9
>
aa-a9
>
dbservers
>
<
errosrervers
>
192.168.2.200
errosrervers
>
servers
>
<
key>
1234567890poiuytrewq
key>
xml>
4.跨程序和跨伺服器的通訊
跨伺服器通訊方案很多,我選擇remoting的tcp通道,速度較快。跨程序的通訊我還是用tcp通道,因為tcp通道在併發模式下效能好,微軟有個程序級別的ipc通道速度快,但是我測試在併發下效能很低。參見《remoting技術:多執行緒中ipcchannel的效能太遜
》這篇文章。
5.集中錯誤管理機制
程式中遇到異常以後,通常是記錄到本機log,但在分布式下管理太多伺服器的log是件很麻煩的事情,因此需要把錯誤log集中的拋到一台專門的伺服器上,還可以設計成錯誤級別分類,高階別的錯誤用簡訊通知管理員。
開發分布式WebIm 1(設想)
開發乙個手機im系統的想法有很久了,最先我定位於基於xmpp協議的實現方式,為此我安裝了openfire和spark,搭建了一套完善的系統用於研究,spark的debug模式對我分析xmpp協議起到了重要的作用,隨後我又安裝了agsxmpp sdk,在一番折騰下我終於完成了agsxmpp示例客戶端與...
分布式計算概述
分布式系統 在 網 絡 計 算 平台 上 開 發 部 署 管 理 和 維 護 以 資 源 共 享 和 協 同 工 作 為 主 要 應 用 目 標 的 分 布 式 應 用 系 統。分布式系統的主要特徵 包含任意個數的系統程序和使用者程序 體系結構模組化,它由數目可變的多個處理部件組成 通過共享通訊結構...
分布式系統概述
2分布式系統概述注 由於大資料技術領域的各類技術框架基本上都是分布式系統,因此,理解hadoop storm spark 等技術框架,都需要具備基本的分布式系統概念 該軟體系統會劃分成多個子系統或模組,各自執行在不同的機器上,子系統或模組之間通過網路通訊進行協作,實現最終的整體功能 比如分布式作業系...