Κατηγορία: Προγραμματισμός Web

Αιτήματα διαδρομή για sitemap.xml στην προσαρμοσμένη ελεγκτή / δράση

Με , Τετάρτη 6 Ιανουαρίου 2010 12:13 am

Προκειμένου να κατευθύνει τις αιτήσεις / 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 = sitemap

Παράδειγμα κώδικα για outputting μπορεί να δει με τη δημιουργία μιας δράσης στον κατάλληλο ελεγκτή (π.χ. sitemap μου έγκειται στο χειριστήριο δείκτη, sitemap δράση):

 < php
 τάξη IndexController
     εκτείνεται Zend_Controller_Action
 {
     / **
      * Αποδίδει ένα sitemap με βάση εγκατάστασης Zend_Navigation
      * /
     δημόσια sitemapAction λειτουργία ()
     {
    	 echo $ this-> view-> πλοήγησης () -> sitemap ()?
    	 $ This-> Προβολή-> Διάταξη () -> disableLayout ()?
    	 $ This-> _helper-> viewRenderer-> setNoRender (αλήθεια)?
     }
 }

Sitemaps μπορεί γρήγορα και εύκολα να παραχθεί με την Zend_Navigation , μια μεγάλη γρήγορο tutorial (και γενικά πολύ χρήσιμο για tutorials Zend-πλαίσιο) είναι Zend Εκμαγείων - Δυναμική δημιουργία ενός μενού sitemap και τριμμένη φρυγανιά .

Zend-πλαίσιο ανά μονάδα με βάση τις ρυθμίσεις

Με , Παρασκευή 1 Ιανουαρίου 2010 22:40

Έχω δημιουργήσει ένα follow-σε αυτή τη θέση η οποία απαιτεί λιγότερη ρύθμιση, δείτε Ενότητα βάση Διάταξη - Zend-πλαίσιο .

Κατά τη χρήση του πλαισίου Zend με modules, προφανές, ότι εάν τρέχετε διάφορες (υπο-) περιοχές από την ίδια αίτηση δεν θέλετε κατ 'ανάγκην το ίδιο scripts διάταξη για κάθε τμήμα. Αποφάσισα να πάω με την ακόλουθη δομή ιστοσελίδα:

  / Εφαρμογή
     / Ελεγκτές
         ...
     / Μοντέλα
     / Modules
         / Default
             / Ελεγκτές
             / Διάταξη
                 / Scripts
             / Απόψεων
                 / Scripts
         / AnotherModule
             ...
     / Scripts

