Εισαγωγή
Δουλεύω σε μια εταιρεία όπου θα τρέξει πολλές θέσεις εργασίας batch επεξεργασία εκατομμύρια αρχεία με τα δεδομένα κάθε μέρα και να έχω σκεφτεί πρόσφατα για όλες τις μηχανές που κάθονται κάθε μέρα να μην κάνουμε τίποτα για αρκετές ώρες. Δεν θα ήταν καλό αν μπορούσαμε να χρησιμοποιήσουν τις μηχανές αυτές για να ενισχύσει την επεξεργαστική ισχύ των συστημάτων μας; Σε αυτό το σύνολο των άρθρων Πάω να εξετάσουμε τα πιθανά οφέλη από την απασχόληση ενός γραφείου πλέγματος χρησιμοποιώντας εικονικοποιημένων περιβάλλοντα.
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.
Βασική Εγκατάσταση
Η βασική ρύθμιση για το διακομιστή δουλειά μας θα αποτελείται από ό, τι είμαι καλώντας έναν από τους διακομιστές Limp μου (που είναι Li NUX, ySql m, P HP). Ο κώδικας που εκτελείται σε thea εργαζομένων θα έχει κανένα αποτέλεσμα η δουλειά που μπορεί να τρέξει με την αλληλεπίδραση με βάσεις δεδομένων με το σύστημα εργασίας ελέγχου. Αργότερα θα μπορούσαμε να δημιουργήσουμε μια υπηρεσία web και πραγματικά το χέρι έξω θέσεις εργασίας αντί να έχουν οι εργαζόμενοι κάνουν σκληρή δουλειά των ίδιων των, αλλά προς το παρόν θα συνεχίσει να χρησιμοποιεί την αρχή KISS (Φροντίστε να είναι απλή, ανόητε!).
Έτσι, αφήνει να δημιουργήσει τρεις mySQL πίνακες για την αντιμετώπιση των θέσεων εργασίας. Αυτές θα είναι «θέσεις εργασίας», «jobRecords», και «jobResults».
Εδώ είμαι με τη χρήση του SQL Buddy μια μεγάλη μικρή εναλλακτική λύση για το phpMyAdmin μόνο και μόνο επειδή είναι ευκολότερο να το εγκαταστήσετε σε CentOS (για τους άλλους δείτε: 10 Μεγάλη εναλλακτικές λύσεις για το phpMyAdmin )
Ο πίνακας αυτός αποτελείται από 5 απλών πεδίων,
- id: τον επακριβή προσδιορισμό της εργασίας
- Όνομα: Θα μπορούσε να είναι σημείο αναφοράς τον πελάτη, ή οποιοδήποτε αριθμό άλλων αναγνωριστικών
- Κατάσταση: Πρέπει να ξέρετε όπου η δουλειά είναι, π.χ.
- 0: Δεν έχει ξεκινήσει
- 1: επιταχύνθηκε
- 2: Ολοκληρώθηκε
- started_by: Ποιος ξεκίνησε να κάνει τη δουλειά; Αυτό δεν είναι απολύτως απαιτείται, αλλά είναι καλό να υπάρχει. Θα πρότεινα τον εντοπισμό των εργαζομένων από τη διεύθυνση IP τους στο δίκτυό σας
- started_at: Πότε ο εργαζόμενος ξεκινήσει τη δουλειά; Με την παρακολούθηση θέσεις εργασίας που δεν έχουν ολοκληρωθεί μέσα σε Χ ποσό του χρόνου ξέρουμε ότι πρέπει να πάρει τη δουλειά για μια ακόμη φορά και να αρχίσει την επεξεργασία από άλλη εργαζόμενο. Οι εργαζόμενοι θα μπορούσε να σταματήσει την επεξεργασία / go offline για οποιοδήποτε αριθμό λόγων, τη διακοπή ρεύματος, συντριβή, δίκτυο απώλεια, κ.λπ.
Είναι εύκολο τρόπο με τον οποίο ο πίνακας αυτός θα μπορούσε να επεκταθεί με μερικά επιπλέον πεδία για να καταστεί δυνατή η παρακολούθηση στατιστικών στοιχείων, μια στήλη ώρα λήξης για να δούμε πόσο καιρό πήρε τη δουλειά, έναν μετρητή για να δείτε πόσοι εργαζόμενοι πήραν την εργασία (προφανώς αυτό πρέπει να τείνουν να 1), προτεραιότητα των εργασιών, ο κατάλογος μπορεί να συνεχιστεί και επάνω. Σε πιο πολύπλοκα σενάρια εργασίας θα ήταν δυνατό να προσδιοριστεί το μέγεθος της μνήμης, ο εργαζόμενος θα πρέπει να έχουν πρόσβαση σε (και επομένως η χρήση μόνο κατάλληλο εργαζομένων), ή ακόμα και ποιος τύπος εργαζομένου θα ήταν απαραίτητη.
Αφήνει να προσθέσετε μερικές θέσεις εργασίας παράδειγμα:
Ο πίνακας που ακολουθεί είναι και πάλι αρκετά απλό να κατανοήσει, αυτά είναι τα αρχεία δουλειά μας. Συνδέονται με τον κύριο πίνακα θέσεων εργασίας από μια στήλη «jobs_id». Το make up του πίνακα αυτού εξαρτάται σε μεγάλο βαθμό τα δεδομένα που πρέπει να παρέχουν στους εργαζομένους σας, αφήνει να κάνει ένα πολύ απλό παράδειγμα, όπου έχουμε τέσσερις στήλες:
- ID: ID της εγγραφής
- Όνομα: το όνομα Πρόσωπο
- διεύθυνση: διεύθυνση του Ατόμου
- jobs_id: Το αναγνωριστικό εργασίας που αυτό το αρχείο είναι συνδεδεμένο με
Το τρίτο και τελικό τραπέζι αποτελείται από ένα πίνακα αποτελεσμάτων, έχει περίπου το ίδιο κάνει ως επιτραπέζια αρχεία μας, και με την προσθήκη ορισμένων στήλες θα μπορούσαν να είναι μέρος του πίνακα εγγραφών:
- job_record_id: Link το αποτέλεσμα στο τραπέζι των θέσεων εργασίας
- αποτέλεσμα: Τα στοιχεία που προκύπτουν από
... Και αυτό είναι όλα όσα χρειάζεστε για τον έλεγχο των θέσεων εργασίας! (Αν και σε πολύ βασικό επίπεδο) Στην περίπτωσή μου είμαι επισήμανε σε άλλο πίνακα, όπου τα στοιχεία μου για την διαδικασία βρισκόταν, αλλά αυτό θα μπορούσε κάλλιστα να έχει ένα αρχείο, οι παράμετροι για την εκτέλεση κώδικα προσομοίωσης, εσείς το όνομα.
Επιλέγοντας μια θέση εργασίας
Όπως αναφέρθηκε προηγουμένως, οι εργαζόμενοι θα κάνουν τη διαχείριση δουλειά μας για μας για τώρα, οπότε το μόνο που χρειάζεται πραγματικά να κάνουμε είναι να βρούμε μια δουλειά που χρειάζεται επεξεργασία και να πάρετε τις πληροφορίες. Πώς θα το κάνουμε αυτό; Καλά πάρει τη δουλειά μας κριτήρια επιλογής και να αναζητήσει απασχόληση, σε SQL έκανα το εξής:
- Πάρτε οποιοδήποτε θέσεις που δεν χαρακτηρίζονται ως πλήρεις, αλλά από εργαζόμενο μας και επαναφορά τους (__ME__ αντικαταστήσει με ένα αναγνωριστικό, ευκολότερο θα είναι η διεύθυνση IP):
UPDATE »θέσεις εργασίας», όπως προβλέπεται `κατάστασης» = 0 όταν «καθεστώς» = 1 ΚΑΙ `started_by» = __ME__?
- Χρησιμοποιώντας τη δουλειά μας κριτήρια επιλογής, επιλέξτε μια θέση εργασίας και να πει το σύστημα ελέγχου ότι η εν λόγω εργαζόμενος έχει την αντιμετώπισή του:
UPDATE »θέσεις εργασίας», όπως προβλέπεται `κατάστασης» = 1, στο εξής started_by »= __ME__,` started_at »= NOW () όταν« καθεστώς »= 0 ή
(«Καθεστώς» = 1 ΚΑΙ `started_at»> DATE_SUB (NOW (), το διάστημα Χ ΩΡΑ)) ORDER BY `id` ASC?
Με την αρπαγή θέσεις εργασίας που δεν έχουν επιστρέψει τα αποτελέσματα στο ποσό Χ χρονικό διάστημα να διασφαλίσουμε ότι όλες οι εργασίες εκτελούνται σε περίπτωση που ένας εργαζόμενος συντρίβοντας ή πηγαίνει AWOL.
- Στη συνέχεια πιάσε τα στοιχεία απασχόλησης που ακολουθείται από τα αρχεία οι ίδιοι:
SELECT * FROM `θέσεις εργασίας», όταν «started_by» = __ME__ ορίου του 1?
SELECT * FROM `job_records« Όταν `id` = __JOBID__?
Μετά την ολοκλήρωση της εργασίας που εισάγετε τα αρχεία μας αποτέλεσμα και το σήμα του εργασία ως ολοκληρωμένη. Να θυμάστε ότι η απασχόληση μπορεί να αναστείλει / συνέχιση ανά πάσα στιγμή θα επιτρέψει σε ορισμένες στιβαρότητα στο script σας. Θα μπορούσε να είναι ότι το καθήκον αναστέλλει μισά επικαιροποίηση του συστήματος ελέγχου της εργασίας, έτσι τον έλεγχο του αριθμού των εγγραφών σε μια θέση εργασίας και ο αριθμός των αποτελεσμάτων αποθηκεύεται πίσω στο σύστημα ελέγχου της εργασίας θα ήταν μια σοφή κίνηση.
Επιπλέον, αν και αυτό δείχνει πόσο θέσεις εργασίας μπορούν να επιλεγούν και να διαχειρίζεται από ένα SQL ερώτημα-πλαίσιο θα πρέπει πραγματικά να υδροληψίες ελέγχου της εργασίας σας, έτσι ώστε, αν αποφασίσει να στραφεί προς τη χρήση των υπηρεσιών web, ένα αρχείο συστήματος, XML , ή οποιαδήποτε άλλη αριθμός των συστημάτων δεν θα επηρεάσει τον κώδικα πάνω από αυτό.
Εργασία διαμόρφωσης
Η επόμενη πτυχή που εξετάζει είναι το μέγεθος και τη διαμόρφωση θέσεων εργασίας. Με το παιχνίδι με τη διαμόρφωση θέσεων εργασίας που μπορεί να επιτύχει μια εξαιρετική ισορροπία μεταξύ της ταχύτητας, αναπαραγωγή της διαδικασίας, και την αξιοπιστία. Πάρτε ένα ζευγάρι ΟΦΑ σενάρια:
- Εργασία λάβει 1 ημέρα κάθε για να εκτελέσετε: Αυτό σημαίνει ότι οι εργαζόμενοι σας χρειάζονται 15 ημέρες για την επεξεργασία κάθε θέση εργασίας (θυμηθείτε το 10% της ισχύος για 2/3rds του χρόνου). Αυτό δεν είναι προφανώς μια σοφή διάταξη, μέγεθος της εργασίας σας είναι πάρα πολύ μεγάλη! Θα χρειαστεί τουλάχιστον διπλάσιο χρόνο για να βρουν μια θέση εργασίας σε επεξεργασία σε περίπτωση που η αρχική εργαζόμενος πάει AWOL (χρόνος για να πάρει ότι δεν έχει επιστρέψει αποτέλεσμα συν επανεπεξεργασία του χρόνου). Σε ένα ιδανικό θα είχατε τουλάχιστον μία πλήρη απασχόληση εύκολα εκκαθαρίζονται από το τέλος κάθε μακρά περίοδο αδράνειας, με αυτόν τον τρόπο να κρατήσει τις θέσεις εργασίας που περνάει πάνω και στη χειρότερη περίπτωση μια εργασία θα διαρκέσει δύο ημέρες για την επεξεργασία θα πρέπει το πρώτο χάνονται.
- Εργασία λάβει 1 λεπτό για να εκτελέσετε: Αυτό σημαίνει ότι οι εργαζόμενοι σας πάρει περίπου 15 λεπτά για να τρέχει σε κάθε θέση εργασίας. Ενώ αυτό μπορεί να φαίνεται αρχικά ιδανικά, θα αποκτήσουν πρόσθετη επεξεργασία εργασία κατά τη διάρκεια του χρόνου του γεύματος, coffee breaks, συναντήσεις, κ.λπ. με το σενάριο αυτό βάζει πίεση στους άλλους τομείς του συστήματός σας και να εισάγει τα δικά του προβλήματα. Για παράδειγμα, κατ 'αρχάς σας εγκατάσταση / αναλογία του χρόνου επεξεργασίας πρόκειται να πάει δεξιά προς τα κάτω, ως εκ τούτου χάνει την αποτελεσματικότητα του συστήματος. Το δίκτυό σας θα είναι συνεχώς συνεχούς ροής πληροφοριών θέσεων εργασίας στους διάφορους εργαζόμενους απογοητευτικό το προσωπικό που είναι ντονγκ την καθημερινή τους εργασία. Είστε, επίσης, θα δοθεί μεγαλύτερη πίεση στον server επεξεργασίας εργασία σας δεδομένου ότι πρέπει να πιάτο από πάρα πολλά μικρά κομμάτια της εργασίας σε τακτική βάση. Τέλος, σε αυτή την κατάσταση αν ο διακομιστής τη δουλειά σας πηγαίνει κάτω θα πάμε να δημιουργήσουμε μια τεράστια πλάτη αρχείο καταγραφής των ημιτελών εργασιών ενώ μεγαλύτερες θέσεις εργασίας θα μπορούσαν της συνεχούς επεξεργασίας μακαρίως αγνοεί ότι ο διακομιστής η εργασία που αντιμετωπίζουν δυσκολίες.
Στην πραγματικότητα δεν θα υπάρχει μία ιδανική ρύθμιση για την εγκατάσταση του δικτύου σας, πολλά εξαρτώνται από τους διαθέσιμους πόρους, τα είδη των θέσεων εργασίας, τις απαιτήσεις του χρόνου εργασίας ανάκαμψη, την ικανότητα του δικτύου, και ούτω καθεξής. Ωστόσο, ορισμένες κατευθυντήριες γραμμές θα είναι:
- θέσεις εργασίας Μέγεθος έτσι ώστε κάθε εργαζόμενος μπορεί να πάρει μέσα από τουλάχιστον 3-4 θέσεις εργασίας σε μια περίοδο 15 ωρών (η μεγαλύτερη πιθανή ρελαντί χρονική περίοδο)
- Παίξτε με το μέγεθος της εργασίας έτσι ώστε ο χρόνος εγκατάστασης γίνεται αρκετά ασήμαντη σε σύγκριση με το χρόνο επεξεργασίας (λαμβάνοντας υπόψη το ανωτέρω σημείο).
- Εάν μια εργασία δεν ολοκληρωθεί με το διπλάσιο του ποσού του χρόνου (ίσως και λιγότερο) το περιμένετε να ολοκληρωθεί η υποθέσουμε ότι του πάει AWOL και να αρχίσει την επεξεργασία με ένα άλλο εργαζόμενο. Αυτό σημαίνει ότι ίσως χρειαστεί να περιμένουν μέχρι και τρεις φορές τη συνήθη διάρκεια μιας εργασίας για την ολοκλήρωση της (ενδεχομένως περισσότερο, αν η μεταγενέστερη εργασία αποτυγχάνει). Μπορεί να θέλετε να μειώσει αυτή τη φορά, αλλά πρέπει να προσέξουμε να μην το μειώσει πάρα πολύ, όπως μπορείτε να ξεκινήσετε επανάληψη επεξεργασίας καθήκοντα σε τακτική βάση.
- Εργασία θα πρέπει να είναι ανεξάρτητη των εξωτερικών απαιτήσεων όσο το δυνατόν περισσότερο. Ο διακομιστής δουλειά, για παράδειγμα, θα πρέπει να απευθυνθεί στην αρχή και στο τέλος κάθε εργασία.
- Να μην κορεστεί το δίκτυό σας, αυτό θα έχει δύο αρνητικά αποτελέσματα, τη διάρκεια της ημέρας το προσωπικό σας θα βρει τη χρήση του δικτύου απογοητευτικό και τα προβλήματα που μπορεί να προκύψει σε σχέση με τις συνδέσεις χρονικό όριο για ένα πρόβλημα που θα πάρει μόνο χειρότερα καθώς κλίμακας δίκτυο σας.
- Εξασφάλιση θέσεων εργασίας μπορεί να τρέξει σε εργαζομένους σας. Αν οι εργασίες γίνονται πολύ απαιτητικές σε μνήμη ή χώρο στο δίσκο υψηλής έντασης εργασίας θα αρχίσει εγκατάλειψης και το μόνο πράγμα που θα παρατηρήσετε είναι μια σταγόνα στον αριθμό των θέσεων εργασίας σε επεξεργασία που δεν πραγματικός λόγος.
Υποβολή Αποτελέσματα Εργασίας
Κατά την υποβολή των αποτελεσμάτων της εργασίας, είναι σημαντικό να ελέγχεται ότι τα αποτελέσματα δεν έχουν υποβληθεί, από άλλον εργαζόμενο, ειδικά εάν η τρέχουσα εργαζόμενος ήταν ανενεργό για κάποιο χρονικό διάστημα.
Όταν τα αποτελέσματα υποβάλλονται εξασφαλιστεί ότι ο αριθμός των αποτελεσμάτων που αντιστοιχεί στον αριθμό των εγγραφών κατά την εργασία.
Όπως αναφέρθηκε προηγουμένως, και δεν μπορεί να είναι πάνω τόνισε, να χτίσουν την ανοχή σε βλάβες στην ανάκτηση θέσεων εργασίας και των υποβληθέντων αποτελεσμάτων. Οι εργαζόμενοι μπορούν (και πιθανότατα θα) πάει σε κατάσταση αναστολής στο πιο ενοχλητικό φορές και αυτό πρέπει να ικανοποιηθούν. Επίσης, για άλλη μια φορά υδροληψίες μακριά αποτελέσματα υποβολή σας θα βοηθήσει να ληφθεί μέριμνα για μελλοντικές αλλαγές στη δουλειά σας σύστημα ελέγχου πολύ πιο εύκολο να αντιμετωπίσουμε.
Περίληψη
Σε αυτό το section έχουμε εξετάσει σε ποιο ένα διακομιστή ελέγχου της εργασίας που πρέπει να κάνει και πώς να πάρει ένα πολύ βασικό σύστημα που έχει συσταθεί. Συζητήσαμε πώς να ανακτήσει μια εργασία από το σύστημα ελέγχου και τον καλύτερο τρόπο για να ρυθμίσετε θέσεις εργασίας για να αξιοποιήσετε στο έπακρο μας δίκτυο του γραφείου σας. Για να ολοκληρώσετε, μια παράγραφο ή δύο για την υποβολή των αποτελεσμάτων πίσω στο διακομιστή ελέγχου της εργασίας παρουσιάστηκε.
- Ένας διακομιστής ελέγχου της εργασίας διαχειρίζεται θέσεις εργασίας και εξασφαλίζει ότι ολοκληρώνονται όλες οι υπηρεσιακές μονάδες
- Με υδροληψίες δουλειά σας επιλογή / υποβολή αποτελέσματα μπορούμε να αλλάξουμε την τεχνολογία του διακομιστή ελέγχου χωρίς πολλά προβλήματα
- Διαμόρφωση θέσεων εργασίας σας για να βεβαιωθείτε ότι είναι τρέχουν γρήγορα και αποτελεσματικά χωρίς βάζοντας πάρα πολλή πίεση σχετικά με την υποδομή του δικτύου σας, και χωρίς επικαλύψεις μεταποίηση καθήκοντα σε τακτική βάση.
- Βεβαιωθείτε ότι έχετε χτίσει ανοχή λαθών και checking λάθος σε ρουτίνες σας, οι εργαζόμενοι μπορούν να αναστέλλουν και να επαναλαμβάνεται και το πιο ενοχλητικό φορές. Θυμηθείτε να ελέγξετε αν τα αποτελέσματα έχουν ήδη υποβληθεί από άλλον εργαζόμενο.
Την επόμενη φορά
Στο μέρος 3 θα δημιουργήσουμε μας μηχανή εικονικής επεξεργασία και δημιουργία μηχανές μας παράθυρα για να γίνει αδρανής απασχολουμένων εργαζομένων.