הפעל עיבוד נתונים גדולים עם Apache Ignite

Apache Ignite היא פלטפורמת מחשוב בזיכרון שניתן להכניס בצורה חלקה בין שכבת היישום של המשתמש לשכבת הנתונים. Apache Ignite טוען נתונים משכבת ​​האחסון הקיימת מבוססת דיסק בזיכרון ה- RAM ומשפר את הביצועים בשישה סדרי גודל (פי מיליון).

ניתן לשנות את יכולת הנתונים בזיכרון בכדי להתמודד עם פטא-בתים של נתונים פשוט על ידי הוספת צמתים נוספים לאשכול. יתר על כן, הן עסקאות ACID והן שאילתות SQL נתמכות. Ignite מספק ביצועים, קנה מידה ויכולות מקיפות הרבה מעבר למה שמסדי נתונים מסורתיים בזיכרון, רשתות נתונים בזיכרון ופתרונות נקודתיים אחרים מבוססי זיכרון יכולים להציע מעצמם.

Apache Ignite אינו מחייב משתמשים לקרוע ולהחליף את מסדי הנתונים הקיימים שלהם. זה עובד עם חנויות נתונים RDBMS, NoSQL ו- Hadoop. Apache Ignite מאפשר עסקאות בעלות ביצועים גבוהים, סטרימינג בזמן אמת וניתוח מהיר בשכבת גישה ועיבוד נתונים כוללת ומקיפה. הוא משתמש בארכיטקטורה מבוזרת ומקבילה באופן מסיבי על חומרת סחורה במחיר סביר להפעלת יישומים קיימים או חדשים. Apache Ignite יכול לפעול במקום, בפלטפורמות ענן כגון AWS ו- Microsoft Azure, או בסביבה היברידית.

ה- API המאוחד של Apache Ignite תומך ב- SQL, C ++, .Net, Java, Scala, Groovy, PHP ו- Node.js. ה- API המאוחד מחבר יישומים בקנה מידה ענן עם מספר מאגרי נתונים המכילים נתונים מובנים, מובנים למחצה ובלתי מובנים. היא מציעה סביבת נתונים עם ביצועים גבוהים המאפשרת לחברות לעבד עסקאות ACID מלאות וליצור תובנות בעלות ערך ממשאלות בזמן אמת, אינטראקטיביות ואצווה.

משתמשים יכולים לשמור על ה- RDBMS הקיים שלהם ולפרוס את Apache Ignite כשכבה בינו לבין שכבת היישום. Apache Ignite משתלב באופן אוטומטי עם Oracle, MySQL, Postgres, DB2, Microsoft SQL Server, ו- RDBMS אחרים. המערכת מייצרת באופן אוטומטי את מודל תחום היישום על סמך הגדרת הסכימה של מסד הנתונים הבסיסי, ואז טוענת את הנתונים. מסדי נתונים בזיכרון מספקים בדרך כלל ממשק SQL בלבד, בעוד ש- Ignite תומך בקבוצה רחבה יותר של פרדיגמות גישה ועיבוד בנוסף ל- ANSI SQL. Apache Ignite תומך במאגרי מפתח / ערך, גישה SQL, MapReduce, עיבוד HPC / MPP, עיבוד סטרימינג / CEP, אשכולות והאצת Hadoop בפלטפורמת מחשוב משולבת בזיכרון.

GridGain Systems תרמה את הקוד המקורי של Apache Ignite לקרן Apache Software במחצית השנייה של 2014. Apache Ignite קודמה במהירות מפרויקט דגירה לפרויקט Apache ברמה העליונה בשנת 2015. ברבעון השני של 2016, Apache Ignite היה הורד כמעט 200,000 פעמים. הוא משמש ארגונים ברחבי העולם.

ארכיטקטורה

Apache Ignite היא תוכנת תיווך מבוזרת מבוססת JVM המבוססת על יישום טופולוגיית אשכול הומוגנית שאינה דורשת צמתים נפרדים של שרת ולקוח. כל הצמתים באשכול Ignite שווים, והם יכולים למלא כל תפקיד הגיוני לפי דרישה ליישום זמן ריצה.

עיצוב ממשק ספקי שירות (SPI) הוא בבסיסו של Apache Ignite. העיצוב מבוסס ה- SPI הופך את כל המרכיבים הפנימיים של Ignite להתאמה אישית וניתנת להתאמה מלאה. זה מאפשר תצורה עצומה של המערכת, עם יכולת התאמה לכל תשתית שרתים קיימת או עתידית.

Apache Ignite מספק תמיכה ישירה בהקבלה של חישובים מבוזרים המבוססים על עיבוד בסגנון מזלג, MapReduce או MPP. Ignite משתמש בחישובים מקבילים מבוזרים בהרחבה, והם נחשפים באופן מלא ברמת ה- API לפונקציונליות המוגדרת על ידי המשתמש.

תכונות עיקריות

רשת נתונים בזיכרון. Apache Ignite כולל רשת נתונים בזיכרון המטפלת בניהול נתונים בזיכרון מבוזרים, כולל עסקאות ACID, כישלון מעבר, איזון עומסים מתקדם ותמיכה מקיפה ב- SQL. רשת הנתונים להצית היא מאגר ערכי מפתח בזיכרון מבוזר, מבוסס-אובייקט, ACID וזיכרון. בניגוד למערכות ניהול מסדי נתונים מסורתיות, המשתמשות בדיסק כמנגנון האחסון העיקרי שלהן, Ignite מאחסן נתונים בזיכרון. על ידי שימוש בזיכרון ולא בדיסק, Apache Ignite מהיר פי מיליון ממסדי נתונים מסורתיים.

תמיכה ב- SQL. Apache Ignite תומך בשאילתות תואמות ANSI SQL-99 בצורה חופשית כמעט ללא מגבלות. Ignite יכול להשתמש בכל פונקציית SQL, צבירה או קיבוץ, והיא תומכת בצירופי SQL מבוזרים ולא מרוכזים ובהצטרפות בין מטמון. Ignite תומך גם ברעיון של שאילתות שדה כדי לסייע במזעור תקורה של רשת וסידור.

רשת חישוב בזיכרון. Apache Ignite כולל רשת חישוב המאפשרת עיבוד מקבילי בזיכרון של משימות עתירות מעבד או משימות עתירות משאבים אחרות כגון עיבוד HPC, MPP, fork-join ועיבוד MapReduce מסורתי. תמיכה ניתנת גם לעיבוד אסינכרוני רגיל של Java ExecutorService.

רשת שירות בזיכרון. רשת השירות של Apache Ignite מספקת שליטה מלאה בשירותים הפרוסים באשכול. משתמשים יכולים לשלוט בכמה מופעי שירות יש לפרוס בכל צומת אשכול, ולהבטיח פריסה נכונה וסובלנות תקלות. רשת השירות מבטיחה זמינות רציפה של כל השירותים הפרוסים במקרה של כשלים בצומת. הוא תומך גם בפריסה אוטומטית של מספר מופעים של שירות, של שירות כ- singleton ושל שירותים בהפעלה של הצומת.

הזרמה בזיכרון. עיבוד זרם בזיכרון פונה למשפחה גדולה של יישומים שדרכם שיטות עיבוד מסורתיות ואחסון מבוסס דיסק, כגון בסיסי נתונים מבוססי דיסק או מערכות קבצים, אינן מספקות. יישומים אלה מרחיבים את גבולות תשתיות עיבוד הנתונים המסורתיות.

תמיכה בסטרימינג מאפשרת למשתמשים לבצע שאילתות על חלונות של נתונים נכנסים. זה מאפשר למשתמשים לענות על שאלות כגון "מהם 10 המוצרים הפופולריים ביותר בשעה האחרונה?" או "מה המחיר הממוצע בקטגוריה מסוימת של מוצרים במשך 12 השעות האחרונות?"

מקרה נפוץ נוסף לעיבוד זרם הוא צינור של זרימת עבודה של אירועים מבוזרים. מכיוון שאירועים נכנסים למערכת בקצב גבוה, עיבוד האירועים מחולק לשלבים מרובים, שכל אחד מהם צריך להיות מנותב כראוי בתוך אשכול לעיבוד. תהליכי עבודה אירועים הניתנים להתאמה אישית תומכים ביישומי עיבוד מורכבים (CEP).

האצת Hadoop בזיכרון. ה- Apache Ignite Accelerator עבור Hadoop מאפשר עיבוד נתונים מהיר בסביבות Hadoop קיימות באמצעות הכלים והטכנולוגיה שארגון כבר משתמש בהם.

האצת Hadoop בזיכרון מבוססת על מערכת הקבצים הזיכרון בעלת הביצועים הגבוהים במצב כפול, התואמת 100 אחוז ל- Hadoop HDFS ויישום MapReduce המותאם בזיכרון. ביצועי ביצועים מהירים פי 100 יותר, HDFS בזיכרון ו- MapReduce בזיכרון מספקים הרחבות קלות לשימוש ל- HDFS מבוסס דיסק ול- MapReduce המסורתי. תכונת Plug-and-Play הזו דורשת אינטגרציה מינימלית עד לא. זה עובד עם כל קוד פתוח או גרסה מסחרית של Hadoop 1.x או Hadoop 2.x, כולל Cloudera, Hortonworks, MapR, Apache, Intel ו- AWS. התוצאה היא ביצועים מהירים פי 100 יותר עבור עבודות MapReduce ו- Hive.

מערכת קבצים בזיכרון מופצת. מאפיין ייחודי של Apache Ignite הוא מערכת הקבצים Ignite (IGFS), המהווה ממשק מערכת קבצים לנתונים בזיכרון. IGFS מספקת פונקציונליות דומה ל- Hadoop HDFS. זה כולל את היכולת ליצור מערכת קבצים פונקציונלית לחלוטין בזיכרון. IGFS היא הליבה של מאיץ ה- Apache Ignite In-Memory עבור Hadoop.

הנתונים מכל קובץ מפוצלים על גושי נתונים נפרדים ומאוחסנים במטמון. ניתן לגשת לנתונים בכל קובץ באמצעות ממשק API לסטרימינג של Java. עבור כל חלק בקובץ, מפתח יכול לחשב זיקה ולעבד את תוכן הקובץ בצמתים המתאימים, כדי למנוע רשת מיותרת.

ממשק API מאוחד. ה- API המאוחד של Apache Ignite תומך במגוון רחב של פרוטוקולים נפוצים עבור שכבת היישום לגישה לנתונים. הפרוטוקולים הנתמכים כוללים SQL, Java, C ++, .Net, PHP, MapReduce, Scala, Groovy ו- Node.js. Ignite תומך במספר פרוטוקולים לקישוריות לקוח לאשכולות Ignite, כולל Ignite Native Clients, REST / HTTP, SSL / TLS ו- Memcached.SQL.

אשכולות מתקדמים. Apache Ignite מספקת את אחת מטכנולוגיות האשכול המשוכללות ביותר ב- JVM. צמתים להצית יכולים לגלות זה את זה באופן אוטומטי, מה שעוזר לשנות את גודל האשכול בעת הצורך מבלי להפעיל מחדש את כל האשכול. מפתחים יכולים לנצל גם את תמיכת הענן ההיברידית של Ignite, המאפשרת למשתמשים ליצור קשרים בין עננים פרטיים לעננים ציבוריים כגון AWS או Microsoft Azure.

תכונות נוספות. Apache Ignite מספק פונקציונליות העברת הודעות ביצועים גבוהה בכל רחבי האשכול. זה מאפשר למשתמשים להחליף נתונים באמצעות מודלים לתקשורת פרסום-מנוי וישיר נקודה לנקודה.

הפונקציונליות של אירועים מבוזרים ב- Ignite מאפשרת ליישומים לקבל התראות על אירועי מטמון המתרחשים בסביבת רשת מבוזרת. מפתחים יכולים להשתמש בפונקציונליות זו כדי לקבל התראות על ביצוע משימות מרוחקות או כל שינוי בנתוני המטמון באשכול. ניתן לקבץ התראות אירועים ולשלוח אותם באצוות ובהפרשי זמן מתוזמנים. התראות אצווה עוזרות להשיג ביצועי מטמון גבוהים וחביון נמוך.

Ignite מאפשר להשתמש ברוב מבני הנתונים ממסגרת java.util.concurrent בצורה מבוזרת. לדוגמה, תוכל להוסיף לתור כפול (java.util.concurrent.BlockingDeque) בצומת אחד ולסקור אותו מצומת אחר. לחלופין, ייתכן שיהיה לך מחולל מפתחות ראשי מבוזר, אשר יבטיח ייחודיות בכל הצמתים.

הצתה של מבני נתונים מבוזרים כוללת תמיכה בממשקי ה- API הסטנדרטיים של Java: מפה בו זמנית, תורים וסטים מבוזרים, AtomicLong, AtomicSequence, AtomicReference ו- CountDownLatch.

שילובים מרכזיים

אפאצ'י ניצוץ. Apache Spark הוא מנוע מהיר לשימוש כללי לעיבוד נתונים בקנה מידה גדול. Ignite ו- Spark הם פתרונות משלימים למחשוב בזיכרון. ניתן להשתמש בהם יחד במקרים רבים כדי להשיג ביצועים ופונקציונליות מעולים.

Apache Spark ו- Apache Ignite מתייחסים למקרי שימוש שונים במקצת ולעתים נדירות מתחרים על אותה משימה. הטבלה שלהלן מפרטת כמה מההבדלים העיקריים.

 
  ניצוץ אפאצ'י אפאצ'י נדלק
שמירת נתונים טוען נתונים לעיבוד מאחסון חיצוני, בדרך כלל מבוסס דיסק, וזורק את הנתונים לאחר סיום העיבוד. אין אחסון נתונים. מספק מאגר ערך מפתח מקוון בזיכרון (מטמון מבוזר או רשת נתונים) עם עסקאות ACID ויכולות שאילתת SQL. שומר נתונים בזיכרון ויכול לכתוב למסד נתונים בסיסי.
OLAP / OLTP עבור נתונים שאינם קשורים לקריאה בלבד, כך שהם משמשים ל- OLAP. מערכי נתונים מבוזרים גמישים ניצוצות (RDD) אינם תומכים במוטציה במקום. תומך בעומסי מטען לא עסקיים (OLAP), כמו גם בעסקאות תואמות חומצה מלאה (OLTP).
סוגי מידע מבוסס על RDD. עובד רק על מטענים המונעים על ידי נתונים. תומך באופן מלא במטעני חישוב טהורים (HPC / MPP) שיכולים להיות "חסרי נתונים".

Apache Spark אינו מספק אחסון משותף, ולכן יש לטעון נתונים מ- HDFS או מאחסון דיסק אחר לניצוץ לעיבוד. ניתן להעביר מדינה מעבודת Spark לעבודה רק על ידי שמירת הנתונים המעובדים בחזרה לאחסון חיצוני. Ignite יכול לשתף את מצב הניצוץ ישירות בזיכרון, מבלי לאחסן את המצב לדיסק.

אחד האינטגרציות העיקריות של Ignite ו- Spark הוא ה- Apache Ignite Shared RDD API. Ignite RDDs הם למעשה עטיפות סביב מטמני Ignite שניתן לפרוס ישירות בתוך ביצוע עבודות Spark. ניתן להשתמש ב- RDD של Ignite גם עם תבנית הצבת המטמון, שם אשכולות Ignite פרוסים בנפרד מ- Spark, אך עדיין בזיכרון. הנתונים עדיין ניגשים באמצעות ממשקי API של Spark RDD.

Spark תומך בתחביר SQL עשיר למדי, אך הוא אינו תומך באינדקס נתונים, ולכן עליו לבצע סריקות מלאות כל הזמן. שאילתות ניצוץ עשויות להימשך דקות אפילו בערכות נתונים קטנות למדי. Ignite תומך באינדקסים של SQL, וכתוצאה מכך שאילתות מהירות הרבה יותר, ולכן שימוש ב- Spark עם Ignite יכול להאיץ את Spark SQL פי פי 1,000. קבוצת התוצאות שהוחזרה על ידי RDD של Ignite Shared תואמת גם ל- API של Spark Dataframe, כך שניתן לנתח אותה עוד יותר באמצעות מסגרות נתונים סטנדרטיות של Spark. שניהם Spark ו- Ignite משתלבים באופן מקורי עם Apache YARN ו- Apache Mesos, כך שקל יותר להשתמש בהם יחד.

כשעובדים עם קבצים במקום RDD, עדיין ניתן לשתף מצב בין עבודות Spark ליישומים באמצעות Ignite In-Memory File System (IGFS). IGFS מיישמת את ה- API של Hadoop FileSystem וניתן לפרוס אותה כמערכת קבצים טבעית של Hadoop, בדיוק כמו HDFS. הצתה תקעים באופן מקורי לכל סביבת Hadoop או Spark. ניתן להשתמש ב- IGFS ללא שינויים בקוד באופן plug-and-play.

אפאצ'י קסנדרה. אפאצ'י קסנדרה יכולה לשמש כפתרון ביצועים גבוהים לשאילתות מובנות. אך יש לדגם את הנתונים בקסנדרה כך שכל שאילתה מוגדרת מראש תביא לאחזור שורה אחת. לפיכך, עליכם לדעת אילו שאילתות יידרשו לפני שתבנו את הנתונים.