Το πρόβλημα ήταν για τη δημιουργία της scripts διάταξη για κάθε μία μονάδα βάσης. Η απάντηση ήρθε μέσα από τη χρήση ενός Helper δράσης. Ρύθμιση του διατάξεις για κάθε μία μονάδα βάσης περιλαμβάνει τρία βήματα:

  1. Application.ini (ή παρόμοια ρύθμιση παραμέτρων):
      admin.resources.layout.layoutPath = APPLICATION_PATH "/ modules / admin / layouts / scripts"
     default.resources.layout.layoutPath = APPLICATION_PATH "/ modules / default / layouts / scripts"
     member.resources.layout.layoutPath = APPLICATION_PATH "/ modules / μέλος / layouts / scripts"
     affiliate.resources.layout.layoutPath = APPLICATION_PATH "/ modules / θυγατρικών / layouts / scripts" 
  2. Δημιουργία Helper δράσης σας:
      <? Php
     / **
      * Ορίζει τη διαδρομή διάταξη για κάθε μία μονάδα βάσης
      *
      * @ Συγγραφέας Lloyd Watkin <lloyd@evilprofessor.co.uk>
      * @ Από 01/01/2010
      * /
     τάξη Pro_Controller_Action_Helper_SetLayoutPath
         εκτείνεται Zend_Controller_Action_Helper_Abstract
     {
         / **
          * Σετ μονοπάτι διάταξη που βασίζεται στην Ενότητα
          * /
         δημόσια preDispatch λειτουργία ()
         {
        	 $ Module = $ this-> getRequest () -> getModuleName ()?
    
    	     if ($ bootstrap = $ this-> getActionController ()
    	                        -> GetInvokeArg («εκκίνησης»)) {
    
    	         $ Config = $ bootstrap-> getOptions ()?
    
    	         εάν (isset ($ config [$ ενότητας] ['πόρων'] ['διάταξη'] ['layoutPath'])) {
    	             $ LayoutPath =
    	                  $ Config [$ ενότητας] ['πόρων'] ['διάταξη'] ['layoutPath']?
    	             $ This-> getActionController ()
    	                  -> GetHelper («διάταξη»)
    	                  -> SetLayoutPath ($ layoutPath)?
    	         }
        	 }
         }
     } 
  3. Και boostrap, τέλος, η βοηθός δράσης:
      ...
         / **
          * Ρυθμίζει σενάρια διάταξη για κάθε μία μονάδα βάσης
          * /
         προστατεύεται λειτουργία _initLayoutHelper ()
    	 {
    	     $ This-> bootstrap («frontController ')?
    	     $ Layout = Zend_Controller_Action_HelperBroker:: addHelper (
    	         νέα Pro_Controller_Action_Helper_SetLayoutPath ())?
    	 }
     ... 

Δόγμα: προεπιλογή DATETIME NOW ()

Με , Τετάρτη 30 Δεκεμβρίου 2009 18:30

Έχω ήδη αγωνίζονται με τη δημιουργία ενός σχήματος βάσης δεδομένων για ένα νέο Zend-πλαίσιο του έργου. Είμαι χρησιμοποιώντας προσπαθεί να χρησιμοποιήσει Δόγμα ORM για τα μοντέλα βάσης δεδομένων μου. Πρέπει να δημιουργηθεί το σχήμα, έτσι ώστε να μου επέτρεψε να ορίσετε μια προεπιλεγμένη ημερομηνία και ώρα για μια `datetime` στήλη, π.χ. κατά την προσθήκη ενός νέου μηνύματος πάρω την τρέχουσα χρονική σήμανση. Μετά από πολύ ψάξιμο και πειραματισμό βρήκα τη λύση έτσι είμαι το μοιράζονται.

Στο σχήμα σας YAML αρχείο κάνει απλά τα εξής:

 Μήνυμα:
   actAs:
     Timestampable:
       δημιουργήθηκε:
         Όνομα: created_at
         Τύπος: timestamp
         μορφή: YMD H: i: s
       τροποποίησης:
         Όνομα: last_updated
         Τύπος: timestamp
         μορφή: YMD H: i: s
   στήλες:
     id:
       Τύπος: ακέραιος
       πρωτοβάθμια: αλήθεια
       autoincrement: αλήθεια
     Όνομα: string (255)
     email: string (300)
     Μήνυμα: string (2000)

Αν από την άλλη πλευρά που δεν θέλουν μια `updated_at` στήλη μπορείτε να χρησιμοποιήσετε τα ακόλουθα:

 Μήνυμα:
   actAs:
     Timestampable:
       δημιουργήθηκε:
         Όνομα: created_at
         Τύπος: timestamp
         μορφή: YMD H: i: s
       τροποποίησης:
         άτομα με ειδικές ανάγκες: αλήθεια
   στήλες:
     id:
       Τύπος: ακέραιος
       πρωτοβάθμια: αλήθεια
       autoincrement: αλήθεια
     Όνομα: string (255)
     email: string (300)
     Μήνυμα: string (2000)

PHP Patterns Σχεδιασμός - Pattern Observer

Με , Τρίτη 29 Δεκεμβρίου 2009 22:02

Έχω ανάγνωση Head First Patterns Σχεδιασμός πρόσφατα και έχουν αποφασίσει να γράψει μερικά από τα μοτίβα όπως PHP παραδείγματα προς όφελός μου. Το πρώτο που έχω αποφασίσει να κώδικα μέχρι το μοτίβο των παρατηρητών . Ο επίσημος ορισμός του Pattern Παρατηρητής είναι:

Το μοτίβο του παρατηρητή (ένα υποσύνολο της ασύγχρονης publish / subscribe μοτίβο ) είναι ένα λογισμικό πρότυπο σχεδιασμού στην οποία ένα αντικείμενο , που ονομάζεται το θέμα, διατηρεί μια λίστα των εξαρτώμενων του, κάλεσε τους παρατηρητές, και ειδοποιεί αυτόματα για τυχόν αλλαγές κατάστασης, συνήθως με την κλήση ένα από τους μεθόδους . Χρησιμοποιείται κυρίως για την υλοποίηση κατανεμημένων συστημάτων διαχείρισης εκδήλωση.

Καθώς τα συστήματα γίνονται πιο χαλαρά συνδεδεμένες να διασφαλίσουμε ότι, όταν ένα γεγονός που συμβαίνει όλα τα συστήματα που απαιτούν τη γνώση αυτών των ενημερωμένων εκδόσεων είναι ενημερωμένοι. Για παράδειγμα, ένα blog post, μετά από την αποθήκευση μια θέση που μπορεί να χρειαστεί να ενημερώσετε μια μηχανή αναζήτησης (π.χ. Lucene), ενημέρωση sitemap, ετικέτες μας, e-mail εγγεγραμμένους χρήστες, κλπ. Το μοτίβο του παρατηρητή επιτρέπει στους προγραμματιστές να προσθέσετε επιπλέον ακροατές χωρίς επεξεργασία παρατηρήσιμο αντικείμενο . Με την ένεση παρατηρητές (π.χ. μια μηχανή αναζήτησης ενημέρωση παρατηρητή, μια γεννήτρια sitemap, κλπ) σε ένα θέμα (δηλ. μετά την επεξεργασία στο blog του συστήματος), μπορούμε να επιτρέψει την φέρει σε πέρας όλες τις απαιτούμενες ενημερώσεις χωρίς καμία αλλαγή.

Συνέχεια ανάγνωση "PHP Patterns Σχεδιασμός - Pattern Observer» »

Γραφείο Computing Grid χρησιμοποιώντας εικονικά περιβάλλοντα - Μέρος 4

Με , Παρασκευή 4 του Δεκέμβρη 2009 23:59

Εισαγωγή

Εργάζομαι σε μια εταιρεία όπου θα τρέξει πολλές θέσεις εργασίας παρτίδα επεξεργασία εκατομμύρια αρχεία με τα δεδομένα κάθε μέρα και έχω σκεφτεί πρόσφατα για όλες τις μηχανές που κάθονται κάθε μέρα να μην κάνουμε τίποτα για αρκετές ώρες. Δεν θα ήταν καλό αν μπορούσαμε να χρησιμοποιούν αυτές τις μηχανές για να ενισχύσει την επεξεργαστική ισχύ των συστημάτων μας; Σε αυτό το σύνολο των άρθρων Πάω να δούμε τα πιθανά οφέλη από την απασχόληση ενός γραφείου στο δίκτυο χρησιμοποιώντας εικονικοποιημένα περιβάλλοντα.

Στο μέρος 3 δημιουργήσαμε εικονική μηχανή επεξεργασίας μας και να εγκαταστήσετε τα Windows μηχανήματα για να τεθεί σε κατάσταση αδράνειας απασχολουμένων.

Τρέξιμο τις τελευταίες κώδικα

Αναπόφευκτα, μετά τη δημιουργία τους εργαζόμενους τη λογική σας επιχείρηση θα αλλάξει, bugs θα βρεθεί, πιο γρήγορη και αποδοτική κωδικός θα παραχθεί αφήνοντας έτσι τους εργαζόμενους σας καθίσαμε επεξεργασία δεδομένων με τη χρήση παλαιών δύσοσμα κωδικό . Πώς τότε θα εξασφαλίσουμε ότι είμαστε χρησιμοποιώντας πάντα την τελευταία και μεγαλύτερη έκδοση του scripts επεξεργασίας μας;

Υπάρχουν μερικές πολύ εύκολο απλούς τρόπους θα μπορούσαμε να το κάνετε αυτό, το τέχνασμα, ωστόσο, είναι να μειώσουν τη δύναμη επεξεργασίας και την κυκλοφορία του δικτύου για την επίτευξη αυτού. Ας ξεκινήσουμε με τα πιο απλά λύσεις και να βελτιωθεί το αργά πάνω από μια-δυο επαναλήψεις.

Η πρώτη μέθοδος θα ήταν να απλά να συνδεθεί με τη δουλειά μας διακομιστή ελέγχου (μέσω samba, FTP, ή κάτι παρόμοιο) και τραβήξτε προς τα κάτω την πιο πρόσφατη έκδοση του κώδικα. Όχι πολύ αποτελεσματικό, αλλά θα κάνει τη δουλειά. Αφήνει να βελτιωθούμε σε αυτό κάπως, πώς για τη δημιουργία μιας rsync σενάριο και τη χρήση που κάθε φορά αντ 'αυτού; Εναλλακτικά, τι γίνεται με την τοποθέτηση τελευταίες script επεξεργασίας μας σε ανατροπή ελέγξει έξω τον κωδικό αρχικά και στη συνέχεια μόνο ενημέρωση κώδικα μας σε κάθε κύκλο ( SVN ενημέρωση );

Στο τέλος θα μπορούσαμε να καταλήξουμε σε ένα bash script (που ονομάζεται από cron κάθε 10 λεπτά), το οποίο μοιάζει τόσο απλό όσο αυτό:

  #! / Bin / sh
 αν ps ax | grep-v grep | grep php > / dev / null
 τότε
     echo "θέσεων εργασίας είναι επί του παρόντος την επεξεργασία, την έξοδο"
 αλλού
     echo "Ιώβ δεν εκτελείται, ξεκινήστε τώρα"
     cd / path / to / εργασία / αντίγραφο
     svn ενημέρωση
     php yourJobProcessingScript.php
 fi 

Τώρα μπορούμε να είμαστε βέβαιοι ότι με κάθε εκτέλεση είμαστε τρέχει σίγουρα το πιο πρόσφατο κώδικα. Είμαστε διασφάλιση αυτής της βάσης, με την ενημέρωση κώδικα μας κάθε φορά που πραγματοποιείται μια λειτουργία και τη μείωση της κίνησης του δικτύου από μόνο μεταφέροντας τις διαφορές αρχείων στο δίκτυό μας.

Στο setup επίδειξη μου, έκανα ακριβώς όπως παραπάνω. Subversion είχε εγκατασταθεί στο server επεξεργασία της εργασίας μου και τράβηξα απλά το πιο πρόσφατο κώδικα από το «εργαζόμενος» υποκατάστημα που χρησιμοποιούν «svn update '. Πρόσθεσα επίσης μια ετικέτα αριθμό έκδοσης στο script επεξεργασία μου που επέστρεψε στη βάση δεδομένων ως μέρος της επιστροφής των αποτελεσμάτων. Με αυτό τον τρόπο θα μπορούσα να δω ότι ο κώδικας μου ήταν να ενημερώνονται κάθε φορά που έχω αντιγράψει κορμό μου στο υποκατάστημα, δηλαδή εργαζόμενο που έτρεχα σίγουρα το τελευταίο σενάριο επεξεργασία.

Χρησιμοποιώντας τα πιο πρόσφατα στοιχεία

Εάν η επεξεργασία της εργασίας σας κάνει χρήση των πηγών στοιχείων, στη συνέχεια, κάποια στιγμή αυτά θα πρέπει να ενημερώνονται επίσης. Εκτός αν σας καλέσει πηγές δεδομένων σας σε ένα πολύ σπάνιο βάση θα πάμε να κατακλύσουν το δίκτυο με την κυκλοφορία το συντομότερο εργαζομένων σας αρχίσουν να προβάλλονται φέρνοντας τα πάντα σε ακινησία. Για λύση μου, αποφάσισα ότι θα ήθελα να προχωρήσουμε πηγές δεδομένων γύρω μου με ΣΠΣ μου.

Κρατήστε είστε άλογα εκεί! Τι θα συμβεί αν πηγές δεδομένων μου είναι ΤΕΡΑΣΤΙΑ; Λοιπόν αυτό είναι πραγματικά μια περίπτωση πόσα δεδομένα μιλάμε; Μπορεί να είναι πιο αποδοτικό να εγκαταστήσετε ένα επιπλέον μεγαλύτερο σκληρό δίσκο σε κάθε μηχάνημα από το να αγοράσει ένα πρόσθετο διακομιστή επεξεργασίας. Αυτό είναι ένα ζήτημα του προϋπολογισμού και μέχρι την επιχείρηση για να αποφασίσει. Είναι ίσως ότι οι πηγές των δεδομένων σας είναι τόσο μεγάλες που απλώς ανέφικτο να κρατήσει το ποσό των δεδομένων σε μηχανές των εργαζομένων σας. Του Σε αυτή την περίπτωση τι θα κάνατε; Καλά θα μπορούσαμε να εξετάσουμε καλώντας έναν τοπικό διακομιστή δεδομένων, αλλά αυτό θα μπορούσε να προκαλέσει προβλήματα με το δίκτυο. Σε αυτή την περίπτωση ένα σύστημα πλέγματος, όπως αυτό μπορεί να γίνει ρεαλιστικό να συμπεριλάβει στο περιβάλλον του γραφείου σας. Μπορεί επίσης να είναι ότι μπορείτε να εξετάσει εναλλακτικές στρατηγικές τρέξιμο, για παράδειγμα, καλώντας μόνο τους εργαζόμενους σας μεταξύ 20:00 και έξι κάθε βράδυ και / ή επιτάχυνσης αιτήματα πηγή δεδομένων.

Προχωρώντας ας πούμε δεδομένα ποσό μας πηγές για να 100GB δεδομένων. Λοιπόν ναι, αυτό είναι αρκετά ένα κομμάτι των δεδομένων για να κινηθεί γύρω από το δίκτυο για μια ενημέρωση. Πώς θα ήταν να διασφαλίσουμε ότι έχουμε το τελευταίο αντίγραφο των δεδομένων σε αυτή την περίπτωση; Rsync είναι μια πιθανότητα, αλλά προσωπικά πιστεύω ότι με το τρέξιμο τελευταία πηγή δεδομένων σας στο διακομιστή επεξεργασία της εργασίας σας και αυτήν τη ρύθμιση ως ένα master στην αντιγραφή του (με ένα ωραίο μεγάλο ημερολόγιο bin) μπορεί να είναι ο τρόπος να πάει:

αναπαραγωγή Με τον καθορισμό των εργαζομένων σε κάθε σας ως ένας σκλάβος για τις ενημερώσεις του διακομιστή δουλειά ελέγχου των πηγών δεδομένων σας θα φθάσουν τους όμορφα με τους εργαζομένους σας χωρίς μια τεράστια αύξηση της δραστηριότητας του δικτύου (δηλαδή, εκτός αν εκτελέσετε ένα τεράστιο ενημέρωση των δεδομένων και όλων των εργαζομένων σας λάκτισμα σε με τη μία). Αυτό έχει πλεονεκτήματα σε σχέση με το rsync στο ότι δεν θα πάρετε μια μεγάλη παύση πριν από κάθε εργασία? Ως τις ενημερώσεις της βάσης δεδομένων, η MySQL δαίμονα στις εργαζόμενος θα σας ενημερώνει διαρκώς τα δεδομένα της, ενώ η επεξεργασία συνεχίζεται.

Αυτό είναι το πώς μπορώ να ρυθμίσω το διακομιστή επίδειξη μου. Για να ρυθμίσετε την αναπαραγωγή Ακολούθησα τον οδηγό στη θέση mySQL ( Ρύθμιση αντιγραφής ) και μέσα σε 20 λεπτά είχα inital εργαζόμενος μου αναπαράγει τον έλεγχο servers σύνολο δεδομένων εργασίας. Για κάθε επιπλέον εργαζόμενο τις ρυθμίσεις αντιγραφής και της διαδικασίας εργαστεί κάθε φορά, όταν το VM έχει αντιγραφεί.

Περίληψη

Σε αυτό το τμήμα του άρθρου έχουμε δει πόσο εύκολο και ανώδυνο είναι να κρατήσει την επεξεργασία κωδικό σας ενημερωμένο με using rsync ή subverion (SVN) για να κάνει τη δουλειά και να μειώσει την κυκλοφορία του δικτύου με την ίδια time. Συζητήσαμε επίσης πώς να διατηρείτε τα δεδομένα σας πηγή πληροφοριών up-to-ημερομηνία, επιτρέποντάς της να φθάσουν τους σε κάθε ένα από τους εργαζομένους σας. Έτσι περιοχή εξασφαλίζοντας ότι θα συμβαδίσει με την επιχειρηματική λογική και τις πληροφορίες στο δίκτυο του γραφείου μας. Θα υπάρχει προφανώς αμέτρητες εναλλακτικές λύσεις για την εκτέλεση αυτών των καθηκόντων, αλλά εδώ ήταν δύο απλά παραδείγματα για να δείξει πόσο εύκολα μια λύση είναι να έρθει κοντά.

Την επόμενη φορά

Στο τελευταίο μέρος αυτής της σειράς, εύστοχα ονομάστηκε Μέρος 5 , θα συζητήσουμε την ανάπτυξη αυτού του συστήματος για. Θα συνοψίσω τι έχει μάθει και τι έχω καταφέρει να δημιουργήσουν.

Γραφείο Computing Grid χρησιμοποιώντας εικονικά περιβάλλοντα - Μέρος 3

Με , Παρασκευή 4 του Δεκέμβρη 2009 23:37

Εισαγωγή

Εργάζομαι σε μια εταιρεία όπου θα τρέξει πολλές θέσεις εργασίας παρτίδα επεξεργασία εκατομμύρια αρχεία με τα δεδομένα κάθε μέρα και έχω σκεφτεί πρόσφατα για όλες τις μηχανές που κάθονται κάθε μέρα να μην κάνουμε τίποτα για αρκετές ώρες. Δεν θα ήταν καλό αν μπορούσαμε να χρησιμοποιούν αυτές τις μηχανές για να ενισχύσει την επεξεργαστική ισχύ των συστημάτων μας; Σε αυτό το σύνολο των άρθρων Πάω να δούμε τα πιθανά οφέλη από την απασχόληση ενός γραφείου στο δίκτυο χρησιμοποιώντας εικονικοποιημένα περιβάλλοντα.

Στο μέρος 2, εξετάσαμε τις θέσεις εργασίας σε διακομιστή θα τρέξει, και πώς θέσεις εργασίας θα πρέπει να ρυθμιστεί προκειμένου να επιτευχθεί μεγαλύτερη ποσότητα επεξεργασίας εξασφαλίζοντας ταυτόχρονα ότι κάθε θέση απασχόλησης που υποβάλλεται σε επεξεργασία χωρίς να αποτύχει.

Ρύθμιση των εργαζομένων σας - ή φθαρμένα διακομιστή

Το επόμενο βήμα στη διαδικασία είναι η δημιουργία εικονικών εργαζομένων σας. Γι 'αυτό είμαι πρόκειται να χρησιμοποιήσετε μια εγκατάσταση του CentOS χρήση του VirtualBox. Πάω να εγκαταστήσετε mySQL και PHP στον server, επίσης γνωστός ως λειτουργία σε έκτακτες περιπτώσεις (Li Nux, μ ySQL, P PS) Servera (μπορεί να έκανα αυτό το όνομα πάνω).

  • Εγκαταστήστε το VirtualBox στα παράθυρα υπολογιστή σας (ακολουθήστε τον σύνδεσμο)
  • Λήψη και εγκατάσταση CentOS (τρέχουσα έκδοση 5.3) μέσα σε ένα δημιουργηθεί εικονική μηχανή

Δεν έχει νόημα να μου πηγαίνει σε αυτό υπάρχει πιθανώς 1000 's μεγάλη tutorials εκεί έξω (ok, εδώ είναι ένας: Η δημιουργία και η Managing CentOS εικονικής μηχανής κάτω από το VirtualBox ). Το σημαντικό σημείο να σημειωθεί υποθέτω είναι ότι ονομάζεται εικονική μηχανή μου GridMachine.

Όσον αφορά πάει επιλογές μου πελάτη εικονικοποίησης και το λειτουργικό σύστημα δεν υπάρχει καμία μεγάλη επιτακτικός λόγος για κάθε επιλογή. Το VirtualBox είναι κάτι που μπορώ να χρησιμοποιήσω στον υπολογιστή στο σπίτι μου και υποστηρίζεται από τα τρία κύρια λειτουργικά συστήματα. Επέλεξα CentOS ως της καλής σταθερό λειτουργικό σύστημα και το χρησιμοποιώ για το δικό του web server μου. Είμαι ένθερμος υποστηρικτής της κατάλληλα εργαλεία για τη δουλειά (αν και είμαι εφαρμογή «χρήση ο γρηγορότερος και ευκολότερος για σας» νοοτροπία εδώ), οπότε αν το λειτουργικό σύστημα X τρέχει κωδικό σας γρηγορότερα και πιο αποτελεσματικά τη χρήση που αντί:)

