Your SlideShare is downloading. ×
0
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
PHP Scalability
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

PHP Scalability

2,817

Published on

Metacafe's PHP Scalability Lecture by David Tabachnikov

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,817
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
92
Comments
0
Likes
1
Embeds 0
No embeds

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. שאלות ?

×