How strategic database migration + data (re)modeling improved latencies and cut database costs 5X ZEE היא עסק התקשורת והבידור הגדול ביותר בהודו, המכסה שידורי טלוויזיה, סרטים, מדיה סטרימינג ומוסיקה. ZEE5 היא שירות הסטרימינג OTT המוביל שלהם, זמין ביותר מ-190 מדינות עם 150 מיליון משתמשים פעילים בחודש. המהנדסים שמאחורי המערכת ידעו כי הצמיחה המתמשכת של העסק תדגיש את התשתית שלהם (כמו גם את האנשים אשר בודקים את חשבונות הנתונים).לכן, הקבוצה החליטה לחשוב מחדש על המערכת לפני שהיא גורמת להתקפי לב כלשהם. הם הציגו את הדרישות הטכניות להחלפה (נייטרליות ענן, הכנה למשתמשים מרובים, פשטות ההתקנה של מקרי שימוש חדשים, עוצמה גבוהה ועיכוב נמוך במחיר אופטימלי) וכיצד זה הוביל ל- ScyllaDB. הם שיתפו שיעורים שנלמדו שיכולים להועיל לכל מי שחושב או משתמש ב- ScyllaDB. 5X cost savings (from $744K to $144K annually) and single-digit millisecond P99 read latency https://youtu.be/nArmqus9fbo?embedable=true הנה כמה רמזים מהדיון הזה... מה זה Heartbeat? "Heartbeat" מתייחס לבקשת המופעלת במרווחים קבועים במהלך הפעלת וידאו בפלטפורמת ZEE5 OTT. בקשות פשוטות אלה עוקבות אחר מה שהמשתמשים צופים וכמה רחוק הם התקדמו בכל וידאו. למה לשנות? מערכת הלב המקורית של ZEE5 הייתה רשת של מסדי נתונים שונים, כל אחד מתמודד עם חלק מסוים של החוויה הזרמת. הצוות זיהה הזדמנות להקל על התשתית שלהם – והם רצו את זה.הם רצו מערכת שלא הייתה נעולה בכל ספק ענן מסוים, הייתה עולה פחות כדי לפעול, ויכולה לטפל בקנה מידה עצום שלהם עם ביצועים מהירים באופן עקבי – במיוחד, תשובות מילישניות יחיד.בנוסף, הם רצו את הגמישות להוסיף תכונות חדשות בקלות ואת היכולת להציע את המערכת שלהם לפלטפורמות סטרימינג אחרות. ארכיטקטורה של מערכות, לפני ואחרי הנה מבט על ארכיטקטורת המערכת המקורית שלהם עם מסדי נתונים מרובים: DynamoDB לאחסן את נתוני פעימות הלב הבסיסיות Amazon RDS לאחסון מידע על הפרקים הבאים והקודמים Apache Solr לאחסן מטא-נתונים קבועים One Redis instance to cache מטא-נתונים דוגמה נוספת של Redis כדי לאחסן פרטים על צפיות צוות ZEE5 בחן ארבע אפשרויות מסד נתונים עיקריות לפרוייקט זה: Redis, Cassandra, Apache Ignite, ו- ScyllaDB. לאחר הערכה ובדיקת בינה, הם בחרו ב- ScyllaDB. ScyllaDB מנהל את שכבת ה-Cache ואת מסד הנתונים הקבועים בתוך אותה תשתית, ומבטיח עיכובים נמוכים בין האזורים, רבייה ומכירות מרובות עננים.היא פועלת עם כל ספק ענן, כולל Azure, AWS ו-GCP, ועכשיו מציעה תמיכה מובנת עם זמן סיבוב של פחות משעה. ScyllaDB מנהל את שכבת ה-Cache ואת מסד הנתונים הקבועים בתוך אותה תשתית, ומבטיח עיכובים נמוכים בין האזורים, רבייה ומכירות מרובות עננים.היא פועלת עם כל ספק ענן, כולל Azure, AWS ו-GCP, ועכשיו מציעה תמיכה מובנת עם זמן סיבוב של פחות משעה. האדריכלות החדשה מפשטת ומפשטת את מבנה ארכיטקטורת המערכת הקודמת. כעת, כל האירועים של פעימות הלב מועברים לתוך נושא פעימות הלב שלהם, מעובדים באמצעות עיבוד זרם, ונלקחים לתוך ענן ScyllaDB באמצעות קישורי ScyllaDB. Srinivas מסכם: "עם ארכיטקטורה חדשה זו, העברנו בהצלחה עומסי עבודה מ- DynamoDB, RDS, Redis ו- Solr ל- ScyllaDB. ” 5x cost reduction, bringing our monthly expenses down from $62,000 to around $12,000. עמוק יותר לתוך העיצוב הבא Jivesh שיתף יותר על עיצוב הרמה הנמוכה שלהם ... צינור עיבוד זרם בזמן אמת בתהליך עיבוד הזרם בזמן אמת, פעימות לב נשלחות ל- ScyllaDB במרווחים קבועים. אינטגרם פעימות הלב מוגדר ל-60 שניות, כלומר כל לקוח frontend שולח פעימות לב כל 60 שניות בזמן שהמשתמש צופה בסרטון וידאו. תגית: scalable API layer הרכיב הראשון של שכבת ה-API המפותחת הוא שירות הלבבות, אשר אחראי לטיפול בכמויות גדולות של כניסת נתונים.הנושאים מעבדים את הנתונים, ולאחר מכן עוברים דרך שירות חיבור ומאוחסנים ב-ScyllaDB. שירות שכבת API נוסף מדהים הוא השירות Concurrent Viewership Count. שירות זה משתמש ב- ScyllaDB כדי לקבל נתוני צפייה מקבילים – עבור משתמש או עבור נכס (לדוגמה, עבור מזהה). ניהול Metadata Case אחד האתגרים העיקריים הראשונים שעמדו בפני ZEE5 היה ניהול מטא-נתונים עבור פלטפורמת ה-OTT הגדולה שלהם.בהתחלה, הם התבססו על שילוב של שלושה מסדי נתונים שונים – Solr, Redis, ו- Postgres – כדי לטפל בצרכים המגוון של מטא-נתונים שלהם. הנה מבט על מודל המטא-נתונים שלהם: create keyspace.meta_data ( id text, title text, show_id text, …, …, PRIMARY KEY((id),show_id) ) with compaction = {‘class’: ‘LeveledCompactionStrategy’ }; מאחר שהטבלה הזו חווה מעט יחסית של כתבות (כתבה מתרחשת רק כאשר מתפרסם נכס חדש), אך יותר משמעותית של קריאות, הם השתמשו באסטרטגיה של דחיסה ברמה כדי לאופטימיזציה של הביצועים. תגית: Use Case ZEE5 החליטה לעצב טבלה שבה מזהה המשתמש שימש כפתור המקטעים ואת מזהה הנכס כפתור הסדר – המאפשרת לבצע שאילתות ביעילות של נתוני הצופה. הם הגדירו את TTL של ScyllaDB כדי להתאים את טווח פעימות הלב של 60 שניות, כדי להבטיח כי הנתונים נופלים באופן אוטומטי לאחר הזמן המוגדר. ג'יביש הסביר, "הטבלה הזו מתעדכנת ללא הרף עם פעימות לב מכל קצה הקדמי וכל משתמש.בזמן שהפעימות הלב מגיעות, ספירת הצופים מתוחזקת בזמן אמת ומסומנת באופן אוטומטי כאשר TTL מסתיים.זה מאפשר לנו לקבל ביעילות נתוני צפייה חי באמצעות ScyllaDB." הנה מודל הנתונים של מספר הצופים שלהם: CREATE TABLE keyspace.USER_SESSION_STREAM ( USER_ID text, DEVICE_ID text, ASSET_ID text, TITLE text, …, PRIMARY KEY((USER_ID), ASSET_ID) ) WITH default_time_to_live = 60 and compaction = { 'class' : 'TimeWindowCompactionStrategy' }; ScyllaDB תוצאות ושיעורים לומדים דו"ח בדיקת עומס הבא מראה עוצמה של 41.7K בקשות לשנייה.מדד זה נערך במהלך תהליך הבחירה של מסד הנתונים כדי להעריך ביצועים תחת עומס גבוה. ג'יביש ציין: "אפילו עם עוצמה גבוהה כל כך, היינו יכולים להשיג עיכוב כתיבה של מיקרו-שניות ועיכוב קריאה ממוצע של מיקרו-שניות.זה באמת נתן לנו תמונה ברורה של מה ScyllaDB יכול לעשות - וזה עזר לנו להחליט." לאחר מכן, הוא המשיך לשתף כמה עובדות שזרקו אור על מידת ההפצה של ScyllaDB של ZEE5: "יש לנו בסביבות 9TB על ScyllaDB.גם עם כמות גדולה כל כך של נתונים, הוא מסוגל להתמודד עם עיכובים בתוך מיקרו-שניות ומילישניות אחת, וזה די עצום. בכל שנייה, אנחנו כותבים כל כך הרבה נתונים ל-ScyllaDB ולקבל כל כך הרבה נתונים ממנו. אנו מעבדים יותר מ-100 מיליארד פעימות לב ביום, וזה די עצום". השיחה הסתיימה עם השיעורים הבאים: מודל הנתונים הוא הגורם הקריטי ביותר בהשגת עיכובים של מילישניות יחידים. בחר את הגדרת הקוורום הנכון ואסטרטגיית הדחיסה.לדוגמה, האם יש צורך לכתוב פעימות לב לכל נקודה לפני שניתן לקרוא אותן, או האם קוורום מקומי מספיק? בחרו את מפתחות המקטעים והקבוצות בחוכמה – לא קל לשנות אותם מאוחר יותר. השתמש בתצוגות ממוחשבות כדי לבצע חיפושים מהירים יותר ולמנוע שאילתות מסנן. השתמשו בהצהרות מוכנות כדי לשפר את היעילות. לדוגמה, במודל המטא-נתונים, 20 שאילתות סינכרוניות בוצעו במקביל, ו- ScyllaDB עיבד אותן בתוך מילישניות. לקוחות ScyllaDB מודעים לאזורים מסייעים להפחית את עלויות רשת ה-Cross-AZ (Availability Zone).