إضافة إلى صفحات حيوي Zend_Navigation حاوية في وقت التشغيل

بواسطة ، الخميس 7 يناير 2010 22:50

في استمرار في آخر مشاركة لي حول Zend_Navigation، تطلب الطريق لsitemap.xml إلى وحدة تحكم مخصصة / عمل ، هذا هو آخر حول إضافة صفحات dymnamically إلى حاوية Zend_Navigation في وقت التشغيل / سيناريو التنفيذ.

في كل شيء حسن وجيد يحدد صفحاتك في INI أو XML الملف ولكن عند نقطة ما كنت ستكون لدينا تغيير في صفحات موقعك التي تريدها كجزء من القائمة، خريطة الموقع، أو ليتم تضمينها في درب الخاص بك التفصيلي. لذا ما يتعين علينا القيام به هو إضافة صفحات إلى حاوية Zend_Navigation لدينا في وقت التشغيل. والأمثلة على هذا يكون في الأخبار، مضيفا بلوق وظيفة، أو تعليق صفحة، الخ.

مواصلة القراءة "إضافة إلى صفحات ديناميكية Zend_Navigation حاوية في وقت التشغيل '»

تطلب مسار لsitemap.xml إلى وحدة تحكم مخصصة / عمل

بواسطة ، الأربعاء 6 يناير 2010 12:13 صباحا

من أجل طلبات مباشرة لل/ sitemap.xml إلى وحدة تحكم مخصصة وعمل في الخاص Zend الإطار تطبيق ببساطة إضافة التالية في application.ini أو بديل ملف التكوين (على سبيل المثال أنا navigation.ini الاستخدام):

 resources.router.routes.sitemap.route = "sitemap.xml"
 resources.router.routes.sitemap.defaults.controller = مؤشر
 resources.router.routes.sitemap.defaults.action = خريطة الموقع

ويمكن رؤية رمز المثال لإخراج من خلال خلق عمل في وحدة التحكم المناسبة (على سبيل المثال خريطة الموقع بلدي يكمن في وحدة تحكم مؤشر، عمل خريطة الموقع):

 < PHP
 فئة IndexController
     يمتد Zend_Controller_Action
 {
     / **
      * يجسد ملف Sitemap استنادا الإعداد Zend_Navigation
      * /
     جمهور sitemapAction وظيفة ()
     {
    	 صدى دولار هذا-> مشاهدة-> ملاحة () -> خريطة الموقع ()؛
    	 دولار هذا-> مشاهدة-> تصميم () -> disableLayout ()؛
    	 دولار هذا-> _helper-> viewRenderer-> setNoRender (صحيح)؛
     }
 }

يمكن بسرعة وبسهولة خرائط يتم إنشاؤها باستخدام Zend_Navigation ، تعليمي كبير سريع (وعموما مفيدة جدا للدروس Zend الإطار) هو يلقي زند - خلق ديناميكية قائمة ملف Sitemap وفتات الخبز .

زند إطار كل وحدة ضبط القائمة على

بواسطة ، يوم الجمعة 1 يناير 2010 22:40

لقد خلق متابعة لهذا المنصب الذي يتطلب قدرا أقل من التكوين، يرجى الاطلاع على التخطيط القائم على وحدة - Zend الإطار .

عند استخدام إطار عمل Zend مع الوحدات، واضح في انه اذا كنت تريد تشغيل مختلفة (شبه) مواقع قبالة التطبيق نفسه لا تريد بالضرورة نفس الكتابات التخطيط لكل جزء. قررت أن أذهب مع بنية الموقع التالي:

  / التطبيق
     / وحدات التحكم
         ...
     / الموديلات
     / وحدات
         / الافتراضي
             / وحدات التحكم
             / تخطيط
                 / مخطوطات
             / وجهات النظر
                 / مخطوطات
         / anotherModule
             ...
     / مخطوطات

والمشكلة إعداد النصوص التخطيط على أساس كل وحدة. وجاء الجواب من خلال استخدام مساعد العمل. إنشاء تخطيطات على أساس كل وحدة تتضمن ثلاث خطوات:

  1. Application.ini (أو ما شابه ذلك الإعداد التكوين):
     admin.resources.layout.layoutPath APPLICATION_PATH = "/ وحدات / مشرف / تخطيطات / مخطوطات" default.resources.layout.layoutPath APPLICATION_PATH = "/ وحدات / الافتراضي / تخطيطات / مخطوطات" member.resources.layout.layoutPath APPLICATION_PATH = "/ وحدات / عضو / تخطيطات / مخطوطات "affiliate.resources.layout.layoutPath APPLICATION_PATH =" / وحدات / التابعة / تخطيطات / مخطوطات " 
  2. خلق لكم مساعد العمل:
      <؟ PHP
     / **
      * ضبط مسار التخطيط على أساس كل وحدة
      *
      * @ لويد مؤلف اتكن <lloyd@evilprofessor.co.uk>
      * @ منذ 2010/01/01
      * /
     فئة Pro_Controller_Action_Helper_SetLayoutPath
         يمتد Zend_Controller_Action_Helper_Abstract
     {
         / **
          * مسار تخطيط مجموعات على أساس وحدة
          * /
         جمهور preDispatch وظيفة ()
         {
        	 $ $ = وحدة هذا-> getRequest () -> getModuleName ()؛
    
    	     إذا دولار (التمهيد = دولار هذا-> getActionController ()
    	                        -> getInvokeArg ('التمهيد')) {
    
    	         $ $ = التكوين التمهيد-> getOptions ()؛
    
    	         إذا كان (isset ($ التكوين [$ وحدة] ['موارد'] ['تخطيط'] ['layoutPath'])) {
    	             $ layoutPath =
    	                  [وحدة $] $ التكوين ['موارد'] ['تخطيط'] ['layoutPath']؛
    	             دولار هذا-> getActionController ()
    	                  -> getHelper ('تصميم')
    	                  -> setLayoutPath ($ layoutPath)؛
    	         }
        	 }
         }
     } 
  3. وأخيرا boostrap المساعد العمل:
      ...
         / **
          * يقوم بإعداد النصوص التخطيط على أساس كل وحدة
          * /
         المحمية وظيفة _initLayoutHelper ()
    	 {
    	     دولار هذا-> التمهيد ('frontController')؛
    	     $ = تخطيط Zend_Controller_Action_HelperBroker :: addHelper (
    	         جديد Pro_Controller_Action_Helper_SetLayoutPath ())؛
    	 }
     ... 

المذهب: الافتراضي DATETIME الآن ()

بواسطة ، الأربعاء 30 ديسمبر 2009 18:30

