王鎮(zhèn)威,張 皓,朱命冬
(河南工學(xué)院,河南 新鄉(xiāng) 453003)
在通信模式中,單服務(wù)器通信架構(gòu)將服務(wù)器作為中轉(zhuǎn),采用傳輸控制協(xié)議(Transmission Control Protocol,TCP),實(shí)時(shí)監(jiān)聽通信端鏈接請(qǐng)求,并完成端到端通信。當(dāng)通信端向服務(wù)器發(fā)起通信請(qǐng)求時(shí),實(shí)時(shí)監(jiān)聽的服務(wù)器會(huì)接收通信端的通信請(qǐng)求,采用TCP建立鏈接(3次握手),并且在通信端與服務(wù)器之間建立一個(gè)套接字(socket)信道[1]。
當(dāng)通信端向其他通信端發(fā)起通信時(shí),服務(wù)器作為通信的中轉(zhuǎn)站,通過與各個(gè)服務(wù)端之間的socket信道完成信息的交互,達(dá)到通信的目的。在單服務(wù)器通信模式中不難發(fā)現(xiàn),通信過程沒有任何保密措施,服務(wù)器持續(xù)監(jiān)聽,通信端和服務(wù)端的身份得不到驗(yàn)證和授權(quán)。服務(wù)器端和通信端都可以被偽裝,進(jìn)而竊取通信信息。
對(duì)于分布式系統(tǒng)來說,相關(guān)的挑戰(zhàn)主要有7個(gè):異構(gòu)性、開放性、安全性、可伸縮性、故障處理、并發(fā)性、透明性[2]。本文主要關(guān)注并發(fā)性和透明性對(duì)實(shí)時(shí)通信系統(tǒng)的影響。
多個(gè)通信端同時(shí)請(qǐng)求訪問一個(gè)資源,將導(dǎo)致并發(fā)問題的出現(xiàn)。例如,在實(shí)時(shí)通信系統(tǒng)中,如果多個(gè)通信端試圖閱讀當(dāng)前通信用戶列表,而又有多個(gè)通信端同時(shí)退出通信。當(dāng)每個(gè)通信端連接到服務(wù)器時(shí),服務(wù)器中將有一個(gè)新線程,線程將遇到并發(fā)問題。有些線程的操作可能被其他線程覆蓋,數(shù)據(jù)存儲(chǔ)室列表可能與預(yù)期結(jié)果不符。因此,在操作相同的資源時(shí),需要同步線程。
當(dāng)兩個(gè)或多個(gè)線程同時(shí)訪問一個(gè)對(duì)象的相同資源時(shí),可以使用同步方法和同步塊。至于同步方法,不同對(duì)象實(shí)例中的不同同步方法是不相關(guān)的,意味著其他線程仍然可以訪問同步方法,即使在同一個(gè)類中,只要方法屬于不同的對(duì)象。
如果兩個(gè)線程需要訪問同一對(duì)象中的同一個(gè)同步方法,則必須按順序訪問。一個(gè)線程將先訪問資源,另一個(gè)線程必須等到前一個(gè)線程完成任務(wù)。使用同步方法也有缺點(diǎn),同步方法的訪問效率會(huì)降低。另一種方法是使用同步塊,可以將塊分配給任何對(duì)象,因?yàn)榭梢葬槍?duì)特定的代碼塊,在同時(shí)訪問同一資源時(shí)線程將按順序執(zhí)行事務(wù)。
對(duì)透明性而言,一個(gè)分布式系統(tǒng)主要有8個(gè)方面的透明性:訪問透明、位置透明、并發(fā)透明、復(fù)制透明、故障透明、移動(dòng)透明、性能透明和伸縮透明[2]。在單服務(wù)器實(shí)時(shí)通信中,位置透明是顯而易見的,因?yàn)橥ㄐ哦瞬恍枰婪?wù)器在哪里,也不需要知道其他通信端的位置信息,而是需要通過服務(wù)器的IP地址連接到服務(wù)器。
在系統(tǒng)中,故障透明性是可靠的,因?yàn)槿绻ㄐ畔到y(tǒng)接收到異常,不會(huì)將其拋給通信端,而是處理異常并向通信端提供反饋,用戶仍然可以根據(jù)反饋完成任務(wù),而不是退出。還有一些透明度在通信系統(tǒng)中不可用,比如,訪問透明,因?yàn)樗械馁Y源都在同一個(gè)服務(wù)器上。換句話說,服務(wù)器不是分布式的,因?yàn)橹挥幸粋€(gè)服務(wù)器。
分布式多服務(wù)端體系結(jié)構(gòu)也基于通信端-服務(wù)器模型。然而,多服務(wù)器體系結(jié)構(gòu)中的通信端和服務(wù)器是分布式的,與基本的通信端和服務(wù)器模型有所區(qū)別。
如果傳統(tǒng)的通信端和服務(wù)器模型中有兩臺(tái)服務(wù)器,模型如圖1所示。
圖1 分布式服務(wù)端通信架構(gòu)
兩個(gè)服務(wù)器可以互相交換消息,因?yàn)橹g有一個(gè)鏈接,可以看作是一個(gè)簡(jiǎn)單的分布式服務(wù)器系統(tǒng)。每臺(tái)服務(wù)器將為一組特定的通信端維護(hù)一個(gè)數(shù)據(jù)庫(kù)或數(shù)據(jù)結(jié)構(gòu),服務(wù)器還將保留其他服務(wù)器的信息。不同的服務(wù)器位于不同的位置,但仍然可以相互通信。例如,如果通信端A需要與通信端C和D通信,首先,向服務(wù)器1發(fā)送一個(gè)請(qǐng)求,當(dāng)服務(wù)器1開始處理該請(qǐng)求時(shí),會(huì)在本地通信端列表中搜索通信端C和通信端D。如果不在本地通信端列表中,則服務(wù)器1將向服務(wù)器2發(fā)送一個(gè)請(qǐng)求,以進(jìn)行通信端通信。當(dāng)服務(wù)器2收到請(qǐng)求時(shí),將在處理請(qǐng)求后響應(yīng)服務(wù)器1。通信端A可以與通信端C和通信端D進(jìn)行通信,而不需要服務(wù)器2的端口和地址,信息將由分布式服務(wù)器處理。
對(duì)于多服務(wù)器分布式通信系統(tǒng)的實(shí)現(xiàn),服務(wù)器將在不同的地方接入互聯(lián)網(wǎng)。通信端將只連接到自己的服務(wù)器,因此,服務(wù)器的拓?fù)浣Y(jié)構(gòu)應(yīng)該是一個(gè)網(wǎng)絡(luò)映射,如果通信端需要與屬于遠(yuǎn)程服務(wù)器的其他通信端通信,則為該通信端創(chuàng)建的本地服務(wù)器中的線程將向遠(yuǎn)程服務(wù)器發(fā)送請(qǐng)求。
對(duì)于本地服務(wù)器和遠(yuǎn)程服務(wù)器之間的通信,可以看作是一個(gè)簡(jiǎn)單的通信端和服務(wù)器模型。本地服務(wù)器將扮演通信端的角色,而遠(yuǎn)程服務(wù)器將接收本地服務(wù)器發(fā)送的請(qǐng)求。將在本地和遠(yuǎn)程服務(wù)器的兩個(gè)線程之間構(gòu)建一個(gè)socket信道。該模型中的服務(wù)器不僅要維護(hù)本地通信端信息,還要維護(hù)其他服務(wù)器的部分或全部信息,如IP地址、端口號(hào)以及特定數(shù)據(jù)結(jié)構(gòu)中其他服務(wù)器的通信端列表。當(dāng)本地通信端需要與遠(yuǎn)程通信端建立連接時(shí),本地服務(wù)器就可以準(zhǔn)確地連接到特定的遠(yuǎn)程服務(wù)器。
在單服務(wù)器模型中,數(shù)據(jù)將存儲(chǔ)在同一個(gè)服務(wù)器中,而在多服務(wù)器模型中,數(shù)據(jù)是分布式的。拓?fù)浣Y(jié)構(gòu)中的每個(gè)服務(wù)器將只維護(hù)屬于本地服務(wù)器區(qū)域的通信端數(shù)據(jù),此外,還將使用一個(gè)數(shù)據(jù)結(jié)構(gòu)來保存其他服務(wù)器的信息。數(shù)據(jù)結(jié)構(gòu)可以輕松幫助本地服務(wù)器建立與遠(yuǎn)程服務(wù)器的連接,就像一個(gè)分層的數(shù)據(jù)管理系統(tǒng)。數(shù)據(jù)將存儲(chǔ)在不同的地區(qū),并在當(dāng)?shù)亟⑺饕退饕夸洝?/p>
從單服務(wù)器系統(tǒng)到多服務(wù)器系統(tǒng),由于多服務(wù)器體系結(jié)構(gòu)的高透明度,通信端操作不需要改變。當(dāng)用戶請(qǐng)求本地或遠(yuǎn)程服務(wù)器上的資源時(shí),用戶不知道自己訪問的是哪個(gè)服務(wù)器,從通信端的角度來看,所有服務(wù)器都可以看作是一臺(tái)服務(wù)器。與單服務(wù)器系統(tǒng)相比,多服務(wù)器系統(tǒng)只改變了服務(wù)器的體系結(jié)構(gòu),使服務(wù)器能夠相互通信。對(duì)于通信端,架構(gòu)可以是相通的。當(dāng)一個(gè)通信端運(yùn)行兩個(gè)線程時(shí)將連接到服務(wù)器,一個(gè)讀、一個(gè)寫。
使用多服務(wù)器體系結(jié)構(gòu)有許多好處,其效率高于單服務(wù)器系統(tǒng)。例如,如果一個(gè)任務(wù)有10個(gè)子任務(wù),則每個(gè)子任務(wù)需要1 h才能完成,所以,使用單服務(wù)器系統(tǒng)需要10 h才能完成任務(wù)。但是如果系統(tǒng)有10臺(tái)服務(wù)器,可以同時(shí)處理10個(gè)子任務(wù)。理想狀態(tài)下完成任務(wù)只需要1 h左右,此外,故障容忍度比單服務(wù)器系統(tǒng)更高。例如,如果一個(gè)服務(wù)器在一個(gè)服務(wù)器系統(tǒng)中發(fā)生故障,那么所有的通信端都將受到影響。如果系統(tǒng)中有多臺(tái)服務(wù)器,其中,一臺(tái)服務(wù)器發(fā)生故障不會(huì)影響其他服務(wù)器,用戶就可以在其他服務(wù)器上完成自己的任務(wù)。此外,多服務(wù)器系統(tǒng)的可擴(kuò)展性很高,因?yàn)榭梢栽黾踊驕p少多個(gè)服務(wù)器中的通信端數(shù)量,而不會(huì)影響系統(tǒng)的體系結(jié)構(gòu)。
多服務(wù)器架構(gòu)也有缺點(diǎn):首先,不同服務(wù)器的維護(hù)將花費(fèi)大量資源。其次,多服務(wù)器體系結(jié)構(gòu)的安全性很難保證,因?yàn)槿魏我粋€(gè)服務(wù)器都有可能受到攻擊并引發(fā)問題。最后,由于服務(wù)器的位置和數(shù)量的限制,管理和復(fù)雜度控制變得困難。
密碼學(xué)的基本概念是對(duì)信息進(jìn)行加密和解密。原始數(shù)據(jù)稱為明文,具體來說,通過使用一些算法和密鑰,可以將明文轉(zhuǎn)換為一些不規(guī)則的數(shù)據(jù),數(shù)據(jù)被稱為“密文”,過程稱為加密,算法稱為加密算法。同理,只要得到密鑰和算法,解密就是加密的相反過程。在實(shí)時(shí)通信的過程當(dāng)中,通信的加密大致分為兩種,分別是對(duì)稱加密和非對(duì)稱加密[3]。
在通信系統(tǒng)中,服務(wù)器擁有一個(gè)官方證書,可以看作是一個(gè)可靠的第三方[4]。服務(wù)器將向通信端授予公鑰證書,以便通信端可以獲取服務(wù)器的公鑰,然后通信端可以使用公鑰加密發(fā)送到服務(wù)器的信息。服務(wù)器可以使用自己的私鑰來解密信息,使用非對(duì)稱加密的方法保證信息準(zhǔn)確性。SSL協(xié)議為基于TCP/IP協(xié)議和通信端-服務(wù)器模型的Web應(yīng)用提供了數(shù)據(jù)完整性和安全傳輸?shù)劝踩胧?shí)際上SSL協(xié)議可以看作是開發(fā)系統(tǒng)模型(Open System Infrastructure,OSI)中傳輸層和應(yīng)用層之間的中間件,給信息交互提供一個(gè)安全的信道[6]。
基于SSL協(xié)議連接的特點(diǎn):首先,安全連接。當(dāng)初始握手完成后,SSL使用對(duì)稱加密方法協(xié)商密鑰。其次,SSL可以使用RSA等非對(duì)稱加密(公鑰)方法進(jìn)行身份驗(yàn)證。最后,由于數(shù)據(jù)中含有校驗(yàn)和以保持?jǐn)?shù)據(jù)的完整性,所以,可以保證傳輸?shù)目煽啃訹7]。
在通信系統(tǒng)中可以使用Java環(huán)境下的密鑰和證書管理工具(Key tool)。Key tool可以生成一個(gè)密鑰庫(kù)來存儲(chǔ)所有的密鑰和證書,此密鑰庫(kù)也受密碼保護(hù)。通信端和服務(wù)器將構(gòu)建一個(gè)安全套接字,以確保傳輸通道是安全的。在構(gòu)建過程中,服務(wù)器的證書將從服務(wù)器傳輸?shù)酵ㄐ哦嗽趥鬏攲雍蛻?yīng)用層之間它為信息交換、數(shù)據(jù)加密和通信端-服務(wù)器身份驗(yàn)證提供了一個(gè)安全的傳輸通道。
從分布式服務(wù)端通信架構(gòu)可以看出,首先,服務(wù)器會(huì)向通信端發(fā)送一條消息顯示證書,證書中包含服務(wù)器的公鑰和來自可靠第三方的身份驗(yàn)證。傳輸過程采用RSA算法進(jìn)行保護(hù)。通信端使用服務(wù)器的公鑰加密主控密鑰。服務(wù)器可以通過密鑰庫(kù)中的私鑰對(duì)其進(jìn)行解密。其次,服務(wù)器將使用其他算法生成主密鑰作為SSL會(huì)話的私鑰。此時(shí)一個(gè)對(duì)稱算法將在傳輸過程中保護(hù)信息,因?yàn)樗枰^少的時(shí)間來加密和解密。主密鑰是私鑰,還可以提高通信端與服務(wù)器之間的通信效率。加密信息交互的結(jié)構(gòu)如圖2所示。
當(dāng)通信端將其私有信息傳輸?shù)椒?wù)器時(shí),服務(wù)器將其放入處理塊中,并使用PBE算法對(duì)數(shù)據(jù)進(jìn)行加密。
圖2 加密信息交互
然后將這些數(shù)據(jù)存儲(chǔ)在存儲(chǔ)器中。當(dāng)服務(wù)器需要調(diào)用或傳輸這些數(shù)據(jù)時(shí),它將獲取數(shù)據(jù)并對(duì)其進(jìn)行解密?;诿艽a的加密(Password Based Encryption, PBE)算法是一種基于密碼和“鹽”(“salt”)概念的結(jié)合。Salt實(shí)際上是內(nèi)存中生成的一個(gè)隨機(jī)數(shù)[8]。這兩個(gè)因素結(jié)合后,還將采用其他多種加密算法對(duì)這兩個(gè)因素進(jìn)行加密,被認(rèn)為是對(duì)稱加密算法的一個(gè)密集版本,因?yàn)闆]有建立新的加密算法,而是基于AES和DES等算法。因此,在服務(wù)器中來加密信息更安全。
顯然,單服務(wù)器通信采用關(guān)鍵字同步的方式很容易控制并發(fā)問題,但還存在透明性、安全性和可擴(kuò)展性等問題。在單服務(wù)器系統(tǒng)中,透明度的某些部分沒有被覆蓋。另外,如果服務(wù)器發(fā)生故障,所有通信端都將受到影響。一臺(tái)服務(wù)器的能力也是有限的。對(duì)于分布式多服務(wù)器體系結(jié)構(gòu),服務(wù)器之間可以通過簡(jiǎn)單的通信端-服務(wù)器模型進(jìn)行通信。此外,它還解決了單服務(wù)器模型中存在的一些透明性問題。而分布式加密通信也有很多優(yōu)點(diǎn)。首先,可以使用SSL技術(shù)而不是普通的socket來保證傳輸?shù)陌踩裕€采用RSA算法對(duì)算法和私鑰進(jìn)行了加密,所以在SSL中存在雙重加密。其次,防止了其他人冒充官方服務(wù)器的風(fēng)險(xiǎn),因?yàn)樵诮SL的過程中需要驗(yàn)證服務(wù)器。再次,存儲(chǔ)在服務(wù)器中的數(shù)據(jù)也是安全的,因?yàn)槭峭ㄟ^PBE算法加密的,降低信息泄露的風(fēng)險(xiǎn)。最后,所有的安全功能對(duì)用戶是透明的。但是此通信系統(tǒng)仍然有一個(gè)局限性。與其他對(duì)稱算法相比,PBE算法是安全的,但密碼也存儲(chǔ)在內(nèi)存中,服務(wù)器中的信息仍然存在被非法解密的風(fēng)險(xiǎn)。