עומסי עבודה מקבילים מאוד, שנקראים גם עומסי עבודה מקבילים באופן מביך, נפוצים בקרב חברות בתחומי הפיננסים, המדיה ומדעי החיים. עבור עומסי עבודה מקבילים כמו אלה, חברות בדרך כלל פורסות אשכול של צמתי חישוב. כל צומת יכול לבצע משימות עיבוד עצמאיות, בהגדרה שנקראת מחשוב סריגי (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 Platform כדי להריץ קבצים בינאריים (ספריות) של C++ כקוד חיצוני באמצעות Apache Beam. הכללת קובצי בינאריים של C++ מאפשרת לכם להשתמש בשירותים מנוהלים באופן מלא כדי להפעיל את סוגי עומסי העבודה האלה. בנוסף, תוכלו ליצור צינורות מלאים באמצעות גרף אציקלי מכוון (DAG) מתוחכם.
אותה גישה להרצת קבצים בינאריים של C++ רלוונטית גם לקוד שנכתב בשפות אחרות שבהן אפשר לקמפל קובץ בינארי עצמאי.
צינורות עיבוד נתונים מקצה לקצה עם מקביליות גבוהה
באמצעות Dataflow, אפשר לבצע את העיבוד של קריאה וכתיבה של קלט/פלט, ניתוח ופלט של משימות, והכול באותו צינור. כך תוכלו להפעיל צינורות מלאים של נתונים במקביל.
לדוגמה, עומס עבודה של HPC עם מקביליות גבוהה עשוי לכלול את השלבים הבאים:
הזנת נתונים גולמיים, ממקורות פנימיים וחיצוניים. הנתונים יכולים להגיע ממקורות לא מוגבלים או ממקורות מוגבלים. מקורות לא מוגבלים מומרים בדרך כלל למקורות מוגבלים כדי להתאים לטכנולוגיות שמשמשות לביצוע משימות.
לבצע עיבוד מוקדם של הנתונים הגולמיים לצורה וקידוד של נתונים שרכיב ה-task farming יכול להשתמש בהם.
משתמשים במערכת כדי להפיץ את החישובים למארחים ולאחזר נתונים ממקור, ואז להציג את התוצאות לניתוח לאחר מכן.
מבצעים ניתוח לאחר ההרצה כדי להמיר את התוצאות לפלט.
אתם יכולים להשתמש ב-Dataflow כדי לנהל את כל השלבים האלה בצינור אחד, וליהנות מהיתרונות של התכונות של Dataflow:
מכיוון שמערכת אחת אחראית לכל השלבים, לא צריך מערכת תזמור חיצונית כדי לתאם את ההפעלה של כמה צינורות.
בעזרת נתונים מקומיים, לא צריך להמיר באופן מפורש בין גבולות השלבים, וכך משפרים את היעילות.
בעזרת טלמטריה משופרת בתוך המערכת, אפשר לקבל מידע על סך הבייטים בשלב מסוים, וכך לתכנן את השלבים הבאים.
באמצעות התאמה אוטומטית לעומס, כשהנתונים נמצאים במערכת, המשאבים מותאמים לעומס על סמך נפחי הנתונים בזמן שהנתונים עוברים בשלבי צינור הנתונים.
צינור עיבוד הנתונים המקביל מאוד של Dataflow HPC משתמש במנועי הפעלה מודרניים של DAG. אפשר להשלים את כל התהליכים האופייניים של צינורות העיבוד ב-DAG אחד, ולכן בצינור עיבוד אחד של Dataflow. אפשר להשתמש ב-DAG שנוצר על ידי Apache Beam כדי להגדיר את הצורה של צינור העיבוד.
אם אתם עוברים ממערכת של חוות משימות לזרימת עבודה מקבילית מאוד, אתם צריכים לעבור ממשימות לנתונים. PTransform מכיל DoFn, שיש לו פונקציית עיבוד שמקבלת רכיב נתונים. נקודת הנתונים יכולה להיות כל אובייקט עם מאפיין אחד או יותר.
באמצעות DAG וצינור יחיד, אפשר לטעון את כל הנתונים במערכת במהלך תהליך העבודה כולו. לא צריך להוציא נתונים למסדי נתונים או לאחסון.
רכיבים של Google Cloud Platform שמשמשים בתהליכי עבודה מקבילים מאוד
אפליקציות של מחשוב סריגי (Grid Computing) דורשות חלוקת נתונים לפונקציות שפועלות על ליבות רבות. הדפוס הזה דורש בדרך כלל קריאות בו-זמניות רבות, ולרוב הוא מלווה ב-fan-out רחב של נתונים שנקלטים במערכות במורד הזרם.
Dataflow משולב עם שירותים מנוהלים אחרים של Google Cloud Platform שיכולים לקלוט קלט/פלט של נתונים מקביליים בהיקף עצום:
- Pub/Sub: חנות עם עמודות רחבות לאחסון במטמון ולהצגה
- Bigtable: שירות להטמעת זרם אירועים גלובלי
- Cloud Storage: מאגר אובייקטים מאוחד
- BigQuery: שירות מחסן נתונים (data warehouse) בקנה מידה של פטה-בייט
השילוב של השירותים האלה מספק פתרון יעיל לעומסי עבודה מקבילים מאוד.
ארכיטקטורה נפוצה לעומסי עבודה (workloads) מקבילים מאוד שפועלים בפלטפורמת 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) וארכיון נתונים. לעומסי עבודה (workloads) מקבילים מאוד עם 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) מבוססת-העברת הודעות לשילוב שירותים או כתור להקצאת משימות במקביל.
ה-DAG של Dataflow
אתם יכולים להשתמש ב-Apache Beam SDK כדי ליצור גרפים מכוונים לא מחזוריים (DAG) עם יכולות רבות, וכך ליצור צינורות (pipelines) מרובי-שלבים של נתונים בזמן אמת או של נתונים מצטברים. העברת הנתונים מתבצעת על ידי הרצת התהליך, והנתונים מיוצגים כאובייקטים מסוג PCollection, שהם אוספים של רכיבים מקבילים שלא ניתן לשנות.
התרשים הבא מדגים את התהליך הזה.
ערכת ה-SDK של Apache Beam מאפשרת להגדיר DAG. ב-DAG, אפשר לכלול קוד שהוגדר על ידי המשתמש כפונקציות. בדרך כלל, אותה שפת תכנות (Java, Python או Go) משמשת גם להצהרה על ה-DAG וגם לקוד שהוגדר על ידי המשתמש. אפשר גם להשתמש בקוד שלא מובנה, כמו C++, עבור קוד שמוגדר על ידי המשתמש.
המאמרים הבאים
- שיטות מומלצות לעבודה עם צינורות עיבוד נתונים של Dataflow HPC שיש ביניהם הקבלה גבוהה
- פועלים לפי ההדרכה כדי ליצור צינור עיבוד נתונים שמשתמש בקונטיינרים מותאמים אישית עם ספריות C++.