群組通信系統(tǒng)以及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)通信技術(shù)領(lǐng)域,尤其涉及一種群組通信系統(tǒng)以及方法。
【背景技術(shù)】
[0002]即時(shí)通訊(IM, InstantMessenger)軟件是我國(guó)目前上網(wǎng)用戶使用率最高的軟件之一,特別是對(duì)于企業(yè)級(jí)即時(shí)通訊軟件,為了方便企業(yè)用戶間的溝通,作為企業(yè)級(jí)的頂版本必然要包括多方會(huì)議形式的群組溝通功能,并且群組溝通功能在整個(gè)企業(yè)即時(shí)通訊軟件中使用率是最高的,對(duì)于后臺(tái)服務(wù)來(lái)說(shuō),群組服務(wù)的壓力也是最大的,群組服務(wù)所維護(hù)的數(shù)據(jù)讀寫很頻繁。
[0003]參考圖1,目前大部分IM系統(tǒng)中,數(shù)據(jù)保存在mysql等關(guān)系型數(shù)據(jù)庫(kù)中,服務(wù)程序啟動(dòng)時(shí)讀取數(shù)據(jù)庫(kù)中的所有數(shù)據(jù),并保存在服務(wù)程序的內(nèi)存中,后續(xù)讀寫操作本地內(nèi)存,寫操作時(shí)同步保存數(shù)據(jù)到數(shù)據(jù)庫(kù)中。服務(wù)啟動(dòng)時(shí)初始化數(shù)據(jù)到服務(wù)內(nèi)存中,對(duì)于寫操作比較頻繁的數(shù)據(jù)需要將其及時(shí)同步到關(guān)系型數(shù)據(jù)庫(kù)中,因此難以保證數(shù)據(jù)的一致性,同時(shí)這種內(nèi)存數(shù)據(jù)操作方式不支持集群部署,海量用戶在線時(shí),程序的處理能力以及響應(yīng)速度會(huì)降低,影響用戶體驗(yàn)。
【發(fā)明內(nèi)容】
[0004]本發(fā)明要解決的技術(shù)問(wèn)題在于,針對(duì)現(xiàn)有技術(shù)的上述缺陷,提供一種群組通信系統(tǒng)以及方法。
[0005]本發(fā)明解決其技術(shù)問(wèn)題所采用的技術(shù)方案是:構(gòu)造一種群組通信系統(tǒng),應(yīng)用于多個(gè)客戶端的即時(shí)通訊,包括:負(fù)載均衡模塊、集群部署的多個(gè)群組業(yè)務(wù)模塊、寫群組數(shù)據(jù)模塊、讀群組數(shù)據(jù)模塊;
[0006]所述負(fù)載均衡模塊用于根據(jù)客戶端的請(qǐng)求選擇一個(gè)群組業(yè)務(wù)模塊處理該請(qǐng)求,該請(qǐng)求包括寫數(shù)據(jù)請(qǐng)求和讀數(shù)據(jù)請(qǐng)求;
[0007]所述群組業(yè)務(wù)模塊用于根據(jù)該請(qǐng)求進(jìn)行邏輯處理,并在該請(qǐng)求為寫數(shù)據(jù)請(qǐng)求時(shí)將該寫數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)至寫群組數(shù)據(jù)模塊,在該請(qǐng)求為讀數(shù)據(jù)請(qǐng)求時(shí)將該讀數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)至讀群組數(shù)據(jù)模塊,并在該請(qǐng)求處理完畢后根據(jù)處理結(jié)果返回響應(yīng)指令給客戶端;
[0008]所述寫群組數(shù)據(jù)模塊用于在接收到寫數(shù)據(jù)請(qǐng)求時(shí)存儲(chǔ)客戶端寫入的數(shù)據(jù)并將存儲(chǔ)的數(shù)據(jù)寫入所述讀群組數(shù)據(jù)模塊中;
[0009]所述讀群組數(shù)據(jù)模塊用于在接收到讀數(shù)據(jù)請(qǐng)求時(shí)將相應(yīng)的數(shù)據(jù)發(fā)往客戶端。
[0010]在本發(fā)明所述的群組通信系統(tǒng)中,所述寫群組數(shù)據(jù)模塊以及所述讀群組數(shù)據(jù)模塊用于在啟動(dòng)時(shí)分別將各自的本地磁盤的數(shù)據(jù)讀入各自的程序內(nèi)存中,
[0011]所述的存儲(chǔ)客戶端寫入的數(shù)據(jù)并將存儲(chǔ)的數(shù)據(jù)寫入所述讀群組數(shù)據(jù)模塊中包括:寫群組數(shù)據(jù)模塊在接收到寫數(shù)據(jù)請(qǐng)求時(shí)將來(lái)自客戶端的數(shù)據(jù)寫入程序內(nèi)存中,再將程序內(nèi)存中新寫入的數(shù)據(jù)寫入本地磁盤,然后再將程序內(nèi)存中新寫入的數(shù)據(jù)寫入到所述讀群組數(shù)據(jù)模塊的程序內(nèi)存中;
[0012]所述讀群組數(shù)據(jù)模塊還用于將寫群組數(shù)據(jù)模塊新寫入到程序內(nèi)存中的數(shù)據(jù)寫入本地磁盤,所述的在接收到讀數(shù)據(jù)請(qǐng)求時(shí)將相應(yīng)的數(shù)據(jù)發(fā)往客戶端包括:所述讀群組數(shù)據(jù)模塊在接收到讀數(shù)據(jù)請(qǐng)求時(shí)將程序內(nèi)存中的相應(yīng)的數(shù)據(jù)發(fā)往客戶端。
[0013]在本發(fā)明所述的群組通信系統(tǒng)中,所述寫群組數(shù)據(jù)模塊以及讀群組數(shù)據(jù)模塊還分別用于定時(shí)地將各自的程序內(nèi)存中的數(shù)據(jù)寫入各自的本地磁盤。
[0014]在本發(fā)明所述的群組通信系統(tǒng)中,所述群組業(yè)務(wù)模塊、寫群組數(shù)據(jù)模塊、讀群組數(shù)據(jù)模塊均分別采用獨(dú)立的一臺(tái)服務(wù)器,所述負(fù)載均衡模塊采用獨(dú)立的一臺(tái)服務(wù)器或者為嵌入在任一個(gè)群組業(yè)務(wù)模塊的服務(wù)器中的程序模塊。
[0015]在本發(fā)明所述的群組通信系統(tǒng)中,所述系統(tǒng)還包括群組數(shù)據(jù)備份模塊,所述寫群組數(shù)據(jù)模塊還用于定期地將存儲(chǔ)的數(shù)據(jù)基于主從復(fù)制的方式寫入群組數(shù)據(jù)備份模塊中。
[0016]本發(fā)明還公開(kāi)了一種基于群組通信系統(tǒng)的群組通信方法,應(yīng)用于多個(gè)客戶端的即時(shí)通訊,所述系統(tǒng)包括:負(fù)載均衡模塊、集群部署的多個(gè)群組業(yè)務(wù)模塊、寫群組數(shù)據(jù)模塊、讀群組數(shù)據(jù)模塊;所述方法包括:
[0017]S1、負(fù)載均衡模塊接收客戶端的請(qǐng)求,根據(jù)該請(qǐng)求選擇一個(gè)群組業(yè)務(wù)模塊處理該請(qǐng)求,該請(qǐng)求包括寫數(shù)據(jù)請(qǐng)求和讀數(shù)據(jù)請(qǐng)求;
[0018]S2、群組業(yè)務(wù)模塊根據(jù)該請(qǐng)求進(jìn)行邏輯處理,并在該請(qǐng)求為寫數(shù)據(jù)請(qǐng)求時(shí)將該寫數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)至寫群組數(shù)據(jù)模塊,在該請(qǐng)求為讀數(shù)據(jù)請(qǐng)求將該讀數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)至讀群組數(shù)據(jù)豐吳塊;
[0019]S3、寫群組數(shù)據(jù)模塊在接收到寫數(shù)據(jù)請(qǐng)求時(shí)存儲(chǔ)客戶端寫入的數(shù)據(jù)并將存儲(chǔ)的數(shù)據(jù)寫入所述讀群組數(shù)據(jù)模塊中;
[0020]S4、讀群組數(shù)據(jù)模塊在接收到讀數(shù)據(jù)請(qǐng)求時(shí)將相應(yīng)的數(shù)據(jù)發(fā)往客戶端;
[0021 ] S5、群組業(yè)務(wù)模塊在該請(qǐng)求處理完畢后根據(jù)處理結(jié)果返回響應(yīng)指令給客戶端。
[0022]在本發(fā)明所述的群組通信方法中,所述方法還包括:寫群組數(shù)據(jù)模塊以及所述讀群組數(shù)據(jù)模塊在啟動(dòng)時(shí)分別將各自的本地磁盤的數(shù)據(jù)讀入各自的程序內(nèi)存中,
[0023]所述步驟S3包括:
[0024]S31、寫群組數(shù)據(jù)模塊接收到寫數(shù)據(jù)請(qǐng)求,將來(lái)自客戶端的數(shù)據(jù)寫入程序內(nèi)存中;
[0025]S32、數(shù)據(jù)寫入程序內(nèi)存中后,寫群組數(shù)據(jù)模塊將步驟S31中程序內(nèi)存中新寫入的數(shù)據(jù)寫入本地磁盤;
[0026]S33、數(shù)據(jù)寫入本地磁盤后,寫群組數(shù)據(jù)模塊將步驟S31中程序內(nèi)存中新寫入的數(shù)據(jù)寫入到所述讀群組數(shù)據(jù)模塊的程序內(nèi)存中;
[0027]S34、讀群組數(shù)據(jù)模塊將步驟S33中程序內(nèi)存中新寫入的數(shù)據(jù)寫入本地磁盤;
[0028]所述步驟S4包括:讀群組數(shù)據(jù)模塊接收到讀數(shù)據(jù)請(qǐng)求,將程序內(nèi)存中的相應(yīng)的數(shù)據(jù)發(fā)往客戶端。
[0029]在本發(fā)明所述的群組通信方法中,所述方法還包括:所述寫群組數(shù)據(jù)模塊以及讀群組數(shù)據(jù)模塊分別定時(shí)地將各自的程序內(nèi)存中的數(shù)據(jù)寫入各自的本地磁盤。
[0030]在本發(fā)明所述的群組通信方法中,所述系統(tǒng)還包括群組數(shù)據(jù)備份模塊,所述方法還包括:寫群組數(shù)據(jù)模塊定期地將存儲(chǔ)的數(shù)據(jù)基于主從復(fù)制的方式寫入群組數(shù)據(jù)備份模塊中。
[0031]在本發(fā)明所述的群組通信方法中,所述群組業(yè)務(wù)模塊、寫群組數(shù)據(jù)模塊、讀群組數(shù)據(jù)模塊均分別采用獨(dú)立的一臺(tái)服務(wù)器,所述負(fù)載均衡模塊采用獨(dú)立的一臺(tái)服務(wù)器或者為嵌入在任一個(gè)群組業(yè)務(wù)模塊的服務(wù)器中的程序模塊。
[0032]實(shí)施本發(fā)明的群組通信系統(tǒng)以及方法具有以下有益效果:
[0033]I)、本發(fā)明中群組業(yè)務(wù)模塊和寫群組數(shù)據(jù)模塊、讀群組數(shù)據(jù)模塊三者相互獨(dú)立,實(shí)現(xiàn)業(yè)務(wù)處理和數(shù)據(jù)處理的分離,集群部署的多個(gè)群組業(yè)務(wù)模塊使得海量用戶在線時(shí)使用戶對(duì)數(shù)據(jù)的訪問(wèn)達(dá)到高并發(fā)、高實(shí)時(shí)性的要求,將系統(tǒng)壓力均勻分布到集群部署的群組業(yè)務(wù)模塊上,提高系統(tǒng)響應(yīng)速度,實(shí)現(xiàn)程序的高可靠性、可擴(kuò)展性;
[0034]2)、多個(gè)群組業(yè)務(wù)模塊在讀取數(shù)據(jù)時(shí),訪問(wèn)同一個(gè)讀群組數(shù)據(jù)模塊,實(shí)現(xiàn)數(shù)據(jù)的一致性;
[0035]3)、寫群組數(shù)據(jù)模塊、讀群組數(shù)據(jù)模塊相互獨(dú)立,實(shí)現(xiàn)讀寫分離,保證數(shù)據(jù)的一致性以及數(shù)據(jù)訪問(wèn)的高效性;
[0036]進(jìn)一步的,本發(fā)明還可以增加群組數(shù)據(jù)備份模塊實(shí)現(xiàn)數(shù)據(jù)備份,保證數(shù)據(jù)一致性、安全性,防止由于程序、系統(tǒng)異常、重啟、斷電等導(dǎo)致的數(shù)據(jù)丟失。
【附圖說(shuō)明】
[0037]下面將結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明,附圖中:
[0038]圖1是現(xiàn)有技術(shù)中群組服務(wù)的內(nèi)存數(shù)據(jù)操作示意圖;
[0039]圖2是本發(fā)明的群組通信系統(tǒng)的較佳實(shí)施例的結(jié)構(gòu)示意圖;
[0040]圖3是本發(fā)明的群組通信方法的流程圖;
[0041]圖4是本發(fā)明的群組通信方法在寫數(shù)據(jù)時(shí)的時(shí)序圖;
[0042]圖5是本發(fā)明的群組通信方法在讀數(shù)據(jù)時(shí)的時(shí)序圖。
【具體實(shí)施方式】
[0043]為了對(duì)本發(fā)明的技術(shù)特征、目的和效果有更加清楚的理解,現(xiàn)對(duì)照附圖詳細(xì)說(shuō)明本發(fā)明的【具體實(shí)施方式】。
[0044]參考圖2是本發(fā)明的群組通信系統(tǒng)的較佳實(shí)施例的結(jié)構(gòu)示意圖;
[0045]本發(fā)明的群組通信系統(tǒng)包括:負(fù)載均衡模塊、集群部署的多個(gè)群組業(yè)務(wù)模塊1-η (η為大于I的正整數(shù))、寫群組數(shù)據(jù)模塊、讀群組數(shù)據(jù)模塊。
[0046]負(fù)載均衡模塊主要是根據(jù)時(shí)通客戶端的請(qǐng)求,選擇一個(gè)群組業(yè)務(wù)模塊處理該請(qǐng)求,其中,所述客戶端的請(qǐng)求包括寫數(shù)據(jù)請(qǐng)求和讀數(shù)據(jù)請(qǐng)求;每個(gè)群組業(yè)務(wù)模塊各自進(jìn)行業(yè)務(wù)處理:根據(jù)該請(qǐng)求進(jìn)行邏輯處理,并在該請(qǐng)求為寫數(shù)據(jù)請(qǐng)求時(shí)將該寫數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)至寫群組數(shù)據(jù)模塊,在該請(qǐng)求為讀數(shù)據(jù)請(qǐng)求時(shí)將該讀數(shù)據(jù)請(qǐng)求轉(zhuǎn)發(fā)至讀群組數(shù)據(jù)模塊,并在該請(qǐng)求處理完畢后根據(jù)處理結(jié)果返回響應(yīng)指令給客戶端;所述寫群組數(shù)據(jù)模塊用于在接收到寫數(shù)據(jù)請(qǐng)求時(shí)存儲(chǔ)客戶端寫入的數(shù)據(jù)并將存儲(chǔ)的數(shù)據(jù)寫入所述讀群組數(shù)據(jù)模塊中;所述讀群組數(shù)據(jù)模塊用于在接收到讀數(shù)據(jù)請(qǐng)求時(shí)將相應(yīng)的數(shù)據(jù)發(fā)往客戶端。
[0047]其中,負(fù)載均衡模塊選擇群組業(yè)務(wù)模塊時(shí),可以根據(jù)特定的算法,控制每個(gè)群組業(yè)務(wù)模塊處理的事務(wù)一樣多,實(shí)現(xiàn)多個(gè)群組業(yè)務(wù)模塊的負(fù)載均衡,例如基于LVS軟件選擇群組業(yè)務(wù)模塊。
[0048]具體的,當(dāng)該請(qǐng)求為寫數(shù)據(jù)請(qǐng)求時(shí),參考圖4,群組業(yè)務(wù)模塊的邏輯處理包括請(qǐng)求邏輯處理和響應(yīng)邏輯處理,當(dāng)該請(qǐng)求為讀數(shù)據(jù)請(qǐng)求時(shí),參考圖5,群組業(yè)務(wù)模塊的邏輯處理包括請(qǐng)求邏輯處理和數(shù)據(jù)邏輯處理。
[0049]具體的,每個(gè)群組業(yè)務(wù)模塊都采用獨(dú)立的一臺(tái)服務(wù)器實(shí)現(xiàn)。這些服務(wù)器僅僅執(zhí)行邏輯處理,而將涉及到數(shù)據(jù)讀寫的操作交給寫群組數(shù)據(jù)模塊或讀群組數(shù)據(jù)模塊執(zhí)行,因此實(shí)現(xiàn)業(yè)務(wù)和數(shù)據(jù)的分離,集群部署的多個(gè)群組業(yè)務(wù)模塊使得海量用戶在線時(shí)使用戶對(duì)數(shù)據(jù)的訪問(wèn)達(dá)到高并發(fā)、高實(shí)時(shí)性的要求,將系統(tǒng)壓力均勻分布到集群部署的群組業(yè)務(wù)模塊上,提高系統(tǒng)響應(yīng)速度,實(shí)現(xiàn)程序的高可靠性,服務(wù)器的數(shù)量可以根據(jù)業(yè)務(wù)需要進(jìn)行拓展。
[0050]而負(fù)載均衡模塊既可以采用獨(dú)立的一臺(tái)服務(wù)器,也可以是嵌入在任一個(gè)群組業(yè)務(wù)模塊的服務(wù)器中的程序模塊。本實(shí)施例中優(yōu)選的,對(duì)于所述負(fù)載均衡模塊也采用一臺(tái)獨(dú)立的服務(wù)器實(shí)現(xiàn),如此可以進(jìn)一步提高系統(tǒng)的響應(yīng)能力、穩(wěn)定性和拓展性。
[0051]寫群組數(shù)據(jù)模塊,采用獨(dú)立的服務(wù)器實(shí)現(xiàn),其在程序啟動(dòng)時(shí)將本地磁盤的數(shù)據(jù)讀入程序內(nèi)存中,在接收到群組業(yè)務(wù)模塊轉(zhuǎn)發(fā)的寫數(shù)據(jù)請(qǐng)求時(shí),參考圖4,將來(lái)自客戶端的數(shù)據(jù)寫入程序內(nèi)存中,寫入完畢后將程序內(nèi)存中的新寫入的數(shù)據(jù)異步寫入本地磁盤,然后再將程序內(nèi)存中的新寫入的數(shù)據(jù)異步寫入到所述讀群組數(shù)據(jù)模塊的程序內(nèi)存中。
[0052]需要明確的是,數(shù)據(jù)在程序內(nèi)存中的存儲(chǔ)方式由開(kāi)發(fā)人員自定義,可采用任意數(shù)據(jù)格式以及任意的數(shù)據(jù)容器,對(duì)此并不做限制。
[0053]優(yōu)選的,所述寫群組數(shù)據(jù)模塊還可以定時(shí)地將自身程序內(nèi)存中的數(shù)據(jù)寫入自身的本地磁盤,保證數(shù)據(jù)的一致性、安全性。其中,定