הקדמה
אני עובד בחברה שבה גמר עבודות אצווה רבים עיבוד מיליוני רשומות של נתונים מדי יום, חשבתי לאחרונה על כל מכונות יושבים בכל יום לעשות כלום במשך כמה שעות. האם לא יהיה זה טוב אם אנחנו יכולים להשתמש במכונות האלה כדי לחזק את כוח העיבוד של המערכות שלנו? במערכה זו של מאמרים אני מסתכל על היתרונות הפוטנציאליים של העסקת המשרד לרשת באמצעות סביבות וירטואליות.
ב חלק 1 נתתי סקירה כללית של מערכת טכנולוגיות אני יהיה להשתמש גם כפי שנדון כמה סיבות אפשריות למה אתה רוצה ליצור רשת Office.
עבודה ובקרה
אם אתה הולך לרוץ מקומות עבודה אז אתה הולך צריך קצת דרך לנהל אותם. השליטה תפקידך במערכת (בשרת העבודה שלך) צריך להיחשב ממש טוב לפני עוד ניסיון להפעיל רשת Office. אז ראשית, מה הן משימות עבור מערכת בקרת עבודה:
- לחלק משרות, לבקשת העובדים
- תגיד עובדים איזה סוג של עבודות לרוץ
- מעקב אחר עבודות
- להבטיח כי עבודות מנוהלים רק פעם אחת
- לספק נתונים עבודה לעובדים, או לפחות אומר להם איפה ניתן לקבל אותו
המערכת גם צריכה להיות להרחבה, פתרון שעובד בינתיים במקרה אחד ניתן להאריך להריץ מספר סוגים של מקומות עבודה כעסק רואה שווה בפתרון הרשת. לדוגמה, מקומות עבודה יכול לקבל סדרי עדיפויות, יותר מסוג אחד העבודה יכולה להתקיים (כלומר מספר בסיסי קוד), בסופו של דבר אתה יכול אפילו להריץ מספר מכונות עובדים שונים כי הם אופטימיזציה עבור כל סוג של עבודה (אם כי אין להתרחק העובד גנרי "הרעיון). תמיד מנסה לחשוב על העתיד בעת פיתוח מערכות, ראייה לטווח קצר יכול להוביל לתסכול ארוך טווח זמן הפיתוח גדל.
שרת העבודה
אנחנו הולכים צריך מקום לשלוט עבודות שלנו, זה אמור להיות במערכת רק ברשת שלך, כי יש מאתר משאבים קבוע, להיות כתובת 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 זמן אנחנו יודעים שאנחנו צריכים להרים את העבודה שוב ולהתחיל עיבוד על ידי עובד אחר. עובדים יכולתי להפסיק עיבוד / go offline עבור כל מספר סיבות, הפסקת חשמל, קריסה, אובדן ברשת, וכו '
קל איך את הטבלה ניתן יהיה להרחיב עם כמה שדות נוספים, כדי לאפשר מעקב אחר נתונים סטטיסטיים, זמן לסיים את הטור כדי לראות כמה זמן עבודה לקח, מונה כדי לראות כמה עובדים הרים את העבודה (כמובן זה צריך נוטים 1), עדיפות עבודה, הרשימה יכולה להמשיך עוד ועוד. בתרחישים עבודה מורכבות יותר ניתן יהיה להגדיר כמה זיכרון העובד היה צריך גישה (ולכן משתמשים רק עובדים מתאימים), או אפילו איזה סוג של העובד יהיה צורך.
מאפשר להוסיף כמה עבודות לדוגמה כמה:
הטבלה הבאה שוב הוא די פשוט להבין, אלה הם נתוני עבודות שלנו. הם קשורים לשולחן עבודות העיקרי של טור `jobs_id`. להפוך את השולחן זה מאוד תלוי את הנתונים שאתה צריך לספק לעובדים שלכם, מאפשר להפוך דוגמה פשוטה מאוד, שם יש לנו ארבעה עמודים:
- מק"ט: ID של הרשומה
- השם: שמו של אדם
- כתובת: כתובת של איש
- jobs_id: מזהה את העבודה כי זה שיא קשור
הטבלה השלישי והאחרון מורכב בטבלת התוצאות, יש לו דומה לפצות כמו השולחן שלנו רשומות, ועם תוספת של כמה עמודות יכול להיות חלק של הטבלה תקליטים:
- job_record_id: קישור תוצאה לשולחן העבודה
- התוצאה: הנתונים התוצאה
... וזה כל מה שאתה צריך עבור עבודה! (אם כי ברמה בסיסית מאוד) במקרה שלי אני הצביע על שולחן אחר שבו הנתונים שלי לתהליך נמצא, אבל זה יכול היה באותה קלות הקובץ, הפרמטרים להפעיל קוד סימולציה, מה שתרצו.
בחירת עבודה
כאמור, העובדים יעשו וניהול העבודה שלנו אצלנו עכשיו, אז כל מה שאנחנו צריכים באמת לעשות זה למצוא עבודה, כי צריך עיבוד ולקבל את המידע. איך היינו עושים את זה? ובכן לבחור בחירה העבודה שלנו קריטריונים ולחפש עבודה, ב-SQL עשיתי את הפעולות הבאות:
- קח לאף משרה שאינם מסומנים מלאה אלא עובד שלנו לאפס אותם (תחליף ME__ __ עם מזהה, הקלה ביותר תהיה כתובת ה-IP):
עדכון ג `עבודות` סט `מצב` = 0 WHERE `מצב` ו `= 1 started_by '= __ ME__;
- באמצעות הבחירה שלנו עבודה קריטריונים, בחר את העבודה ולספר מערכת בקרת שהעובד הזה היא להתמודד עם זה:
עדכון ג `עבודות` סט `מצב` = 1 `,` started_by = __ ME__, `started_at` = NOW () WHERE `מצב` = 0 או
(`מצב` ו `= 1 started_at`> DATE_SUB (NOW (), שעה מרווח X)) ORDER BY `id` ASC;
מקומות עבודה על ידי גרירה שלא חזרו תוצאות בסכום X זמן אנו מבטיחים כי כל העבודות מנוהלות במקרה של עובד מתרסק או הנפקדות.
- לאחר מכן לתפוס את משרות פרטים ואחריו את הרשומות עצמם:
SELECT * FROM `עבודות` WHERE `started_by '= __ ME__ LIMIT 1;
SELECT * FROM `job_records` WHERE `id` = __ JOBID__;
עם סיום העבודה אנו להוסיף רשומות התוצאות שלנו ולסמן את העבודה הושלמה. זכור כמקום עבודה יכולים להשעות / לחדש בכל עת לאפשר חוסן חלק בתסריט. זה יכול להיות שהמשימה משהה בחצי הדרך לעדכן את מערכת בקרת עבודה, אז בודקים את מספר הרשומות בעבודה ואת מספר התוצאות שנשמרו חזרה למערכת הבקרה העבודה תהיה צעד נבון.
בנוסף, בעוד זה מדגים כיצד ניתן לבחור עבודות והצליח ממסגרת SQL, השאילתה אתה צריך באמת להיות הפשטה מלאה העבודה שלך, כך שאם אתם מחליטים לעבור באמצעות שירות אינטרנט, מערכת קבצים המבוססת על XML , או אחרת מספר מערכות זה לא ישפיע על קוד מעליה.
תצורת העבודה
ההיבט הבא הוא לשקול גודל העבודה ותצורה. על ידי משחק עם הגדרות התפקיד ניתן על איזון מעולה בין מהירות, שכפול התהליך, ואמינות. קח כמה תרחישים of הזוג:
- משרות לקחת 1 כל יום לרוץ: משמעות הדבר היא כי העובדים שלך צריך 15 ימים כדי לעבד את כל העבודה (זוכרים 10% מכוח עבור 2/3rds של זמן). זה בבירור לא תצורה חכם, גודל התפקיד שלך הוא גדול מדי! זה היה לוקח לפחות כפול זמן כדי לקבל את העבודה מעובד לעובד הראשוני צריך ללכת נפקד (זמן להרים את זה כי לא חזר התוצאה בתוספת הזמן עיבוד מחדש). באידיאל שיהיה לך לפחות 1 משרה מלאה פינה בקלות עד סוף כל תקופה המתנה ארוכה, כך אתה שומר את העבודות מתקתקות על ובמקרה הרע במקרה העבודה היה לוקח יומיים לתהליך 1 צריך ללכת חסר.
- משרות לקחת 1 דקה לרוץ: משמעות הדבר היא כי העובדים שלך לוקח בערך 15 דקות כדי להפעיל את כל העבודה. בעוד בתחילה זה עשוי להיראות אידיאלי, אתה מקבל עיבוד עבודה נוספת במהלך זמן ארוחת הצהריים, הפסקות קפה, פגישות, וכו 'בתרחיש זה מכניס למתח על תחומים אחרים של המערכת ומציג בעיות משלה. לדוגמה, ראשית יחס התקנה / עיבוד שלך הזמן הוא הולך ישר, ולכן מאבד את יעילות המערכת. הרשת יהיה מידע כל הזמן זרימת עבודה לצוות עובדים שונים מתסכל שהם דונג יום שלהם לעבודת יום. אתה גם הולך לשים את הלחץ יותר על השרת שלך עבודה עיבוד כפי שהוא צריך לחלק אוכל המון המון חתיכות קטנות של עבודה על בסיס קבוע. לבסוף, במצב זה אם שרת העבודה שלך יורד שאתה הולך ליצור יומן בחזרה עצום של עבודות שלא הושלמו ואילו עבודות גדולות יותר יכול המשיכה של עיבוד מאושרים ולא שיערו כי שרת העבודה חווה קשיים.
במציאות לא תהיה תצורת אידיאלי 1 להתקנה ברשת שלך, הרבה תלוי את המשאבים הזמינים, סוגי עבודה, אספקה דרישות התפקיד זמן, יכולת הרשת, וכן הלאה. עם זאת כמה קווים מנחים יהיה:
- משרות גודל כך כל עובד יכול לעבור לפחות 3-4 מקומות עבודה בתקופה של 15 שעות (זמן רב תקופת המתנה סביר)
- לשחק עם גודל העבודה כך זמן ההתקנה הופך זניח למדי לעומת זמן עיבוד (אם נזכור את הנקודה לעיל).
- אם העבודה לא הושלמה בסכום כפול של זמן (אולי פחות) אתה מצפה להשלים אותה להניח כי נפקד הלך שלה להתחיל לעבד אותו עם עובד נוסף. זה אומר שאתה יכול לחכות עד אורך שלוש פעמים הרגיל של העבודה על זה כדי להשלים (אולי יותר, אם את העבודה לאחר מכן נכשל). אולי כדאי לצמצם את הזמן הזה, אבל להיזהר שלא להפחית את זה כמה שאתה יכול להתחיל לשכפל משימות עיבוד על בסיס קבוע.
- משרות אמורה להיות בלתי תלויה בדרישות מחוץ ככל שניתן. שרת העבודה, למשל, צריך רק ליצור קשר עם ההתחלה והסיום של כל עבודה.
- אל להרוות את הרשת, זה יהיו שתי השפעות שליליות, צוות בשעות היום שלך תמצא באמצעות רשת מתסכל בעיות יכול להיות מנוסה עם קשרים תזמון את הבעיה רק יחמיר כפי שאתה בסדר גודל הרשת שלך.
- להבטיח מקומות עבודה יכול לרוץ על העובדים שלך. אם עבודות להיות גם זיכרון עבודות שטח אינטנסיבית או דיסק אינטנסיבית יתחיל להפיל והדבר היחיד תבחין היא ירידה במספר מקומות עבודה מעובדים עם בלי שום סיבה אמיתית מדוע.
תוצאות הגשת עבודה
בעת הגשת את התוצאות של העבודה חשוב לבדוק כי התוצאות לא הוגשו על ידי עובד אחר, במיוחד אם העובד הנוכחי היה רדום במשך זמן מה.
כאשר תוצאות מוגשים להבטיח כי מספר התוצאות תואם את מספר הרשומות בתוך העבודה.
כאמור, לא יכול להיות מעל הדגיש, לבנות עמידות בפני תקלות לתוך אחזור העבודה והגשת תוצאות. העובדים יכולים (וכנראה יהיה) להיכנס למצב השהיה בבית נוח ביותר של פעמים וזה צריך להיות מובאים בחשבון. כמו כן שוב לפשט משם הגשת התוצאות שלך יעזור לספק את השינויים הבאים אל המערכת שלך מלאה עבודה הרבה יותר קל להתמודד איתו.
תקציר
ב section זו אנו בחנו מה שרת השליטה עבודה צריך לעשות ואיך לקבל מערכת בסיסית מאוד להגדיר. דיברנו על איך לשחזר את העבודה ממערכת מלאה מהי הדרך הטובה ביותר להגדיר מקומות עבודה כדי לקבל ביותר של המערכת במשרד הרשת. לסיום, פסקה או שתיים על הגשת תוצאות בחזרה לשרת השליטה העבודה הוצגה.
- שרת השליטה עבודה מנהלת מקומות עבודה מבטיח כי כל יחידות העבודה הושלמו
- על ידי לפשט את העבודה שלך לבחור / תוצאות הגשת אנחנו יכולים לשנות את הטכנולוגיה של שרת שליטה ללא בעיות הרבה
- להגדיר עבודות שלך כדי לוודא שהם מתנהלים במהירות וביעילות, ללא הפעלת לחץ רב מדי על תשתית הרשת שלך, בלי לשכפל משימות עיבוד על בסיס קבוע.
- ודא כי אתה בונה עמידות בפני תקלות ו checking שגיאה לשגרת החיים, עובדים יכולים להשעות ולחדש את נוח ביותר של פעמים. זכרו לבדוק אם התוצאות כבר הוגשו על ידי עובד אחר.
בפעם הבאה
ב חלק 3 ניצור מכונה לעיבוד הוירטואלית שלנו להגדיר מכונות החלונות שלנו להיות פעיל במשרה עובדים.