HipHop לPHP, המחשבות שלי בנושא

צריך היה להיות ממתכנת מנותק מאוד בשביל לא לקרוא על הHipHop, כלי ששיחררה Facebook שלוקח קוד PHP בגירסה 5.2 פחות כמה פיצ'רים, וממיר אותו לקוד C++ שאפשר לקמפל באמצעות g++ לקוד מכונה שרץ באופן טבעי על השרת. Facebook טוענים שHipHop מסוגל להביא לביצועים טובים בכ50%, שהוא כשלעצמו מספר מרשים מאוד מחד, ומפתה מאוד בחשיבה על צריכת הCPU שיורדת משמעותית מאידך.

מה זה למעשה?

  • HipHop ממיר קוד PHP לקוד C++ שיכול להתקמפל לקוד מכונה טבעי. HipHop תומך ברוב מוחץ של האפשרויות בPHP 5.2 מלבד פונקציות כמו eval() למשל.
  • הכלי מתיימר ליצור את קוד הC++ היעיל ביותר האפשרי, הוא יבדוק מגמות כלליות ודברים שעשיתם בקוד הPHP שלכם ולפיו יכין את קוד הC++ המותאם ביותר.
  • לאחר שקומפל, HipHop מהווה בעצמו את שרת הרשת. הוא איננו צריך תוכנות שרת כמו Apache ואחרות.
  • כרגע, HipHop לא תומך בכלל בווינדוס. מפתחי PHP, אם עוד לא עברתם, זה הזמן לנסות את לינוקס.
  • כרגע אתר Facebook כולו משתמש בכלי הזה לייעול הקוד ולהתמודדות עם עומס המשתמשים.

עד כאן HipHop נשמעת אלוהית ממש ומפתה לכל מתכנת לקפוץ עליה ולעשות בה שימוש גם באתר הכי קטן, אבל יש כמה בעיות שעליכם לחשוב עליהם קודם, בעיות שבגללן הכלי בעיקר מיועד, לפחות לדעתי, לאתרים גדולים, ממש גדולים, כאלו שמתפרסים על 100 שרתים לפחות ועומד מאחוריהם תאגיד די גדול. הסיבות:

  • HipHop לא ממהיר את מסד הנתונים שלכם. הוא נשאר באותה המהירות בכל מקרה, לא משנה באיזו שפה תשתמשו.
  • HipHop לא ייעל את עליית התמונות שלכם, הטעינה תשאר זהה, וזהו עיקר העניין ברוב האתרים.
  • בכדי להשתמש בHipHop אתם חייבים ללמוד C++, לא לעומק אבל להבין מעט את השפה. כמו גם לדעת להשתמש בדיבגר של g++. הרחבת דרישות ידע כאלו לאתרים קטנים זה אוברקיל לדעתי.

HipHop הוא בהחלט כלי מרשים, אבל לפני שרצים להשתמש בו חייבים לקחת בחשבון את ה"עלות-תועלת" פה. האם האתר שלך באמת צריך ייעול דרסטי בשימוש בכוחות החישוב שלו? או שמה שהוא עושה בעיקר זה להציג דפים שלא מתעדכנים לעיתים קרובות מאוד (כמו בפייסבוק) ומתמקד בעיקר בשליפת נתונים ממסד והצגתם, נניח בלוג, פורום וכו' וכו'. ללמוד להשתמש בכלי כזה, ולהתחיל להתעסק עם C++ והדיבגר של g++ יכול להיות סיוט לא קטן למתכנת ווב. תחשבו על זה.

עוד מילה על CppCMS

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

