作業系統 第二十章 分散式系統實例
第二十章 分散式系統實例 Java RMI RMI架構 RMI伺服端程式設計 RMI客戶端程式設計 CORBA 網路檔案系統 摘要
Java RMI Java 在 JDK1.1 之後提供了 RMI 的機制,將複雜的資料結構傳遞問題交由 RMI 機制處理。 與 RPC 的基本概念相同,透過網路執行遠端伺服器上的程式,並取回執行結果。 RMI 強調物件導向,可以將一個物件序列化,也就是將物件轉換成一連串的位元組而當成參數傳遞。 RMI 程式必須用 Java 撰寫,較缺乏彈性。
RMI 架構 RMI 採用三層式架構。 stub/skeleton 層 遠端參考層 傳輸層 傳輸層 skeleton stub 應用程式 客戶端 伺服端 遠端參考層
RMI 呼叫遠程物件流程圖 以客戶端呼叫遠端物件的 Check_out(object, object) 函式為例。 客戶端 伺服端遠程物件 Check_out(object N,object M) { //相關程式碼 return val; } stub skelketon 布林回傳值 A、B參數、Check_out() 名稱及相關資訊 整碼 反整碼 flag = Server.Check_out(A,B)
RMI 伺服端程式設計 步驟一:定義遠端物件的服務介面,透過這個介面,客戶端才能呼叫遠端物件的函式。 必須繼承自 java.rmi.Remote 介面。 必須定義遠端物件的方法,並且宣告會發出 RemoteException 的例外事件,用來截取可能發生的例外事件。 以 javac 指令將服務介面編譯成位元組碼。
RMI 伺服端程式設計 (續) 步驟二:實作遠端介面,也就是撰寫遠端物件函式的程式碼。 必須宣告欲實作的介面。 必須繼承自 UnicastRemoteObject 類別。 必須宣告 RemoteException 例外事件。 將遠端物件編譯成位元組碼。 步驟三:以 rmic 指令產生 stub 和 skeleton 程式。 步驟四:將 RMI 註冊處啟動,並啟動遠端物件向其註冊。 步驟五:啟動伺服器程式。
RMI 客戶端程式設計 步驟一:呼叫 System.setSecurityManager() 作安全上的限制,避免客戶端的環境被惡意破壞。 步驟三:呼叫遠端物件的函式。
第二十章 分散式系統實例 Java RMI CORBA CORBA架構 ORB簡介 物件服務 網路檔案系統 摘要
CORBA CORBA 是 OMG(Object Management Group)組織所提出的物件導向分散式工作環境標準。 基於物件導向的觀念與使用,加強了軟體的可攜性、可重用性、以及可交互運作性。 許多廠商推出各種符合 CORBA 標準的產品,可以用來輕易地發展分散式程式。
CORBA 架構 CORBA 的基本定義裡,介面用來定義物件的型態;伺服端為一個或多個介面的物件實作;客戶端可以透過 ORB 呼叫伺服端物件所提供的函式。CORBA 的架構中包含 ORB 介面 介面定義語言 客戶端 IDL stubs 靜態 IDL skeletons 動態請求介面 介面保存庫 動態 skeleton 介面 實作保存庫 物件調適器
CORBA 架構示意圖 ORB 核心(IIOP) 客戶端 伺服端物件實作 動態請求介面DII 物件 調適器 實作 保存庫 動態 skeleton 請求, DSI 介面 靜態 IDL stub ORB
ORB 簡介 ORB 可以視為一種物件匯流排,讓客戶端的應用程式傳送要求給本地端或遠端的物件,並且接收執行後所傳回的結果。 客戶端不需要知道應用程式與這些物件之間的溝通協調方式。 讓物件可以在執行期間才尋找所要呼叫的物件,並且呼叫物件提供的服務。 具有能靜態與動態地呼叫遠端物件、高階程式語言互通性、動態查詢系統資訊、本地端/遠端的通透性 、內建安全機制交易與程式擴充性高等優點。
ORB 架構示意圖 客戶端 stubs 伺服端 skeletons CORBA IIOP ORB C C++ smalltalk Ada COBOL Java IDL 客戶端 stubs 伺服端 skeletons CORBA IIOP ORB
物件服務 OMG 於 1995 年提出 COSS 規格,定義了以下的物件服務支援物件的使用與實作。 名稱服務 並行控制服務 事件服務 永久性物件服務 生命週期服務 外部服務 交易服務
名稱服務 名稱服務提供了將名稱連結到一個物件的能力,提供一個標準化介面,讓客戶端可以依照物件名稱而找到該物件的位置。 目的都是提供客戶端方便快速地連接一個伺服端物件程式。 ORB 仰賴名稱服務機制將名稱對應到物件,並以這個物件找到其物件實作所在的位置。 可以提供非物件導向設計的客戶端透過 ORB 要求一個物件實作。
名稱服務機制的流程 4. 利用物件參考找到物件實作 名稱伺服器 3. 回應物件位置 物件實作 客戶端 < name1 , obj_ref1> < name2 , obj_ref2> < name3 , obj_ref3> … 客戶端 2. resolve(name) 3. 回應物件位置 4. 利用物件參考找到物件實作 1. bind(name , obj_reference) 物件實作
第二十章 分散式系統實例 Java RMI CORBA 網路檔案系統 網路檔案系統簡介 網路檔案系統實作 網路檔案系統協定 摘要
網路檔案系統簡介 網路檔案系統是一個分散式檔案系統。 可以讓執行在 LAN 或 WAN 環境下的電腦共享一個檔案系統。 網路檔案系統伺服器可以分享一個或多個目錄給客戶端存取,被分享的目錄會記錄在 /ext/exports 的檔案中。 客戶端使用網路檔案系統伺服器提供的目錄及檔案前,必須先掛載這些目錄,之後這些目錄將變成客戶端目錄結構的一部分。 可以節省下許多的硬體花費。
網路檔案系統簡介 (續) 網路檔案系統 具備存取通透性、地點通透性、錯誤通透性、效能通透性與遷移通透性等優點。 但是有不具備複製通透性、不具備同步通透性、擴充性不佳等缺點。
掛載伺服器的目錄 /root /nfs1 /dir1 file1.txt /nfs2 /dir2 file2.txt /usr /Bill /Jack 掛載 伺服器 B 伺服器 A 客戶端
網路檔案系統實作 網路檔案系統採用多層級的架構來實作。 客戶端或伺服端的模組會載入到 UNIX 核心中執行。 客戶端是以使用者層級的行程來使用伺服器檔案。 UNIX 檔案系統介面主要負責檔案的實際開啟、讀取、寫入、和關閉的動作。 虛擬檔案系統架於檔案系統之上,作用是將本地端檔案的處理與遠端檔案的處理分開,並且能以下層不同的檔案系統進行本地端檔案處理的操作。
網路檔案系統實作 (續) 網路檔案系統包含了以下幾個機制。 網路檔案系統模組整合到系統核心 存取控制及認證機制 路徑名稱轉譯 伺服端快取 客戶端快取
網路檔案系統軟體架構 使用者行程 系統呼叫 UNIX核心 本地端 遠端 UNIX 檔案系統 NFS 客戶端 磁碟 伺服端 網路 NFS 協定 虛擬檔案系統(VFS) 本地端 遠端 UNIX 檔案系統 NFS 客戶端 磁碟 伺服端 網路 NFS 協定
網路檔案系統協定 網路檔案系統的客戶端和伺服端模組溝通的機制都是使用遠端程序呼叫。 在客戶端已經掛載遠端目錄後才能使用。 提供對目錄作建立、刪除等操作,開啟、讀取和寫入檔案與存取檔案屬性等功能。 使用 XDR 的編碼架構,而可以在不同平台間傳送 RPC 的訊息。 採用 UDP 作為傳輸層的協定,並封裝在 IP 的封包內,客戶端與伺服端不需要一直維持連線狀態。 使用 TCP 能夠保證傳輸訊息的正確性,但是客戶端與伺服端會一直保持在連線的狀態。
網路檔案系統協定架構 NFS XDR RPC UDP/TCP IP
第二十章 分散式系統實例 Java RMI CORBA 網路檔案系統 摘要
摘要 Java RMI 可以透過網路去執行遠端伺服器上的程式,並取回執行結果。 CORBA 是功能更強大、更複雜的 RPC 機制。 可以將一個物件序列化而當成參數傳遞。 程式必須使用 Java 撰寫,比較缺乏彈性。 CORBA 是功能更強大、更複雜的 RPC 機制。 可以在執行期間才尋找要呼叫的物件,並且使用物件所提供的服務。 名稱服務扮演一個相當重要的角色, 可以利用名稱對應到物件位置而找到物件實作。
摘要 (續) 網路檔案系統可以讓執行在 LAN 或 WAN 環境下的電腦共享檔案系統。 網路檔案系統伺服器可以分享一個或多個目錄給客戶端。 客戶端利用掛載的方式使用遠端的檔案系統。 包含在核心執行、使用快取機制、採用不具狀態服務、和擁有認證機制等特性。 有不具備檔案複製通透性、無法處理同步問題、和擴充性不佳等缺點。