Redis Sharding

Redis Sharding



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

מדרגיות

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

נניח שיש לך 100 GB של זיכרון RAM וצריך להחזיק 200 GB של נתונים. במקרה זה, יש לך שתי אפשרויות:







  • הגדל על ידי הוספת זיכרון RAM נוסף למערכת
  • התרחק על ידי הוספת מופע שרת נוסף עם 100 GB של זיכרון RAM

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





Redis Sharding

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





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



כיצד מתבצע פיצול - ריסוק אלגוריתמי

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

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

HASH_SLOT = CRC16(מפתח) מוד 16384

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

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

היתרונות של Redis Sharding

ריסוק Redis מאפשר מספר יתרונות למערכת מסד הנתונים שלך עם שינויים מינימליים.

תפוקה גבוהה

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

זמינות גבוהה

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

קרא העתקים

Sharding מאפשר לך לשמור עותק מדויק של הנתונים שלך ולספק פעולות קריאה באמצעות מופעי Redis נפרדים, מה שמגדיל את הביצועים של ביצוע שאילתת הקריאה שלך.

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

סיכום

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