Είναι σημαντικό να βεβαιωθείτε ότι η εικονική μηχανή σας χρησιμοποιεί DHCP, διαφορετικά για κάθε νέα εικονική μηχανή θα πρέπει να ρυθμιστεί χωριστά, το οποίο είναι κάτι που δεν το χρησιμοποιούν want.By DHCP δεν χρειάζεται να διαμορφώσετε τις ρυθμίσεις δικτύου ξεχωριστά για τις μηχανές των εργαζομένων, DHCP θα το χέρι IPs έξω για σας. Συνεπώς, μπορείτε να αντιγράψετε εικονική μηχανή σας για το γραφείο χωρίς να ανησυχείτε σχετικά με τη ρύθμιση κάθε μία (και αυτό βελτιώνει τη δυνατότητα κλιμάκωσης και μειώνει την διοίκηση των εργαζομένων).

Η διαδικασία θα πρέπει να αποσκοπούν στην επίτευξη θα ήταν να αποκτήσετε ένα νέο φυσική μηχανή, να εγκαταστήσετε το VirtualBox, και στη συνέχεια λίγο πολύ την ανάπτυξη του εικονικού εικόνα, χωρίς τίποτε άλλο. Θα μπορούσε να είναι σοφό να στήσετε όλους τους εργαζομένους σας σε διαφορετικό υποδίκτυο, έτσι ώστε να μπορεί τουλάχιστον να δούμε πόσες μηχανές είναι σε λειτουργία. Θα πρέπει επίσης να δημιουργήσουν μηχανές σας σε μια μακροχρόνια μίσθωση ή απεριόριστη μίσθωσης DHCP.

