• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
PHP Scalability
 

PHP Scalability

on

  • 4,251 views

Metacafe's PHP Scalability Lecture by David Tabachnikov

Metacafe's PHP Scalability Lecture by David Tabachnikov

Statistics

Views

Total Views
4,251
Views on SlideShare
4,080
Embed Views
171

Actions

Likes
1
Downloads
91
Comments
0

9 Embeds 171

http://php-israel.org 139
http://www.linkedin.com 14
http://lj-toys.com 5
http://www.php-israel.org 4
http://l.lj-toys.com 4
http://www.slideshare.net 2
http://prematureoptimization.org 1
http://localhost 1
http://static.slideshare.net 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    PHP Scalability PHP Scalability Presentation Transcript

    • PHP בקנה מידה גדול דוד טבצ ' ניקוב מרץ 2008
    • מטהקפה
      • אתר לשיתוף וידאו בידורי קצר
      • 30 מיליון משתמשים יחודיים בחודש
      • עובדים ב - (Linux, Apache, MySQL, PHP) LAMP
      • PHP 5.2, MySQL5, memcached, RedHat Enterprise
    • הסתל - מה ?
      • Scalability ( הסתלמות ) זה מאפיין של מערכת , רשת או תהליך , שמגדיר את היכולת של המערכת הנ " ל לגדול בצורה חלקה , בזמן , עלות , ויעילות מירבית .
      • גדילה אופקית ואנכית .
      • המערכת שלנו צריכה להיות מוכנה לגדול , גם בקוד וגם ברשת .
    • גדילה בקוד
      • הדבר הראשון שצריך לבדוק , זה בעיות מהירות בקוד
    • גדילה אנכית (scaling up)
      • כשהמערכת לא עומדת בעומס , מוסיפים עוד משאבים למכונה .
      • לא תמיד טוב , יקר , ובאיזשהו שלב בכלל לא אפשרי .
      • יכול להיות טוב בשלבים הראשונים של הגדילה , אבל לא טוב בטווח הארוך .
    • גדילה אופקית (scaling out)
      • במקום להוסיף כוח למכונה הקיימת , הרבה יותר קל ובדרך כלל יותר זול , להוסיף עוד מכונות .
      • יותר מחשבים , הרבה יותר קשה לנהל , פיתוח מסובך יותר .
      • הקוד , מסדי הנתונים , ומבנה הרשת צריכים לאפשר מצב , שבו מכונות שונות משרתות משתמשים שונים , ולפעמים אפילו את אותם המשתמשים , בלי שהם ירגישו .
    • אזורים של המערכת
      • האתר גדל , במקום 1,000,000 קריאות בחודש , עכשיו כבר יש 3,000,000 קריאות . מה עושים ?
      • מוסיפים שרתים !
      • מה צריך לייעל ?
        • את המערכת באופן כללי
        • מסד הנתונים
        • הקוד
    • שלב ראשון - חלוקת עומסים
      • דבר ראשון – להוסיף עוד 2 שרתים .
      • להוסיף מחלק עומסים ( load balancer ) לפניהם , ולתת לו לשלוח קריאות כל פעם לשרת אחר , לשרת הכי פחות עמוס .
      • בעיה – אם כל קריאה מגיע לשרת אחר , איך זוכרים מה המשתמש עשה ? (state, sessions)
        • אפשר להגדיר ב - load balancer שכל קריאה מאותו לקוח תגיע לאותו שרת (stickiness)
        • אפשר לבזר גם את ה - session
    • שלב שני – לעצור בדרך
      • בדרך כלל , החלק הכי איטי באפליקציית ווב , היא העמודים הדינאמיים .
      • אז זה רעיון טוב להעביר את הדברים הסטאטיים החוצה .
      • מה זה קבצים סטאטיים ?
        • JS
        • CSS
        • תמונות
        • אפילו תמונות דינאמיות
        • פלאש
    • שלב שני – לעצור בדרך - המשך
      • מה אפשר לעשות עם דברים סטאטיים ?
        • SQUID ביציאה
        • שרת נפרד עם lighttpd , או thttpd .
        • CDN
    • שלב שלישי – צווארי בקבוק
      • פרשן PHP
        • מטמון opcode
        • לשמור את ה - HTML בקבצים
      • מסד נתונים
        • לשמור את הנתונים במטמון
      • קבצים
        • מערכת הקבצים היא אחת המערכות הכי איטיות שיש
        • לטעון דברים לזכרון
    • OPCode Cache
      • שומר גרסא מתורגמת של הקוד בזכרון , במקום להריץ את הפרשן כל פעם .
      • APC
        • (Drupal) – 604% מעל PHP
      • eAccelerator
        • 688% - מעל PHP
        • http://2bits.com/articles/benchmarking-apc-vs-eaccelerator-using-drupal.html
    • שמירה של OB
      • public function init(){
      • $this->cacheKey = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
      • }
      • public function render() {
      • if ($this->cachedHTML == NULL) {
      • // output buffer are stackable!
      • ob_start();
      • // Render
      • $this->renderHTML();
      • // Save cache
      • $this->writeToCache();
      • }
      • // Finally display the HTML
      • echo $this->cachedHTML;
      • }
      • public function writeToCache() {
      • $this->cachedHTML = ob_get_contents();
      • ob_end_clean();
      • file_put_contents(“/var/www/cache/”.$this->cacheKey, $this->cachedHTML, FILE_TEXT | LOCK_EX);
      • }
      • public function readFromCache() {
      • $cacheFile = “/var/www/cache/”.$this->cacheKey;
      • $cacheTime = @filemtime($cacheFile);
      • if (time() - $cachetime < 600) {
      • $this->cachedHTML = file_get_contents($cacheFile, FILE_TEXT);
      • }
      • }
    • מסדי נתונים
      • באיזשהו שלב , שרת DB אחד לא יחזיק מעמד מול כמות הקריאות שבאה מהשרתים
      • מה עושים ? גודלים אופקית
        • שרת אחד – מאסטר , לכתיבות
        • שרתים נוספים , רפליקות (replications) לקריאה בלבד
    • רפליקות
      • לוקח זמן להתעדכן
      • עדיין מקבלות עומס מהמאסטר כשיש עידכונים
      • מה עושים כשצריך עדכון מיידי ? לכתוב וישר לקרוא ?
        • לכתוב במקביל גם לזכרון המטמון
    • memcache
      • פותח בשביל LiveJournal , אבל היום חלק גדול מהאתרים הגדולים משתמשים בו , כמו Facebook, Wikipedia, Slashdot, Digg, Metacafe .
      • שומר נתונים בזכרון .
      • מיועד בעיקר לנתונים שבאים ממסד נתונים או ממקור נתונים אחר .
      • אך מתברר כיעיל גם במקרה של HTML , ואפילו שמירה של session .
      • http://www.danga.com/memcached/
    • דוגמא של memcache
      • function get_foo (int userid) {
      • result = memcached_fetch(&quot;userrow:&quot; + userid);
      • if (!result) {
      • result = db_select(&quot;SELECT * FROM users WHERE userid = ?&quot;, userid); memcached_add(&quot;userrow:&quot; + userid, result);
      • }
      • return result;
      • }
    • קבצים
      • בשביל למתוח את השרת כמה שאפשר , יש להמנה כמה שיותר מגישה למקמומות איטיים , כמו קבצים
      • להעביר את ה sessions למסד נתונים עם טבלה בזכרון , או ל memcache
      • להשתמש ב opcode cache כדי ש – PHP לא יגש לקבצים כל פעם
      • להעביר לוגים ל sqlite
    • מעקב אחר המערכת
      • על כל מערכת - צריך להיות מעקב
      • יש מערכות שונות למעקב אחר אתרים
        • cacti
        • rrd
    • קצת נתונים - flickr
      • LAMP + memcached + SQUID
      • יותר מ -4 מיליארד שאילתות ביום
      • יותר מ -400,000 תמונות נוספות כל יום
      • Memcached שמור נתונים ממסדי הנתונים , אחרי שפעם אחת העמוד נבנה , SQUID כבר מביא גרסה מוכנה שלו , עד העידכון הבא
    • קצת נתונים - Wikimedia
      • LAMP + memcached + squid + lighttpd
      • האתר ה -10 בכמות הטראפיק באינטרנט
      • 30,000 שאילתות HTTP בשניה בשעות העומס
      • 55 שרתי squid
      • Lighttpd – משרת את התמונות והקבצים הסטאטיים
    • קצת נתונים - Metacafe
      • LAMP + memcached
      • 30 מיליון משתמשים יחודיים בחודש
      • גם HTML וגם נתונים נשמרים ב - memcached
      • מספר שרשתי memcached יעודיים , שמשרתים את כל שרתי הווב
    • שאלות ?