文章標籤:DB

辦公室網格計算使用虛擬環境-第1部分

(星期五)二零零九年十二月四日下午11:23

介紹

我在一家公司上班,我們許多批處理作業處理數據每天數以百萬計的記錄,我一直在想最近所有的機器,周圍坐的每一天做幾個小時沒有運行。 如果我們可以使用這些機器,以增強我們的系統的處理能力,豈不是好? 在這組文章中,我要去看看用人辦公室電網使用虛擬環境的潛在好處。

作為一個PHP開發人員,我要使用的工具,我使用的每一天,即Linux中, MYSQL ,PHP,VirtualBox和顛覆(SVN)的。 不過,我希望本指南將適應其他語言和技術一樣好。

提供解決方案,我將非常鬆散的基礎上處理,我們就需要實現,但是這可能不是通過整篇文章的真實,我會改變為簡單的事情,或產生更有趣的使用場景類型。

這些虛擬環境將Windows機器上運行,因為這是大多數辦事處運行。 辦公室機器做了處理,不應該干涉員工使用這些機器,應該不需要在機器的維修,並很容易地部署到新機,因為他們成為可用。 此外,新的虛擬機,不需要任何額外的配置,因為這大大降低了在可擴展的網格系統的可擴展性和易用性。

為什麼要部署Office的計算網格嗎?

首先,你可能會想,為什麼不使用雲計算資源,如Amazon的EC2平台 原因可能有幾個,例如:

  • 你不會委託到雲計算環境中的某些數據
  • 到雲計算環境中,你不能把某些數據(如數據離開該國)法律上的原因,可能出於法律原因,如NHS的紀錄。
  • 你要保持加工單位關閉,並有超過硬件的完全控制
  • 你沒有項目資金運行雲實例
  • 你的辦公室並沒有連接到互聯網,因此它不可能使用雲資源
  • 你不喜歡雨,雲建議雨,因此你保持良好

我敢肯定,這個名單可以繼續,但我認為這是足夠現在。

一個辦公室計算網格的優點

好吧,讓我們做一些數學(在真實的物理風格讓一些籠統的假設)。 試想一下,你有大的的仡處理服務器上運行100每一天的工作。 在你的辦公室有50台機器,每天16小時處於閒置狀態,這些機器是只要你仡處理SEVER強大的10%。 (四捨五入到這裡所有的結果都低估的性能提升)。

因此,1台* 10%的電力* 2/3的時間= 0.067 1,即在桌面空閒時間處理, 每天可處理6的全面工作

如果你現在擴展這件事,它需要15閒置的台式機,每天處理盡可能多的就業機會,作為你的主服務器進行處理。

因此,在我們假裝辦公室50台機器,我們可以增加1服務器我們4個全處理服務器的處理能力,或者我們可以處理400每一天的工作,而不是100。

通知,貴公司已沒有新的硬件投資只是增加其批量處理能力的4倍 潛在的,你要你的用電量增加,但大多數辦公環境,我去過機一般都留下過夜了,所以你可以看到作為一個綠色倡議。

也意味著,在新的投資(或更新)處理服務器可以被延遲,如果你的辦公室機器充足,為您提高您的辦公設備的電源,你的辦公室網格變得更加強大,自動等優勢。

技術

你需要什麼? (或更正確,我沒有什麼用):

  • 閒置辦公設備(備用的舊的Windows XP的筆記本電腦在我的情況)
  • VirtualBox的(或其他虛擬化客戶端軟件)
  • 與PHP,mySQL的runningÂ切割下來操作系統上運行的虛擬機,我打電話給我的這些LIMP服務器 :)
  • 喬布斯運行
  • 作業服務器(可以是另一台虛擬機的地方)

典型的工作

,該系統被設計為運行工作的類型如下:

  • 系統接收到的數據,這就需要我們以匹配並返回結果列表
  • 符合條件的涉及檢查/尋找數(相當靜態)的數據源
  • 從數據源的結果,可能需要進一步驗證,合併,其他數據源的檢查結果
  • 數據返回匹配的記錄,充分驗證和處理
  • 內工作的每個記錄是獨立的休息