Τρόπος εκτέλεσης των θέσεων εργασίας των εργαζομένων

Αυτή είναι μια ενδιαφέρουσα περιοχή και υπάρχουν πολλές έγκυρες μέθοδοι για την επεξεργασία θέσεων εργασίας από τον εργαζόμενο. Εδώ θα συζητήσουμε μόνο τις δύο πιο προφανής:

  • Διαρκώς τρέχει σενάριο: Ένα σενάριο, είτε πρόκειται για ένα σενάριο φλοιού, ή ένα PHP script εκτελείται μία φορά για τον εργαζόμενο και θα διαρκέσει ως μέρος ενός άπειρου βρόχου. Έχω έκπτωση αυτής της μεθόδου ως μια συντριβή του σεναρίου και, ενδεχομένως, οι εργαζόμενοι σας θα σταματήσει να τρέχει χωρίς κάποιου είδους παρέμβαση.
  • Περιοδικών με βάση την εκτέλεση του κώδικα: κάθε x λεπτά ο δαίμονας cron ξεκινά μια κλήση στο script σας για να πάρετε τα πράγματα πρόκειται. Χωρίς κάποιο έλεγχο αυτό θα μπορούσε να οδηγήσει σε πολλά πολλά αντίγραφα της λειτουργίας script εργαζόμενου σας.

Η απόφασή μου ήταν να πάει με το cron το οποίο ξεκινά ένα σενάριο φλοιού κάθε 10 minutes. σενάριο κελύφους μου εκτελεί τα εξής καθήκοντα:

  1. Πάρτε μια λίστα διαδικασία και αυτό το grep για "php". Αν δεν βρεθεί τότε συνεχιστεί.
  2. Καλέστε τον κωδικό σας εργασία, στη δική μου περίπτωση αυτό θα ήταν PHP με βάση κάτι
  3. Γραφή των εργαζομένων ολοκληρώνει την κυκλοφορία του,
  4. Έτοιμοι να πάμε ξανά στην επόμενη κατάλληλη κλήση

Bash script μου φαίνεται κάτι σαν το παρακάτω:

  #! / Bin / sh
 αν ps ax | grep-v grep | grep php> / dev / null
 τότε
     echo "θέσεων εργασίας είναι επί του παρόντος την επεξεργασία, την έξοδο"
 αλλού
     echo "Ιώβ δεν εκτελείται, ξεκινήστε τώρα"
     php yourJobProcessingScript.php
 fi 

Σημείωση: η ηχώ είναι σχεδόν εντελώς άσκοπο, αλλά μπορεί να βοηθήσει το επόμενο άτομο που έρχεται για να προσπαθήσει και να τα επεξεργαστείτε.

