How a team of just two engineers tackled real-time persisted events for hundreds of millions of players עם שני מהנדסים בלבד, Supercell לקחה על עצמה את המשימה המפחידה של לגדל את מערכת החשבונות הבסיסית שלהם לפלטפורמה חברתית המחברת מאות מיליוני שחקנים.ניהול חשבונות, בקשות חברים, קידום משחקים, צ'אט, מעקב אחר נוכחות שחקנים, ויצירת צוות - כל זה היה צריך לעבוד בכל חמשת המשחקים העיקריים שלהם. מהנדס שרתים של Supercell, אדוארד Fagerholm, סיפר לאחרונה כיצד הצוות העוצמתי שלהם של שניים התמודד עם משימה זו.קרא כדי ללמוד כיצד הם הפכו כלי ניהול חשבון פשוט לתוך תשתית רשת חברתית מקיפה בין-משחקים אשר עדיפה הן בפשטות הפעלה והן ביצועים גבוהים. הערה: אם אתם נהנים לשמוע על הישגים הנדסיים כאלה, הצטרפו אלינו ב- Monster Scale Summit (חינם + וירטואלי). מהנדסים מ- Disney+ / Hulu, Slack, Canva, Uber, Salesforce, Atlassian ועוד יחולקו אסטרטגיות ומחקרי מקרה. ס הערה אם אתה נהנה לשמוע על הישגים הנדסיים כאלה, להצטרף אלינו פסטיבל Monster Scale מהנדסים מ-Disney+/Hulu, Slack, Canva, Uber, Salesforce, Atlassian ועוד ישתפו אסטרטגיות ומחקרי מקרה הערה פסטיבל Monster Scale תגית: מי זה Supercell? Supercell היא החברה הממוקמת בפינלנד שמאחורי המשחקים המפורסמים Hay Day, Clash of Clans, Boom Beach, Clash Royale ו-Brawl Stars. עד לאחרונה, כל הפונקציונליות של ניהול חשבונות עבור משחקים שמשרתים מאות מיליוני משתמשים פעילים בחודש נבנתה ומנוהלת על ידי שני מהנדסים בלבד. תגית: Supercell ID Supercell ID נולד כמערכת חשבונות בסיסית - משהו כדי לעזור למשתמשים לשחזר חשבונות ולהעביר אותם למכשירים חדשים. אדוארד הסביר, "הלקוח יכול לבצע שאילתות HTTP ל-API של החשבון, שמחזיר בעיקר טוקי חתימה שהלקוח יכול להציג לשרת המשחק כדי להוכיח את זהותם.פעולות מסוימות, כגון ביצוע בקשות חבר, דורשות את API של החשבון לשלוח הודעה לשחקן אחר. לדוגמה, 'האם אתה מאשר את בקשת החבר הזאת?' למטרה זו, היה שורה של אירועים להודעות. תקשורת בשתי הדרכים לאחר שאדוארד הצטרף לפרוייקט Supercell ID בסוף 2020, הוא החל לעבוד על רקע ההודעות - בעיקר עבור קידום בין חמשת המשחקים שלהם. הלקוחות היו מחוברים לצוות של שרתים פרוקסיים, ולאחר מכן מנגנון מסלול דחף אירועים ישירות ללקוחות (בלי לעבור את המשחק).זה היה מספיק למטרה המיידית של טיפול בקשות קישור וחיבור חברים.זה היה די פשוט ולא היה צורך לתמוך בעוצמה גבוהה או באיחור נמוך. הם הבינו שהם יכולים להשתמש בתקשורת משני הכיוונים כדי להגדיל באופן משמעותי את היקף מערכת Supercell ID. אדוארד הסביר, "בבסיס, זה מאפשר לנו ליישם תכונות שהיו בעבר חלק מהשרת המשחק. עם זאת, Supercell ID החלה להשתנות לרשת חברתית בין-משחקים שתומכת בתכונות כגון תרשימים חברים, קבוצות, צ'אט ומעקב מצב חברים. התפתחות Supercell ID לרשת החברתית Cross-Game בשלב זה, הצד של הרשת החברתית של החלק האחורי היה עדיין פרויקט של אדם אחד, ולכן הם העיצבו אותו עם הפשטות בראש. למצוא את הפסקה הנכונה "רצינו רק חתימה אחת פשוטה שתומכת בכל השימושים שלנו ולכן יכולה להיות מתוכננת ומושלמת על ידי מהנדס אחד", הסביר אדוארד. "במילים אחרות, רצינו להימנע מבניית מערכת צ'אט, מערכת נוכחות וכו '. מצאת ההפרדה הנכונה הייתה המפתח, וחנות ערכי מפתח הירוארכית עם Change Data Capture תואמת את החשבון בצורה מושלמת. המפתחות ברמה העליונה בחנות ערכים מפתח הן נושאים שניתן להירשם אליהם. יש מפה בשני שכבות מתחת לכל מפתח ברמה העליונה – מפה (שורה, מפה (שורה, שורה). הערכים במפה העמוקה ביותר הם גם מסומנים בזמן. כל מקור נתונים שולט על מסמכי זמן משלו ומגדיר את הסדר הנכון. הלקוח יורד כל עדכון עם מסמך זמן ישן יותר ממה שהוא כבר מאוחסן. מפה(רצועה, מפה(רצועה, רצועה)) שינוי טיפוסי בנתונים יהיה משהו כמו 'רמה שווה 10' שינויים ל 'רמה שווה 11'. למצוא את מסד הנתונים הנכון הם זקוקים למסד נתונים שתומך בדרישות הטכניות שלהם ויכול לנהל אותם, בהתחשב בצוות המינימליסטי שלהם. • מתמודד עם כתבות קטנות רבות עם רץ נמוך תמיכה במודל נתונים הירוארכי ניהול גיבוי ופעילויות קבוצות כשרות ScyllaDB Cloud התברר להיות מתאים מאוד (ScyllaDB Cloud הוא הגרסה המנוהלת במלואו של ScyllaDB, מסד נתונים הידוע לספק יציבות נמוכה צפויה בקנה מידה). איך הכל משחק כדי לקבל רעיון של איך זה משחק במשחקים Supercell, בואו נסתכל על שני דוגמאות. ראשית, לשקול הודעות צ'אט. הודעת צ'אט פשוטה עשויה להיות מיוצגת במודל הנתונים שלהם כדלקמן: אדוארד הסביר, "המפתח ברמה העליונה שנרשמה הוא מזהה חדר הצ'אט. המפתח ברמה הבאה הוא UID תזמון, כך שיש לנו סדר של כל הודעה וניתן לשאול את היסטוריית הצ'אט. לאחר מכן, בואו נסתכל על "נוכחות", המשמשת מאוד במשחק החדש של Supercell, mo.co. המטרה של נוכחות, על פי אדוארד: "כאשר אתה מצטרף לקרב, אתה רוצה לראות בזמן אמת את האווטאר ואת המבנה הנוכחי של החברים שלך - בעיקר את הנשק והציוד של החברים שלך, כמו גם מה שהם עושים. Players’ state data is encoded into Supercell’s hierarchical map as follows: Note that: הרמה העליונה היא מזהה השחקן, הרמה השנייה היא הסוג, והמפה הפנימית מכילה את הנתונים. Supercell ID לא צריך להבין את הנתונים; זה פשוט מעביר אותו ללקוחות המשחק. לקוחות משחקים אינם צריכים לדעת את גרף החברים, מכיוון שההורדה מתבצעת על ידי Supercell ID. עמוק יותר בארכיטקטורה של המערכת נסיים עם סיור באדריכלות המערכת, כפי שניתן על ידי אדוארד. ה-Backend מחולק ל-API, ל-Proxy ו-Event Routing/Storage Servers. Topics live on the event routing servers and are split across them. A client connects to a proxy, which handles the client's theme subscription. The proxy routes these subscriptions to the appropriate event routing servers. Endpoints (למשל, עבור צ'אט ונוכחות) send their data to the event routing servers, and all events persist in the ScyllaDB Cloud. לכל נושא יש מחלוקת ראשונית ותיקון.אם המחלוקת ראשונית יורדת, המחלוקת ראשונית שומרת על המספרים של סדרת הזיכרון עבור כל הודעה כדי לזהות הודעות אבודות.המחלוקת השנייה מעבירה הודעות ללא מספרי סדרת.אם המחלוקת ראשונית יורדת, המחלוקת ראשונית תפעיל חידוש של מצב על הלקוח, כמו גם חידוש המספרים של סדרת. API עבור שכבות הנחיתה הוא RPC פשוט לאחר אירוע המכיל סדרה של נושאים, סוגים, מפתח, ערכים. המשימה של כל API היא פשוט לכתוב מחדש את הנתונים שלהם לתוך ייצוג tuple לעיל. כל אירוע נכתב ב- ScyllaDB לפני שידור למנויים. API שלנו הם סינכרוניים במובן שאם שיחה API נותנת תגובה מוצלחת, ההודעה נמשכה ב- ScyllaDB. שליחת אותו אירוע פעמים רבות אינה פוגעת כי יישום העדכון על הלקוח הוא פעולה אידימוטנטית, למעט אפשרית מספרים מרובים של רצפים המפותחים לאותו מסר. כאשר אתה מתחבר, ה- proxy יגלה את כל החברים שלך ולהירשם לנושאים שלהם, אותו הדבר עבור קבוצות צ'אט שאתה שייך אליהן. הפעלת מחדש של המעבר מפעילה מנוי מחדש לנושאים מ- proxy. אנו משתמשים ב-Protocol Buffers כדי לחסוך על עלויות רוחב פס. כל איזון עומס הוא ברמת TCP כדי להבטיח כי בקשות על אותו חיבור HTTP/2 מתבצעות על ידי אותו מקש TCP על ה-proxy. זה מאפשר לנו לטעון מידע מסוים בזיכרון על הקשבה הראשונית, כך שלא נצטרך לשחזר על בקשות אחרות. יש לנו מספיק לקוחות מקבילים שלא נצטרך לטעון בנפרד את איזון עומס של בקשות HTTP/2 בודדות, שכן התנועה מחולקת באופן שווה בכל מקרה, והבקשות יקרות בערך באותה מידה כדי להתמודד עם משתמשים שונים. אבל זה לא סוף המשחק אם ברצונך לצפות בשיחה הטכנולוגית המלאה, פשוט לחץ על המשחק למטה: ואם אתה רוצה לקרוא עוד על התפקיד של ScyllaDB בעולם המשחקים, ייתכן שתרצה גם לקרוא: Epic Games: How Epic Games uses ScyllaDB as a binary cache in front of NVMe and S3 to accelerate global distribution of large game assets used by Unreal Cloud DDC. Tencent Games: How Tencent Games built service architecture based on CQRS and event sourcing patterns with Pulsar and ScyllaDB. Discord: How Discord uses ScyllaDB to power their massive growth, moving from a niche gaming platform to one of the world's largest communication platforms. משחקי Epic Games: משחקים של Tencent: מחלוקת :