1. 程式人生 > >企業應用中的作業排程

企業應用中的作業排程

第一章.  企業應用中的作業排程
    ·什麼是作業排程
    ·作業排程為什麼說是重要的
    ·企業應用中的作業排程
    ·非企業應用中的作業排程
    ·作業排程與工作流
    ·關於作業排程其他可選擇方案
1. 什麼是作業排程

“作業”,這一技術述語上的概念,又讓我們回到了大型機的年代,那時候,使用者/程式設計師提交一疊穿孔卡片或者紙帶(上面描述了一個作業)給操作人員,由操作人員幫忙執行那些作業。使用者等待作業執行完後,回到主機那邊取自己的卡片和打印出來的輸出結果。
因為不是每一個作業要求立即被執行,所以作業可以被安排在將來的某個時候執行。比如說,一個系統管理員每天晚上可能有一份要執行的作業列表:
    · 10:00 PM: 執行患者資訊檔案的上載作業
    · 11:00 PM: 執行銷售資料報表生成
    · 11:59 PM: 進行資料庫的備份
作業排程通常是指執行一個批量的作業或稱之謂批處理。這種批處理作業一般都是放在後臺執行並且不需要與使用者互動。現在,顯著增多的多樣性的任務已代替了早先的批量作業。在一個大的組織中每天的每小時跑上百個作業已屬普遍。並且作業的規模與複雜性仍在持續的上揚,因此批量作業和作業排程器也就隨需應生。
2. 作業排程為什麼說是重要的

俗話說,“時間就是金錢。”,過高的資源投入到枯燥的任務中無疑是金錢和資源的浪費。隨著業務流程複雜性的提升,自動化流程也更能顯現出它的有益之處來。圖 1.1 說明了這一問題。

圖1.1 任務規規模越大、越複雜、越頻繁的被執行,那麼能從自動化中獲益也越大

人之所以稱之為人,國為我們犯錯誤的頻度遠高於電腦。把一系列任務自動安置到一個作業中,然後再為這個作業建立一個排程器,到時這個作業就會自動執行了。相對於人的手工處理,我們可以減少大多數的出錯機會。
作業排程器的另一個優點體現在伸縮性。我們也許能一個小時中手工完成10或20個作業,但是隨著每小時處理作業數量的增加,我們就更難杜絕不在作業中引入錯誤。但如果藉助於作業排程,只會受到硬體資源的影響了。
所以我們能著實的說通過作業排程那樣自動化處理相對於手工來說,至少為我們提供了以下三個優點:
    ·資源使用效率更高
    ·更少的出錯機率
    ·更高的伸縮性

3. 企業應用中的作業排程


“企業應用”一詞,如今經常會被我們無意識間提及,然而似乎現在還沒有對它一個準確的定義。但對於在本書中這一詞的意義,我們只要建立起這樣一個概念:作為某一組織的一部份而存在的軟體系統或程式。這個系統可以是一個大型機上的、或者是一個C/S結構的、或者就是一個J2EE應用。真實世界中的例子就是,作業排程器能在那個系統上大量的使用。以下的幾個場景,儘管沒有詳盡的進行描繪,也涉及到了現今應用軟體常常遇到的場景。
場景 #1: 郵件提醒和告警
許多網站(不管是商業的還是別的)允許使用者提供使用者名稱和密碼註冊一個帳戶。出於安全考慮,一個好的做法是讓使用者密碼每隔一段時間過期失效,比如說90天的週期。這種情況下,你可以建立一個作業,讓它每天午夜執行一次,並且向離過期時間不到三天的所有使用者發郵件提醒。這裡可以恰到好處的用到作業排程器。圖 1.2 描繪了密碼這個提醒作業。

圖 1.2  密碼過期的作業每晚傳送郵件給密碼很快會過期的使用者


除了發過期的密碼資訊,網站還可以傳送其他的告警或提醒(可不是垃圾郵件哦)。一個作業排程器還能夠用在類似的其他方面。
場景 #2: 執行檔案傳輸操作
許多商家需要和他們的供應商或客戶作資訊整合。一種整合的方式就是進行資料檔案的交換。可以採用實時的方式,例如SOAP協議,但是許多時候卻不需要實時性,代之以非同步的方式,譬如用FTP協議來發出或取所要的檔案。
下圖描繪了一個勞工補償局每天早上收到一些包含患者及事故資訊的檔案。公司可以僱一個人每天早上手工的檢出FTP伺服器上的檔案。作為另一個更好的選擇就是可以寫一個作業,讓它每天早上掃描FTP伺服器,如果有檔案的話,把檔案內容處理後插入到患者資料庫中去。讓作業排程器代勞後,這個職員再也不用手工去上FTP檢查檔案,而可以為公司做更多別的更有意義的事情。圖1.3 描繪了檔案傳輸的操作。