Εδώ ολοκληρώνεται η δημιουργία του εργαζομένου εικονική μηχανή, γρήγορο, απλό και εύκολο να αντιγράψετε σε κάθε νέο κομμάτι του υλικού που παραλαμβάνεται. Η «εξυπνάδα» του διασυνδεδεμένου συστήματος δεν είναι πραγματικά στο ορατό OS, του όλες να κάνουν με τον κώδικα που δημιουργήθηκε για την επεξεργασία των θέσεων εργασίας, τη διαμόρφωση θέσεων εργασίας, και να σιγουρευτεί ότι η εργασία εκτελείται όταν αυτό κρίνεται αναγκαίο (π.χ. όταν το κράτος είναι σε αδράνεια ).

Ρύθμιση των Windows για να Αρχικοποιήσετε Εργαζομένων

Το πρώτο καθήκον είναι να επεξεργαστεί την εντολή που απαιτείται για να τρέξει η εικονική μηχανή από τη γραμμή εντολών των Windows. Εάν έχετε εγκαταστήσει το VirtualBox στην προεπιλεγμένη θέση και έχετε συγκεκριμένο εργαζόμενο GridMachine σας, τότε η εντολή που απαιτείται για να φορτώσει εργαζόμενος σας είναι:

  "C: \ Program Files \ Κυρ \ VirtualBox \ VBoxManage.exe" startvm GridMachine 

Ωστόσο, για να τρέξει το script σε μια «ακέφαλο» κράτος θα πρέπει να χρησιμοποιήσετε:

  "C: \ Program Files \ Κυρ \ VirtualBox \ VBoxHeadless.exe"-startvm GridMachine - vrdp = off 

Αυτό θα ξεκινήσει την εικονική μηχανή χωρίς το γραφικό περιβάλλον και θα του επιτρέψει να αποθηκεύσετε κατάσταση με χάρη. Το δεύτερο επιχείρημα σβήνει ΠΑΑ, ώστε να μην έρχονται σε αντίθεση με τα Windows RDP, ή να σας δώσει ένα μήνυμα σχετικά με την ακρόαση στη θύρα 3389. Το όνομα της εικονικής μηχανής είναι case sensitive!

Στη συνέχεια, θα πρέπει να ρυθμίσετε τα παράθυρα μέχρι το εναρκτήριο λάκτισμα VM εργαζόμενος μας όταν η μηχανή έχει μείνει αδρανής. Για να γίνει αυτό (σε Windows XP) θα πρέπει να πάτε Έναρξη -> Όλα τα προγράμματα -> Accessories -> System Tools -> Προγραμματισμένες εργασίες, όπως παρακάτω:

προγραμματισμένες εργασίες

Στη συνέχεια κάντε κλικ στο «Προσθήκη προγραμματισμένης εργασίας», ακολουθούμενη από περιηγηθείτε για να προσθέσετε ένα προσαρμοσμένο πρόγραμμα. Πλοηγηθείτε στο script VBoxManage σας και κάντε κλικ στο ΟΚ. Προγραμματίστε την εργασία σας για οποιαδήποτε από τις επιλογές (θα το αλλάξετε αυτό σε ένα λεπτό) και να συνεχίσει. Μετά από παρακάμπτοντας την επόμενη οθόνη των Windows θα σας ρωτήσει που θέλετε να εκτελέσετε αυτή την εργασία, θα πρότεινα είτε «διαχειριστή» ή τη δημιουργία ενός νέου προνομιακή χρήστη. Να θυμάστε ότι δεν θέλουμε να παρεμβαίνουν με το πρότυπο προσωπικό λογαριασμό στο μηχάνημα σε οποιοδήποτε σημείο. Κάντε κλικ στο επόμενο και ελέγχου Εμφάνιση προηγμένες επιλογές για το έργο αυτό.

Προς το τέλος του textbox τρέξει προσθέσετε σειρά μας «startvm GridMachine» και να διασφαλίσει ότι λειτουργούν μόνο όταν είστε συνδεδεμένοι στο αφήνεται unticked. Επισκεφθείτε το καθήκον πρόγραμμα επόμενο και να αλλάξετε το χρονοδιάγραμμα drop down με την επιλογή «όταν είναι σε αδράνεια», επιλέξτε το χρονικό διάστημα που θα θέλατε η μηχανή να είναι σε αδράνεια πριν από τη μετάβαση στην επόμενη καρτέλα.

Τέλος ξετσεκάρετε την επιλογή η οποία αναφέρει σταματήσει το έργο, αν έχει τρέξει Χ ποσό του χρόνου, αλλά να σημειώσετε την επιλογή για να σταματήσει το έργο, αν το μηχάνημα δεν είναι πλέον αδρανής.

πρόγραμμα

Αυτό στη συνέχεια για την εγκατάσταση υποδοχής παράθυρα!

Περίληψη

Σε αυτό το μέρος που έχουμε δημιουργήσει μια εικονική μηχανή για να λειτουργήσει ως εργαζόμενος, καθώς και τον τρόπο με τον οποίο ονομάζουμε και να εκτελέσει τη δουλειά μας scripts επεξεργασία (για τον εαυτό μου ένα PHP script). Από εδώ θα δούμε πώς να δημιουργήσει αντίγραφα των παραθύρων μας για την εκκίνηση της εικονικής μηχανής σε ακέφαλο λειτουργία όταν ο υπολογιστής τίθεται σε αδράνεια, και να αποθηκεύσετε κατάσταση όταν ο χρήστης ξαναρχίσει τη χρήση του μηχανήματος. Ας ελπίσουμε ότι σε αυτό το σημείο βλέπετε πόσο απλό είναι να δημιουργηθεί ένα τέτοιο σύστημα και έχουν φαγούρα να πάρετε κάποια πειράματα με τον εαυτό σας πηγαίνει!

Την επόμενη φορά

Στο Μέρος 4, θα εξετάσουμε να χρησιμοποιεί εργαλεία για να εξασφαλιστεί ότι τρέχετε την πιο πρόσφατη έκδοση του κώδικα και πηγές δεδομένων, ώστε να λαμβάνονται τα αποτελέσματα είναι πάντα ενημερωμένο με τις τελευταίες πληροφορίες των επιχειρήσεων και τη λογική.

Γραφείο Computing Grid χρησιμοποιώντας εικονικά περιβάλλοντα - Μέρος 1

Με , Παρασκευή 4 του Δεκέμβρη 2009 23:23

Εισαγωγή

Εργάζομαι σε μια εταιρεία όπου θα τρέξει πολλές θέσεις εργασίας παρτίδα επεξεργασία εκατομμύρια αρχεία με τα δεδομένα κάθε μέρα και έχω σκεφτεί πρόσφατα για όλες τις μηχανές που κάθονται κάθε μέρα να μην κάνουμε τίποτα για αρκετές ώρες. Δεν θα ήταν καλό αν μπορούσαμε να χρησιμοποιούν αυτές τις μηχανές για να ενισχύσει την επεξεργαστική ισχύ των συστημάτων μας; Σε αυτό το σύνολο των άρθρων Πάω να δούμε τα πιθανά οφέλη από την απασχόληση ενός γραφείου στο δίκτυο χρησιμοποιώντας εικονικοποιημένα περιβάλλοντα.

Ως PHP προγραμματιστής Πάω να χρησιμοποιούν εργαλεία που χρησιμοποιώ κάθε μέρα, δηλαδή το Linux, mySQL , PHP, το VirtualBox και το Subversion (SVN). Ωστόσο ελπίζω ότι αυτός ο οδηγός θα προσαρμοστεί και σε άλλες γλώσσες και τεχνολογίες το ίδιο καλά.

Η λύση που προσφέρει θα είναι πολύ χαλαρά με βάση το είδος της επεξεργασίας που θα πρέπει να επιτευχθεί όμως αυτό δεν μπορεί να ισχύει σε όλο το άρθρο, όπως θα αλλάξουμε τα πράγματα για την απλότητα, ή να παράγουν πιο ενδιαφέροντα σενάρια χρήσης.

