מאמרים בנושא ‏CppCMS‏.

תולדות הבלוג שלי (בעקבותיו של שלומי).

ב־יום ראשון, 5 באוקטובר 2008, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, כתיבה, תכנה ומחשבים, WordPress בעברית, CppCMS; ‏0 תגובות

שלומי ישראל (הידוע כ־sijp) העביר לי משימה לכתוב בנושא "תולדות הבלוג שלי". בד"כ אני לא מתפתה להשתתף בשרשורי משימות כאלה, אבל הפעם, החלטתי שהנושא מספיק מעניין.

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

התכנון המקורי היה להתרכז בשני נושאים:

  1. סלסה וריקוד ולהחליף פרסום כתבות באתר LaMusica.co.il‏‏ בכתיבה בבלוג שלי.
  2. להתחיל לכתוב בנושא תכנה חופשית

לצערי, הנושא הראשון, בסופו של דבר, הסתכם במספר מצומצם של כתבות, כך שהבלוג הפך לבלוג מחשבים כמעט טהור; ובסביבות אוקטובר 2007, הוא זכה להיכנס ל־planet.linux.org.il‏.

במקביל התחלתי לפתח טכנולוגיית web חדשה --- ‏CppCMS‏; ובדצמבר 2007, פתחתי בלוג נוסף באנגלית, שהיה אמור לשמש אותי לשתי מטרות:

  1. בניית פלטפורמת הניסוי של הטכנולוגיה החדשה
  2. פרסום מידע אודות CppCMS לקהל שלא מדבר בעברית.

יחד עם התקדמות הפרויקט, מערכת הבלוגים הפכה ליותר ויותר בשלה. במאי 2008 החלטתי להיפרד מוורדפרס ולהחליפו במערכת החדשה. מאד הבלוג הזה רץ על טהרת C++‎.

צעד חשוב קדימה — ביזור של CppCMS.

ב־יום רביעי, 17 בספטמבר 2008, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, CppCMS; ‏0 תגובות

למרות ש־CppCMS מצטיינת בביצועים גבוהים במיוחד, עדיין מגיע הרגע, בו צריך לבצע ביזור המערכת לצורך שיפור ביצועים. המערכת נבנתה מלכתחילה במחשבה שהיא תצטרך לרוץ על מספר מחשבים נפרדים, אבל היה חסר רכיב משמעותי אחרון --- מערכת Cache מבוזרת.

עד היום CppCMS באה עם שתי אופציות של Cache‏ --- משותף לחוטים של אותו תהליך (threaded) ומשותף לתהליכים שנוצרו ע"י מנגנון prefork (‏fork cache). לא היה ניתן לשתף Cache בין שני מחשבים שונים. לא הייתה בעיה עיקרונית להוסיף אותו, למעט העדר זמן הפיתוח.

ההכרות שלי עם ספריית Boost.Asio‏ פישטה את התהליכים בצורה משמעותית ואפשרה לי לממש את המודול החדש במהירות.

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

כדי להקל על ביזור, כל לקוח יכול להתחבר למספר שרתים ואז, כל ערך מתמפה לאחד מהשרתים בעזרת פונקציית hash פשוטה, כך שבפועל ה־cache יכול להיות מבוזר בין 10 שרתים באופן אחיד ולהגדיל את הקיבולת שלו/להקטין עומס על שרתים בודדים.

כדי להבטיח עקביות של ה־cache, פעולות כמו הפעלת trigger שמוחק ערכים בקבוצות, נשלחות לכל השרתים ביחד. כל שאר הפעולות עובדות מול שרת יחיד לפי המפתח. לכן, מבחינת המשתמש, יש שקיפות מלאה, אם הוא עובד עם שרת בודד או עם 10.

המודול מופעל ע"י שורת קונפיגורציה cache.backend="tcp"‎ ושני פרמטרים נוספים cache.ports ו־cache.ips המגדירים את רשימת הפורטים וכתובות ה־IP עליהם מאזינים שרתי ה־cache המבוזרים.

פיתוח יישומי רשת ב־C++‎ או הצצה ל־Boost.Asio.

ב־יום שלישי, 16 בספטמבר 2008, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, CppCMS, C++‎‏, Boost‏; ‏0 תגובות

