Δυναμικά προσθέσετε σελίδες στο δοχείο Zend_Navigation κατά το χρόνο εκτέλεσης

Με , Πέμπτη 7 Ιανουαρίου 2010 22:50

Σε μια συνέχεια στην τελευταία θέση μου για Zend_Navigation, αιτήσεις για τη διαδρομή με το έθιμο sitemap.xml ελεγκτής / δράση , η θέση αυτή είναι περίπου dymnamically προσθήκη σελίδων σε ένα δοχείο Zend_Navigation σε εκτέλεση εκτέλεσης / σενάριο.

Όλα τα καλά του και η καλή προσδιορίζοντας τις σελίδες σας σε ένα ini ή xml αρχείο, αλλά σε κάποιο σημείο θα πάμε να αλλάζει σελίδες στην ιστοσελίδα σας που θέλετε ως μέρος του μενού, χάρτης, ή να συμπεριληφθεί στην τριμμένη φρυγανιά διαδρομή σας. Ως εκ τούτου ό, τι πρέπει να κάνουμε είναι να προσθέσετε τις σελίδες στο δοχείο Zend_Navigation μας κατά το χρόνο εκτέλεσης. Παραδείγματα για αυτό θα είναι πρόσθεση νέων στοιχείων, blog θέσεις, ή σχόλια σελίδα, κλπ.

Συνέχεια ανάγνωση "Δυναμικά προσθέσετε τις σελίδες στο δοχείο 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 = sitemap

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

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

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

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

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

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

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

  / Εφαρμογή
     / Ελεγκτές
         ...
     / Μοντέλα
     / Ενότητες
         / Default
             / Ελεγκτές
             / Διάταξη
                 / Scripts
             / Απόψεων
                 / Scripts
         / AnotherModule
             ...
     / 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 = "/ ενότητες / μέλη / 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 δημόσια λειτουργία ()
         {
        	 $ Μονάδα = $ this-> getRequest () -> getModuleName ()?
    
    	     αν ($ εκκίνησης = $ this-> getActionController ()
    	                        -> GetInvokeArg («εκκίνησης»)) {
    
    	         $ $ = Config εκκίνησης-> getOptions ()?
    
    	         εάν (isset ($ config [$ ενότητα] ['πόρους'] ['διάταξη'] ['layoutPath'])) {
    	             = $ LayoutPath
    	                  $ Config [$ ενότητα] ['πόρους'] ['διάταξη'] ['layoutPath']?
    	             $ This-> getActionController ()
    	                  -> GetHelper («διάταξη»)
    	                  -> SetLayoutPath ($ layoutPath)?
    	         }
        	 }
         }
     } 
  3. Και τέλος το boostrap βοηθός δράση:
     ...  / *** Δημιουργεί σενάρια διάταξη για κάθε μία μονάδα βάσης * / _initLayoutHelper προστατεύεται λειτουργία () {$ this-> εκκίνησης («frontController»)? $ Διάταξη 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:
       Τύπος: ακέραιος
       πρωτοβάθμια: αλήθεια
       αυτόματης προσαύξησης: αλήθεια
     Όνομα: συμβολοσειράς (255)
     e-mail: εγχόρδων (300)
     Μήνυμα: εγχόρδων (2000)

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

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

PHP το Design Patterns - Μοτίβο Παρατηρητής

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

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

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

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

Συνέχεια ανάγνωσης »PHP το Design Patterns - Μοτίβο παρατηρητή»

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

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

Εισαγωγή

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

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

Τρέχοντας το πιο πρόσφατο κώδικα

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

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

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

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

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

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

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

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

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

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

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

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

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

Περίληψη

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

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

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

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

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

Εισαγωγή

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

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

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

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

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

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

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

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

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

Πώς να τρέχει θέσεις εργασίας από τον εργαζόμενο

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

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

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

  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 

Ωστόσο, για να εκτελέσετε τη δέσμη ενεργειών σε μια «ακέφαλη», κατάσταση που πρέπει να χρησιμοποιήσετε:

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

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

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

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

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

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

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

πρόγραμμα

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

Περίληψη

Στο τμήμα αυτό έχουμε δημιουργήσει μια εικονική μηχανή για να λειτουργήσει ως εργαζομένου, καθώς και τον τρόπο με τον οποίο λέμε και να εκτελέσει τη δουλειά μας σενάρια επεξεργασίας (για τον εαυτό μου ένα 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 ; Καλά οι λόγοι θα μπορούσαν να είναι αρκετές, για παράδειγμα:

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

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

Πλεονεκτήματα του Grid Computing Γραφείου

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

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

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

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

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

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

Τεχνολογίες

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή

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

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

Έλεγχος Εργασίας

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

  • Δώστε τις θέσεις εργασίας, μετά από αίτημα των εργαζομένων
  • 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.

Basic Setup

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.

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

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?
  • 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.













Panorama Theme by Themocracy

3 visitors online now
2 guests, 1 bots, 0 members
Max visitors today: 15 at 05:20 am UTC
This month: 26 at 04-04-2012 10:27 pm UTC
This year: 69 at 27-02-2012 09:56 am UTC
All time: 130 at 28-03-2011 10:40 pm UTC