עומסי עבודה מקבילים מאוד, שנקראים גם עומסי עבודה מקבילים באופן מביך, נפוצים בקרב חברות בתחומי הפיננסים, המדיה ומדעי החיים. בדרך כלל, ארגונים פורסים אשכול של צמתי מחשוב כדי לטפל בעומסי עבודה מקבילים כמו אלה. כל צומת יכול לבצע משימות עיבוד עצמאיות, בהגדרה שנקראת מחשוב סריגי (Grid Computing). כדי לעבד נתונים עבור עומסי עבודה מקבילים, אפשר להשתמש ב-Apache Beam עם Dataflow. מידע נוסף על Apache Beam זמין במדריך התכנות של Apache Beam.
יש הרבה יתרונות לשימוש ב-Dataflow לעומסי עבודה מקבילים מאוד.
- יצירת תהליך עבודה מנוהל באופן מלא, עם עיבוד נתונים ותזמור באותו צינור.
- ממשק המשתמש ו-API של Dataflow כוללים תכונות של יכולת צפייה.
- ל-Dataflow יש רישום מרכזי ביומן לכל השלבים בצינור.
- Dataflow מציע התאמה אוטומטית לעומס כדי למקסם את הביצועים ולבצע אופטימיזציה של השימוש במשאבים.
- Dataflow הוא סובלני לתקלות ומספק איזון עומסים דינמי.
- Dataflow מציע זיהוי ותיקון של נתונים חריגים.
- מומלץ להשתמש במערכת אחת לכל ההיבטים של צינור העיבוד, גם לעיבוד מראש וגם לעיבוד אחרי, וגם לעיבוד המשימות. אפשר אפילו להשתמש בקוד C++ הקיים בצינור.
- משתמשים בעיבוד בדיוק פעם אחת המובנה ב-Dataflow.
בנוסף, Dataflow כולל תכונות אבטחה שונות:
- שימוש במפתח הצפנה בניהול הלקוח (CMEK) בצינור.
- הגדירו כללים לחומת האש עבור הרשת שמשויכת למשימת ה-Dataflow.
- משתמשים ברשת VPC.
עומסי העבודה האלה דורשים חלוקה של נתונים לפונקציות שפועלות על פני ליבות רבות. הפצה כזו דורשת לעיתים קרובות קריאות מקבילות רבות מאוד, ואחריהן fan-out רחב של נתונים שנקלט במערכות במורד הזרם. היכולות העיקריות של Dataflow הן חלוקת עומסי עבודה באצווה ובסטרימינג בין המשאבים, וניהול של התאמה אוטומטית לעומס (autoscaling) ואיזון מחדש דינמי של העבודה בין המשאבים האלה. לכן, כשמשתמשים ב-Dataflow לעומסי עבודה מקבילים מאוד, המערכת מטפלת באופן אוטומטי בצרכים של ביצועים, יכולת הרחבה, זמינות ואבטחה.
שילוב קוד חיצוני בצינור העברת הנתונים
ל-Apache Beam יש SDKs מובנים ל-Java, Python ו-Go. עם זאת, הרבה עומסי עבודה מקבילים מאוד משתמשים בקוד שנכתב ב-C++. אתם יכולים להשתמש ב-Dataflow וב Google Cloud שירותים אחרים כדי להפעיל קבצים בינאריים (ספריות) של C++ כקוד חיצוני באמצעות Apache Beam. הכללת קבצים בינאריים של C++ מאפשרת לכם להשתמש בשירותים מנוהלים באופן מלא כדי להפעיל את סוגי עומסי העבודה האלה. הוא גם מאפשר ליצור צינורות עיבוד נתונים מלאים באמצעות גרף אציקלי מכוון (DAG) מתוחכם.
אותה גישה להרצת קבצים בינאריים של C++ רלוונטית גם לקוד שנכתב בשפות אחרות שבהן אפשר לקמפל קובץ בינארי עצמאי.
צינורות עיבוד נתונים מקצה לקצה עם מקביליות גבוהה
באמצעות Dataflow, אפשר לבצע את העיבוד של קריאה וכתיבה של קלט/פלט, ניתוח ופלט של משימות, והכול באותו צינור עיבוד נתונים. כך תוכלו להפעיל צינורות מלאים של נתונים במקביל.
לדוגמה, עומס עבודה (workload) של HPC עם מקביליות גבוהה עשוי לכלול את השלבים הבאים:
הטמעה של נתונים גולמיים, ממקורות פנימיים וחיצוניים. הנתונים יכולים להגיע ממקורות לא מוגבלים או מוגבלים. בדרך כלל מקורות לא מוגבלים מומרים למקורות מוגבלים כדי להתאים לטכנולוגיות שמשמשות לביצוע משימות.
לבצע עיבוד מוקדם של הנתונים הגולמיים לפורמט וקידוד נתונים שרכיב task farming יכול להשתמש בהם.
משתמשים במערכת כדי להפיץ את החישובים למארחים ולאחזר נתונים ממקור, ואז להציג את התוצאות לניתוח לאחר מכן.
מבצעים ניתוח לאחר ההמרה כדי להפוך את התוצאות לפלט.
אתם יכולים להשתמש ב-Dataflow כדי לנהל את כל השלבים האלה בצינור אחד, וליהנות מהתכונות של Dataflow:
מכיוון שמערכת אחת אחראית לכל השלבים, לא צריך מערכת תזמור חיצונית כדי לתאם את ההפעלה של כמה צינורות.
עם נתונים מקומיים, לא צריך להפוך את הנתונים למוחשיים וללא מוחשיים באופן מפורש בין גבולות השלב, וכך משפרים את היעילות.
בעזרת טלמטריה משופרת בתוך המערכת, אפשר לקבל מידע על סך הבייטים בשלב מסוים, וכך לתכנן את השלבים הבאים.
באמצעות התאמה לעומס, כשהנתונים נמצאים במערכת, המשאבים מותאמים בהתאם לנפחי הנתונים בזמן שהנתונים עוברים בשלבים של צינור הנתונים.
צינור עיבוד הנתונים המקביל מאוד של Dataflow HPC משתמש במנועי הפעלה מודרניים של DAG. אפשר להשלים את כל התהליכים האופייניים של צינור עיבוד נתונים ב-DAG אחד, ולכן בצינור עיבוד נתונים אחד של Dataflow. אפשר להשתמש ב-DAG שנוצר על ידי Apache Beam כדי להגדיר את הצורה של צינור העיבוד.
אם אתם עוברים ממערכת של חוות משימות לזרימת עבודה מקבילית מאוד, אתם צריכים לעבור ממשימות לנתונים. PTransform מכיל DoFn, שיש לו פונקציית עיבוד שמקבלת רכיב נתונים. נקודת הנתונים יכולה להיות כל אובייקט עם מאפיין אחד או יותר.
באמצעות DAG וצינור יחיד, אפשר לטעון את כל הנתונים במערכת במהלך תהליך העבודה כולו. אין צורך להוציא נתונים למסדי נתונים או לאחסון.
Google Cloud רכיבים שמשמשים לתהליכי עבודה שיש ביניהם הקבלה גבוהה
אפליקציות של מחשוב רשתי דורשות שהנתונים יחולקו לפונקציות שפועלות על ליבות רבות. הדפוס הזה דורש בדרך כלל קריאות מקבילות רבות, ולרוב הוא מלווה ב-fan-out רחב של נתונים שנקלטים במערכות במורד הזרם.
Dataflow משולב עם Google Cloud שירותים מנוהלים אחרים שיכולים לקלוט קלט/פלט של נתונים בהיקף עצום ובמקביל:
- Pub/Sub: שירות גלובלי להזנת נתונים של זרם אירועים
- Bigtable: חנות מסוג wide-column לאחסון במטמון ולשליפת נתונים
- Cloud Storage: מאגר אובייקטים מאוחד
- BigQuery: שירות מחסן נתונים (data warehouse) בקנה מידה של פטה-בייט
השילוב של השירותים האלה מספק פתרון יעיל לעומסי עבודה מקבילים מאוד.
ארכיטקטורה נפוצה לעומסי עבודה שיש ביניהם הקבלה גבוהה שפועלים ב-Google Cloud כוללת את הרכיבים הבאים:
Dataflow Runner for Apache Beam. הרץ הזה מחלק את העבודה לצמתי הרשת בתהליך עיבוד שנגזר מ-DAG. באמצעות DAG יחיד של Apache Beam אפשר להגדיר צינורות מורכבים עם כמה שלבים, שבהם אפשר לאחד מחדש שלבים מקבילים של צינורות באמצעות קלט צדדי או צירופים.
Cloud Storage. השירות הזה מספק מיקום להעלאת קבצים בינאריים של C++. כשצריך לאחסן קבצים גדולים, כמו במקרים רבים של שימוש במדיה, הקבצים האלה נמצאים גם ב-Cloud Storage.
Bigtable, BigQuery ו-Pub/Sub. השירותים האלה משמשים גם כמקורות וגם כיעדים.
התרשים הבא מציג ארכיטקטורה כללית של תהליך עבודה לדוגמה.
אפשר גם להשתמש במערכות אחסון אחרות. פרטים נוספים מופיעים ברשימת מערכות האחסון ומקורות הסטרימינג בדף בנושא קלט/פלט של צינורות במאמרי העזרה של Apache Beam.
הרץ של Dataflow ל-Apache Beam
אתם יכולים להשתמש ב-Dataflow כדי לשנות את הנתונים ולהוסיף להם מידע גם במצב סטרימינג וגם במצב אצווה. Dataflow מבוסס על Apache Beam.
Cloud Storage
Cloud Storage הוא אחסון אובייקטים מאוחד שכולל שירות נתונים בזמן אמת, ניתוח נתונים, למידת מכונה (ML) וארכיון נתונים. לעומסי עבודה מקבילים מאוד עם Dataflow, Cloud Storage מספק גישה לקבצים בינאריים של C++. במקרים מסוימים, Cloud Storage מספק גם את המיקום של הנתונים שנדרשים לשלב העיבוד.
כדי להתמודד עם עומסים גבוהים ופתאומיים שנדרשים במחשוב סריגי (Grid Computing), צריך להבין את מאפייני הביצועים של Cloud Storage. מידע נוסף על ביצועים של הצגת נתונים ב-Cloud Storage זמין במאמר הנחיות לגבי קצב בקשות וחלוקת גישה במסמכי Cloud Storage.
Bigtable
Bigtable הוא שירות של מסד נתונים NoSQL עם ביצועים גבוהים שעבר אופטימיזציה לעומסי עבודה אנליטיים ותפעוליים גדולים.
Bigtable משלים את Dataflow. המאפיינים העיקריים של Bigtable, קריאות וכתיבות עם זמן אחזור נמוך (6 אלפיות השנייה באחוזון ה-90), מאפשרים לו לטפל באלפי לקוחות בו-זמנית ובעומסי עבודה כבדים. התכונות האלה הופכות את Bigtable למאגר נתונים אידיאלי ולמקור נתונים במסגרת הפונקציה DoFn בשלב העיבוד של Dataflow.
BigQuery
BigQuery הוא מחסן נתונים (data warehouse) ארגוני מהיר, חסכוני ומנוהל באופן מלא לניתוח נתונים בקנה מידה גדול. תוצאות בפורמט רשת משמשות לרוב לניתוח, ומאפשרות לכם להריץ צבירות בקנה מידה גדול על פלט הנתונים של הרשת.
Pub/Sub
Pub/Sub הוא שירות אסינכרוני וניתן להרחבה להעברת הודעות, שמפריד בין שירותים שמפיקים הודעות לבין שירותים שמבצעים עיבוד של ההודעות האלה. אפשר להשתמש ב-Pub/Sub לניתוח נתונים בסטרימינג ולצינורות עיבוד נתונים לשילוב נתונים כדי להטמיע ולהפיץ נתונים. הוא יעיל באותה מידה כתוכנת ביניים (middleware) שמתמקדת בהעברת הודעות לשילוב שירותים, או כרשימת המתנה (queue) להרצת משימות במקביל.
ה-DAG של Dataflow
אתם יכולים להשתמש ב-Apache Beam SDK כדי ליצור גרפים מכוונים אציליים (DAG), שמאפשרים לכם ליצור צינורות (pipelines) מרובי-שלבים של נתונים בזמן אמת או של נתונים באצווה. העברת הנתונים מתבצעת על ידי הרצת התהליך, והנתונים מיוצגים כאובייקטים מסוג PCollection, שהם אוספים מקבילים של רכיבים שלא ניתן לשנות.
התרשים הבא מדגים את התהליך הזה.
Apache Beam SDK מאפשר להגדיר DAG. ב-DAG, אפשר לכלול קוד שהוגדר על ידי המשתמש כפונקציות. בדרך כלל, משתמשים באותה שפת תכנות (Java, Python או Go) גם להצהרה על ה-DAG וגם לקוד שהוגדר על ידי המשתמש. אפשר גם להשתמש בקוד שלא מובנה, כמו C++, עבור הקוד שהוגדר על ידי המשתמש.
המאמרים הבאים
- שיטות מומלצות לעבודה עם צינורות עיבוד נתונים של Dataflow HPC שיש ביניהם הקבלה גבוהה
- פועלים לפי ההדרכה כדי ליצור צינור עיבוד נתונים שמשתמש בקונטיינרים מותאמים אישית עם ספריות C++.