במאמר זה, אביא סקירה קצרה של ספריית Boost.Asio‏‏ -- ספרייה לפיתוח יישומי תקשורת ב־C++‎ בצורה מהירה, יעילה ונוחה. ההכרות שלי איתה התחילה, דווקא מצורכי העבודה. אחרי זמן קצת, הבנתי שהיא מאוד נוחה ואפילו תהיה שימושית עבור CppCMS. למעשה, הספרייה הזו, אפשרה לי לעטוף את ספריית ה־cache של CppCMS ולהפוך אותה למבוזרת --- לבנות פתרון בסגנון memcached --- תוך מספר שעות בלבד.

הספרייה הזו קיימת בשתי גרסאות:

  1. גרסת Boost.Asio: היא חלק מ־Boost החל מגרסתו 1.35.
  2. גרסת Asio עצמאית, שדורשת Boost גרסה 1.33 ומעלה --- מאפשרת לעשות שדרוג של ספרייה ללא תלות בגרסת Boost.

אחד המאפיינים המעניינים שלה היא העובדה, שהספרייה כולה כתובה על בסיס Template Metaprogramming ומהווה אוסף קובצי־"‎.hpp" בלבד.

"בעיית עשרת אלפים קשרים" או "למה צריך ספריות כאלה בכלל?"

מעבר לעובדה ש־Berkeley Sockets API‏ די מסובך, עדין ושונה במערכות הפעלה שונות --- כבר סיבה מספיק טובה לבנות מעטפת עבורו --- אני אתרכז דווקא במשהו אחר, כתיבת יישומים יעילים.

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

יש מספר גישות לבניית השרת:

המשך...

Asp.Mono על לינוקס? עוד לא...

ב־יום חמישי, 7 באוגוסט 2008, מאת ארתיום; פורסם תחת: תכנה חופשית, אינטרנט, לינוקס, פיתוח, תכנה ומחשבים, CppCMS; ‏2 תגובות

תוך פיתוח CppCMS תמיד רצית לעשות השוואת ביצועים מול אחת הטכנולוגיות הפופולריות בתחום Web:‏ Asp.Net. מצאתי מערכת בלוגים: BlogEngine.Net‏ שתומכת ב: mono רצה גם על Linux ועובדת מול MySQL --- קרי כל מה שצריך כדי לעשות השוואה מול CppCMS.

ההתחלה הייתה די מבטיחה, הוראות ההתקנה לא היו מסובכות, מצאתי בלוג אחד אמתי שרץ על Ubuntu ו־Apache mod_mono, ראיתי הוראות התקנה עבור Ubuntu והתחלתי לעבוד.

קודם כל התקנתי mono 1.9.1 מ־backports של Etch. הבעיה הראשונה שנתקלתי בה, הייתה בעיה של התקנה שלי --- גרסת הקומפיילר לא תאמה גרסת mono. אחרי שפתרתי אותה, הצלחתי להריץ את היישום כאשר XML משמש כבסיס נתונים עבור הבלוג.

אחרי זה החלטתי להפעיל את MySQL. שוב בעיות, הפעם יצירת טבלאות --- מי שבדק את זה על MySQL ב־Windows לא לקח בחשבון שבלינוקס שמות הטבלאות הן case sensitive --- זה נפתר די בקלות. הבעיה השניה הייתה לחבר את MySQL ל־Mono.

המשך...

על מערכת ה־Cache של CppCMS.

ב־יום חמישי, 31 ביולי 2008, מאת ארתיום; פורסם תחת: תכנה חופשית, תכנה ומחשבים, CppCMS; ‏10 תגובות

אחד המרכיבים המשפיעים על ביצועים של תשתית לפיתוח אתרים היא מערכת ה־Cache. המערכת שיושמה ב־CppCMS כוללת מגוון אופציות ניהול מתקדמות, שלא זמינות בחלק מתשתיות פיתוח אתרים נפוצות כמו Django‏:

  1. מערכת טריגרים לרענון ה־Cache.‏
  2. ניהול תלויות (כמעט) אוטומטי שמקל על ניהול מידע קונסיסטנטי.

לקריאה נוספת: מערכת Cache: מבנה פנימי (אנגלית)

העמוד הבא

העמוד הבא

דפים

נושאים