להעלות את Ruby on Rails על סולם

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

Gregg Pollack מ new relic יצר 14 screen cast (אני מחפש מילה בעברית שתסביר טוב מה זה) על איך לגרום לrails לעלות בסולם השימוש, או scale בלשון העם.

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

את ה video cast אפשר למצוא כאן.

10 מחשבות על “להעלות את Ruby on Rails על סולם

  1. ארתיום

    תודה על הקישור…

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

  2. idokan

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

  3. ik_5 מאת

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

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

  4. ארתיום

    או קיי הנה נקודות שלא הבנתי: בהרצאה על memcached הם משתמשים במפתח עם timestamp כדי לזרוק תוכן עם העדכון.

    השאלה היא: איפה אני לוקח את ה־timestamp?

    למשל, אם יש לי עמוד site/foo/bar/10, כיצד אני יכול לדעת מהו המפתח שבעזרתו אני צריך למשוך אותו מ־memcached?

    אני אסביר… בהרצאה על frame caching הוא הסביר שבעיית ה־cache invalidation היא מאוד קשה. ב־CppCMS אני פשוט מנהל שני אינדקסים על cache:‏

    1. המפתח הראשי
    2. המפתח המשני או tags.

    ואז כל פעם שאני רוצה לעשות cache invalidation אני עושה rise ל־tag מסוים וכל הערכים שיש להם התג הזה, נמחקים אוטומטית.

    ב־RoR הם משתמשים בטכניקה אחרת: הם משלבים במפתח את כל המרכבים tagים וה־timestamp שלהם… ואז אם משהו משתנה אז גם ה־timestamp שלו משתנה ואז הערך הופך ללא נגיש ועף בשלב מסוים מ־cache.

    השאלה היא אם אני רוצה לקבל ערך אני חייב לדעת את ה־timestamp שלו… איך בדיוק אני יכול לעשות דבר כזה בלי לפנות ל־DB?

  5. ik_5 מאת

    השדה הזה מוגדר "אוטומטית" אם אתה עובד בשיטה של migration ב Rails. זה שדה שהוא מוסיף בשבילך לטבלה.

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

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

    זו לפחות ההבנה שלי

  6. ארתיום

    אתה לא יכול להתחמק מלא לפנות למסד הנתונים לקבל את השדה updated, אבל אם יש לך cache של הרשומה, אז המסד נתונים יחזור מאוד מהר.

    רגע, זאת לא בעיה של ביצה ותרנגולת?

    כלומר, בכל משיכת דף שלא תהיה יהיה לך מספר גדול של פניות ל־cache שזה כולל roundtrip עם שרת Memcached רק כדי לקבל timestamps של כל הרשומות שהדף תלוי בהם? זה לא "קצת בזבוז?"

    בכל מקרה, אני מרגיש שמערכת ה־cache שבניתי היא אחת המתוחכמות שפותרות בעיות קשות בצורה יפה.

    וד"א… אף אחת ממערכות ה־cache לא יודעת לשמור דפים דחוסים…

    בקיצור… מה שבניתי בכלל לא רע😉

  7. ik_5 מאת

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

    זה לא שמה שיצרת אינו טוב, זה פשוט הגישה שלך לא תמיד תתאים לכל מצב.

  8. ארתיום

    העניין הוא שאני תומך במספר גישות שונות, שד"א הן מכילות את האופציות ש־RoR מציע (אולי למעט timestamping אוטומטי).

    פשוט ל־memcached וגם לרוב הפתרונות התואמים לי יש בעיה אחת עיקרית: הם בסה"כ מיפוי של key ל־value וזאת מגבלה גדולה.

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

    בכל מקרה, זה היה מעניין מאוד לראות. תודה!

  9. ik_5 מאת

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

    בכל מקרה, אין בעד מה🙂

כתיבת תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s