php scalability

Post on 24-May-2015

2.822 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

Metacafe's PHP Scalability Lecture by David Tabachnikov

TRANSCRIPT

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 ,יעודיים

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

שאלות?

top related