php scalability

23
PHP לללל לללל לללל ללל ללל'ללללל ללל2008

Upload: guest2b909d

Post on 24-May-2015

2.822 views

Category:

Technology


4 download

DESCRIPTION

Metacafe's PHP Scalability Lecture by David Tabachnikov

TRANSCRIPT

Page 1: PHP Scalability

PHP בקנה מידה גדול

דוד טבצ'ניקוב

2008מרץ

Page 2: PHP Scalability

מטהקפה

אתר לשיתוף וידאו בידורי קצר30מיליון משתמשים יחודיים בחודש -עובדים ב( Linux, Apache, MySQL, PHP )

LAMPPHP 5.2, MySQL5, memcached, RedHat

Enterprise

Page 3: PHP Scalability

הסתל-מה?

Scalability הסתלמות( זה מאפיין של( מערכת, רשת או תהליך, שמגדיר את היכולת של המערכת הנ"ל לגדול בצורה חלקה, בזמן,

עלות, ויעילות מירבית.

.גדילה אופקית ואנכית ,המערכת שלנו צריכה להיות מוכנה לגדול

גם בקוד וגם ברשת.

Page 4: PHP Scalability

גדילה בקוד

הדבר הראשון שצריך לבדוק, זה בעיותמהירות בקוד

Page 5: PHP Scalability

(scaling up)גדילה אנכית

כשהמערכת לא עומדת בעומס, מוסיפים עודמשאבים למכונה.

לא תמיד טוב, יקר, ובאיזשהו שלב בכלל לאאפשרי.

יכול להיות טוב בשלבים הראשונים שלהגדילה, אבל לא טוב בטווח הארוך.

Page 6: PHP Scalability

( scaling out )גדילה אופקית

במקום להוסיף כוח למכונה הקיימת, הרבהיותר קל ובדרך כלל יותר זול, להוסיף עוד

מכונות. יותר מחשבים, הרבה יותר קשה לנהל, פיתוח

מסובך יותר. הקוד, מסדי הנתונים, ומבנה הרשת צריכים

לאפשר מצב, שבו מכונות שונות משרתות משתמשים שונים, ולפעמים אפילו את אותם

המשתמשים, בלי שהם ירגישו.

Page 7: PHP Scalability

אזורים של המערכת

קריאות בחודש, 1,000,000האתר גדל, במקום קריאות. מה עושים?3,000,000עכשיו כבר יש

!מוסיפים שרתים

?מה צריך לייעלאת המערכת באופן כללימסד הנתוניםהקוד

Page 8: PHP Scalability

שלב ראשון - חלוקת עומסים

שרתים.2דבר ראשון – להוסיף עוד ( להוסיף מחלק עומסיםload balancer ,לפניהם )

ולתת לו לשלוח קריאות כל פעם לשרת אחר, לשרת הכי פחות עמוס.

בעיה – אם כל קריאה מגיע לשרת אחר, איך זוכרים(state, sessions)מה המשתמש עשה?

-אפשר להגדיר בload balancer שכל קריאה מאותו ( stickiness )לקוח תגיע לאותו שרת

-אפשר לבזר גם את הsession

Page 9: PHP Scalability

שלב שני – לעצור בדרך

בדרך כלל, החלק הכי איטי באפליקציית ווב, היאהעמודים הדינאמיים.

אז זה רעיון טוב להעביר את הדברים הסטאטייםהחוצה.

?מה זה קבצים סטאטייםJSCSSתמונותאפילו תמונות דינאמיותפלאש

Page 10: PHP Scalability

שלב שני – לעצור בדרך - המשך

?מה אפשר לעשות עם דברים סטאטייםSQUIDביציאה שרת נפרד עםlighttpd או ,thttpd.CDN

Page 11: PHP Scalability

שלב שלישי – צווארי בקבוק

פרשןPHP מטמוןopcode-לשמור את הHTMLבקבצים

מסד נתוניםלשמור את הנתונים במטמון

קבצים מערכת הקבצים היא אחת המערכות הכי איטיות

שישלטעון דברים לזכרון

Page 12: PHP Scalability

OPCode Cache

שומר גרסא מתורגמת של הקוד בזכרון, במקוםלהריץ את הפרשן כל פעם.

APC(Drupal – )604% מעל PHP

eAccelerator688% מעל - PHP

http://2bits.com/articles/benchmarking-apc-vs-eaccelerator-using-drupal.html

Page 13: PHP Scalability

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);

}

}

Page 14: PHP Scalability

מסדי נתונים

באיזשהו שלב, שרתDB אחד לא יחזיק מעמד מול כמות הקריאות שבאה מהשרתים

מה עושים? גודלים אופקיתשרת אחד – מאסטר, לכתיבות שרתים נוספים, רפליקות(replications) לקריאה

בלבד

Page 15: PHP Scalability

רפליקות

לוקח זמן להתעדכן עדיין מקבלות עומס מהמאסטר כשיש

עידכונים מה עושים כשצריך עדכון מיידי? לכתוב וישר

לקרוא?לכתוב במקביל גם לזכרון המטמון

Page 16: PHP Scalability

memcache

פותח בשבילLiveJournal אבל היום חלק גדול , ,Facebookמהאתרים הגדולים משתמשים בו, כמו Wikipedia, Slashdot, Digg, Metacafe.

.שומר נתונים בזכרון מיועד בעיקר לנתונים שבאים ממסד נתונים או

ממקור נתונים אחר. אך מתברר כיעיל גם במקרה שלHTML ואפילו ,

.sessionשמירה של

http://www.danga.com/memcached/

Page 17: PHP Scalability

memcacheדוגמא של

function get_foo )int userid( {

result = memcached_fetch)"userrow:" + userid(;

if )!result( {

result = db_select)"SELECT * FROM users WHERE userid = ?", userid(; memcached_add)"userrow:" + userid, result(;

}

return result;

}

Page 18: PHP Scalability

קבצים

בשביל למתוח את השרת כמה שאפשר, יש להמנהכמה שיותר מגישה למקמומות איטיים, כמו קבצים

להעביר את הsessions למסד נתונים עם טבלה memcacheבזכרון, או ל

להשתמש ב opcode cacheכדי ש –PHP לא יגש לקבצים כל פעם

להעביר לוגים לsqlite

Page 19: PHP Scalability

מעקב אחר המערכת

על כל מערכת - צריךלהיות מעקב

יש מערכות שונותלמעקב אחר אתרים

cactirrd

Page 20: PHP Scalability

flickrקצת נתונים -

LAMP + memcached + SQUID

-מיליארד שאילתות ביום4יותר מ -תמונות נוספות כל יום400,000יותר מ

Memcached ,שמור נתונים ממסדי הנתונים כבר SQUIDאחרי שפעם אחת העמוד נבנה,

מביא גרסה מוכנה שלו, עד העידכון הבא

Page 21: PHP Scalability

Wikimediaקצת נתונים -

LAMP + memcached + squid + lighttpd

-בכמות הטראפיק באינטרנט10האתר ה 30,000 שאילתות HTTP בשניה בשעות

העומס55 שרתי squidLighttpd משרת את התמונות והקבצים –

הסטאטיים

Page 22: PHP Scalability

Metacafeקצת נתונים -

LAMP + memcached

30מיליון משתמשים יחודיים בחודש גםHTML וגם נתונים נשמרים

memcachedב- מספר שרשתיmemcached ,יעודיים

שמשרתים את כל שרתי הווב

Page 23: PHP Scalability

שאלות?