PHP  בקנה מידה גדול דוד טבצ ' ניקוב מרץ  2008
מטהקפה <ul><li>אתר לשיתוף וידאו בידורי קצר </li></ul><ul><li>30  מיליון משתמשים יחודיים בחודש </li></ul><ul><li>עובדים ב -...
הסתל - מה ? <ul><li>Scalability  ( הסתלמות )  זה מאפיין של מערכת ,  רשת או תהליך ,  שמגדיר את היכולת של המערכת הנ &quot; ל...
גדילה בקוד <ul><li>הדבר הראשון שצריך לבדוק ,  זה בעיות מהירות בקוד </li></ul>
גדילה אנכית  (scaling up) <ul><li>כשהמערכת לא עומדת בעומס ,  מוסיפים עוד משאבים למכונה . </li></ul><ul><li>לא תמיד טוב ,  ...
גדילה אופקית   (scaling out)  <ul><li>במקום להוסיף כוח למכונה הקיימת ,  הרבה יותר קל ובדרך כלל יותר זול ,  להוסיף עוד מכונ...
אזורים של המערכת <ul><li>האתר גדל ,  במקום  1,000,000  קריאות בחודש ,  עכשיו כבר יש  3,000,000  קריאות .  מה עושים ? </li>...
שלב ראשון  -  חלוקת עומסים <ul><li>דבר ראשון – להוסיף עוד  2  שרתים . </li></ul><ul><li>להוסיף מחלק עומסים  ( load balance...
שלב שני – לעצור בדרך <ul><li>בדרך כלל ,  החלק הכי איטי באפליקציית ווב ,  היא העמודים הדינאמיים . </li></ul><ul><li>אז זה ר...
שלב שני – לעצור בדרך  -  המשך <ul><li>מה אפשר לעשות עם דברים סטאטיים ? </li></ul><ul><ul><li>SQUID   ביציאה </li></ul></ul...
שלב שלישי – צווארי בקבוק <ul><li>פרשן  PHP </li></ul><ul><ul><li>מטמון  opcode </li></ul></ul><ul><ul><li>לשמור את ה - HTM...
OPCode Cache <ul><li>שומר גרסא מתורגמת של הקוד בזכרון ,  במקום להריץ את הפרשן כל פעם . </li></ul><ul><li>APC </li></ul><ul...
שמירה של  OB <ul><li>public function init(){ </li></ul><ul><li>$this->cacheKey = 'http://' . $_SERVER['HTTP_HOST'] . $_SER...
מסדי נתונים <ul><li>באיזשהו שלב ,  שרת  DB  אחד לא יחזיק מעמד מול כמות הקריאות שבאה מהשרתים </li></ul><ul><li>מה עושים ?  ...
רפליקות <ul><li>לוקח זמן להתעדכן </li></ul><ul><li>עדיין מקבלות עומס מהמאסטר כשיש עידכונים </li></ul><ul><li>מה עושים כשצר...
memcache <ul><li>פותח בשביל  LiveJournal ,  אבל היום חלק גדול מהאתרים הגדולים משתמשים בו ,  כמו  Facebook, Wikipedia, Slas...
דוגמא של  memcache <ul><li>function get_foo (int userid) {  </li></ul><ul><li>result = memcached_fetch(&quot;userrow:&quot...
קבצים <ul><li>בשביל למתוח את השרת כמה שאפשר ,  יש להמנה כמה שיותר מגישה למקמומות איטיים ,  כמו קבצים </li></ul><ul><li>להע...
מעקב אחר המערכת <ul><li>על כל מערכת  -  צריך להיות מעקב </li></ul><ul><li>יש מערכות שונות למעקב אחר אתרים </li></ul><ul><u...
קצת נתונים  -  flickr <ul><li>LAMP + memcached + SQUID </li></ul><ul><li>יותר מ -4  מיליארד שאילתות ביום </li></ul><ul><li...
קצת נתונים  -  Wikimedia <ul><li>LAMP + memcached + squid + lighttpd </li></ul><ul><li>האתר ה -10  בכמות הטראפיק באינטרנט ...
קצת נתונים  -  Metacafe <ul><li>LAMP + memcached </li></ul><ul><li>30   מיליון משתמשים יחודיים בחודש </li></ul><ul><li>גם ...
שאלות ?
Upcoming SlideShare
Loading in...5
×

PHP Scalability

2,857

Published on

Metacafe's PHP Scalability Lecture by David Tabachnikov

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,857
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
92
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

PHP Scalability

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

    Clipping is a handy way to collect important slides you want to go back to later.

×