引言
WebSphere® Business Integration Server Foundation Version 5.1(以前為 WebSphere Application Server Enterprise)中的調度程序服務能夠使 J2EE 操作具有高性能、高可用性、持久性和事務調度等特征。
調度程序包含以下兩個組件:
調度程序資源
調度程序 API。
調度程序資源表示為一個調度程序實例,它在 WebSphere Application Server Java™ Naming and Directory Interface(JNDI)中可用。每個調度程序資源都有一些管理它的行為的獨特特性;例如,在哪個數據庫中存儲持久性調度。調度程序資源是使用標準 WebSphere Application Server 管理控制臺或 AdminControl 腳本對象配置的。
調度程序 API 是一個 Java 接口,可以用于創建和管理任務。該 API 可以通過任何的 J2EE 服務器應用程序(Enterprise Java Beans 和 servlets)訪問。
調度程序能夠執行兩種類型的任務:
調用無狀態會話 Enterprise Java Bean(EJB)。
發送 Java Message Service(JMS)消息。
調度程序將數據存儲在 WebSphere Application Server 支持的任何數據庫中,并使用 WebSphere Application Server 事務管理器。因此所有的調度程序操作都是事務性和持久性的;每個任務都能保證一次運行成功。如果有一個任務因為某種原因執行失敗,那么整個操作都會回滾。
調度程序可以使應用程序開發人員在任務的生命周期內創建自己的無狀態會話 EJB 以便接收事件通知,允許使用自定義日志實體或工作流應用程序插件。無狀態會話 EJB 也可以用于提供普通日歷。開發人員可以使用提供的日歷 bean,也可以為他們現有的業務日歷創建一個日歷 bean。
WebSphere Business Integration Server Foundation V5.1 Information Center 中介紹了調度程序服務,其中描述了基本的安裝和配置過程、簡化的編程示例,并引用了調度程序 API JavaDoc。
規劃
調度程序是 WebSphere Business Integration Server Foundation 產品的一部分,在運行調度程序活動時都需要用到調度程序。調度程序服務如果要訪問資源,要求先配置好調度程序資源和 J2EE 應用程序。每個資源都是以大致相同的方式配置為 DataSource 或 JMS Queue,可以在多個配置域(服務器、節點或單元)中創建。您可以創建多個調度程序配置資源,并通過一個或多個 J2EE 應用程序訪問每個調度程序資源。
用戶角色
調度程序服務需要有幾個用戶角色來規劃、開發、管理和操作該調度服務:
Administrator:
在其組織的基礎設施下對調度程序的運用進行構架。包括創建恰當的調度程序配置資源、調優每個調度程序實例、為應用程序分配資源以及解決問題。
Developer:
創建與調度程序服務 API 相交互的 J2EE 應用程序,包括管理應用程序(控制臺應用程序)和接收事件的應用程序(調度程序需要與之交互的應用程序)。
Operator:
監控調度程序以查看是否有錯誤,并運用 Developer 編寫的應用程序來響應錯誤環境。
資源配置
每個調度程序配置資源都有一些參數來為資源管理調度程序引擎的運轉方式,以及如何在 JNDI 中定位資源。如果使用管理控制臺配置調度程序資源,那么屏幕就會像圖 1 那樣:
如果兩個調度程序資源在不同級的作用域中使用同一個 JNDI 名稱進行配置,那么最小粒度級的作用域優先。
每個調度程序配置資源都具有以下參數(圖 2 也列出了這些參數):
輪詢守護程序
調度程序資源會為每個提供調度程序服務的服務器分配一個輪詢守護線程。因此,如果調度程序資源是在節點級作用域中配置的話,在該節點中的每個服務器都會分配到一個在其上運行的輪詢守護程序。
輪詢守護程序負責從數據庫加載任務。守護程序使用在調度程序配置資源中設置的 Poll Interval 來確定數據庫輪詢時需要等待的時間。如果這個值為 60,那么 對于所有在此周期內設置的待執行的任務而言,該守護每 60 秒鐘會試著加載一下任務。
Poll Interval 設置確定重復的執行任務的最小周期,同時也確定一次裝入內存的任務數。因此,創建一個 24 小時的大輪詢間隔并不是最佳的選擇,即使你一天只運行一次重復的任務。每個任務會裝入內存從而消耗資源。創建一個 1 秒鐘的小輪詢間隔可能看起來是恰當的選擇,然而,這樣會生成其他的數據庫爭奪。最好的做法是選擇 5 秒至 3600 秒(1 小時)之間的值,視您的任務需要的最小重復間隔而定。
Work Manager
用于調度程序配置資源的 Work Manager 設置提供給調度程序固定數目的線程,以便在其上分配工作,同時也提供給它一個用于確定如何將 J2EE 上下文信息分配到線程中的策略。
應用到調度程序中的 WorkManager 參數如下所示:
WorkManager 可以在多個調度程序之間共享,并可用于非調度程序目的。如果您想為多個應用程序和服務建立單個的線程輪詢和警報輪詢的話,這將是很有用的。請記住,雖然 WorkManager 可以在單元和節點作用域上配置,但是線程輪詢和警報輪詢是在每個活動服務器上復制的。圖 5 闡述了不同的服務器如何具有不同的 WorkManager 實例,卻具有相同數目的可用線程和警報。
WorkManager 服務
WorkManager 具有幾個服務上下文,在 Scheduled 任務執行時可以復制到其上。只有當服務是在用于創建和執行任務的應用服務器上安裝和啟用時才會復制服務,這些服務中的每一個都是這樣的。所有的 WorkManager 服務上下文都只應用到 BeanTaskInfo 任務中。
高可用性
可以通過創建副本調度程序資源或者在集群中創建一個資源這樣來配置調度程序服務,使之具有高可用性。WebSphere Application Server Enterprise Version 5.0.2 和 WebSphere Business Integration Server Foundation Version 5.1 中的調度程序利用租用權的概念來使獨立的輪詢守護程序之間的沖突最小化。許多的調度程序引擎共同競爭租用權,贏得租用權的調度程序就會運行任務。如果某一調度程序沒有得到租用權,那么輪詢守護程序就不會試著去加載和運行任何任務了。
在調度器間共享的租用權會使用同樣的 JNDI 名稱和數據庫表。因此在集群級上配置的調度程序資源就會自動地利用租用權了。
租用權是利用每個調度程序的 WorkManager 的獨立警報線程獲得的。嘗試獲取租用權的時間會略小于 Poll Interval(Poll Interval 的 64%)。在輪詢間隔的 80% 的時間內租用權本身就會過期。因此,如果輪詢間隔是 100 秒,每隔 80 秒租用權就會過期。每隔 64 秒(80 * .8)租用權警報就會試著去更新或獲得一個租用權。如果調度程序變為不可用,那么調度程序不可用的最大時間為 ((PI * .8) + (PI * .64)),相當于 80 秒(租用權的期限)加上 64 秒(備份調度器獲得該租用權的時間),即總共為 144 秒。
調度程序在 Version 5.0.2 之后的版本運用不同的算法來設置租用權時間,這種算法設置的時間獨立于輪詢間隔。這就可以使客戶使用一個更大的輪詢間隔,而不犧牲可用性。在 5.0.2 以后的版本中,租用權每隔 60 秒過期,并且每隔 40 秒由所有的守護程序更新或獲得。因此,調度器變為不可用的最大時間為 100 秒,與輪詢間隔無關。
關于租用權
Version 5.0.2 之前的版本不能夠使用租用權。如果添加多余的調度程序,可用性就會增加,然而爭奪也會增加。如果不想犧牲性能,您就不能夠增加超過一個的冗余調度程序。每個任務都會在每個服務器上加載并運行,但只有一個會運行成功。檢測到沖突時就會簡單地終止所有其他的副本任務。
如果您正在使用的調度程序所用的數據庫是利用 Version 5.0 或 5.0.1 版本的調度程序所提供的數據描述語言(Data Definition Language,DDL)文件創建的,那么您就不會有 Lease Manager。要想激活 WebSphere Application Server Enterprise Version 5.0.2 或 WebSphere Business Integration Server Foundation Version 5.1 中的 Lease Manager,只需要簡單地創建調度程序所提供的 DDL 文件中提到的新的 Lease Manager 表即可。通過重新運行創建這些表的 DDL 就可創建新的表,不會影響到現有的數據(關于如何創建這些表的細節請參見參考資料)。一旦創建這些表之后,調度程序就會自動啟動,使用租用權來管理多余的調度程序連接。
在圖 6 中,調度程序資源在同一個單元中的三個不同的服務器上存有副本。每個調度程序(JNDI 名稱為 sched/Main)引用同樣的 JDBC DataSource 和 Wor
原文轉自:http://www.anti-gravitydesign.com