PHP Scalability
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

PHP Scalability

  • 4,400 views
Uploaded on

Metacafe's PHP Scalability Lecture by David Tabachnikov

Metacafe's PHP Scalability Lecture by David Tabachnikov

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,400
On Slideshare
4,225
From Embeds
175
Number of Embeds
10

Actions

Shares
Downloads
91
Comments
0
Likes
1

Embeds 175

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

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. PHP בקנה מידה גדול דוד טבצ ' ניקוב מרץ 2008
  • 2. מטהקפה
    • אתר לשיתוף וידאו בידורי קצר
    • 30 מיליון משתמשים יחודיים בחודש
    • עובדים ב - (Linux, Apache, MySQL, PHP) LAMP
    • PHP 5.2, MySQL5, memcached, RedHat Enterprise
  • 3. הסתל - מה ?
    • Scalability ( הסתלמות ) זה מאפיין של מערכת , רשת או תהליך , שמגדיר את היכולת של המערכת הנ " ל לגדול בצורה חלקה , בזמן , עלות , ויעילות מירבית .
    • גדילה אופקית ואנכית .
    • המערכת שלנו צריכה להיות מוכנה לגדול , גם בקוד וגם ברשת .
  • 4. גדילה בקוד
    • הדבר הראשון שצריך לבדוק , זה בעיות מהירות בקוד
  • 5. גדילה אנכית (scaling up)
    • כשהמערכת לא עומדת בעומס , מוסיפים עוד משאבים למכונה .
    • לא תמיד טוב , יקר , ובאיזשהו שלב בכלל לא אפשרי .
    • יכול להיות טוב בשלבים הראשונים של הגדילה , אבל לא טוב בטווח הארוך .
  • 6. גדילה אופקית (scaling out)
    • במקום להוסיף כוח למכונה הקיימת , הרבה יותר קל ובדרך כלל יותר זול , להוסיף עוד מכונות .
    • יותר מחשבים , הרבה יותר קשה לנהל , פיתוח מסובך יותר .
    • הקוד , מסדי הנתונים , ומבנה הרשת צריכים לאפשר מצב , שבו מכונות שונות משרתות משתמשים שונים , ולפעמים אפילו את אותם המשתמשים , בלי שהם ירגישו .
  • 7. אזורים של המערכת
    • האתר גדל , במקום 1,000,000 קריאות בחודש , עכשיו כבר יש 3,000,000 קריאות . מה עושים ?
    • מוסיפים שרתים !
    • מה צריך לייעל ?
      • את המערכת באופן כללי
      • מסד הנתונים
      • הקוד
  • 8. שלב ראשון - חלוקת עומסים
    • דבר ראשון – להוסיף עוד 2 שרתים .
    • להוסיף מחלק עומסים ( load balancer ) לפניהם , ולתת לו לשלוח קריאות כל פעם לשרת אחר , לשרת הכי פחות עמוס .
    • בעיה – אם כל קריאה מגיע לשרת אחר , איך זוכרים מה המשתמש עשה ? (state, sessions)
      • אפשר להגדיר ב - load balancer שכל קריאה מאותו לקוח תגיע לאותו שרת (stickiness)
      • אפשר לבזר גם את ה - session
  • 9. שלב שני – לעצור בדרך
    • בדרך כלל , החלק הכי איטי באפליקציית ווב , היא העמודים הדינאמיים .
    • אז זה רעיון טוב להעביר את הדברים הסטאטיים החוצה .
    • מה זה קבצים סטאטיים ?
      • JS
      • CSS
      • תמונות
      • אפילו תמונות דינאמיות
      • פלאש
  • 10. שלב שני – לעצור בדרך - המשך
    • מה אפשר לעשות עם דברים סטאטיים ?
      • SQUID ביציאה
      • שרת נפרד עם lighttpd , או thttpd .
      • CDN
  • 11. שלב שלישי – צווארי בקבוק
    • פרשן PHP
      • מטמון opcode
      • לשמור את ה - HTML בקבצים
    • מסד נתונים
      • לשמור את הנתונים במטמון
    • קבצים
      • מערכת הקבצים היא אחת המערכות הכי איטיות שיש
      • לטעון דברים לזכרון
  • 12. OPCode Cache
    • שומר גרסא מתורגמת של הקוד בזכרון , במקום להריץ את הפרשן כל פעם .
    • APC
      • (Drupal) – 604% מעל PHP
    • eAccelerator
      • 688% - מעל PHP
      • http://2bits.com/articles/benchmarking-apc-vs-eaccelerator-using-drupal.html
  • 13. שמירה של 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);
    • }
    • }
  • 14. מסדי נתונים
    • באיזשהו שלב , שרת DB אחד לא יחזיק מעמד מול כמות הקריאות שבאה מהשרתים
    • מה עושים ? גודלים אופקית
      • שרת אחד – מאסטר , לכתיבות
      • שרתים נוספים , רפליקות (replications) לקריאה בלבד
  • 15. רפליקות
    • לוקח זמן להתעדכן
    • עדיין מקבלות עומס מהמאסטר כשיש עידכונים
    • מה עושים כשצריך עדכון מיידי ? לכתוב וישר לקרוא ?
      • לכתוב במקביל גם לזכרון המטמון
  • 16. memcache
    • פותח בשביל LiveJournal , אבל היום חלק גדול מהאתרים הגדולים משתמשים בו , כמו Facebook, Wikipedia, Slashdot, Digg, Metacafe .
    • שומר נתונים בזכרון .
    • מיועד בעיקר לנתונים שבאים ממסד נתונים או ממקור נתונים אחר .
    • אך מתברר כיעיל גם במקרה של HTML , ואפילו שמירה של session .
    • http://www.danga.com/memcached/
  • 17. דוגמא של 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;
    • }
  • 18. קבצים
    • בשביל למתוח את השרת כמה שאפשר , יש להמנה כמה שיותר מגישה למקמומות איטיים , כמו קבצים
    • להעביר את ה sessions למסד נתונים עם טבלה בזכרון , או ל memcache
    • להשתמש ב opcode cache כדי ש – PHP לא יגש לקבצים כל פעם
    • להעביר לוגים ל sqlite
  • 19. מעקב אחר המערכת
    • על כל מערכת - צריך להיות מעקב
    • יש מערכות שונות למעקב אחר אתרים
      • cacti
      • rrd
  • 20. קצת נתונים - flickr
    • LAMP + memcached + SQUID
    • יותר מ -4 מיליארד שאילתות ביום
    • יותר מ -400,000 תמונות נוספות כל יום
    • Memcached שמור נתונים ממסדי הנתונים , אחרי שפעם אחת העמוד נבנה , SQUID כבר מביא גרסה מוכנה שלו , עד העידכון הבא
  • 21. קצת נתונים - Wikimedia
    • LAMP + memcached + squid + lighttpd
    • האתר ה -10 בכמות הטראפיק באינטרנט
    • 30,000 שאילתות HTTP בשניה בשעות העומס
    • 55 שרתי squid
    • Lighttpd – משרת את התמונות והקבצים הסטאטיים
  • 22. קצת נתונים - Metacafe
    • LAMP + memcached
    • 30 מיליון משתמשים יחודיים בחודש
    • גם HTML וגם נתונים נשמרים ב - memcached
    • מספר שרשתי memcached יעודיים , שמשרתים את כל שרתי הווב
  • 23. שאלות ?