כולנו אוהבים לשנוא פרסומות. בין אם הן מופיעות בטלוויזיה, בתקשורת המודפסת או באתרים האהובים עלינו – אנחנו לא אוהבים כשדוחפים את התוכן הממומן אל מול עינינו. מצד שני, רובנו לא מבינים או מתכחשים לכך שהפרסומות הן בעצם הדלק המזין תוכן אינטרנטי חינמי. החברות שמאחורי האפליקציות למכשירים ניידים ואתרי אינטרנט המציגות פרסומות, מתוגמלות לפי כמות הפרסומות הזו, ועל בסיס תגמול זה הן מסוגלות להציע תוכן חינמי למשתמשים שלהן. טכנולוגית הפרסום (הידועה גם בשם AdTech) המשמשת כמנוע הצמיחה המשמעותי ביותר באינטרנט, מאפשרת לנו להנות מאפליקציות, שירותים ותוכן בלתי מוגבל כמעט, באיכות גבוהה ובחינם.
יחד עם זאת, לא כולם מודעים למאמצים הגדולים ולתחרות המתנהלת מאחורי הקלעים בכל פעם שפרסומת חדשה מוצגת באתר כלשהו או באפליקציית מובייל.
בכל חודש אנחנו מציגים מודעות פרסומיות ל-450 מיליון משתמשים שונים. פלטפורמת הפיתוח AdExchange מטפלת במיליוני בקשות נכנסות בכל דקה, ובכך מעשירה ומנווטת תנועת בקשות בזמן אופטימלי של 200 אלפיות שניה לבקשה!
הצורך בשירות אופטימלי, יכולת טיפול במספר רב של בקשות ויכולת ניתוח נתונים, אילץ את שוק ה-AdTech להתאים את עצמו לטכנולוגיות קוד פתוח עדכניות. איך עושים את זה? באמצעות מספר התאמות ויישומים שאפשרו לנו להגדיל את היקף הפעילות בעודנו נשארים יעילים, עם ביצועים גבוהים.
JVM – מג’אווה לטומקאט לסקאלה, AKKA וספריי:
הדרישות ממערכות לניתוב הודעות בהיקף גדול, כמו AdExchange למכשירים ניידים, כוללות בו-זמניות גבוהה, זמן המתנה נמוך, גמישות ויכולת טיפול בעומסים. שיקולי תכנון של מערכת כזו כוללים ביצועי מערכת וזמן פיתוח, יכולת טיפול בקטעי קוד חוזר ותחזוקת קוד נוחה. בעוד ששפות כמו C/C++ עשויות לייצר קוד בעל ביצועים גבוהים, הפיתוח בשפות אילו עלול להיות יקר מדי לחברות סטארטאפ.
בהחלטה לבסס את המערכת על JVM, גילינו שמודל בו-זמניות מבוסס סוכנים תואם את צרכינו וניתן לישום אלגנטי תוך שימוש בספרית AKKA. לכן, סקאלה היתה הבחירה הטבעית לכתיבת הקוד. בעוד שניתן להתווכח על יעילות השימוש במודל מבוסס-סוכנים, אין ספק שהשימוש בסקאלה וב-AKKA (כולל AKKA.Remote) הוא בעל ערך במונחים של זמן קידוד, מאמץ ופשטות.
ביג דאטה וניתוח נתונים בזמן אמת:
עם הפיכתה של ארכיטקטורת Lambda לפופולרית, מצאנו לנכון לבנות את הפתרון שלנו לאיסוף וניתוח ביג דאטה. מאחר ואנו מנתחים עשרות מליוני אירועים בדקה, התעורר הצורך לספק לוח המציג ניתוח נתונים בזמן אמת, וכן לאפשר עיבוד אצווה לשיפור המערכת ואיסוף תובנות לגבי הנתונים.
השתמשנו ב-Apache Spark לעיבוד אצווה וב-Apache Streaming לניתוח הנתונים. תכנון גמיש איפשר לנו להריץ עיבודים בהיקף גדול (לדוגמה חישוב מחדש של מארז נתונים גדול שנאסף במשך יום שלם) במשכי זמן קצרים, תוך שימוש ב-spot clusters.
תצוגת מידע משתנה – ביצועים, נחישות ויתירות
היה עלינו לבחור בעמוד שדרה יציב למשלוח הודעות כדי להציג את כל הנתונים שנאספו ממאות שרתים למשתמשי Spark שונים (ואחרים). מאחר ואנו חסידי קוד פתוח (ו-Apache במיוחד) בחרנו את Kafka כתשתית למערכת שלנו. כמערכת המתוכננת להיות מבוזרת, Kafka נותנת פתרון למשלוח הודעות הניתן לשדרוג, ותומך במנויים רבים בעלי היקפי שימוש שונים. בהתבסס על הארכיטקטורה של Kafka, יצרנו קבוצות משתמשים גמישות, כאשר אנו מפנים את המידע ישירות למערכות נתונים חיצוניות ופנימיות.
לאחר שימוש של מספר שנים באוסף הטכנולוגיות הזה במערכות מסחריות המטפלות במליארדי אירועים ביום, רכשנו מומחיות והתגברנו על מכשולים נפוצים, אבל מאחר ומדובר באחד התחומים הצומחים והמתפתחים ביותר בעולם הטכנולוגי היום, אין לי ספק שאנחנו בפתחה של התמודדות טכנולוגית חדשה, מאתגרת ומספקת במיוחד.
כתב: גל אביב, סמנכ”ל R&D , Inneractive