Αυτά τα περιβάλλοντα εικονικοποιημένων θα τρέχει σε Windows μηχανήματα δεδομένου ότι αυτό είναι ό, τι η πλειονότητα των γραφείων τρέξει. Η επεξεργασία ότι οι μηχανές γραφείου, δεν πρέπει να παρεμβαίνει με το προσωπικό που χρησιμοποιούν τις μηχανές αυτές, θα πρέπει να απαιτεί καμία συντήρηση, με τη μηχανή, και είναι εύκολο να αναπτυχθούν σε νέα μηχανήματα, όπως αυτά θα είναι διαθέσιμα. Επίσης, οι νέες εικονικές μηχανές θα πρέπει να μην απαιτεί καμία πρόσθετη ρύθμιση, όπως αυτή μειώνει σημαντικά την επεκτασιμότητα και ευκολία με την οποία το δίκτυο μπορεί να επεκταθεί.

Γιατί Ανάπτυξη μιας Grid Computing του Office;

Πρώτον μπορεί να σκέφτεστε, γιατί να μην χρησιμοποιούν μόνο έναν πόρο το cloud computing, όπως η πλατφόρμα EC2 της Amazon ; Καλά τους λόγους που θα μπορούσαν να είναι πολλές, όπως για παράδειγμα:

  • Δεν θα αναθέσει ορισμένα δεδομένα σε ένα υπολογιστικό περιβάλλον σύννεφο
  • Δεν μπορείτε να θέσει ορισμένα δεδομένα σε ένα υπολογιστικό περιβάλλον σύννεφο για νομικούς λόγους (π.χ. δεδομένα που φεύγουν από τη χώρα), πιθανώς για νομικούς λόγους, π.χ. τα αρχεία του ΕΣΥ.
  • Θέλετε να κρατήσετε τις μονάδες επεξεργασίας σας κοντά και να έχουν τον πλήρη έλεγχο του υλικού πάρα πολύ
  • Δεν έχετε τα κεφάλαια του έργου για την εκτέλεση εμφανίσεων σύννεφο
  • Το γραφείο σας δεν διαθέτει σύνδεση στο διαδίκτυο και ως εκ τούτου της δεν είναι δυνατόν να χρησιμοποιήσει έναν πόρο σύννεφο
  • Δεν είναι όπως τη βροχή, τα σύννεφα βροχή προτείνουμε, ως εκ τούτου κρατάτε μακριά

Είμαι βέβαιος ότι ο κατάλογος θα μπορούσε να συνεχίσει, αλλά νομίζω ότι είναι αρκετό για τώρα.

Πλεονεκτήματα του Grid Computing Office

Λοιπόν, σας επιτρέπει να κάνετε κάποια μαθηματικά (και το αυθεντικό στυλ της φυσικής σας δίνει τη δυνατότητα να σαρώνει κάποιες υποθέσεις). Φανταστείτε ότι έχετε μεγάλη σωματώδης διακομιστή επεξεργασία τρέχει 100 θέσεις εργασίας ανά ημέρα. Στο γραφείο σας, έχετε 50 μηχανές που είναι σε αδράνεια 16 ώρες την ημέρα, κάθε ένα από αυτά τα μηχανήματα είναι 10% τόσο ισχυρό όσο σωματώδης κόβω την επεξεργασία σας. (Όλα τα αποτελέσματα εδώ στρογγυλοποιούνται να υποτιμήσουμε την αύξηση των επιδόσεων).

Έτσι, 1 μηχανή * 10% δύναμη * 2 / 3 του χρόνου = 0,067 δηλ. 1 επεξεργασία στην επιφάνεια εργασίας χρόνο αδράνειας θα μπορούσαν διαδικασία 6 θέσεις εργασίας πλήρους απασχόλησης ανά ημέρα.

Εάν κλίμακα μέχρι τώρα αυτό που χρειάζεται 15 ρελαντί επιτραπέζιους υπολογιστές να επεξεργάζονται τόσες θέσεις εργασίας ανά ημέρα ως κύριο διακομιστή επεξεργασία σας κάνει.

Έτσι, στο γραφείο μας προσποιούνται των 50 μηχανές που θα μπορούσε να αυξήσει την επεξεργαστική ισχύ μας, από την 1η διακομιστή μέχρι και 4 servers πλήρη επεξεργασία, ή θα μπορούσαμε να είμαστε επεξεργασία 400 θέσεις εργασίας ανά ημέρα αντί για 100.

Ανακοίνωση, για καμία επένδυση σε νέο hardware της εταιρείας σας έχει αυξηθεί μόλις παρτίδα την ικανότητά της επεξεργασίας 4 φορές! Δυνητικά θα πάμε να αυξηθεί η χρήση δύναμή σας, αλλά από τα περισσότερα περιβάλλοντα γραφείου Έχω πάει σε μηχανές είναι γενικά μια μέρα στην άλλη αριστερά στην έτσι κι αλλιώς, έτσι θα μπορούσατε να δείτε αυτό ως μια πράσινη πρωτοβουλία.

Άλλα πλεονεκτήματα σημαίνει επίσης ότι οι επενδύσεις σε νέες (ή ενημέρωση) servers επεξεργασία μπορεί να καθυστερήσει εάν μηχανών γραφείου σας είναι επαρκείς και ότι, όπως να βελτιώσετε την ισχύ των μηχανών γραφείου σας στο δίκτυο του γραφείου σας γίνεται πιο ισχυρή αυτόματα.

Τεχνολογίες

Τι χρειάζεστε; (Ή πιο σωστά αυτό που έκανα χρήση):

  • Idle μηχανές γραφείου (στην περίπτωσή μου μια εφεδρική παλιά XP Windows laptop)
  • VirtualBox (ή άλλο λογισμικό του πελάτη εικονικοποίησης)
  • Μια εικονική μηχανή με την PHP, mySQL running τρέχει μια περικοπή κάτω OS, είμαι καλώντας αυτές τις έκτακτες περιπτώσεις servers μου:)
  • Θέσεις εργασίας για να τρέξει
  • Διακομιστή Job (μπορεί να είναι μια άλλη εικονική μηχανή κάπου)

Τυπικές θέσεις εργασίας

Τα είδη των θέσεων εργασίας που αυτό το σύστημα είναι σχεδιασμένο να λειτουργεί ως εξής:

  • Σύστημα λαμβάνει μια λίστα δεδομένων πάνω στην οποία πρέπει να ταιριάζει και να επιστρέψει τα αποτελέσματα
  • Συνδυάζοντας περιλάμβάνει τον έλεγχο / έρευνα πολλά (αρκετά στατική) των πηγών δεδομένων
  • Τα αποτελέσματα από τις πηγές δεδομένων που μπορούν να απαιτούν περαιτέρω επικύρωση, τη συγχώνευση, τον έλεγχο της συμπληρωματικές πηγές δεδομένων, σε απάντηση των αποτελεσμάτων
  • Τα δεδομένα επέστρεψε με αντίστοιχες εγγραφές, πλήρως επικυρωμένων και επεξεργασία
  • Κάθε εγγραφή σε μια θέση εργασίας είναι ανεξάρτητο από τα υπόλοιπα