所以基本上我們尋找正在運行的作業,這需要一個數據庫查詢的混合物和一些數字運算,在一個商業環境相當典型的場景。

電網解決方案是處理這種類型的工作,不僅有利。 基本上可以並行運行,任何分裂過程可分為獨立單位。 為例子和詳細信息,請參見本維基百科: 網格計算 ,但幾個著名的例子是SETI @ HOMEBIONC 有運行計算網格框架,這些都值得探討。

我們會實現嗎?

通過這些文章的最後,我希望部署辦公網格,不需要非常昂貴或費時。 我要討論:

  • 設置作業控制系統,工作配置
  • 創建一個適當的處理虛擬機
  • 如何設置在Windows機器上的系統
  • 確保您使用的是最新的代碼和數據
  • 部署和基準
  • 展望未來

我會大樓(我建的,然後寫這)一個示例應用程序來測試使用Windows XP和我GridMachine“虛擬機上的本地機的概念。 我的作業控制服務器將成為我主要的機器上運行Fedora 11中

這絕不是為了展示一個完全工作的強大的系統,它意味著更多的示範和討論顯示,這些東西可以在相當短的時間空間,在較小的代價實現。 請隨時給我任何意見,更正,或改善,我會盡我最大努力保持更新以匹配本文。

下一次

第2部分 ,我會開始在尋找工作控制系統,並考慮工作應該如何進行配置,以達到處理量最大,同時確保每個作業無故障處理。

辦公室網格計算使用虛擬環境-第2部分

(星期五)二零零九年十二月四日下午11:23

介紹

我在一家公司上班,我們許多批處理作業處理數據每天數以百萬計的記錄,我一直在想最近所有的機器,周圍坐的每一天做幾個小時沒有運行。 如果我們可以使用這些機器,以增強我們的系統的處理能力,豈不是好? 在這組文章中,我要去看看用人辦公室電網使用虛擬環境的潛在好處。

第1部分中,我給了我將使用以及討論一些潛在的原因,為什麼你想創建一個辦公室電網系統和技術的概述。

作業控制

如果你將要運行的作業,然後你會需要一些方法來管理他們。 你的作業控制系統(作業服務器)需要真正深思熟慮之前,甚至試圖運行辦公室電網。 所以,首先,什麼是作業控制系統的任務:

  • 移交後,要求工人工作
  • 告訴工人什麼類型的工作運行
  • 跟踪作業
  • 確保工作只運行一次
  • 向工人提供了就業數據,或至少告訴他們在哪裡得到它

