הקדמה
אני עובד בחברה שבה גמר עבודות אצווה רבים עיבוד מיליוני רשומות של נתונים כל יום חשבתי לאחרונה על כל מכונות יושבים כל יום עושה כלום במשך כמה שעות. האם לא יהיה זה טוב אם היינו יכולים להשתמש במכונות האלה כדי לחזק את כוח העיבוד של המערכות שלנו? במערכה זו של מאמרים אני הולך להסתכל על היתרונות הפוטנציאליים של העסקת משרד הרשת באמצעות סביבות וירטואליות.
ב חלק 1 נתתי סקירה כללית של מערכת וטכנולוגיות אני יהיה להשתמש גם דנו כמה מן הסיבות האפשריות למה אתה רוצה ליצור רשת Office.
עבודה ובקרה
אם אתה הולך להיות מפעיל משרות מכן אתה הולך צריך קצת דרך לנהל אותם. שליטה תפקידך במערכת (בשרת העבודה שלך) צריך להיות באמת חשב היטב לפני אפילו מנסה להפעיל רשת Office. אז ראשית, מה הן המשימות של מערכת בקרת עבודה:
- מחלקים משרות לפי בקשה של העובדים
- תגיד עובדים איזה סוג של משרות לרוץ
- עקוב אחר משרות
- להבטיח כי עבודות רק לרוץ פעם
- לספק נתונים עבודה לעובדים, או לפחות לספר להם איפה להשיג אותו
המערכת גם צריכה להיות להרחבה, פתרון זה עובד כעת במקרה בודד ניתנת להארכה כדי להפעיל סוגים שונים של עבודות כמו העסק רואה את שווה בפתרון הרשת. לדוגמה, עבודות עשויים להרוויח עדיפויות, יותר מסוג אחד העבודה יכולה להתקיים (כלומר בסיסים קוד כמה), ובסופו של דבר ייתכן אפילו להריץ כמה מכונות העובד שונים כי הם אופטימיזציה עבור כל סוג של עבודה (אף כי אין להתרחק מן העובד "גנרי "הרעיון). תמיד מנסה לחשוב על העתיד, כאשר מערכות בפיתוח, חזון לטווח קצר יכול להוביל לתסכול ארוך טווח זמן הפיתוח גדל.
איוב Server
אנחנו הולכים צריך איפשהו לשלוט משרות שלנו, זה צריך להיות במערכת רק ברשת שלך, כי יש Locator משאב קבוע, להיות כתובת IP, שם המארח, כתובת האתר (באמצעות DNS פנימי), וכו 'זה בגלל העובדים צריך לדעת איפה לחפש עבודה, עובדים צריכים למצוא את השליטה עבודה במערכת (לא את מערכת בקרת עבודה למצוא את העובדים).
שרת העבודה עצמה אינה באמת יש משימה מסובכת (ממילא מערכת בסיסית), זה צריך לאחסן רשימה של מקומות עבודה, לחלק משרות, לקבל תוצאות, ולאחר מכן לאחסן אותם אחזור מאוחר יותר. כיצד חלקים אלה ('יד' ובים ", כגון) מוגדרים יכול להיות מאוד בסיסי. מאוחר יותר אנו יכולים להרחיב את המערכת לכלול ממשק הניהול להוסיף, לערוך, למחוק, להשעות את העבודות, אבל זה מעבר לתרגיל הזה.
אין שום סיבה שהיא, אז שרת העבודה שלך לא יכול להיות וירטואלי פועל בתוך שרת עיבוד העיקרית שלך בתנאי זה לא לטמיון משאבים רבים מדי ממנו. שרת העבודה אולם אין צורך בזמינות גבוהה, אם הוא יורד ביום שישי בערב, אתה הולך לאבד סוף שבוע שלם של עיבוד, פוטנציאל עולה לך כמה שבועות שווה של זמן עיבוד (לעומת שרת עיבוד העיקרית שלך לבד) . אולי אתה רוצה לשקול לשים שרת העבודה שלך על סביבה מאוזנת לטעון עבור זמינות גבוהה.
יסוד הגדרת
התצורה הבסיסית של שרת העבודה שלנו תכלול את מה שאני קורא את אחד השרתים צולע שלי (כי הוא nux לי, ySql מ ', P-HP). הקוד רץ על עובדים תיאה יהיה ממש להבין מה משרות זה יכול לרוץ על ידי אינטראקציה עם מסדי נתונים עם שליטה העבודה במערכת. מאוחר יותר נוכל ליצור שירות אינטרנט למעשה לחלק משרות במקום שיש לעובדים לעשות את העבודה הקשה עצמם, אך לעת עתה נמשיך באמצעות עקרון KISS (לשמור את זה פשוט, טיפש!).
אז, מאפשר ליצור שלושה mySQL שולחנות להתמודד עם עבודות. אלה יהיו `עבודות`, `jobRecords`, ו `jobResults`.
כאן אני משתמש ב SQL באדי חלופה מעט גדולה phpMyAdmin רק בגלל שלה יותר קל להתקין על CentOS (לאחרים לראות: 10 חלופות נהדר phpMyAdmin )
טבלה זו כוללת 5 שדות פשוטה,
- מק"ט: לזהות את העבודה
- שם: יכול להיות הפניה ללקוח, או כל מספר מזהים אחרים
- סטטוס: אתה צריך לדעת איפה העבודה היא בבית, למשל
- 0: לא נכתבו
- 1: הרים
- 2: הושלם
- started_by: מי התחיל לעשות את העבודה? זה אינו נדרש לחלוטין, אבל הוא נחמד שיש. הייתי מציע מעקב אחר העובדים באמצעות כתובת ה-IP שלהם ברשת
- started_at: מתי העובד להתחיל את העבודה? על ידי מעקב אחר עבודות שלא הושלם בתוך סכום X של זמן אנחנו יודעים שאנחנו צריכים להרים את העבודה שוב ולהתחיל עיבוד על ידי עובד אחר. העובדים יכולים לעצור עיבוד / ללכת לפורום עבור כל מספר של סיבות, הפסקת חשמל, התרסקות, רשת אובדן, וכו '
זה קל איך זה יכול להיות שולחן המורחבת עם כמה שדות נוספים, כדי לאפשר מעקב אחר נתונים סטטיסטיים, עמודה הזמן לסיים כדי לראות כמה זמן עבודה לקח, מונה כדי לראות איך עובדים רבים הרימה את העבודה (כמובן זה צריך נוטים 1), עדיפות לעבודה, הרשימה יכולה להמשיך עוד ועוד. יותר תרחישים עבודה מורכבים יהיה אפשר לציין כמה זיכרון העובד היה צריך גישה (ולכן רק שימוש עובדים מתאימים), או אפילו איזה סוג של העובד יהיה צורך.
מאפשר להוסיף כמה משרות לדוגמה:
הטבלה הבאה שוב הוא די פשוט להבין, אלו רשומות העבודה שלנו. הם מקושרים השולחן משרות העיקרי של טור `jobs_id`. להפוך את השולחן הזה מאוד תלוי את הנתונים שאתה צריך לספק לעובדים שלך, מאפשר לבצע דוגמה פשוטה מאוד, שם יש לנו ארבעה עמודים:
- להקליט את הזהות: הזהות של
- שם: שם של אדם
- כתובת: כתובת של אדם
- jobs_id: ID עבודה כי שיא זה מקושר
הטבלה השלישי והאחרון מורכב השולחן תוצאות, יש לו הרבה באותו לפצות כפי שולחננו רשומות, ועם תוספת של כמה עמודות יכול להיות חלק של הטבלה הרשומות:
- שולחן העבודה job_record_id: קישור אל התוצאה
- התוצאה: הנתונים התוצאה
... וזה כל מה שאתה צריך עבור עבודה! (אם כי ברמה בסיסית מאוד) במקרה שלי אני הצביע על שולחן אחר שבו הנתונים שלי כדי התהליך נמצא, אבל זה יכול היה בקלות קובץ, פרמטרים כדי להפעיל קוד סימולציה, אתה שם את זה.
בחירת עבודה
כאמור, העובדים יעשו וניהול העבודה שלנו בשבילנו עכשיו, אז כל מה שאנחנו צריכים באמת לעשות זה למצוא עבודה, כי צריך לעבד ולקבל את המידע. איך היינו עושים את זה? ובכן לבחור בחירה תפקידנו קריטריונים לחפש משרות, ב SQL עשיתי את הפעולות הבאות:
- קח את כל עבודות שלא מסומנים כמו להשלים אבל מן העובד שלנו לאפס אותם (__ME__ תחליף עם מזהה, הקלה ביותר תהיה כתובת IP):
UPDATE `עבודות` SET `מעמד` = 0 WHERE `מצב` ו `= 1 started_by` = __ME__;
- באמצעות הבחירה תפקידנו קריטריונים, בחר עבודה ולספר את מערכת הבקרה כי עובד זה היא להתמודד עם זה:
UPDATE `עבודות` SET `מעמד` = 1, `started_by` = __ME__, `started_at = NOW () WHERE` מעמד `= 0 או
(`מצב = 1 ו` started_at> DATE_SUB (NOW (), מרווח X שעה)) ORDER BY `id` ASC;
על ידי גרירה משרות שלא חזרו תוצאות בסכום X זמן אנו מבטיחים כי כל העבודות הן להופיע במקרה של עובד מתרסק או הולך נפקד.
- הבא לתפוס את המשרות פרטים ואחריו את הרשומות עצמם:
SELECT * FROM `עבודות` איפה `started_by` = __ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `id` = __JOBID__;
עם סיום העבודה אנו להוסיף שלנו התוצאה הרשומות ולסמן את העבודה כמו שלמה. זכור כמקום עבודה יכולים להשעות / לחדש בכל עת לאפשר חוסן חלק בתסריט שלך. זה יכול להיות שהמשימה משהה חצי דרך דרך לעדכן את מערכת בקרת עבודה, כך בודקים את מספר הרשומות בעבודה ואת מספר התוצאות הציל חזרה למערכת הבקרה העבודה תהיה צעד נבון.
בנוסף, בזמן הזה ממחיש עד כמה משרות ניתן לבחור והצליח מ-SQL שאילתה מסגרת אתה צריך להיות ממש לפשט פקד את העבודה שלך, כך שאם תחליט לעבור באמצעות שירות אינטרנט, מבוסס מערכת הקבצים, XML , או אחרת מספר מערכות זה לא ישפיע על קוד שמעליו.
איוב תצורת
ההיבט הבא הוא לשקול גודל העבודה ואת התצורה. על ידי משחק עם הגדרות התפקיד שאנחנו יכולים על איזון מעולה בין מהירות, שכפול התהליך, ואמינות. קח כמה ofa תרחישים:
- משרות לקחת 1 כל יום לרוץ: משמעות הדבר היא כי העובדים שלך צריך 15 ימים כדי לעבד כל העבודה (זוכרים 10% של הכוח עבור 2/3rds הזמן). זה בבירור לא תצורה חכם, גודל התפקיד שלך הוא גדול מדי! זה ייקח לפחות להכפיל את הזמן כדי להשיג עבודה מעובד לעובד הראשונית צריכה ללכת נפקד (הזמן להרים שזה לא חזר תוצאה בתוספת זמן עיבוד מחדש). ב אידיאל היית אחד לפחות משרה מלאה כחכח קלות עד סוף תקופת המתנה ארוכה מדי, ככה אתה שומר משרות תקתוק שוב על המקרה הגרוע ביותר בעבודה היה לוקח יומיים כדי התהליך הראשון צריך ללכת חסרים.
- משרות לקחת 1 דקה לרוץ: משמעות הדבר היא כי העובדים שלך לקחת בערך 15 דקות כדי להפעיל את כל העבודה. בעוד זה עלול בתחילה נראה אידיאלי, לך לקבל עיבוד עבודה נוספת בזמן ארוחת צהריים, הפסקות קפה, פגישות, וכו תרחיש זה מניח עומס על אזורים אחרים של המערכת מציג בעיות משלה. לדוגמה, ראשית ההגדרה שלך / זמן יחס עיבוד הוא הולך ישר, ולכן מאבדים יעילות המערכת. הרשת שלך הולכים להיות כל הזמן הזרמת מידע עבודה לעובדים שונים צוות מתסכל שהם דונג יום שלהם לעבודת יום. אתה גם הולך לשים להתאמץ יותר על השרת שלך עבודה עיבוד כפי שהוא צריך לחלק המון חתיכות קטנות של עובדים על בסיס קבוע. לבסוף, במצב זה אם שרת העבודה שלך יורד שאתה הולך ליצור להיכנס שוב ענק של עבודה הושלמו ואילו משרות גדול יכול של המשך עיבוד מודע מבורך כי שרת העבודה היה נתקל בקשיים.
במציאות לא יהיה בתצורת אחד אידיאלי עבור תוכנית ההתקנה של הרשת שלך, הרבה תלוי המשאבים הזמינים, סוגי העבודה, תפנית במשרה דרישות, יכולת הרשת, וכן הלאה. אולם הנחיות כמה יהיה:
- משרות גודל כך כל עובד יכול לעבור לפחות 3-4 משרות תקופה של 15 שעות (הזמן הארוך סביר להניח תקופת המתנה)
- לשחק עם גודל המשימה, כך זמן ההתקנה הופך משמעותי למדי לעומת זמן עיבוד (בהתחשב בשלב לעיל).
- אם העבודה אינה מוחלטת להכפיל את כמות הזמן (ואולי פחות) אתה מצפה להשלים אותו להניח כי נפקד נעלם שלה מתחילים לעבד אותו עם עובדת אחרת. זה אומר שאתה יכול לחכות עד שלוש פעמים את אורך נורמלי של עבודה עבור אותו כדי להשלים (ואולי יותר, אם את העבודה לאחר מכן נכשל). אולי אתה רוצה להפחית את הזמן הזה, אבל להיזהר שלא לצמצם אותו יותר מדי כמו שאתה יכול להתחיל לשכפל משימות עיבוד על בסיס קבוע.
- ג 'ובס צריך להיות עצמאית של דרישות מחוץ ככל האפשר. שרת העבודה, למשל, צריך רק לפנות אל ההתחלה והסיום של כל עבודה.
- אין להרוות את הרשת, זה יהיה שתי השפעות שליליות, צוות היום שלך תמצא באמצעות הרשת מתסכל ובעיות ניתן מנוסה עם קשרים העיתוי מתוך בעיה כי רק יחמיר כפי שאתה בהיקף הרשת שלך.
- משרות ודא יכול לרוץ על העובדים שלך. אם משרות הופכים מדי זיכרון עבודות שטח אינטנסיבית או דיסק אינטנסיבית יתחיל להפיל והדבר היחיד תבחין היא ירידה במספר המשרות מעובד בלי שום סיבה אמיתית מדוע.
תוצאות הגשת עבודה
When submitting the results of a job it is important to check that results have not been submitted by another worker, especially if the current worker has been dormant for some time.
When results are submitted ensure that the number of results matches the number of records within the job.
As stated previously, and can not be over emphasised, build fault tolerance into job retrieval and results submission. The workers can (and most likely will) go into suspend mode at the most inconvenient of times and this needs to be catered for. Also once again abstracting away your results submission will help cater for future changes to your job control system much easier to deal with.
תקציר
In this section we have looked at what a job control server needs to do and how to get a very basic system set up. We discussed how to retrieve a job from the control system and how best to configure jobs to get the most our of your office grid system. To finish, a paragraph or two on submitting results back to the job control server was presented.
- A job control server manages jobs and ensures that all work units are completed
- By abstracting your job select/results submission we can change the technology of the control server without much problems
- Configure your jobs to ensure that they are run quickly and efficiently without putting too much pressure on your network infrastructure, and without duplicating processing tasks on a regular basis.
- Ensure that you build fault tolerance and error checking into your routines, workers can suspend and resume and the most inconvenient of times. Remember to check if results have already been submitted by another worker.
בפעם הבאה
In part 3 we'll create our virtual processing machine and set up our windows machines to become idle-time workers.