لقد كنت تناضل مع وضع مخطط قاعدة البيانات للحصول على جديد Zend الإطار المشروع. أنا باستخدام محاولة استخدام المذهب ORM لنماذج قاعدة البيانات الخاصة بي. ولست بحاجة لإعداد مخطط بحيث أنه سمح لي لتحديد موعد الافتراضي ووقت لعمود `التاريخ والوقت، على سبيل المثال عند إضافة رسالة جديدة أحصل على الطابع الزمني الحالي. بعد الكثير من البحث والتجريب وجدت الحل لذلك أنا تقاسمها.

في المخطط الخاص YAML ملف تفعل ببساطة ما يلي:

 الرسالة:
   actAs:
     Timestampable:
       الانشاء:
         الاسم: created_at
         النوع: الطابع الزمني
         الشكل: Ymd H: الأول: S
       تحديث:
         الاسم: last_updated
         النوع: الطابع الزمني
         الشكل: Ymd H: الأول: S
   أعمدة:
     اسم المستخدم:
       النوع: عدد صحيح
       الابتدائية: صحيح
       autoincrement: صحيح
     الاسم: سلسلة (255)
     البريد الإلكتروني: سلسلة (300)
     الرسالة: سلسلة (2000)

إذا من ناحية أخرى لا تريد `1` updated_at عمود يمكنك استخدام ما يلي:

 الرسالة:
   actAs:
     Timestampable:
       الانشاء:
         الاسم: created_at
         النوع: الطابع الزمني
         الشكل: Ymd H: الأول: S
       تحديث:
         المعاقين: صحيح
   أعمدة:
     اسم المستخدم:
       النوع: عدد صحيح
       الابتدائية: صحيح
       autoincrement: صحيح
     الاسم: سلسلة (255)
     البريد الإلكتروني: سلسلة (300)
     الرسالة: سلسلة (2000)

أنماط تصميم PHP - نمط المراقب

بواسطة ، الثلاثاء 29 ديسمبر 2009 22:02

لقد تم قراءة أنماط رئيس التصميم الأولى مؤخرا، وقد قررت أن أكتب بعض أنماط كأمثلة PHP لمصلحة بلدي. أول واحد ان كنت قررت متاحة حتى نمط المراقب . التعريف الرسمي للنمط المراقب هو:

نمط المراقب (مجموعة فرعية من غير متزامن نشر / الاشتراك نمط ) هو برنامج نمط التصميم التي يمكن لل كائن ، ودعا هذا الموضوع، وتحتفظ بقائمة من المعالين، ودعت مراقبين، ويخطر لهم تلقائيا من أي تغييرات دولة، عادة عن طريق الاتصال واحد من هذه الأساليب . وهي تستخدم أساسا لتنفيذ وزعت نظم معالجة الحدث.

كما نظم تصبح أكثر فضفاضة إلى جانب التأكد من أنه عندما حدث يحدث في جميع الأنظمة التي تتطلب معرفة هذه التحديثات على علم. على سبيل المثال، بلوق وظيفة، بعد توفير وظيفة قد نحتاج لتحديث محرك البحث (على سبيل المثال وسان)، وتحديث خريطة الموقع لدينا، والعلامات، ومستخدمي البريد الإلكتروني المشترك، وما إلى ذلك نمط المراقب تسمح للمطورين لإضافة المستمعين إضافية دون تحرير موضوعها ملاحظتها . عن طريق حقن المراقبين (أي محرك بحث مراقب التحديث، مولد خريطة الموقع، الخ) في موضوع (أي نظام آخر بلوق والتحرير) يمكن أن نسمح لأداء جميع التحديثات الضرورية دون أي تغيير.

تواصل "أنماط تصميم PHP - نمط المراقب" القراءة »

مكتب الحوسبة الشبكية باستخدام البيئات الافتراضية - الجزء 4

بواسطة ، الجمعة 4 ديسمبر 2009 11:59

مقدمة

أعمل في شركة حيث نقوم بتشغيل وظائف دفعة وتجهيز العديد من الملايين من السجلات من البيانات كل يوم، ولقد تم التفكير مؤخرا حول جميع الآلات التي تجلس حول كل يوم تفعل شيئا لعدة ساعات. لن يكون من الجيد لو تمكنا من استخدام هذه الآلات لتعزيز قوة المعالجة من أنظمتنا؟ في هذه المجموعة من المقالات انا ذاهب للبحث في الفوائد المحتملة لاستخدام مكتب الشبكة باستخدام البيئات الافتراضية.

في الجزء 3 أنشأنا لدينا آلة تجهيز الظاهري وانشاء النوافذ آلات لتصبح عاطلة العاملين بدوام.

تشغيل أحدث رمز

حتما بعد خلق منطق عملك العمال سوف تتغير، سيتم العثور على البق، وسوف تنتج كود أسرع أكثر كفاءة وبالتالي ترك العاملين لديك وجلس حول معالجة البيانات باستخدام رمز كريه الرائحة القديمة . ثم كيف نضمن أن نستخدمه دائما إصدار أحدث وأكبر من النصوص المعالجة لدينا؟

هناك عدد قليل من وسائل بسيطة وسهلة للغاية يمكننا القيام بذلك، خدعة، ولكن، للحد من قوة المعالجة وشبكة المرور في تحقيق ذلك. لنبدأ مع أبسط الحلول وتحسينه ببطء على مدى بضعة التكرار.

والطريقة الأولى هي ربط ببساطة لدينا وظيفة الخادم التحكم (عن طريق سامبا، FTP، أو ما شابه ذلك)، وهدم أحدث نسخة من التعليمات البرمجية. لا فعال جدا، لكنها سوف قيام بهذه المهمة. يتيح تحسين ذلك إلى حد ما، وكيف حول إنشاء برنامج نصي رسينك واستخدام ذلك في كل مرة بدلا من ذلك؟ بدلا من ذلك ماذا عن وضع سيناريو آخر لدينا معالجة في التخريب التحقق من رمز في البداية ومن ثم استكمال مجرد رمز لنا في كل المدى ( إس التحديث

في النهاية نستطيع في نهاية المطاف مع السيناريو باش (وتسمى من قبل كرون كل 10 دقائق) والتي تبدو بسيطة مثل هذه:

 # / بن / ش إذا PS الفأس |! GREP-V GREP | GREP PHP > / ديف / لاغية صدى ثم "العمل حاليا بتجهيز، خروج" آخر صدى "وظيفة ليست قيد التشغيل، يبدأ الآن" مؤتمر نزع السلاح / الطريق / / العمل / نسخة SVN التحديث PHP yourJobProcessingScript.php فاي 

الآن يمكننا أن نكون على يقين من أن كل المدى مع اننا بالتأكيد تشغيل أحدث رمز. نحن ضمان هذا من خلال تحديث قاعدة لدينا رمز في كل مرة نقوم البعيد والحد من حركة مرور الشبكة من خلال نقل فقط الاختلافات ملف عبر شبكتنا.

مظاهرة في الإعداد بلدي، وأنا فعلت تماما كما سبق. تم تركيب التخريب في وظيفتي خادم تجهيز وأنا سحبت ببساطة على أحدث رمز من فرع 'عامل' باستخدام 'إس التحديث. أود أيضا أن أضيف العلامة رقم الإصدار إلى البرنامج النصي معالجة بلدي الذي عاد إلى قاعدة البيانات كجزء من عودة النتائج. وبهذه الطريقة استطعت أن أرى أنه يجري تحديث قانون بلدي في كل مرة أقوم نسخ جذعي الى عامل أي فرع أنني تشغيل بالتأكيد سيناريو آخر معالجة.

باستخدام أحدث البيانات

إذا معالجة عملك يجعل من استخدام مصادر البيانات ثم في مرحلة ما هذه سوف يتم تحديثها أيضا. إلا إذا كنت استدعاء البيانات الخاصة بك على أساس مصادر نادرة جدا وأنت تسير على إغراق الشبكة مع حركة المرور في أقرب وقت العاملين لديك بدء تشغيل تعيد كل شيء الى طريق مسدود. لإيجاد حل لي أنا قررت أنني أود أن تحرك بلدي حول مصادر البيانات مع نظام رصد السفن بلدي.

عقد كنت الخيول هناك! ماذا لو مصادر البيانات بلدي ضخمة؟ حسنا هذا هو في الحقيقة حالة من كمية البيانات التي نتحدث؟ قد يكون أكثر فعالية من حيث التكلفة لتثبيت إضافي محرك أكبر من الصعب في كل من آلة لشراء خادم معالجة إضافية. هذا هو السؤال من ميزانية ومتروك لرجال الأعمال لاتخاذ قرار. انها ربما أن مصادر البيانات هي من الضخامة بحيث لها غير مجدية فقط للحفاظ على هذه الكمية من البيانات في آلات عامل الخاص بك. في هذه الحالة ماذا ستفعل؟ كذلك يمكن أن ننظر إلى دعوة خادم البيانات المحلية، ولكن هذا قد يسبب مشاكل مع الشبكة. في هذه الحالة يمكن للنظام الشبكة مثل هذه تصبح غير واقعية على أن تدرج في بيئة مكتبك. قد يكون أيضا أنه يمكنك النظر في استراتيجيات بديلة للتشغيل، على سبيل المثال فقط استدعاء العاملين لديك 8:00 حتي 06:00 كل ليلة و / أو اختناق تطلب مصدر البيانات.

الانتقال يتيح القول لدينا كمية مصادر البيانات إلى 100GB من البيانات. نعم هذا جيد لا بأس به من البيانات إلى التحرك في جميع أنحاء الشبكة على التحديث. كيف نضمن أن لدينا أحدث نسخة من البيانات في هذه الحالة؟ رسينك هو احتمال، ولكن شخصيا اعتقد عن طريق تشغيل مصدر بيانات آخر في عملك خادم تجهيز ووضع هذا الأمر هو المدخل الرئيسي في تكرار (مع وجود سجل طويل بن لطيف) قد تكون وسيلة للذهاب:

التكرار سيكون من خلال وضع كل واحد من العاملين لديك ما يصل كعبد إلى التحديثات وظيفة خادم السيطرة على مصادر البيانات تنساب بشكل جيد للعاملين في الخاص بك من دون زيادة كبيرة في نشاط الشبكة (وهذا هو ما لم يتم إجراء تحديث بيانات ضخمة وكافة العاملين في ركلة في مرة واحدة). هذا له مزايا أكثر من رسينك في أنك لن تحصل على وقفة طويلة أمام كل وظيفة، كما أن تحديث قاعدة البيانات، و الخلية الخفي في ملفك سيتم تحديث بياناته باستمرار في حين أن المعالجة لا يزال مستمرا.

هذا هو كيف أقوم بإعداد خدمة بلدي مظاهرة. لإعداد النسخ المتماثل تابعت دليل على موقع ماي ( إعداد النسخ )، وخلال 20 دقيقة كان لي عامل بلدي inital تكرار بيانات مهمة مراقبة الملقمات. عن كل عامل إضافي عمل إعدادات النسخ وعملية في كل مرة عندما تم نسخ VM.

ملخص

في هذا الجزء من المادة ونحن لقد بحثت في كيفية سهل وغير مؤلم هو للحفاظ على التعليمات البرمجية معالجة حتى الآن من قبل using رسينك أو subverion (SVN) للقيام بهذا العمل والحد من حركة مرور الشبكة في time. نفسه كما ناقشنا كيفية للحفاظ على معلوماتك مصدر بيانات تصل إلى التاريخ من خلال السماح لتنساب إلى كل من العاملين لديك. وبالتالي فإننا منطقة نضمن مواكبة منطق الأعمال والمعلومات في مكتبنا نظام الشبكة. سيكون هناك عدد لا يحصى من الواضح أن البدائل لأداء هذه المهام، ولكن كانت هنا مثالين بسيطة لإظهار مدى سهولة التوصل إلى حل هو أن يأتي من قبل.

المرة التالية

في الجزء الأخير من هذه السلسلة، اسم على مسمى الجزء 5 ، سنناقش نشر هذا النظام ل. وسوف ألخص ما تم تعلمه، وما تمكنت من خلق.

مكتب الحوسبة الشبكية باستخدام البيئات الافتراضية - الجزء 3

بواسطة ، الجمعة 4 ديسمبر 2009 23:37

مقدمة

أعمل في شركة حيث نقوم بتشغيل وظائف دفعة وتجهيز العديد من الملايين من السجلات من البيانات كل يوم، ولقد تم التفكير مؤخرا حول جميع الآلات التي تجلس حول كل يوم تفعل شيئا لعدة ساعات. لن يكون من الجيد لو تمكنا من استخدام هذه الآلات لتعزيز قوة المعالجة من أنظمتنا؟ في هذه المجموعة من المقالات انا ذاهب للبحث في الفوائد المحتملة لاستخدام مكتب الشبكة باستخدام البيئات الافتراضية.

في الجزء 2 ألقينا نظرة على وظيفة خادم سيتم تشغيل، وكيف يجب أن يتم تكوين فرص عمل من أجل تحقيق أكبر قدر من التجهيز مع ضمان أن تتم معالجة كل وظيفة دون أن تفشل.

إنشاء عامل الخاص بك - أو الخادم يعرج

الخطوة التالية في هذه العملية هو لاقامة العمال الظاهري. لهذا انا ذاهب الى استخدام تثبيت من centOS استخدام فيرتثلبوإكس. انا ذاهب الى تثبيت الخلية و PHP على الخادم، والتي تعرف أيضا باسم Server (لي جوز، ySQL م، ف HP) عرج (وأنا قد جعلت هذا الاسم متابعة).

  • فيرتثلبوإكس تثبيت على الجهاز الخاص بك ويندوز (اتبع الرابط)
  • تحميل وتثبيت centOS (الإصدار الحالي 5.3) في جهاز ظاهري خلق

ليس هناك نقطة لي الذهاب الى هذا هناك على الأرجح 1000 ق 'من الدروس العظيمة الى هناك (حسنا، وهنا واحد: خلق وManaging الجهاز الظاهري centOS تحت فيرتثلبوإكس ). نقطة المهم أن نلاحظ أفترض هو أنني طلبت آلة افتراضية GridMachine.

بقدر ما خياراتي من العميل الافتراضية ونظام التشغيل يذهب ليس هناك من سبب مقنع كبير لكل خيار. فيرتثلبوإكس شيء يمكنني استخدام آلة في بيتي ومعتمد من قبل أنظمة التشغيل الرئيسية الثلاث. اخترت centOS باعتباره نظام التشغيل مستقر لها جيدة وأنا استخدامها في خدمة بلدي على شبكة الإنترنت الخاصة بها. أنا مؤمن كبير في الأدوات المناسبة لهذا المنصب (على الرغم من انني تطبيق "استخدام أسرع وأسهل بالنسبة لك" عقلية هنا)، حتى إذا تعمل X نظام تشغيل التعليمات البرمجية بشكل أسرع وأكثر كفاءة استخدام ذلك بدلا :)

جعل الأهم على يقين من أن VM الخاص بك يستخدم DHCP، وإلا لآلة كل الظاهري الجديد سيكون من الضروري تكوين على حدة وهو أمر نحن لا تستخدم DHCP want.By نحن لسنا بحاجة لتكوين إعدادات الشبكة بشكل فردي للآلات عامل، وسوف يسلم DHCP من البرامج المتكاملة لك. لذلك يمكنك نسخ الجهاز الظاهري عن المكتب دون الحاجة إلى القلق حول وضع كل واحد أعلى (وهو ما يحسن من قابلية الإدارة، ويقلل من عامل).

والعملية التي ينبغي أن تهدف إلى تحقيق هو الحصول على جهاز جديد مادي، تثبيت فيرتثلبوإكس، ومن ثم الى حد كبير نشر الصورة الظاهرية دون أي شيء آخر. قد يكون من الحكمة لإعداد كل ما تبذلونه من العاملين على شبكة فرعية مختلفة بحيث يمكنك على الأقل نرى كيف العديد من الآلات تعمل بنظام التشغيل. سوف تحتاج أيضا إلى إعداد الأجهزة الخاصة بك على عقد ايجار طويل غير محدود أو تأجير DHCP.

كيفية تشغيل وظائف على العامل

هذه هي منطقة مثيرة للاهتمام، وهناك طرق عدة لمعالجة صحيحة وظائف على العامل. هنا سوف أناقش فقط وهما أكثر وضوحا:

  • يتم تنفيذ برنامج نصي، سواء كان شيل، أو PHP السيناريو مرة واحدة على عامل ويعمل كجزء من حلقة لا نهائية: تشغيل الدوام النصي. لقد خصم أنا هذه الطريقة واحدة تحطم السيناريو وربما عمال الخاص بك وسوف تتوقف عن تشغيل دون وجود نوع من التدخل.
  • كرون تنفيذ البرنامج النصي إلى: كل دقيقة X شيطان كرون تنطلق الدعوة إلى السيناريو الخاص بك للحصول على اشياء اخرى. دون التحقق من بعض وهذا يمكن أن يؤدي إلى نسخ عديدة من لديك عامل تشغيل البرنامج النصي.

وكان قرار بلدي للذهاب مع كرون التي تنطلق نصي قذيفة كل minutes. 10 مخطوطتي قذيفة بتنفيذ المهام التالية:

  1. الحصول على قائمة عملية وGREP هذا ل 'بي'. إذا لم يتم العثور على الاستمرار بعد ذلك.
  2. استدعاء التعليمات البرمجية وظيفة، في حالتي هذه ستكون PHP شيء يستند
  3. سيناريو عامل يكمل شوطه
  4. على استعداد للذهاب مرة أخرى على الدعوة التي وجهها المناسبة المقبل

مخطوطتي باش يبدو شيء كما يلي:

  #! / بن / ش
 إذا PS الفأس | GREP-V GREP | GREP PHP> / ديف / لاغية
 ثم
     صدى "وظيفة يتم معالجة حاليا، للخروج"
 آخر
     صدى "وظيفة ليست قيد التشغيل، يبدأ الآن".
     PHP yourJobProcessingScript.php
 فاي 

ملاحظة: في صدى تكاد تكون بلا جدوى تماما، ولكن قد يساعد الشخص التالي الذي يأتي على طول في محاولة لتحريرها.

أن يخلص إلى مجموعة تتكون من آلة عامل الظاهري، سريعة وبسيطة وسهلة لنسخ إلى كل قطعة جديدة من الأجهزة التي يتم تلقيها. في "شطارة" من نظام الشبكة في الحقيقة ليست في نظام التشغيل تصور، لها كل علاقة مع رمز خلق فرص عمل للعملية، وتكوين فرص العمل، والتأكد من أن تشغيل المهمة في الوقت المناسب (أي عندما المضيف خاملا ).

إعداد Windows التهيئة العمال

المهمة الأولى هو العمل على الأمر المطلوب لتشغيل الجهاز الظاهري من سطر الأوامر ويندوز. إذا كنت قد قمت بتثبيت فيرتثلبوإكس في الموقع الافتراضي، وكنت قد يدعى GridMachine الخاص عامل ثم أمر مطلوب لتحميل عامل الخاص بك هو:

  "C: \ ملفات البرنامج \ أحد \ فيرتثلبوإكس \ VBoxManage.exe" startvm GridMachine 

لكن لتشغيل البرنامج النصي في حالة "بلا رأس" نحن بحاجة إلى استخدام:

  "C: \ ملفات البرنامج \ أحد \ فيرتثلبوإكس \ VBoxHeadless.exe"، startvm GridMachine - vrdp = إيقاف 

وهذا بدء تشغيل الجهاز الظاهري من دون واجهة المستخدم الرسومية والسماح لها لانقاذ الدولة بأمان. الوسيطة الثانية إيقاف RDP لذلك لا يتعارض مع RDP النوافذ، أو تعطيك رسالة حول الاستماع على منفذ 3389. اسم الجهاز الظاهري هو قضية حساسة!

المقبل، سوف نحتاج إلى ضبط النوافذ حتى تنطلق VM لدينا عامل مرة واحدة الجهاز خاملا. للقيام بذلك (على نظام التشغيل Windows XP) ستحتاج للذهاب ابدأ -> كافة البرامج -> الملحقات - أدوات النظام> -> المهام المجدولة على النحو التالي:

المهام المجدولة

انقر فوق التالي على 'إضافة مهمة مجدولة "يليه استعراض لإضافة برنامج مخصص. انتقل إلى سيناريو VBoxManage الخاص بك وانقر موافق. جدولة مهمة للحصول على أي من الخيارات (سنقوم بتغيير هذا في دقيقة واحدة) ويستمر. بعد تخطي الشاشة التالية النوافذ سوف أطلب منكم الذين ترغب في تشغيل هذه المهمة، ويهمني ان نقترح إما أن "مسؤول" أو إنشاء مستخدم جديد متميز. تذكر أننا لا نريد التدخل في حساب الموظفين المعيارية على الجهاز في أي لحظة. انقر المقبل والتحقق من خيارات العرض المتقدمة لهذه المهمة.

إلى نهاية النص المدى إضافة لدينا "startvm GridMachine 'سلسلة وضمان التشغيل عند تسجيل فقط في ترك unticked. زيارة مهمة الجدول الزمني المقبل، وتغيير الجدول ينزل إلى خيار 'عند الخمول "، واختيار مقدار الوقت الذي تريد الجهاز ليكون خاملا قبل الانتقال إلى علامة التبويب التالية.

[أونتيك] أخيرا الخيار الذي ينص على وقف العمل إذا كان قد تم تشغيل X قدر من الوقت، ولكن لا علامة على خيار لوقف مهمة إذا كان الجهاز لم يعد خاملا.

جدول

هذا كل شيء بعد ذلك لإعداد المضيف ويندوز!

ملخص

في هذا الجزء أنشأنا جهاز ظاهري ليكون بمثابة عامل، فضلا عن الطريقة التي نسميها وتنفيذ البرامج النصية لدينا تجهيز وظيفة (لنفسي السيناريو PHP). من هنا نحن ننظر في كيفية إعداد النسخ لدينا من ويندوز لبدء تشغيل الجهاز الظاهري في وضع مقطوعة الرأس عندما يصبح الكمبيوتر خاملا، وحفظ حالته عندما يقوم المستخدم يستأنف استخدام الجهاز. ونأمل في هذه المرحلة كنت ترى كيف بسيط هو لاقامة مثل هذا النظام والحكة للحصول على بعض التجارب الجارية نفسك!

المرة التالية

في الجزء 4 سنكون تبحث في استخدام الأدوات اللازمة لضمان أن كنت تستخدم أحدث إصدار من مصادر التعليمات البرمجية والبيانات بحيث تكون النتائج التي حصل عليها دائما ما يصل إلى موعد مع أحدث معلومات الأعمال والمنطق.

مكتب الحوسبة الشبكية باستخدام البيئات الافتراضية - الجزء 1

بواسطة ، الجمعة 4 ديسمبر 2009 11:23

مقدمة

أعمل في شركة حيث نقوم بتشغيل وظائف دفعة وتجهيز العديد من الملايين من السجلات من البيانات كل يوم، ولقد تم التفكير مؤخرا حول جميع الآلات التي تجلس حول كل يوم تفعل شيئا لعدة ساعات. لن يكون من الجيد لو تمكنا من استخدام هذه الآلات لتعزيز قوة المعالجة من أنظمتنا؟ في هذه المجموعة من المقالات انا ذاهب للبحث في الفوائد المحتملة لاستخدام مكتب الشبكة باستخدام البيئات الافتراضية.

ك PHP المطور انا ذاهب الى استخدام الأدوات التي تستخدم في كل يوم وهي لينكس، و الخلية ، PHP، فيرتثلبوإكس والتخريب (SVN). لكن آمل أن يكون هذا الدليل سوف التكيف مع اللغات الأخرى والتكنولوجيات فقط كذلك.

وسيتم تقديم الحل أنا فضفاضة جدا استنادا إلى نوع من تجهيز كنا بحاجة الى تحقيق ولكن هذا قد لا يكون صحيحا من خلال المادة بكاملها كما انني سوف تتغير الامور للبساطة، أو لإنتاج سيناريوهات الاستخدام أكثر إثارة للاهتمام.

وهذه البيئات virtualised تشغيلها على أجهزة ويندوز لأن هذا هو ما لغالبية مكاتب تشغيل. تجهيز أن الآلات المكتبية فعل يجب أن لا تتداخل مع الموظفين الذين يستخدمون تلك الآلات، يجب أن لا تحتاج إلى صيانة في الجهاز، ويكون الانتشار بسهولة على الآلات الجديدة عندما تصبح متاحة. أيضا، يجب أن الأجهزة الافتراضية الجديدة لا تتطلب أي إعدادات إضافية مثل هذا يقلل بدرجة كبيرة من التدرجية وسهولة في الذي يمكن تمديد نظام الشبكة.

لماذا نشر شبكة الحوسبة مكتب؟

أولا كنت قد يكون التفكير، لماذا لا مجرد استخدام موارد الحوسبة السحابية مثل منصة أمازون EC2 ؟ كذلك يمكن أن تكون أسباب عدة، على سبيل المثال:

  • فلن يكلف بعض البيانات إلى بيئة الحوسبة السحابية
  • لا يمكنك وضع بعض البيانات في بيئة الحوسبة السحابية لأسباب قانونية (مثل البيانات مغادرة البلاد)، يحتمل أن تكون لأسباب قانونية، مثل سجلات الخدمات الصحية الوطنية.
  • كنت تريد أن تبقي وحدات المعالجة وثيقة الخاص ولها السيطرة الكاملة على الأجهزة أيضا
  • لم يكن لديك أموال المشاريع لتشغيل مثيلات سحابة
  • مكتبك لايوجد اتصال بالإنترنت، وبالتالي ممكن لعدم استخدام الموارد سحابة
  • كنت لا تحب المطر، الغيوم تشير المطر، وبالتالي يجب الابتعاد تماما

أنا متأكد من أن القائمة يمكن أن تستمر، ولكن أعتقد أن هذا يكفي في الوقت الراهن.

مزايا لمكتب الشبكة الحوسبة

حسنا، دعونا نفعل بعض الرياضيات (والفيزياء في نمط حقيقي يتيح جعل بعض الافتراضات واسعة). تخيل لديك كبير خادم تجهيز سمين تشغيل 100 فرصة عمل في اليوم الواحد. في مكتبك لديك 50 الآلات التي عاطلة 16 ساعة في اليوم، كل من هذه الأجهزة هي 10٪ لا تقل قوة عن سيفر الخاصة بك معالجة سمين. (يتم تقريب كل النتائج هنا التقليل من شأن زيادة في الأداء).

لذلك، 1 آلة * قوة 10٪ * 2/3 = 0.067 أي وقت التجهيز المكتبي 1 في الوقت الضائع يمكن ان تلتقط 6 وظائف كاملة في اليوم الواحد.

اذا كنت الآن توسيع نطاق هذا الأمر يستغرق 15 اجهزة كمبيوتر خاملا لمعالجة العديد من فرص العمل كما في اليوم الواحد كما خادم تجهيز الرئيسي يفعل.

حتى في مكتبنا التظاهر من 50 آلة يمكن ان نزيد من قوتنا تجهيز 1 خادم تصل إلى 4 خوادم تجهيز كامل، أو أننا يمكن تجهيز 400 فرصة عمل في اليوم الواحد بدلا من 100.

اشعار عن أي استثمار في أجهزة جديدة زادت الشركة فقط قدرتها تجهيز الدفعات 4 مرات! ربما كنت تريد الذهاب لزيادة استخدام الطاقة الخاصة بك ولكن يتم ترك عموما من أكثر البيئات المكتبية لقد كنت على الأجهزة على أي حال بين عشية وضحاها، لذلك يمكن أن نرى في ذلك مبادرة خضراء.

المزايا الأخرى يعني أيضا يمكن أن يتأخر إلى أن الاستثمار في جديد (أو تحديث) خوادم معالجة إذا آلات مكتبك كافية، وأنه كما كنت تحسين قوة من الآلات مكتبك شبكة مكتبك ويصبح أكثر قوة تلقائيا.

تكنولوجيا

ماذا تحتاج؟ (أو أكثر بشكل صحيح ماذا استعمل):

  • الآلات المكتبية الخمول (في حالتي على تجنيب القديمة الكمبيوتر المحمول ويندوز إكس بي)
  • فيرتثلبوإكس (أو آخر برنامج العميل الافتراضية)
  • جهاز ظاهري مع PHP و MySQL running تشغيل تخفض نظام التشغيل، ادعو هذه الخوادم بلدي يعرج :)
  • وظائف لتشغيل
  • الخادم وظيفة (يمكن أن تكون آخر الجهاز الظاهري في مكان ما)

وظائف نموذجية

أنواع الوظائف التي تم تصميم هذا النظام لتشغيل كما يلي:

  • نظام يحصل على قائمة من البيانات التي تقوم عليها نحن بحاجة إلى مباراة والعودة النتائج
  • مطابقة ينطوي على فحص / تفتيش عدة (جامدة إلى حد ما) من مصادر البيانات
  • قد تنتج من مصادر البيانات تتطلب التحقق من صحة مزيد من الاندماج، والتحقق من مصادر بيانات إضافية استجابة للنتائج
  • يتم إرجاع البيانات مع سجلات متطابقة، التحقق من صحة بشكل كامل ومعالجتها
  • كل سجل في وظيفة مستقلة عن بقية

لذلك نحن نبحث في الأساس في تشغيل الوظائف التي تتطلب مزيجا من عمليات البحث عن قاعدة البيانات وبعض الطحن عدد، سيناريو نموذجي إلى حد ما في بيئة الأعمال.

حلول الشبكة ليست مفيدة فقط لمعالجة وظائف من هذا النوع. في الأساس، يمكن تشغيل أي عملية التي يمكن تقسيمها الى وحدات مستقلة في نفس الوقت. شاهد ويكيبيديا للحصول على أمثلة ومزيد من المعلومات: الحوسبة الشبكية ، ولكن اثنين من الأمثلة الشهيرة هي سيتي @ المنزل و BIONC . هناك أطر لتشغيل الشبكات الحاسوبية، وهذه هي تستحق النظر في.

ماذا نحقق؟

في نهاية هذه المقالات وآمل أن تظهر أن نشر على شبكة المكاتب لا يلزم أن يكون مكلفا بشكل كبير أو وقت. أنا ذاهب لمناقشة ما يلي:

  • إنشاء نظام مراقبة العمل، والتكوين وظيفة
  • خلق تجهيز آلة مناسبة الظاهري
  • كيفية إعداد النظام على جهاز ويندوز
  • ضمان كنت تستخدم أحدث التعليمات البرمجية والبيانات
  • نشر والقياس
  • واستشرافا للمستقبل

سأكون بناء (حسنا لقد بنيت، ثم كتبت هذا) تطبيق مثال لاختبار المفاهيم على الجهاز المحلي باستخدام ويندوز إكس بي وبلدي GridMachine "الجهاز الظاهري. سوف خدمة بلدي مراقبة عمل تكون آلة اهتمامي الرئيسي الذي يمتد فيدورا 11 .

يعني لها هذا في أي وسيلة تهدف الى شرح نظام عمل قوي تماما، وأكثر من مظاهرة ومناقشتها تبين أنه لا يمكن تحقيق هذه الأمور في فترة قصيرة معقولة من الوقت وبتكلفة قليلة. لا تتردد في ارسال لي أي تعليقات، التصحيحات أو التحسينات وسوف أبذل قصارى جهدي للحفاظ على هذه المادة تحديث لمطابقة.

المرة التالية

في الجزء 2 سأبدأ من خلال النظر في وظيفة نظام المراقبة، والنظر في الكيفية التي ينبغي أن يتم تكوين فرص عمل من أجل تحقيق أكبر قدر من التجهيز مع ضمان أن تتم معالجة كل وظيفة دون أن تفشل.

مكتب الحوسبة الشبكية باستخدام البيئات الافتراضية - الجزء 2

بواسطة ، الجمعة 4 ديسمبر 2009 11:23

مقدمة

أعمل في شركة حيث نقوم بتشغيل وظائف دفعة وتجهيز العديد من الملايين من السجلات من البيانات كل يوم، ولقد تم التفكير مؤخرا حول جميع الآلات التي تجلس حول كل يوم تفعل شيئا لعدة ساعات. لن يكون من الجيد لو تمكنا من استخدام هذه الآلات لتعزيز قوة المعالجة من أنظمتنا؟ في هذه المجموعة من المقالات انا ذاهب للبحث في الفوائد المحتملة لاستخدام مكتب الشبكة باستخدام البيئات الافتراضية.

في الجزء 1 أعطى لمحة عامة عن نظام والتكنولوجيات أنني سوف تستخدم أيضا كما نوقشت بعض الأسباب المحتملة لماذا كنت تريد لإنشاء شبكة للمكاتب.

وظيفة التحكم

إذا كنت على وشك أن يشغل وظيفة ثم وأنت تسير في حاجة إلى بعض الطرق لإدارتها. نظام الرقابة على وظيفة (على الخادم وظيفتك) يجب أن يتم بشكل جيد قبل محاولة مدروسة حتى لتشغيل شبكة للمكاتب. أولا كان الأمر كذلك، ما هي مهام وظيفة نظام التحكم:

  • تسليم وظائف بناء على طلب من العمال
  • اقول العمال ما هو نوع من الوظائف لتشغيل
  • المسار وظائف
  • ضمان تشغيل فقط وظيفة مرة واحدة
  • Provide job data to workers, or at least tell them where to get it

The system also needs to be extensible, a solution that works for now in a single case may be extended to run several types of jobs as the business sees the worth in a grid solution. For example, jobs may gain priorities, more than one job type may exist (ie several code bases), eventually you may even run several different worker machines that are optimised for each type of job (although that does move away from the 'generic worker' idea). Always try to think about the future when developing systems, a short term vision can lead to longer term frustration and increased development time.

Job Server

We're going to need somewhere to control our jobs from, this should be the only system in your grid that has a fixed resource locator, be that an IP address, host name, URL (using internal DNS), etc. This is because the workers need to know where to look for jobs, workers need to find the job control system (not the job control system find the workers).

The job server itself doesn't really have a complicated task (in a basic system anyhow), it needs to store a list of jobs, hand out jobs, receive results, and subsequently store them for later retrieval. How these parts (such as 'hand out jobs') are defined can be very basic. Later on we can extend the system to include an administration interface to add, edit, delete, suspend jobs but this is beyond this exercise.

There is no reason whatsoever then that your job server could not be a virtual machine running within your main processing server provided it doesn't drain too many resources from it. The job server however does need high availability, if it goes down on a Friday evening you're going to lose a whole weekend of processing, potentially costing you a couple of weeks worth of processing time (when compared to your main processing server alone). You may want to consider putting your job server on a load balanced environment for high availability.

الإعداد الأساسي

The basic setup for our job server will consist of what I'm calling one of my LiMP servers (that is Li nux, m ySql, P HP). The code running on the workers will actually work out what jobs it can run by interacting with with job control system databases. Later on we could create a web service and actually hand out jobs rather than having the workers do the hard work themselves, but for now we'll continue using the KISS principle (Keep it Simple, Stupid!).

So, lets create three mySQL tables to deal with jobs. These will be `jobs`, `jobRecords`, and `jobResults`.

jobs table Here I'm using SQL Buddy a great little alternative to phpMyAdmin just because its easier to install on centOS (for others see: 10 Great alternatives to phpMyAdmin )

This table consists of 5 simple fields,

  • id: Uniquely identify the job
  • name: Could be a client reference, or any number of other identifiers
  • Status: You need to know where the job is at, eg
    • 0: Not started
    • 1: Picked up
    • 2: Completed
  • started_by: Who's started doing the job? This isn't entirely required but is a nice to have. I'd suggest tracking workers by their IP address on your network
  • started_at: When did the worker start the job? By tracking jobs that have not completed within X amount of time we know we need to pick up the job once again and start processing by another worker. Workers could stop processing/go offline for any number of reasons, power failure, crash, network loss, etc.

It is easy how this table could be extended with a few additional fields to allow for statistics tracking, a finish time column to see how long the job took, a counter to see how many workers picked up the job (obviously this needs to tend to 1), job priority, the list can go on and on. In more complex job scenarios it would be possible to specify how much memory the worker would need access to (and therefore only use suitable workers), or even what type of worker would be required.

Lets add a few example jobs:

example jobs

The next table again is quite simple to understand, these are our job records. They are linked to the main jobs table by a column `jobs_id`. The make up of this table very much depends on the data that you need to supply to your workers, lets make a very simple example where we have four columns:

  • id: ID of the record
  • name: Person's name
  • address: Person's address
  • jobs_id: The job ID that this record is linked to

The third and final table consists of a results table, it has much the same make up as our records table, and with the addition of some columns could be part of the records table:

  • job_record_id: Link the result to the job table
  • result: The result data

…and that's all you need for job control! (albeit at a very basic level) In my case I'm pointed to another table where my data to process was located, but this could just as easily been a file, parameters to run simulation code, you name it.

Selecting a job

As stated previously, the workers will do our job management for us for now, so all we need to really do is find a job that needs processing and get the information. How would we do this? Well pick our job selection criteria and look for jobs, in SQL I did the following:

  1. Take any jobs that are not marked as complete but from our worker and reset them (substitute __ME__ with an identifier, easiest would be IP address):
     UPDATE `jobs` SET `status` = 0 WHERE `status` = 1 AND `started_by` = __ME__; 
  2. Using our job selection criteria, select a job and tell the control system that this worker is dealing with it:
     UPDATE `jobs` SET `status` = 1, `started_by` = __ME__, `started_at` = NOW() WHERE `status` = 0 OR
    (`status` = 1 AND `started_at` > DATE_SUB(NOW(), INTERVAL X HOUR)) ORDER BY `id` ASC; 

    By grabbing jobs that haven't returned results in X amount of time we ensure that all jobs are run in the event of a worker crashing or going AWOL.

  3. Next grab the jobs details followed by the records themselves:
     SELECT * FROM `jobs` WHERE `started_by` = __ME__ LIMIT 1;
    SELECT * FROM `job_records` WHERE `id` = __JOBID__; 

Upon completion of the job we insert our result records and mark the job as complete. Remember as jobs can suspend/resume at any time allow for some robustness in your script. It might be that the task suspends half way through updating the job control system, so checking the number of records in a job and the number of results saved back to the job control system would be a wise move.

In addition, whilst this demonstrates how jobs can be selected and managed from an SQL-query frame you should really be abstracting your job control so that if you decide to switch to using a web service, a file based system, XML , or any other number of systems it will not affect the code above it.

Job Configuration

The next aspect to consider is job size and configuration. By playing with job configuration we can strike an excellent balance between speed, process replication, and reliability. Take a couple of scenarios:

  1. Jobs take 1 day each to run: This means that your workers need 15 days to process each job (remember 10% of the power for 2/3rds of the time). This is clearly not a wise configuration, your job size is way too big! It would take at least double the time to get a job processed should the initial worker go AWOL (time to pick up that it hasn't returned a result plus reprocessing time). In an ideal you'd have at least one full job easily cleared by the end of each long idle period, that way you keep the jobs ticking over and at worst case a job would take two days to process should the first go missing.
  2. Jobs take 1 minute to run: This means that your workers take about 15 minutes to run each job. Whilst this may initially seem ideal, you gain additional work processing during lunch time, coffee breaks, meetings, etc this scenario puts strain on other areas of your system and introduces its own problems. For example, firstly your setup/processing time ratio is going to go right down, therefore losing system efficiency. Your network is going to be constantly streaming job information to the various workers frustrating staff who are dong their day to day work. You're also going to put more strain on your job processing server as it has to dish out lots and lots of small pieces of work on a regular basis. Lastly, in this situation if your job server goes down you're going to create a huge back log of uncompleted work whereas bigger jobs could of continued processing blissfully unaware that the job server was experiencing difficulties.

In reality there will be no one ideal configuration for your grid setup, much depends on the available resources, types of job, job turnaround time requirements, network capability, and so on. However some guidelines would be:

  • Size jobs so that each worker can get through at least 3-4 jobs in a period of 15 hours (the longest likely idle time period)
  • Play with the job size so that setup time becomes fairly insignificant compared to the processing time (bearing in mind the above point).
  • If a job doesn't complete in double the amount of time (maybe less) you expect it to complete it assume that its gone AWOL and start processing it with another worker. This means you may have to wait up to three times the normal length of a job for it to complete (possibly longer if the subsequent job fails). You may want to reduce this time, but be careful not to reduce it too much as you may start duplicating processing tasks on a regular basis.
  • Jobs should be independent of outside requirements as much as possible. The job server, for example, should only be contacted at the start and end of every job.
  • Don't saturate your network, this will have two negative effects, your daytime staff will find using the network frustrating and problems may be experienced with connections timing out a problem that will only get worse as you scale your grid.
  • Ensure jobs can run on your workers. If jobs become too memory intensive or disk space intensive jobs will start aborting and the only thing you'll notice is a drop in number of jobs processed with no real reason why.

Submitting Results of a Job

When submitting the results of a job it is important to check that results have not been submitted by another worker, especially if the current worker has been dormant for some time.

When results are submitted ensure that the number of results matches the number of records within the job.

As stated previously, and can not be over emphasised, build fault tolerance into job retrieval and results submission. The workers can (and most likely will) go into suspend mode at the most inconvenient of times and this needs to be catered for. Also once again abstracting away your results submission will help cater for future changes to your job control system much easier to deal with.

ملخص

In this section we have looked at what a job control server needs to do and how to get a very basic system set up. We discussed how to retrieve a job from the control system and how best to configure jobs to get the most our of your office grid system. To finish, a paragraph or two on submitting results back to the job control server was presented.

  • A job control server manages jobs and ensures that all work units are completed
  • By abstracting your job select/results submission we can change the technology of the control server without much problems
  • Configure your jobs to ensure that they are run quickly and efficiently without putting too much pressure on your network infrastructure, and without duplicating processing tasks on a regular basis.
  • Ensure that you build fault tolerance and error checking into your routines, workers can suspend and resume and the most inconvenient of times. Remember to check if results have already been submitted by another worker.

المرة التالية

In part 3 we'll create our virtual processing machine and set up our windows machines to become idle-time workers.

مكتب الحوسبة الشبكية باستخدام البيئات الافتراضية - الجزء 5

By , Friday 4th December 2009 11:03 pm

مقدمة

I work in a company where we run many batch jobs processing millions of records of data each day and I've been thinking recently about all the machines that sit around each and every day doing nothing for several hours. Wouldn't it be good if we could use those machines to bolster the processing power of our systems? In this set of articles I'm going to look at the potential benefits of employing an office grid using virtualised environments.

In Part 4 we looked at using tools to ensure that we're running the latest version of the code and data sources so that obtained results are always up-to-date with the latest business information and logic.

Pre-Deployment

Before deploying your grid system if there's one thing you do and one thing alone it's benchmark your current system ! No matter what you tell colleagues about how much extra work your system is going to do unless you have numbers to back this up your guarantees are nothing. لذلك،

  • how many records can you process currently? Per Day? Per Hour?
  • How long does it typically take to turn around a job?
  • وكم من قدرة لديك؟

There's also additional questions:

  • If your processing server (or one of your processing servers) goes down how will this affect your capabilities, will you be crippled?
  • What advantages do you hope/expect to get from a grid system?
  • Are your office machines capable of running the jobs?
  • Are your (or can you jobs be converted) to wrok in this style of running?

The last major point is to take your time on any major change like this. Update your processing code to work using the new methodology, benchmark again. Possibly set up your processing server to run a virtual machine, after all your processing server will just be another worker (just a very powerful one relatively). Allow the new process to settle.

نشر

My suggestion would be to pop into the office one weekend perform all the installations and setup. Do this just before a fortnight's holiday and leave so other poor chap to deal with the consequences… maybe not…

Deployment for a system like this needs to be slow. Despite it being relatively simple to set up this system will affect your entire office infrastructure (well the digital one). Firstly, roll out to a couple of machines at a time, monitor network traffic, how the worker hosts perform on a day-to-day basis. You may need to alter your job configuration in response to your findings.

Once the system has settled with a few machines (lets say 10% of all office machines, ie 5) keep monitoring network traffic and host machine performance. Next benchmark again, you should now be processing 33% more jobs than your first benchmarks. Check this is so, or that you're at least in this ballpark. If not, investigate what is going on before moving on. Repeat this cycle until you happily have all office machines running without killing individual machine performance or grinding your network to a standstill.

At all times keep benchmarking, even after all deployments are made. Check how new code updates affect speed of your system, check all workers are reporting in and processing jobs. Slowly (very slowly) increment your job configuration to get the best from your workers and network.

توقف!

What if you want to stop your workers from running at some time? They are all out there running, regenerating, and trying their best to process data like hungry insects. The answer may seem obvious but its worth adding just in case its overlooked. Simply edit your processing script with an exit(0) or die() or some other statement to kill your processing job. An important reason why we always try to update to the latest processing script before any run!

Demonstration System

In order to write this set of short articles I created a very small grid to demonstrate the technologies and methodologies. I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. By no means have I gone out and saturated a whole office with traffic and nor have I had access to a regular staff members PC to see how host performance was affected.

My demonstration system was very humble indeed. I used my regular desktop set up as a job control server. On this I had installed mySQL server installed set up as a master in replication, PHP , and SVN linked through apache (for access via worker VM).

I then created a centOS worker machine on VirtualBox on a 6 year old windows XP laptop. I setup scheduled tasks as specified after copying the VM onto the machine and let it go.

The virtual machine was set up with PHP, subversion, and mySQL. I checked out a branch named 'worker' from my job control servers repository and made sure it could be updated using 'svn update'. Next I setup mySQL as a slave and checked that data was replicating from mySQL on the job control server down to the worker VM. After all this I setup the bash script and the cron job.

My processing script basically went along the lines of this (very simple stuff):

  • Read in the name field
  • Counted the number of similar names in a table from the data source held on the VM
  • Counted the number of names as above but splitting the name by spaces (ie forename, middle, surname)
  • Repeated this process 1,000 times

Each job took approximately 20 minutes to run. At one point I opened several copies of the worker VM on the windows laptop and watched the jobs be checked off by each of the worker IP addresses. At this point I also confirmed that replication automatically restarted.

Leaving the laptop to idle resulted in a worker starting to process jobs from the job control server. When resuming laptop usage there was a delay of about 30-60 seconds, this is a fair amount of time and staff would need to be made aware that their machine may pause for a short while when returning to the machine. Newer machines may not have a pause of this long. The benefit of the amount of processing performed by these machines during idle periods would more that outweigh staff members having to wait a short period (say 1 minute) on arriving at their machines of a morning (I frequently wait longer that this for a Windows Defender update to take place) provided they were made aware of this (useful time to grab a morning coffee!).

Overall I feel confident that I have demonstrated the technologies that could be used to create such a system. I have shown that such a system does work on a (very) small scale and with some more experimenting could be scaled up utilise the resources of an office's machines. If I don't get to the point of doing this I would be very interested to know/see when someone else does.

Conclusions / Evaluation

The next obvious step would be to actually get a real world example and start to deploy a system such as this within an office environment and see what happens. Asking a business to commit to this without a trail blazing company to prove the technology and effectiveness may be a little difficult. Grid/Distributed computing is very popular is some circles and has some large applications (BIONC, SETI@Home, Folding@Home, etc). I did not, however, find a smaller scale and simple system like this in my searches that could be rolled out within an office environment.

I created a basically free system using mostly open source software and tools available in almost any office. The technologies were basically demonstrated and show to perform and work as expected. Hopefully I have show that with not much work and with a very simple setup you can deploy an office grid computing system that is powerful, cheap, and scalable all at the same time.

Once a system is up and running there is almost no end to the amount of customisation and improvements you can make. For example statistics / benchmarking can easily be added showing the worth of such a system every day. New machines can be added quickly and easily as and when they arrive with upgrades to existing hardware bolstering your processing power.

I hope you've enjoyed reading this series of articles and its given you food for thought on running an office grid system. The solution presented here won't necessarily work in all situations but should be adaptable to allow you to get your data processing done using your own solution.

Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.













الموضوع من قبل بانوراما فرش سيارات

8 visitors online now
3 guests, 5 bots, 0 members
زوار اليوم كحد أقصى: 48 صباحا في الساعة 02:40 بالتوقيت العالمي
هذا الشهر: 56 في 25-04-2012 08:41 صباحا بالتوقيت العالمي
هذا العام: 69 في 27-02-2012 09:56 صباحا بالتوقيت العالمي
كل الوقت: 130 في 28-03-2011 الساعة 10:40 بالتوقيت العالمي