7 responses to this post.

  1. מעניין.
    כשחיפשתי בגוגל
    php code compiler
    התוצאה הראשונה שעלתה (שהיא לא של פייסבוק), היא תוצאה של מערכת קוד פתוח שטוענת שמסוגלת לקמפל את כל הקוד.
    ההערות שלי בנושא הן:
    א. קוד של PHP לפי נסיוני רץ מספיק מהר בהגשת דפים ולא לוקח משאבים רבים.
    אם הקוד כן לוקח משאבים רבים, כנראה שהוא לא בנוי נכון.
    למשל, שימוש רב בREGULAR EXPRESSIONS עלול לגרום לעומס מטורף.
    אם אתם רוצים לדעת מה מעמיס על הקוד שלכם ואיפה, אני ממליץ בחום על xdebug.
    בנוסף, רוב האיטיות באתרים לא נובעת מקוד הPHP, אלא בדרך כלל מקריאות איטיות לדאטאבייס. אני ממליץ בחום להפעיל בmysql את הלוג של הslow queries ולבדוק מה לוקח הרבה זמן על ידי כתיבת השיאלתה עם המיל EXPLIAN לפניה (תוסיפו בסוף השורה \G במקום ; אם אתם עושים זאת מהקונסול, יהיה הרבה יותר קריא).
    בנוסף, יש לקימפול חסרון רציני, אי אפשר לתקן דברים בצורה מיידית, צריך לקמפל מקומית ואז להעלות. הנגישות לקוד בצורה ישירה היא אחת היתרונות של PHP.

    מקווה שתרמתי מהידע שלי כאן 🙂

    להגיב

  2. בלוג מאוד מעניין, ישר כוח!

    להגיב

  3. אז כנראה שהשמועות המקדימות על זה ש hiphop "יהרוג" את ה PHP היו (כהרגלן של שמועות) לא ממש מבוססות..

    להגיב

  4. מספר הערות: להגיד "להמיר PHP ל־C++‎" זה לשקר לעצמך ולאחרים בעניים. ואני אסביר למה:

    PHP היא שפה דינאמית, טיפוס המשתנה אינו ידוע בזמן קומפילציה אלא בזמן הריצה בלבד. כך שהמרה לקוד C++‎ לא תפתור הרבה בעיות, בייחוד שעדיין נשארים הנושאים כמו GC ואחרים. לכן, אפשר לצפות לשיפור מסוים בביצועים דומה לשיפורים שניתן לקבל עם שימוש ב־JIT כמו למשל IronPython. זה משפר אבל לא בצורה משמעותית.

    אם יש לך חווה של 1,000 שרתים שיפורים של 50% זה המון: זה אומר שאתה יכול לצמצם פי שניים, זה טוב לסביבה זה טוב למחירים. אבל בסה"כ זה לא משנה את השפה עצמה. אתה לא תוכן להתקרב עם שום קומפייר לביצועים של שפה מקומפלת באמת. אם כבר הייתי מצפה ש־JIT יתן מענה יותר טוב.

    אני ממליץ לך לקרוא כאן: http://cppcms.sourceforge.net/wikipp/en/page/benchmarks

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

    CppCMS עושה משהו אחר לחלוטין: הוא נותן לך כלים לפתח יישומי אינטרנט מהירים למכתחילה ע"י שילוב של שפה מונחת עצמים עלית C++‎ ויעילות מירבית של קימפול בצד שני.

    להגיב

  5. בנושא בסיסי נתונים, ראה: http://art-blog.no-ip.info/cppcms/blog/post/42

    ל־PHP יש עדיין משקל אדיר בכל הסיפור

    להגיב

  6. ארתיום – להערכתך (במספרים), מה ההבדל בין c++ ל php מקומפל?
    האם ההבדל נותן הרבה יותר מאשר ה 50% שנותן הקימפול ל php?
    אם ההבדל לא כזה גדול – אולי עדיין כדאי עדיין לפתח ב php מצד נוחות הפיתוח, ולאחר מכן לקמפל זאת – וכך להרויח מכל העולמות (כמעט). ההפסד בזמן הריצה יפוצה ע"י נוחות הפיתוח.

    להגיב

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

    להגיב

להשאיר תגובה

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

הלוגו של WordPress.com

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

תמונת גוגל

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

תמונת Twitter

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

תמונת Facebook

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

מתחבר ל-%s

%d בלוגרים אהבו את זה: