מדוע רדיס מנצחת את Memcached למטמון

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

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

Redis לעומת Memcached למטמון

נתחיל בדמיון. הן Memcached והן Redis משמשים כחנויות נתונים בזיכרון, בעלות ערך מפתח, אם כי Redis מתוארת בצורה מדויקת יותר כחנות מבנה נתונים. גם Memcached וגם Redis שייכים למשפחת פתרונות ניהול הנתונים NoSQL, ושניהם מבוססים על מודל נתונים מפתח ערך. שניהם שומרים את כל הנתונים ב- RAM, מה שכמובן הופך אותם לשימושיים ביותר כשכבת מטמון. מבחינת הביצועים, שתי מאגרי הנתונים דומים להפליא גם הם, ומציגים מאפיינים (וערכים) כמעט זהים ביחס לתפוקה וחביון.

גם Memcached וגם Redis הם פרויקטים של קוד פתוח בוגר ופופולרי מאוד. Memcached פותח במקור על ידי בראד פיצפטריק בשנת 2003 עבור אתר LiveJournal. מאז Memcached שוכתב מחדש ב- C (היישום המקורי היה בפרל) והועבר לרשות הציבור, שם הוא הפך לאבן פינה ביישומי אינטרנט מודרניים. הפיתוח הנוכחי של Memcached מתמקד ביציבות ובאופטימיזציות ולא בהוספת תכונות חדשות.

רדיס נוצרה על ידי סלבטורה סנפיליפו בשנת 2009, וסנפיליפו נותרה המפתחת המובילה של הפרויקט כיום. רדיס מתוארת לעיתים כ- "Memcached on סטרואידים", מה שאינו מפתיע בהתחשב בכך שחלקים מ- Redis נבנו בתגובה לקחים שהופקו משימוש ב- Memcached. ל- Redis יש יותר תכונות מ- Memcached והיא, לפיכך, חזקה וגמישה יותר.

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

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

מתי להשתמש ב- Memcached

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

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

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

מתי להשתמש ב- Redis

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

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

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

רדיס מעניקה לך גמישות הרבה יותר גדולה לגבי האובייקטים שאתה יכול לשמור. בעוד ש- Memcached מגביל את שמות המפתח ל -250 בתים ועובד עם מחרוזות פשוטות בלבד, Redis מאפשרת לשמות וערכי המפתחות להיות גדולים ככל 512 מגה-בתים כל אחד, והם בטוחים בינאריים. בנוסף, ל- Redis יש חמישה מבני נתונים עיקריים לבחירה, הפותחים בפני עולם האפשרויות עולם של אפשרויות באמצעות מטמון אינטליגנטי ומניפולציה של נתונים במטמון.

Redis עבור התמדה בנתונים

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

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

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

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

העתק מחדש זיכרון נתונים בזיכרון 

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

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

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

Redis לניתוח נתונים

שלושה תרחישי ניתוח עולים מיד בראש. בתרחיש הראשון, כאשר משתמשים במשהו כמו Apache Spark לעיבוד איטרטיבי של ערכות נתונים גדולות, תוכלו להשתמש ב- Redis כשכבת הגשה לנתונים שחושבו בעבר על ידי Spark. בתרחיש השני, שימוש ב- Redis כחנות הנתונים המופצת בזיכרון, המופצת יכול להאיץ את מהירויות עיבוד ה- Spark בפקטור של 45 עד 100. לבסוף, תרחיש נפוץ מדי הוא אחד שבו יש להתאים את הדוחות והניתוחים על ידי המשתמש, אך אחזור נתונים ממאגרי נתוני אצווה מטבעם (כמו Hadoop או RDBMS) לוקח זמן רב מדי. במקרה זה, חנות מבנה נתונים בזיכרון כגון Redis היא הדרך המעשית היחידה להשיג זמני החלפה ותגובה של תת אלפית השנייה.

בעת שימוש בערכות נתונים תפעוליות גדולות במיוחד או בעומסי ניתוח, הפעלת כל מה בזיכרון עשויה שלא להיות חסכונית. כדי להשיג ביצועים של תת אלפית השנייה בעלות נמוכה יותר, Redis Labs יצרה גרסה של Redis הפועלת על שילוב של זיכרון RAM ופלאש, עם אפשרות להגדיר את יחסי ה- RAM ל- Flash. אמנם זה פותח כמה דרכים חדשות להאיץ את עיבוד עומסי העבודה, אך גם נותן למפתחים אפשרות להריץ את "המטמון בפלאש".

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

---

איתמר הבר (@itamarhaber) הוא עורך הדין הראשי למפתחים במעבדות Redis, המציעה את Memcached ואת Redis כשירותי ענן מנוהלים לחלוטין עבור מפתחים. ניסיונו המגוון כולל פיתוח מוצרי תוכנה ותפקידי ניהול ומנהיגות ב- Xeround, Etagon, Amicada ו- MNS Ltd. איתמר הוא בעל תואר שני במינהל עסקים מהתכנית המשותפת Kellogg-Recanati של אוניברסיטאות נורת'ווסטרן ותל אביב, וכן תואר ראשון. למדעים במדעי המחשב.

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