介紹
我在一家公司上班,我們許多批處理作業處理數據每天數以百萬計的記錄,我一直在想最近所有的機器,周圍坐的每一天做幾個小時沒有運行。 如果我們可以使用這些機器,以增強我們的系統的處理能力,豈不是好? 在這組文章中,我要去看看用人辦公室電網使用虛擬環境的潛在好處。
在第1部分中,我給了我將使用以及討論一些潛在的原因,為什麼你想創建一個辦公室電網系統和技術的概述。
作業控制
如果你將要運行的作業,然後你會需要一些方法來管理他們。 你的作業控制系統(作業服務器)需要真正深思熟慮之前,甚至試圖運行辦公室電網。 所以,首先,什麼是作業控制系統的任務:
- 移交後,要求工人工作
- 告訴工人什麼類型的工作運行
- 跟踪作業
- 確保工作只運行一次
- 向工人提供了就業數據,或至少告訴他們在哪裡得到它
該系統還需要具有可擴展性,解決方案,工程現在可以在一個單一的情況下延長運行幾種類型的業務工作,看到在網格解決方案的價值。 例如,作業可能會獲得優先事項,可能存在一個以上的作業類型(即幾個代碼基地),最終你甚至可以運行多個不同的工作,優化為每個作業類型(雖然不從“一般工人的機器'的想法)。 總是嘗試開發系統時,思考未來,短期視力可導致較長期的挫折和增加開發時間。
作業服務器
我們要去的地方需要控制我們的工作,這應該只在您的網格系統,有一個固定的資源定位器,是一個IP地址,主機名,URL(使用內部DNS)等,這是因為工人需要知道在哪裡找工作,工作人員需要找到作業控制系統(作業控制系統發現工人)。
作業服務器本身並沒有真正有一個複雜的任務(無論如何)的一項基本制度,它需要儲存工作清單,手出來工作,收到成效,並隨後它們存儲供以後檢索。 如何定義這些部件(如“工作”失控),可以是很基本的。 後來,我們可以延長系統包括一個管理界面,添加,編輯,刪除,暫停工作,但這是超出這個練習。
有沒有任何理由,那麼你的工作服務器不能是一個虛擬機,主要加工提供的服務器內運行,它不會消耗太多資源。 然而,作業服務器需要高可用性,如果上週五晚上,你將失去整個週末的處理,可能耗費您值得一兩個星期的處理時間(時相比,你的主要處理服務器單獨) 。 你可能要考慮把你的工作服務器高可用性負載平衡的環境。
基本設置
為我們的工作服務器的基本設置,包括我打電話我LIMP服務器 (這是李馬錢,米ySql,磷HP)。 THEA工人上運行的代碼將實際工作,它可以運行什麼作業與作業控制系統數據庫進行交互。 後來,我們可以創建一個Web服務了工作,實際上手,而不是讓工人做自己的辛勤工作,但現在我們將繼續使用KISS原則 (保持簡單,愚蠢!)。
因此,讓我們創建三個MySQL的表處理工作。 這將是`工作`,`jobRecords`,`jobResults`。
在這裡,我使用的SQL好友一個偉大的小替代phpMyAdmin的僅僅是因為它很容易安裝在CentOS(別人看: 10到phpMyAdmin大的替代品 )
此表由5個簡單的領域,
- ID:唯一標識工作
- 名稱:可能是一個客戶端參考,或任何其他標識符
- 狀態:你需要知道在哪裡工作,例如:
- started_by:誰開始做這項工作? 這不完全是必要的,但有一個很好的。 我建議他們在網絡上的IP地址跟踪工人
- started_at:工人什麼時候開始工作? 通過跟踪,但沒有X的時間內完成的工作,我們知道我們需要拿起再次工作,並開始由另一名工人處理。 工人可以停止處理/去任何數量的原因,斷電,死機,網絡損失等離線
這是很容易,可以延長一些額外的領域,以便跟踪統計,看到工作了多久,一個櫃檯,看到多少工人拿起工作的結束時間列這個表如何(顯然,這需要往往1),優先就業,名單可以開下去。 在更複雜的工作方案,將有可能指定多少內存工人將需要訪問(因此只能使用合適的工人),甚至是什麼類型的工人將被要求。
讓我們添加一些例如工作:
下表是很容易理解,這些都是我們的工作記錄。 他們有聯繫的主要工作表列jobs_id`。 本表非常取決於你需要的數據提供給你的工人,讓一個很簡單的例子,我們有四列:
- ID:ID記錄
- 產品名稱:人的名字
- 地址:人的地址
- jobs_id:這條記錄鏈接到作業ID
第三個和最後一個結果表中的表組成,它有很多相同的使我們的記錄表,並與另外一些列可能的記錄表中的一部分:
- job_record_id:鏈接到工作表的結果
- 結果:結果數據
......,這一切你需要的作業控制! (儘管是在一個非常基本的水平),在我的情況,我指出,我的數據處理另一個位於表,但是這可以很容易地文件,參數運行仿真代碼,你的名字。
選擇工作
如前所述,工人會為我們做什麼,現在我們的工作管理,所以我們真正需要做的是找到一份工作,需要處理和獲取信息。 我們將如何做到這一點? 以及挑選我們的工作選擇標準和找工作,在SQL中我做了以下:
- 採取任何不標記為完整,但我們的工人的工作和重置(替換同一個標識符__ ME__,最簡單的將是IP地址):
更新`工作`設置'狀態'= 0'狀態'= 1,`started_by`= _ ME__;
- 使用我們的工作選擇標準,選擇工作,並告訴工人,這與它打交道的控制系統:
更新`工作`設置'狀態'= 1,`started_by`= _ ME__,started_at`=現在()'狀態'= 0或
(`地位`1`started_at`> DATE_SUB(現在(),間隔x小時))ORDER`ID`升序;
通過抓工作,但沒有返回結果在X時間,我們確保所有的工作都是在運行崩潰或擅離職守工人的事件數量。
- 下一步搶詳情記錄本身的工作:
選擇*從`工作`WHERE`started_by`= __ ME__極限;
選擇*`job_records“``ID`= _ JOBID__;
作業完成後,我們插入了我們的結果記錄和標記為已完成的工作。 請記住,作為作業可以暫停/恢復隨時讓一些在你的腳本的健壯性。 這可能是任務中途暫停通過更新作業控制系統,使檢查工作的結果保存到作業控制系統中的記錄數量,將是一個明智之舉。
此外,雖然這表明如何工作可以選擇從一個SQL查詢幀確實應該管理的控制,使抽象的工作,如果你決定切換到使用一個Web服務,文件系統, XML ,或任何其他多項制度,它不會影響到它上面的代碼。
工作配置
接下來要考慮的方面是工作的大小和配置。 玩作業配置,我們可以取得良好的平衡之間的速度,複製過程和可靠性。 以一對夫婦OFA方案:
- 工作1天,每運行,這意味著,你的工人需要15天時間來處理每個作業(記得當時2/3rds的10%的電力)。 這顯然不是一個明智的配置,你的工作規模是太大了! 這將需要至少增加一倍的時間去處理工作,最初的工人應該去擅離職守(拿起時,它已經不返回結果加後處理時間)。 在一個理想的,你必須至少有一個完整的工作很容易被清除長期閒置期間的每個年底,這樣你的工作,在最壞的情況下保持計時工作將採取兩天的過程,應該先去失踪。
- 工作需要1分鐘運行,這意味著你的工人,約需15分鐘,運行每個作業。 雖然這可能最初似乎理想,你在吃午飯的時候獲得額外的工作處理,茶點,會議等,這種情況使應變系統的其他領域,並介紹了自身的問題。 例如,首先將您的設置/處理時間比去,因此失去了系統的效率。 您的網絡將是不斷流的工作信息,以各種工人的令人沮喪的工作人員,誰是毛澤東他們的日常工作。 你還打算把更多的應變作業處理服務器,因為它有很多很多小塊工作定期拋出。 最後,在這種情況下,如果你的工作服務器宕機,你要創建一個未完成的工作的巨大回日誌,而更大的工作可以繼續幸福地意識到加工作業服務器遇到困難。
在現實中會有您的網格設置沒有一個理想的配置,更取決於可用的資源,作業類型,作業的周轉時間的要求,網絡能力,等等。 然而,一些準則是:
- 大小工作,使每個工人可以通過在15小時內(最長可能的空閒時間至少3-4個工作)
- 發揮作業的大小,使安裝變得相當的處理時間(軸承在考慮到上述點)相比,微不足道。
- 如果工作不完整的雙倍金額的時間(也許更少),你期望它來完成,它承擔了擅離職守,並開始處理它與另一名工人。 這意味著你可能要等待它來完成(如果後續作業失敗可能更長)工作的正常長度的三倍。 你可能要縮短這個時間,但要小心沒有減少太多,因為你可能會開始定期重複處理任務 。
- 工作應該盡可能多的外部要求獨立。 服務器的工作,例如,只應在每一項工作的開始和結束聯絡。
- 不飽和您的網絡,這將有兩個負面影響,你白天的工作人員會發現,使用網絡的沮喪和問題,可連接超時的問題只會變得更糟,因為你擴展你的網格經歷。
- 確保工作可以運行在你的工人。 如果工作變得過於內存密集型或磁盤空間密集的工作將啟動中止的唯一的事情,你會發現是在沒有真正的原因與處理的工作數量下降。
提交工作結果
當提交工作結果,它是重要的檢查結果還沒有被提交由另一名工人,特別是如果目前的工人已經蟄伏一段時間。
結果提交時確保結果的數量內的工作相匹配的記錄數。
如前所述,不能過分強調,建設成為工作的檢索結果提交容錯。 工人可以(和最有可能)進入掛起模式在最不方便的時候,這需要照顧。 也再次抽象出來的結果提交將有助於滿足您的作業控制系統更容易處理的未來變化。
總結
在這sectionÂ,我們看著需要做什麼作業控制服務器,以及如何得到一個非常基本的系統設置。 我們討論了如何檢索從控制系統的工作,以及如何最好地配置工作得到大多數我們您的辦公網格系統。 要完成,提出了一個段落或提交結果返回到作業控制服務器。
- 作業控制服務器管理工作,確保完成所有的工作單位
- 通過提煉你的工作選擇/結果提交,沒有太多的問題,我們可以改變控制服務器技術
- 配置您的工作,以確保它們運行您的網絡基礎設施上投入太多的壓力,快速,高效地,並沒有定期重複處理任務。
- 確保您建立容錯和錯誤checkingÂ到你的程序,工人可以暫停,恢復和最不方便的時間。 記住要檢查,如果結果已提交另一名工人。
下一次
在第三部分中,我們將創建我們的虛擬加工機,並成立了我們的windows機器成為空閒時間的工人。