php scalability
DESCRIPTION
Metacafe's PHP Scalability Lecture by David TabachnikovTRANSCRIPT
PHP בקנה מידה גדול
דוד טבצ'ניקוב
2008מרץ
מטהקפה
אתר לשיתוף וידאו בידורי קצר30מיליון משתמשים יחודיים בחודש -עובדים ב( Linux, Apache, MySQL, PHP )
LAMPPHP 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
שלב שני – לעצור בדרך
בדרך כלל, החלק הכי איטי באפליקציית ווב, היאהעמודים הדינאמיים.
אז זה רעיון טוב להעביר את הדברים הסטאטייםהחוצה.
?מה זה קבצים סטאטייםJSCSSתמונותאפילו תמונות דינאמיותפלאש
שלב שני – לעצור בדרך - המשך
?מה אפשר לעשות עם דברים סטאטייםSQUIDביציאה שרת נפרד עםlighttpd או ,thttpd.CDN
שלב שלישי – צווארי בקבוק
פרשןPHP מטמוןopcode-לשמור את הHTMLבקבצים
מסד נתוניםלשמור את הנתונים במטמון
קבצים מערכת הקבצים היא אחת המערכות הכי איטיות
שישלטעון דברים לזכרון
OPCode Cache
שומר גרסא מתורגמת של הקוד בזכרון, במקוםלהריץ את הפרשן כל פעם.
APC(Drupal – )604% מעל PHP
eAccelerator688% מעל - 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)"userrow:" + userid(;
if )!result( {
result = db_select)"SELECT * FROM users WHERE userid = ?", userid(; memcached_add)"userrow:" + userid, result(;
}
return result;
}
קבצים
בשביל למתוח את השרת כמה שאפשר, יש להמנהכמה שיותר מגישה למקמומות איטיים, כמו קבצים
להעביר את הsessions למסד נתונים עם טבלה memcacheבזכרון, או ל
להשתמש ב opcode cacheכדי ש –PHP לא יגש לקבצים כל פעם
להעביר לוגים לsqlite
מעקב אחר המערכת
על כל מערכת - צריךלהיות מעקב
יש מערכות שונותלמעקב אחר אתרים
cactirrd
flickrקצת נתונים -
LAMP + memcached + SQUID
-מיליארד שאילתות ביום4יותר מ -תמונות נוספות כל יום400,000יותר מ
Memcached ,שמור נתונים ממסדי הנתונים כבר SQUIDאחרי שפעם אחת העמוד נבנה,
מביא גרסה מוכנה שלו, עד העידכון הבא
Wikimediaקצת נתונים -
LAMP + memcached + squid + lighttpd
-בכמות הטראפיק באינטרנט10האתר ה 30,000 שאילתות HTTP בשניה בשעות
העומס55 שרתי squidLighttpd משרת את התמונות והקבצים –
הסטאטיים
Metacafeקצת נתונים -
LAMP + memcached
30מיליון משתמשים יחודיים בחודש גםHTML וגם נתונים נשמרים
memcachedב- מספר שרשתיmemcached ,יעודיים
שמשרתים את כל שרתי הווב
שאלות?