2007年12月13日 星期四

GridGain 程式開發(1) - 入門簡介

重要名詞說明

要在分散式環境開發程式,有一些事情是必須住役的,而在 GridGain 中對於這些部分,為其定義了專有名詞。以下進行說明:

Grid Intance
Grid Instance 為單一 grid runtime,而 GridGain 強大之處就是可以在同一個 VM 中產生多個 Grid Instance。
Grid Node
Grid Node 與 Grid Instance 的概念幾乎是相同的,也是單一 grid runtime,唯一差別之處是每個 Grid Node 都有一個唯一的 ID 植可供辨識之用。
Grid Task
Grid Task 即為使用者所發佈必須執行的工作,這是 GridGain 中工作處理最重要的部分。
Grid Job
將 Grid Task 拆成可傳遞到遠端各個 Grid Node 去執行的工作,這些工作稱為 Grid Job;這些 Grid Job 會在遠端的 Grid Node 執行完後,再將結果回傳給派送工作的 Grid Node 作彙整。
Grid Task Session
在整個 Grid Task 執行的過程中,GridGain 提供了一個機制可以讓 Grid Task Instance 以及 Grid Job Instance 可以共同存取的狀態資訊,稱為 Grid Task Session。而 Grid Task Session 可使用 annotation 的方式注入(inject);而 GridGain 還提供了許多 API 可以用來存取這些狀態資訊。
【備註】Grid Task Session 是可以自訂的,可以是 primitive type、複雜的資料結構、甚至是物件
Grid Topology
Grid Topology 表示 Grid 所在的環境,例如:同一個 VM 中、在 LAN 中、在 WAN 中。GridGain 提供了 SPI 可作為 topology 的管理,而在不同的 topology 中管理機制相對也不同,在 LAN 中可以做精準的控管,但在 WAN 中的控管自然就不會這麼的嚴密。
Grid Job Sibling
由同一個 Grid Task 所拆出來的多個 job,都屬於 Grid Job Sibling。
Grid Job Collision
若 Grid Job 傳送到某個 Grid Node 去執行,但該 Node 正在執行其他的 Job,此時就發生 Collision 的狀況;GridGain 提供了 Collision SPI,讓使用者可以自行開發程式,來決定這一類的問題應該要如何處理。
Grid Job Failover
當 Grid Job 在 Node 上執行失敗,必須將執行到一半的工作移轉到其他 node 繼續執行,稱為 failover。而 GridGain 也提供了 Failover SPI 可讓使用者自訂 failover 發生時的處理方式。
Grid Job Preemption
當 Grid Job 在某個 node 執行到一半,其執行優先權很高,有異常狀況發生需要轉移到其他 node 執行,就可以透過類似插隊的方式,到其他 Grid Node 上優先執行,稱為 Grid Job Preemption。通常會發生在需要長時間執行的 Grid Node 上。
Grid Job Checkpoint
與 Task Session 不同的是,Grid Job Checkpoint 所儲存的為 Job 的狀態資訊,同樣的,狀態資訊也可以由使用者自訂,通常會用在 failover 或是 preemption 的狀況,目的是讓 Grid Job 可以從上次執行停止的地方繼續執行,不需每次都從頭開始。
Split & Aggregate
這概念很容易,就是將 Grid Task 拆成多個 Grid Job 並傳送到 remote Grid Node 執行,最後再將各 remote Grid Node 回傳的結果進行彙整。而這功能是分散式運算最基本的概念,所有相關的 framework 都應該會提供。
Grid Enabling
透過 Gridify annotation 即可讓指定的 method 在 Grid 環境上執行,這種動作即稱為 Grid Enabling。
Grid Event
在 Grid Task 拆成多個 Grid Job 並傳送到 remote Grid Node 執行的過程中,會產生許多 Grid Event,而這些 event 資訊都會存在發生該 event 的 node 上,因此這些資訊都是散亂在每個 node 上,因此 GridGain 就提供了 API 可以來針對這些 event 資訊進行查詢。


Grid Interface

從上一個部分可得知,在分散式運算的環境中,有許多重點是必須要備考量的。當然 GridGain 也提供了許多 API 可供使用者使用,而根據 polymorphism 的特性,GridGain 將許多功能定義在 Grid Interface 中,因此可透過 Grid Interface 針對 Grid Instance 進行各種 method 的呼叫。

而 Grid Interface 所提供的功能,大概有以下幾類:
  • Grid Task 的管理
    這是 Grid Interface 所提供的主要功能,使用者可以根據需求以同步或非同步的方式執行 Grid Task,差別在於非同步的執行,需要指定 GridTaskListener。詳細的情形可參考 Grid Interface 所提供了 execute() method。
  • Topology 管理
    此部分的功能可用來管理 Topology 的 listener,或是存取不同的 Grid Node。
  • 訊息交換
    訊息的交換必須靠使用者自行實作 Communication SPI,透過這種方式除了可讓使用者對 Grid Node 發送訊息外,還可以對 listener 進行訊息訂閱,讓 listener 傳遞所需要的訊息回來。
  • System Event 管理
    在 Grid Node 所進行的工作,都會產生各種不同的 event,而 Gird Interface 則提供了這些 event 的管理,除了可以查詢 event 相關資訊以外,還可以根據需求設定 event 的 listener。

一般來說,在程式中的使用方式通常是宣告 Grid Interface 後,並將其指向用 GridFactory.getGrid() 或是 GridFactory.getGrid(String) 所取得 Grid Instance,再根據呼叫 GridGain 所提供的 API。

沒有留言:

張貼留言