圖 1.3. 檔案傳輸的作業檢查FTP站點,把患者資訊檔案處理到資料庫中。


場景 #3: 建立銷售報表

公司經營由盈虧賬目所驅動,其中一個很重要的事情就是經營管理者和財務人員需要拿到最終收入和毛利資料進行分析。抽取銷售報表資料可能非常的慢並且很耗資源,因為這通常需要聯合多個表從中查詢出上千條記錄。一個更好的解決途徑是在晚上計帳和計價結束後,執行一個作業,讓它去生成一些臨時表或檢視為報表程式所用。建立臨時表或檢視的方式,使報表生成更具動態特性,而且使用者也用不著平白去等待報表的生成,一些報表工具,如水晶報表 XI(Crystal Reports XI) 本身就包含了作業排程器(見圖1.4)。

圖 1.4. 銷售資料報表程式執行為銷售團隊產生收入和毛利資訊

4. 非企業應用中的作業排程
Quartz 對於許多非企業環境的應用也是很有幫助的。例如,假定你有一個獨立的應用程式,事件是基於時鐘而不是滑鼠的點選激發的。這時候你就可以把Quartz構建到這個應用程式中來,並且安排事件能週期性的被觸發。
另一例子是,你也許正想查詢資料庫併發送郵件,而郵件接受者正是基於這些資料得到的。(譯者注:真有些搞不明白)
5. 作業排程與工作流

作業排程不是工作流,理解這一點很重的要。它們常被同時應用於一個方案中,但它們是兩個截然不同的解決辦法,並且都可孤立使用。一個作業通常由幾個步驟組成。我們回過頭來看前面提到的那個密碼過期的作業,實質上它是由三個步驟所組成。
1. 獲取到密碼將要過期的使用者列表
2. 為列表中的使用者各自發送一個郵件
3. 更新記錄,下次就能知道哪些郵件傳送過

這個作業可以使用工作流的優點,作業的每一部份恰好對應著工作流的每一個步驟。這並非意味著離開了工作流,作業排程會有些糟。這是普通的下一步、下一步簡單操作。只要作業排程框架與第三方工作流能輕便的解決問題,就是好的。更多的關於Quartz和工作流的內容將會在第十四章,“使用Quartz和工作流”詳解。

6. 關於作業排程其他可選擇方案

正如你所知,這本書是講Quartz的,但是Quartz的可替代方案呢?當我們比較作業排程方案的時候肯定要提到別的同類應用,那麼現在就來簡單介紹一下它們。
Java SDK Timer 和 TimerTask 類
java.util.Timer和java.util.TimerTask這兩個類是自1.3版本才加入到JDK中來的。這兩個新類可以實現一個最基本的排程器。也就只能作為我們理想的完整排程器框架的一個小的部件。任何嚴格意義的作業排程器都提供直接指定執行時間,儲存作業資訊到多種介紹和使用鉤子進行定製及其他更多的功能。單純靠JDK的那兩個類還不足以構建一個真正的作業排程器。JAVA的Timer類也沒辦法對作業和觸發器作相應的組織,使用每任務一個執行緒,而不是執行緒池的方式,還有其他不足之處難以成全其實現一個完全意義的作業排程器。
本土方案

從前面提到的Timer和TimerTask類來看,我們很容易低估建立一個靈活的、並且日後可擴充套件的作業排程器所作出的努力。建立一個作業排程器也不視之為微不足道的活兒。它需要的不僅僅是Java執行緒方面的專業技術,還需要解決其他更復雜的課題。如果你沒有這方面成熟的專業知識,別想著作業排程器能直接隨意一份草稿能一蹴而就。

商業解決方案

現在市面上也能見到不少商業的作業排程產品。在本書中,我們不打算花功夫去了解和評估那些商業化產品。表1.1 中列出了當下流行的幾個解決方案,你可以通過所給相應的URL獲得更詳盡的資訊。

表 1.1 商業作業排程器

名稱
網址

Flux Scheduler
www.fluxcorp.com/

Enterprise Batching Queuing
www.argent.com/p/qe/qe.html

Unicenter AutoSys Job Management 4.5
www.ca.com

BMC Software ControlM
www.bmc.com

Cybermation ESP Espresso 4.2
www.cybermation.corly;9'm

Vexus consulting Avatar Job Scheduling Suite 4.5.5
www.vexus.ca

Argent software The Argent Job Scheduler 4.5A
www.argent.com

Tidal Enterprise Scheduler
www.tidalsoftware.com