該系統還需要擴展,一個解決方案,適用於在一個單一的情況下,現在可以延長運行幾種類型的業務工作,看到在網格解決方案的價值。 例如,作業可能會獲得優先事項,可能存在一個以上的作業類型(即幾個代碼基地),最終你甚至可以運行多個不同的工作,優化為每個作業類型(雖然不從“一般工人的機器'的想法)。 總是嘗試開發系統時,思考未來,短期視力可導致較長期的挫折和增加開發時間。

作業服務器

我們要去的地方需要控制我們的工作,這應該只在您的網格系統,有一個固定的資源定位器,是一個IP地址,主機名,URL(使用內部DNS)等,這是因為工人需要知道在哪裡找工作,工作人員需要找到作業控制系統(作業控制系統發現工人)。

作業服務器本身並沒有真正有一個複雜的任務(無論如何)的一項基本制度,它需要儲存工作清單,手出來工作,收到成效,並隨後它們存儲供以後檢索。 如何定義這些部件(如“工作”失控),可以是很基本的。 後來,我們可以延長系統包括一個管理界面,添加,編輯,刪除,暫停工作,但這是超出這個練習。

有沒有任何理由,那麼你的工作服務器不能是一個虛擬機,主要加工提供的服務器內運行,它不會消耗太多資源。 然而,作業服務器需要高可用性,如果上週五晚上,你將失去整個週末的處理,可能耗費您值得一兩個星期的處理時間(時相比,你的主要處理服務器單獨) 。 你可能要考慮把你的工作服務器高可用性負載平衡的環境。

基本設置

為我們的工作服務器的基本設置,包括我打電話我LIMP服務器 (這是馬錢ySql,磷HP)。 THEA工人上運行的代碼將實際工作,它可以運行什麼作業與作業控制系統數據庫進行交互。 後來,我們可以創建一個Web服務了工作,實際上手,而不是讓工人做自己的辛勤工作,但現在我們將繼續使用KISS原則 (保持簡單,愚蠢!)。

因此,讓我們創建三個MySQL的表處理工作。 這將是`工作`,`jobRecords`,`jobResults`。

工作表 在這裡,我使用的SQL好友一個偉大的小替代phpMyAdmin的僅僅是因為它很容易安裝在CentOS(別人看: 10到phpMyAdmin大的替代品

此表由5個簡單的領域,

  • ID:唯一標識工作
  • 名稱:可能是一個客戶端參考,或任何其他標識符
  • 狀態:你需要知道在哪裡工作,例如:
    • 0:未開始
    • 1:拿起
    • 2:已完成
  • started_by:誰開始做這項工作? 這不完全是必要的,但有一個很好的。 我建議他們在網絡上的IP地址跟踪工人
  • started_at:工人什麼時候開始工作? 通過跟踪,但沒有X的時間內完成的工作,我們知道我們需要拿起再次工作,並開始由另一名工人處理。 工人可以停止處理/去任何數量的原因,斷電,死機,網絡損失等離線

這是很容易,可以延長一些額外的領域,以便跟踪統計,看到工作了多久,一個櫃檯,看到多少工人拿起工作的結束時間列這個表如何(顯然,這需要往往1),優先就業,名單可以開下去。 在更複雜的工作方案,將有可能指定多少內存工人將需要訪問(因此只能使用合適的工人),甚至是什麼類型的工人將被要求。

讓我們添加一些例如工作:

例如工作

下表是很容易理解,這些都是我們的工作記錄。 他們有聯繫的主要工作表列jobs_id`。 本表非常取決於你需要的數據提供給你的工人,讓一個很簡單的例子,我們有四列:

  • ID:ID記錄
  • 產品名稱:人的名字
  • 地址:人的地址
  • jobs_id:這條記錄鏈接到作業ID

第三個和最後一個結果表中的表組成,它有很多相同的使我們的記錄表,並與另外一些列可能的記錄表中的一部分:

  • job_record_id:鏈接到工作表的結果
  • 結果:結果數據

......,這一切你需要的作業控制! (儘管是在一個非常基本的水平),在我的情況,我指出,我的數據處理另一個位於表,但是這可以很容易地文件,參數運行仿真代碼,你的名字。

選擇工作

如前所述,工人會為我們做什麼,現在我們的工作管理,所以我們真正需要做的是找到一份工作,需要處理和獲取信息。 我們將如何做到這一點? 以及挑選我們的工作選擇標準和找工作,在SQL中我做了以下:

  1. 採取任何不標記為完整,但我們的工人的工作和重置(替換同一個標識符__ ME__,最簡單的將是IP地址):
    更新`工作`設置'狀態'= 0'狀態'= 1,`started_by`= _ ME__; 
  2. 使用我們的工作選擇標準,選擇工作,並告訴工人,這與它打交道的控制系統:
     更新`工作`設置'狀態'= 1,`started_by`= _ ME__,started_at`=現在()'狀態'= 0或
     (`地位`1`started_at`> DATE_SUB(現在(),間隔x小時))ORDER`ID`升序; 

    通過抓工作,但沒有返回結果在X時間,我們確保所有的工作都是在運行崩潰或擅離職守工人的事件數量。

  3. 下一步搶詳情記錄本身的工作:
     選擇*從`工作`WHERE`started_by`= __ ME__極限;
    選擇*`job_records“``ID`= _ JOBID__; 

作業完成後,我們插入了我們的結果記錄和標記為已完成的工作。 請記住,作為作業可以暫停/恢復隨時讓一些在你的腳本的健壯性。 這可能是任務中途暫停通過更新作業控制系統,使檢查工作的結果保存到作業控制系統中的記錄數量,將是一個明智之舉。

此外,雖然這表明如何工作可以選擇從一個SQL查詢幀確實應該管理的控制,使抽象的工作,如果你決定切換到使用一個Web服務,文件系統, XML ,或任何其他多項制度,它不會影響到它上面的代碼。

工作配置

接下來要考慮的方面是工作的大小和配置。 玩作業配置,我們可以取得良好的平衡之間的速度,複製過程和可靠性。 以一對夫婦OFA方案:

  1. 工作1天,每運行,這意味著,你的工人需要15天時間來處理每個作業(記得當時2/3rds的10%的電力)。 這顯然不是一個明智的配置,你的工作規模是太大了! 這將需要至少增加一倍的時間去處理工作,最初的工人應該去擅離職守(拿起時,它已經不返回結果加後處理時間)。 在一個理想的,你必須至少有一個完整的工作很容易清除長期閒置期間的每個年底,這樣你的工作,在最壞的情況下保持計時工作將採取兩天的過程,應該先去失踪。
  2. 工作需要1分鐘運行,這意味著你的工人,約需15分鐘,運行每個作業。 雖然這可能最初似乎理想,你在吃午飯的時候獲得額外的工作處理,茶點,會議等,這種情況使應變系統的其他領域,並介紹了自身的問題。 例如,首先將您的設置/處理時間比去,因此失去了系統的效率。 您的網絡將是不斷流的工作信息,以各種工人的令人沮喪的工作人員,誰是毛澤東他們的日常工作​​。 你還打算把更多的應變作業處理服務器,因為它有很多很多小塊工作定期拋出。 最後,在這種情況下,如果你的工作服務器宕機,你要創建一個未完成的工作的巨大回日誌,而更大的工作可以繼續幸福地意識到加工作業服務器遇到困難。

在現實中會有您的網格設置沒有一個理想的配置,更取決於可用的資源,作業類型,作業的周轉時間的要求,網絡能力,等等​​。 然而,一些準則是:

  • 大小工作,使每個工人可以通過在15小時內(最長可能的空閒時間至少3-4個工作)
  • 發揮作業的大小,使安裝變得相當的處理時間(軸承在考慮到上述點)相比,微不足道。
  • 如果工作不完整的雙倍金額的時間(也許更少),你期望它來完成,它承擔了擅離職守,並開始處理它與另一名工人。 這意味著你可能要等待它來完成(如果後續作業失敗可能更長)工作的正常長度的三倍。 你可能要縮短這個時間,但要小心沒有減少太多,因為你可能會開始定期重複處理任務
  • 工作應該盡可能多的外部要求獨立。 服務器的工作,例如,只應在每一項工作的開始和結束聯絡。
  • 不飽和您的網絡,這將有兩個負面影響,你白天的工作人員會發現,使用網絡的沮喪和問題,可連接超時的問題只會變得更糟,因為你擴展你的網格經歷。
  • 確保工作可以運行在你的工人。 如果工作變得過於內存密集型或磁盤空間密集的工作將啟動中止的唯一的事情,你會發現是在沒有真正的原因與處理的工作數量下降。

提交工作結果

當提交工作結果,它是重要的檢查結果還沒有被提交由另一名工人,特別是如果目前的工人已經蟄伏一段時間。

結果提交時確保結果的數量內的工作相匹配的記錄數。

如前所述,不能過分強調,建設成為工作的檢索結果提交容錯。 工人可以(和最有可能)進入掛起模式在最不方便的時候,這需要照顧。 也再次抽象出來的結果提交將有助於滿足您的作業控制系統更容易處理的未來變化。

總結

在這sectionÂ,我們看著需要做什麼作業控制服務器,以及如何得到一個非常基本的系統設置。 我們討論了如何檢索從控制系統的工作,以及如何最好地配置工作得到大多數我們您的辦公網格系統。 要完成,提出了一個段落或提交結果返回到作業控制服務器。

  • 作業控制服務器管理工作,確保完成所有的工作單位
  • 通過提煉你的工作選擇/結果提交,沒有太多的問題,我們可以改變控制服務器技術
  • 配置您的工作,以確保它們運行您的網絡基礎設施上投入太多的壓力,快速,高效地,並沒有定期重複處理任務。
  • 確保您建立容錯和錯誤checkingÂ到你的程序,工人可以暫停,恢復和最不方便的時間。 記住要檢查,如果結果已提交另一名工人。

下一次

第三部分中,我們將創建我們的虛擬加工機,並成立了我們的windows機器成為空閒時間的工人。

Zend框架:基礎-回顧

,星期六28十一月2009 10:42

最近,我的雇主支付了我們的開發小組採取了Zend框架:基礎課程,在這裡,我會總結我的想法和意見,對他人的過程中。 對於那些希望節省時間,這裡是我的總結:

還沒來得及看在Zend框架這當然對於開發(Zend框架:基本原理)提供了一個框架,向您介紹的重點領域,並給予足夠的信息,以便繼續良好的大局。 對於那些誰花時間框架,並已按照一個或兩個教程本課程不提供遠遠超出。

背景

我去過一個PHP為5-6年左右的開發,並已開始工作,與Zend框架的一個組成部分的基礎上,在過去的6個月。 我已經開發和/或1上幾個小Zend框架開發MVC的 sites.Â我會說實話,我已經沒有了大量接觸到其他框架,從一個角度編碼點,但已經花了數小時研究項目網站和評估them.Â框架和Zend框架周圍的社會,這是非常令人興奮,似乎有巨大的可能性,在其去。

關於課程

當然是交付超過兩個小時的WebEx會話(在中間休息10分鐘)。 花費的時間是通過一套由Zend提供了在任何時間進行討論的幻燈片。 您可以使用麥克風的教練談,但說實話,我沒有看到任何人使用任何聊天窗口多。 除了VMWare的Ubuntu機器提供了示例代碼和項目設置的Zend Studio試用版。 課程領導人會談與會者可以通過一個集成的VoIP解決方案,或者您可以撥打使用數字全球的許多撥號之一。

在課程材料組成的留言樣本應用程序的標題前的框架和MVC模式的簡要介紹。 討論表明,引導,Zend_Application,數據庫表,數據庫訪問,形式,過濾,ACL,驗證等,等,基本上涵蓋了所有的主題,你需要給你的工具,獲得了一個正在運行的所有的時間基本網站去獲得更多先進的框架中(雖然這確實金額,“看網站的大部分時間)。

給定的時間編寫了一些例子,並制定的“留言”和簡單的“維基”的應用。 我個人認為,提供的代碼或每個應用程序,然後要求我們發展基本上是一個副本,旁邊並沒有真正提供一個良好的學習經驗。 我寧願開發一個應用程序類似,但不完全相同。 例如應用有指導參考的利益。 或者建設從無到有,從示威者與應用,將可能導致更多的問題, 為什麼怎樣 ,從而使一個更好的框架的理解,畢竟你可以看一下具體課程後,。

最後的演講,包括在教練的指導與幫助/ wiki應用工作。 課程結束後的反饋,它強調通過課程幾次,Zend的反饋非常重視,顯然其實我們的版本當然是相當新的。 一些在該公司的其他開發將採取過程很快,所以這將是有趣的,如果發生這種情況。

當然風格是非正式的,允許觀眾和教練之間的反饋和協作。 課程負責人很友好,平易近人(電子郵件地址共享問題),而從他的演講幻燈片有點不穩,似乎完全有能力在框架。 他很清楚的人用的人教教的課程,而不是定期的框架,我很喜歡“現實世界”在這方面的經驗。

總體感覺

在某些方面,我發現,當然是在浪費時間,在其他國家,這是非常方便。 希望我會得到我跨清楚的原因,可能提供一些食物,思想或有用的反饋(知道我這是不可能的!)。

本課程旨在為自己水平太低。 經過快速入門指南不見了,讀羅布·艾倫的Zend框架的行動中,一點點,我也沒有真正得到什麼太多的框架工作。 我喜歡的課程撿起快速入門和開發更多的技能。

中說,課程名稱並註明“Zend框架: 基本原理 ”,並在這方面的課程達到什麼做。 沒有尋找到框架中所花費的時間開發團隊的其他成員的熱情完成每屆會議提出的問題,這是非常好的看到。

並沒有失去一切,這是很好的,花時間確認該框架的基本細節,問我是不是100%的地區問題的夫婦。 這也是時間,我坐下來的每一天,想想編碼使用的框架和未來的項目,東西我不會已經能夠做到,否則(貴公司同意了,你能想像嗎?:))。 最後但並非最不重要的,你也得到了很好的證書說,你參加的課程(儘管通過電子郵件)從Zend。

Zend Framework的認證

這是一個問題,不斷介意在課程期間,將準備我的認證? 快速,容易的是一個響亮的回答:“ 課程導師是很清楚其他意見,認證,你應該使用的框架上的每一天,感覺很舒服,它的用法和方法有信心。

總結

鑑於我上面寫的一切,我總結了兩個簡單的要點的一切:

  • 新的Zend框架:本課程不正是你所期望的,它給你一個很好的框架和基礎,從中可以建立良好的接地介紹。 當然似乎在開發中的框架,以產生興趣和熱情。
  • 使用Zend框架:雖然它是很好的支撐一些非常基本的,我覺得時間,精力和資金,當然可以更好地用在別處。 SEEA的Zend創建一個新的更高的水平當然要開發一個新的水平-這將是很好的。至少認證和超出標準, 為此,我會馬上註冊。

登錄到數據庫使用Zend Framework

,14th四月2009(星期二)9:06下午

我設法得到一個網站, Zend框架 ,並與運行,一切都被很好地記錄到Firebug / FirePHP所以下一步是要登錄到數據庫。 我也想記錄一些額外的信息,如用戶代理使用的框架,日期和時間,GET和POST變量。 因此,為了延長一點點這裡,我就是這樣做的手冊:

// Set up logging to DB
$db = Zend_Registry ::get('dbAdapters');
$db = $db['general'];

美元的ColumnMapping =陣列('優先'=>'優先',
'消息'=>'消息',
“的datetime'=>'時間戳'
“USER_AGENT'=>'USER_AGENT”
“get_vars'=>'get_vars”
“post_vars'=>'post_vars”
'網站'=>'網站'
);

$ writerDb =新Zend_Log_Writer_Db($ DB,“error_logging的ColumnMapping美元);
記錄=新Zend_Log的($ writerDb);

美元記錄 - > setEventItem(“日期時間”,日期(“YMD高:我:'));
美元記錄> setEventItem(“USER_AGENT,$ _SERVER ['HTTP_USER_AGENT']);
記錄器 - > setEventItem(“get_vars”的print_r($ _GET,TRUE));
記錄器 - > setEventItem(“post_vars”的print_r($ _POST,真實));
美元記錄 - > setEventItem(“網站”,網站);

記錄器 - >信息(“參考消息”);

美元的ColumnMapping數組鍵在哪裡是我的列名。 “優先”和“消息”是可以理解的由Zend_Log_Writers ,但附加字段添加一些額外的信息給我。

顯然,這是假設您已經登錄工作使用的其他作家的第一:)













全景主題 themocracy

6訪客在線
4位客人,2個機器人,0會員
最大的遊客今天:19在05:00上午UTC
本月26日在2012年4月4日10:27 PM UTC
今年:69在27-02-2012 09:56我
所有時間:130 28-03-2011下午10:40 UTC