Έτσι, ουσιαστικά ψάχνουμε στο τρέξιμο θέσεις εργασίας που απαιτούν ένα μίγμα αναζητήσεις βάση δεδομένων και μερικά τραγάνισμα αριθμό, ένα τυπικό σενάριο σε ένα επιχειρηματικό περιβάλλον.

Πλέγμα λύσεις δεν είναι μόνο επωφελής για την επεξεργασία θέσεων εργασίας αυτού του τύπου. Βασικά, κάθε διαδικασία που μπορεί να χωριστεί σε ανεξάρτητες μονάδες μπορούν να λειτουργούν παράλληλα. Δείτε αυτό το wikipedia για παραδείγματα και περισσότερες πληροφορίες: Grid Computing , αλλά μερικά διάσημα παραδείγματα είναι SETI @ home και BIONC . Υπάρχουν πλαισίων για τη λειτουργία των δικτύων υπολογιστών, και αυτά είναι καλά αξίζει περισσότερη μελέτη.

Τι θα πετύχουμε;

Μέχρι το τέλος αυτών των άρθρων ελπίζω να δείξει ότι αναπτύσσετε ένα δίκτυο γραφείων δεν χρειάζεται να είναι εξαιρετικά δαπανηρή και χρονοβόρα. Πάω να συζητήσουμε:

  • Ρύθμιση του συστήματος ελέγχου της εργασίας, τη διαμόρφωση θέσεων εργασίας
  • Δημιουργία κατάλληλης επεξεργασίας εικονική μηχανή
  • Πως να ρυθμίσετε το σύστημα σε μια μηχανή παραθύρων
  • Εξασφάλιση χρησιμοποιείτε το πιο πρόσφατο κώδικα και τα δεδομένα
  • Ανάπτυξη και συγκριτική αξιολόγηση
  • Κοιτώντας προς το μέλλον

Θα είμαι κτιρίου (ok έχτισα, τότε έγραψε αυτό) μια αίτηση παράδειγμα, να δοκιμαστούν οι έννοιες σε ένα τοπικό μηχάνημα με Windows XP και μου 'GridMachine «εικονική μηχανή. Δουλειά μου με το διακομιστή ελέγχου θα είναι το κύριο μηχάνημα μου που τρέχει Fedora 11 .

Αυτό σε καμία περίπτωση δεν προορίζεται να αποδείξει ένα πλήρως εργασίας ισχυρό σύστημα, σήμαινε της περισσότερο από μια επίδειξη και τη συζήτηση που δείχνουν ότι αυτά τα πράγματα μπορούν να επιτευχθούν μέσα σε λογικά σύντομο χρονικό διάστημα και με μικρό κόστος. Μη διστάσετε να μου στείλετε οποιαδήποτε σχόλια, διορθώσεις, ή βελτιώσεις και θα κάνω ότι καλύτερο μπορώ για να κρατήσει αυτό το άρθρο ενημερωθεί ώστε να ταιριάζουν.

Την επόμενη φορά

Στο μέρος 2 θα αρχίσω με την εξέταση του συστήματος ελέγχου της εργασίας, και να εξετάσει πώς θέσεις εργασίας θα πρέπει να ρυθμιστεί προκειμένου να επιτευχθεί μεγαλύτερη ποσότητα επεξεργασίας εξασφαλίζοντας ταυτόχρονα ότι κάθε θέση απασχόλησης που υποβάλλεται σε επεξεργασία χωρίς να αποτύχει.

Γραφείο Computing Grid χρησιμοποιώντας εικονικά περιβάλλοντα - Μέρος 2

Με , Παρασκευή 4 του Δεκέμβρη 2009 23:23

Εισαγωγή

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 1 I gave an overview of the system and technologies I will be using as well as discussed some of the potential reasons why you would want to create an office grid.

Job Control

If you're going to be running jobs then you're going to need some way to manage them. Your job control system (on your job server) needs to be really well thought out before even attempting to run an office grid. So firstly, what are the tasks for a job control system:

  • Hand out jobs upon request from workers
  • Tell workers what type of jobs to run
  • Track jobs
  • Ensure that jobs are only run once
  • 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

