הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
מאמרים בנושא CppCMS.
ניהול Sessions ב־CppCMS
הערה 05/01/2009: פורסם מדריך לעבודה עם sessions בויקי
אחד החלקים חשובים של כל תשתית פיתוח יישומי אינטרנט הוא --- תמיכה בניהול Sessions: שמירת מידע בין בקשות שונות. זה מאפשר להפוך פרוטוקול HTTP שהוא stateless בטבעו ל־statefull. זהו מרכיב הכרחי שקיימ ברוב התשתיות כמו Django או RoR.
בד"כ, אני נוהג להסתכל בפתרונות הקיימים, לבחור את הטוב ביותר וליישמו במסגרת האילוצים של CppCMS. גם הפעם הסתכלתי בשתי התשתיות הפופולריות RoR ו־Django והבנתי, שהפתרון שהם מציעים, כפי שהוא לא מתאים בגלל אילוצי ביצועים.
הדרך "זולה" ביותר, היא לשמור את המידע ב"עוגיות" אבל יש לה שני מגרעות:
- יש מגבלה של כ־4K נתונים שניתן לשמור בעוגיה (לא כולל קידוד וכד').
- RoR שנותנת אפשרות ניהול מידע בעוגיות, לא מבטיחה שהמידע השמור לא ייחשף ללקוח --- תחשבו על פתרון Captcha ששמור בתוך עוגיה..
שמירת המידע בצד השרת כרוכה בשתי בעיות:
- ניהול בסיס נתונים כלשהו לשמירת המידע --- שיכול להוות צוואר בקבוק.
- בעית הביזור שלו גישה מרובת משתמשים.
לכן, החלטתי שב־CppCMS אני אלך על פתרון קצת שונה שמשלב את התכונות של שניהם (עם שיפורים).
המשך...בחירת בסיס נתונים משובץ... או לא כל הנוצץ זהב.
מי שעוקב אחרי התפתחות של CppCMS יודע, שבתחילת דרכי, רציתי לעבוד עם בסיס נתונים מיוחד Berkeley DB. אחד היתרונות הגדולים שלו זה ביצועים מדהימים, לפחות לפי הנתונים של Oracle.
בזמנו, התלבטתי והחלטתי להפסיק להשתמש בו. אלה היו הסיבות:
- אומנם BDB היה מהיר יותר, אבל לא כל כך משמעותית.
- התחזוקה של בסיס נתונים הייתה מאוד מסובכת (בייחוד שדרוג של מבנה טבלאות).
- ה־API היה, נוראי בלשון המעטה שדרש מעטפת נוספת שהכתיבה שלה בפני עצמה הייתה לא מי יודע מה פשוטה.
אבל היום, עלה לי צורך ספציפי, בו הייתי זקוק לבסיס נתונים מאוד פשוט, לא מבוסס על SQL שיעשה את העבודה הפשוטה: ניהול Sessions.
מה בדיוק צריך לשמור:
- מפתח ייחודי לכל אחת.
- שעת התפוגה --- מתי אפשר למחוק רשומה מהטבלה.
- הנתונים עצמם.
אפשר היה להשתמש ב־RDBS כמו MySQL, אבל עבור המשימה הספציפית, זה היה נראה כבד מידי. הדרישות היו די בסיסיות:
- תחזוקה מינימלית.
- מהירות הכנסה גבוהה.
- זמינות גבוהה בהפצהות ומערכות הפעלה שונות.
- דרישות שרידות בסיסיות: רצוי שבסיס הנתונים לא ייפגע עם התכנה תקרוס, או מחשב יפול, אבל, אם ייאבדו כמה רשומות, זה לא ממש משנה.
אז היו לי מספר אפשרויות:
- בסיס נתונים מאוד פשוט של מפתח/ערך כמו gdbm עם מנגון "ניקוי".
- בסיס נתונים מורכב כמו Berkeley DB שתומך אינדקסים, כבר היה לי ניסיון איתו.
- מערכת קבצים --- כל ערך שמור בקובץ נפרד, גם פה צריך מנגנון "ניקוי" של ערכים ישנים.
- בסיס נתונים משובץ sqlite3.
אז בואו נתחיל.
המשך...ויקי של CppCMS עלה ברשת
הערה: היה באג בקוד JavaScript שמנע הרשמה לויקי, הוא תוקן ועכשיו ניתן להרשם
הויקי של פrויקט CppCMS עלה ברשת. כל התיעוד השייך ל־CppCMS עתיד להופיע בויקי הזה. כמובן, שהויקי עצמו בנוי בטכנולוגית CppCMS... (למישהו היה ספק?).
ויקי יאפשר לי לכתוב ולעדכן תיעוד בצור הרבה יותר מהירה ונוחה. הוא תומך בריבוי שפות, כך שאפשר יהיה לתרגם אותו לעברית או לכל שפה אחרת בקלות. הוא יהיה מענה לתיעוד הלוקה בחסר.
חייב לציין שלמדתי המון מכתיבת יישום ויקי זה. היא גרמה לי לעשות מספר שינויים מהותיים ב־CppCMS כמו: תמיכה בטפסים, שינוי במבנה היישום ועוד.
כרגע התכנים בויקי בתחילת דרכם... אבל, עכשיו, לאט־לאט, אחרי שאשלים כמה דברים הרבה יותר דחופים, אוכל לתת מאמץ לכתיבת התיעוד הכל־כך נחוץ עבור CppCMS.
חייב לציין: ללא תיעוד מצוין של Django שמהווה מקור השראה שלי וללא עזרה של מאיר קריחלי שעדיין ממשיך לענות על אלף ואחת השאלות שאני מעלה, היה לי הרבה יותר קשה להגיע לנקודה זו.
מערכת הבלוגים עברה גרסה.
מערכת הבלוגים עברה גרסה וכרגע היא משתמשת במנגנון התבניות החדש. אנא מכם, עדכנו אותי במקרה של בעיות.
תודה.
מה צפוי ב"בטא 2" של CppCMS?
בקרוב תשוחרר בטא השניה של CppCMS. מה החידושים הצפויים:
- מערכת cache מבוזרת מעל TCP/IP שנותנת אפשרות scale up במקרה של עומסים גבוהים במיוחד. המערכת מבצעת ביזור של cache בסגנון memcached ונותנת ניהול load ballancing אוטומטי.
- שינוי משמעותי במערכת התבניות, מעכשיו, התבניות יהיו staticly typed. ה"תוכן" ייוצג ע"י מבני C++ טבעיים, התבניות עצמן יתוגרמו לקוד C++, שמייצר את העמוד מה"תוכן". המעבר מאפשר לממש מספר דברים:
- ירושה של תבניות בסנגון Django.
- יכולת לבצע הרחבות בקלות ע"י השתלת קוד C++ באופן ישיר.
- בעתיד יהיה קל יותר לחבר טיפול בטפסים.
- התבניות יכולות להיות מקומפלות סטטית ישירות ליישום או והיטען כמודולים (so/dll) בנפרד.
ייתכן, שמערכת יצירה ובדיקה של טפסים תצורף לבטא 2, גם כן.
המשך יבוא...