הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
דו"ח התקדמות CppCMS והשאלת שם הפרויקט.
שם חדש לפרויקט
לאחרונה אני מתחיל להבין ששם הפרויקט הוא מאוד לא מוצלח. רבים חושבים שמדובר ב־Content Managment System כמו Drupal ולא ב־Web Developmen Framefork כמו Django ואחרים.
לכן אני מתלבט: האם לשנות את שם הפרויקט ואם כן היא איזה שם לבחור?
דו"ח התקדמות
לאחרונה הוכנסו שינויים גדולים ועקרוניים שהופכים את ה־framework להרבה יותר גמיש וניתן להרחבה בקלות יחסית.
שינויי API הפנימי השונים
- API של שרת אינטרנט הופרד למודולים נפרדים. כיום CppCMS תומך ב: cgi, fastcgi ו־scgi . שינוי הממשק נעשה ע"י שינוי קטן בקובץ הגדרות הרצה.
- הופרד API של cache כך שכל מודול נטען בנפרד. כיום יש תמיכה בשלושה סוגי ה־cache: thread share, dummy ו־fork שעליו אספר בהמשך.
- הפרדה של מודי העבודה השונים: mod-thread-pool, single-worker-thread ומוד חדש ומבטיח mod-prefork.
הוספת mod-prefork
השינויים הגדולים האחרונים הם בעיקר לצורך התמיכה במוד עבודה בטוח -- prefork כאשר כל פעילות מופרדת לתהליכים נפרדים המפוקחים ע"י תהליך האב, כך שנפילה של תהליך, או זליגת זיכרון לא תגרום לבעיה בכל היישום. כמו כן, התווסף מוד עבודה של cache חדש: מוד בו כל הנתונים נמצאים בזכרון משותף.
למעשה mod-prefork אמור להפוך לברירת מחדל בגלל שהוא הרבה יותר בטוח וסלחני לטעויות המפתחים שאמור למנוע השבתה של מערכת במקרה של באג.
הסיפור המעניין בפיתוח של המוד הוא למעשה המימוש של cache. המימוש התבסס על קוד ה־cache הקיים שמבוסס על STL, רק... שיניתי allocators כך שהקצאת זכרון תתבצע מקטע זכרון משותף המנוהל ע"י libmm. למעשה, העובדה שכל התהליכים הם "כפילים" של אותו האב המשתפים את כל הכתובות, מאפשרת לדחוף לזכרון משותף כל מחלקה שהיא ואפילו ייצורים מוזרים כמו STL. הדבר אינו אפשרי במערכות הפעלה שלא תומכות ב־fork.
מוד העבודה הזה יודע ליצור תהליך חדש בצורה אוטומטית אם אחד התהליכי העבודה נפל, ובנוסף מאפשר להגביר את מספר האיטרציות שכל אחד מתהליכי העבודה מבצע עד להחלפתו בתהליך רענן. זה מאפשר לא לדאוג לזליגות זכרון בכלל, אם כי במחיר קטן של ביצועים הנדרשים ליצירת תהליך חדש פעם בה כמה זמן.
מאמר מקביל בבלוג פיתוח (אנגלית)
הוסף תגובה:
חובה לאפשר JavaScript כדי להגיב.