Όπως αναφέρθηκε προηγουμένως, οι εργαζόμενοι θα κάνουν τη διαχείριση δουλειά μας για μας για τώρα, οπότε το μόνο που χρειάζεται πραγματικά να κάνουμε είναι να βρούμε μια δουλειά που χρειάζεται επεξεργασία και να πάρετε τις πληροφορίες. Πώς θα το κάνουμε αυτό; Καλά πάρει τη δουλειά μας κριτήρια επιλογής και να αναζητήσει θέσεις εργασίας, σε SQL έκανα τα εξής:

  1. Πάρτε καμία θέση εργασίας που δεν έχουν επισημανθεί ως ολοκληρωμένες, αλλά από εργαζομένων μας και η επαναφορά τους (υποκατάστατο __ME__ με ένα αναγνωριστικό, πιο εύκολο θα είναι η διεύθυνση IP):
      UPDATE `θέσεις εργασίας` SET `κατάσταση` = 0 όπου `κατάστασης = 1` και `started_by` = __ME__? 
  2. Χρησιμοποιώντας τη δουλειά μας κριτήρια επιλογής, επιλέξτε μια εργασία και να πει το σύστημα ελέγχου που αυτό εργαζόμενος ασχολείται με αυτό:
      UPDATE `θέσεις εργασίας` SET `κατάσταση` = 1, στο εξής started_by `= __ME__,` started_at `= NOW () Όπου` κατάσταση `= 0 ή
     (`Κατάστασης = 1` και `started_at`> DATE_SUB (NOW (), το διάστημα ώρα x)) ORDER BY `id` ASC? 

    Με την αρπαγή θέσεις εργασίας που δεν έχουν επιστρέψει τα αποτελέσματα στο ποσό Χ διάστημα να διασφαλίσουμε ότι όλες οι εργασίες εκτελούνται σε περίπτωση που ένας εργαζόμενος συντριβή ή θα AWOL.

  3. Στη συνέχεια πιάσε τα στοιχεία απασχόλησης που ακολουθείται από τα αρχεία οι ίδιοι:
      SELECT * FROM `θέσεις εργασίας` WHERE `started_by` = __ME__ ορίου του 1?
     SELECT * FROM `job_records` WHERE `id` = __JOBID__? 

Με την ολοκλήρωση της εργασίας που εισάγουν εγγραφές αποτέλεσμα μας και σηματοδοτούν την εργασία ως ολοκληρωμένη. Να θυμάστε ότι οι εργασίες που μπορεί να αναστείλει / επαναλάβει οποιαδήποτε στιγμή επιτρέπουν κάποια ευρωστία μέσα στο κείμενό σας. Θα μπορούσε να είναι ότι το έργο αναστέλλει μισά ενημέρωση του συστήματος ελέγχου της εργασίας, έτσι τον έλεγχο του αριθμού των εγγραφών σε μια θέση εργασίας και τον αριθμό των αποτελεσμάτων αποθηκεύεται πίσω στο σύστημα ελέγχου της εργασίας θα ήταν μια σοφή κίνηση.

Επιπλέον, ενώ αυτό δείχνει πόσο θέσεις εργασίας μπορούν να επιλεγούν και να διαχειρίζεται από ένα ερώτημα SQL-πλαίσιο θα πρέπει πραγματικά να υδροληψίες ελέγχου της εργασίας σας, έτσι ώστε εάν αποφασίσετε να στραφούν σε χρησιμοποιώντας μια υπηρεσία Web, ένα αρχείο με βάση το σύστημα, XML , ή οποιαδήποτε άλλη αριθμός των συστημάτων δεν θα επηρεάσει τον κώδικα πάνω από αυτό.

Διαμόρφωση θέσεων εργασίας

Η επόμενη πτυχή που εξετάζει είναι το μέγεθος εργασίας και τη διαμόρφωση. Παίζοντας με τη διαμόρφωση δουλειά μπορούμε να επιτευχθεί η άριστη ισορροπία μεταξύ της ταχύτητας, η αναπαραγωγή της διαδικασίας και την αξιοπιστία. Πάρτε ένα σενάρια ΟΦΑ ζευγάρι:

  1. Θέσεις εργασίας λαμβάνουν 1 ημέρα κάθε για να τρέξει: Αυτό σημαίνει ότι οι εργαζόμενοι σας χρειάζονται 15 μέρες για την επεξεργασία κάθε εργασία (θυμηθείτε το 10% της ισχύος για 2/3rds του χρόνου). Αυτό δεν είναι σαφώς μια σοφή διάταξη, διαστάσεις η δουλειά σας είναι πάρα πολύ μεγάλη! Θα χρειαζόταν τουλάχιστον το διπλάσιο χρόνο για να πάρετε μια επεξεργασία θέσεων εργασίας θα πρέπει η αρχική εργαζόμενος πάει AWOL (χρόνος για να πάρει ότι δεν έχει επιστρέψει αποτέλεσμα συν ώρα επανεπεξεργασίας). Σε έναν ιδανικό θα είχατε τουλάχιστον μια πλήρους απασχόλησης εργασία εύκολα να καθαριστεί από το τέλος κάθε μακρά περίοδο αδράνειας, με αυτόν τον τρόπο κρατάτε τις θέσεις εργασίας που περνά πάνω και στη χειρότερη περίπτωση μια θέση εργασίας θα διαρκέσει δύο ημέρες για να διαδικασία αυτή θα πρέπει το πρώτο χάνονται.
  2. Θέσεις εργασίας λάβουν 1 λεπτό για να τρέξει: Αυτό σημαίνει ότι οι εργαζόμενοι σας πάρει περίπου 15 λεπτά για να τρέξει κάθε εργασία. 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.

Next time

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

Office Grid Computing using Virtual environments – Part 5

Με , Παρασκευή 4 του Δεκέμβρη 2009 23:03

Εισαγωγή

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?
  • How much more capacity do you have?

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.

Zend Framework: Fundamentals – Review

By , Saturday 28th November 2009 10:42 pm

My employer recently paid for a group of us developers to take the Zend Framework: Fundamentals course, here I'll summarise my thoughts and opinions on the course for others. For those looking to save time, here's my summary:

For developers who haven't had time to look at the Zend Framework this course (Zend Framework: Fundamentals) offers a good overall picture of the framework introducing you to the key areas and giving enough information in order to continue. For those who have spent time looking at the framework and have followed one or two tutorials this course does not offer much beyond.

Φόντο

I've been a PHP developer for around 5-6 years, and have started working with the Zend Framework on a component basis over the last 6 months. I've developed and/or been a developer on a couple of small Zend Framework MVC sites. I'll be honest, I haven't had a huge amount of exposure to other frameworks from a coding point of view but have spent several hours researching the project websites and evaluating them. The framework and the community surrounding Zend Framework it is quite exciting and there seem to be huge possibilities in where its going.

About the Course

The course is delivered over 9 two hour webex sessions (with a 10-minute break in the middle). The time is spent going through a set of slides provided by Zend with discussion at any time. You can use a microphone to talk to the instructor, but to be honest I didn't see anyone use anything more than the chat window. In addition a VMWare Ubuntu machine is provided that has example code and projects set up an a trial version of Zend Studio. The course leader talks to attendees either over an integrated VoIP solution, or you can dial in using one of the many worldwide dial in numbers.

During the course the material consists of a brief overview of the Framework and the MVC pattern before heading into a sample guestbook application. The discussion demonstrated bootstrapping, Zend_Application, Db Tables, Database access, Forms, Filtering, ACL, Validating, etc, etc. Basically covering all the topics you'd require to get a basic site up an running all the time giving you the tools to go and get more advanced in the framework (although this did amount to 'See the website' much of the time).

Time is given to code up some examples, and to develop the 'guestbook' and simple 'wiki' application. Personally I felt that providing the code or each app and then asking us to develop what was essentially a copy alongside didn't really provide a good learning experience. I would have preferred to develop an application similar, but not identical. to the example application with the benefit of having a guide to refer to. Alternatively building the applications from scratch with the demonstrator would of possibly led to more questions about why and how , thus giving a better understanding of the framework, after all you can look up specifics after the course.

The last lecture consisted of working on the wiki application with help/guidance from the instructor. After the course feedback was taken, it was emphasised several times through the course that Zend takes feedback very seriously, in fact apparently our version of the course was quite new. Some of the other developers in the company will be taking the course soon so it will be interesting to see if this has happened.

The course style was informal, allowed for feedback and collaboration between attendees and the instructor. The course leader was friendly, approachable (email addresses were shared for questions), and whilst his presentation from the slides was a bit shaky seemed fully competent in the framework. He was clearly someone who used the framework on a regular basis rather than someone who is taught to teach the course, I liked the 'real world' experience in that respect.

Overall Feeling

In some ways I found the course a waste of time, in others it was very handy. Hopefully I'll get my reasons across clearly, and maybe provide some food for thought or useful feedback (knowing me this is unlikely!).

For myself this course was aimed at too low a level. Having gone through the quickstart guide, read Rob Allen's Zend Framework in Action, and worked with the framework a little I didn't really get anything too much. I would of liked the course to pick up from the end of the quickstart and develop additional skills.

That said, the course title does clearly state “Zend Framework: Fundamentals ” and in that aspect the course achieves what it sets out to do. Other members of the development team that haven't spent the time looking into the framework finished each session with enthusiasm and asked questions which was really nice to see.

All was not lost, it was good to spend time confirming the basic details of the framework and get to ask a couple of questions in areas where I wasn't 100%. It was also time that I got to sit down each day and think about coding using the framework and future projects, something I wouldn't of been able to do otherwise (can you imagine your company agreeing to that? :) ). Last but not least you also get a nice certificate from Zend to say that you attended the course (albeit by email).

Zend Framework Certification

This was one question that kept coming to mind during the course, would it prepare me for the certification? The quick, easy is a resounding No . The course instructor was quite clear on that with the additional advice that for the certification you should really be using the framework on a day to day basis and feel very comfortable and confident in its usage and methodologies.

Περίληψη

Given everything I've written above, I'll summarise everything in two easy bullet points:

  • New to Zend Framework: This course does exactly what you'd expect, it gives you a nice introduction to the framework and a good grounding on the basics from which you can build. The course seems to generate interest and enthusiasm for the framework amongst developers.
  • Used the Zend Framework: While it was nice to shore up some of the very basics I felt the time, effort, and funds to take the course could of been better spent elsewhere. It will be nice to see Zend create a new higher level course to take developers to the next level – at least to the standard of certification and beyond. For that I would sign up immediately.












Θέμα Πανόραμα από Themocracy

7 επισκέπτες online τώρα
6 guests, 1 bots, 0 members
Max επισκέπτες σήμερα: 14 στις 05:51 π.μ. UTC
Αυτό το μήνα: 48 στις 09/12/2011 14:18 UTC
Αυτό το έτος: 130 στις 28-03-2011 22:40 UTC
Όλα ώρα: 130 στις 28-03-2011 22:40 UTC