0098 | ปิดงาน admission 2553
Friday, May 7th, 2010 Posted in Database, IP Network, PHP Coding, Web Server | 6 Comments »ปีนี้พิเศษนิดนึงที่ admissions.mxphone.com และเว็บประกาศผลในเครือ bodinzone ทั้งหมด
จะยิงมายัง server เดียวเพื่อทดสอบประสิทธิภาพระบบ cloud computing ครับ (แหม่ ใช้คำซะอินเทรนด์)
เอาจริงๆ มันก็ไม่เชิง cloud หรอก แค่เปลี่ยนระบบจัดการข้อมูลใหม่นิดหน่อยเพื่อให้แก้ไขระบบได้สะดวกขึ้น
และเสี่ยงต่อการถูกโจมตีจนระบบล่มใช้งานไม่ได้ (DDoS) น้อยลง เนื่องจากการเข้าใช้งานเป็นไปในลักษณะนั้น
ผลงานรอบนี้ ขอยกความดีความชอบให้ @rtsp ได้เลยครับ ส่วนความผิดพลาดทั้งหลายผมขอน้อมรับไว้เอง
เนื่องด้วยยังอ่อนประสบการณ์เรื่องนี้พอดี T_T ทำให้ระบบร่วงไปประมาณ 30 นาที (ช่วง 17.30 – 18.00 น.)
(มีเวลาเตรียมงาน นับเป็นชั่วโมงก็ราวๆ 4-5 ชั่วโมง แทบไม่ได้ทดสอบอะไรระบบใหม่นี้เลย)
แต่ดูแล้ว ผลเป็นที่น่าพอใจ และปีหน้าไม่พลาดแล้วครับ cloud computing จงเจริญ
สถิติ:
ปริมาณ bandwidth peak 11.6 Mbps เมื่อ 18.05 น.โดยประมาณ (แทบจะทันทีที่ระบบกลับมาใช้ได้)
ปริมาณการร้องขอเข้าใช้งานสูงสุด ณ เวลานั้น 1200 ครั้ง ต่อวินาที โดยประมาณ
CPU ช่วงจังหวะสูงสุดใช้ประมาณ 3 Core เต็มๆ (เทียบจาก Core 2 Quad ความเร็ว 2.53 GHz)
RAM ใช้ไปประมาณ 2GB
ข้อมูลเชิงเทคนิค
Web Server: lighttpd 1.4.19
Server-Side Scripting: PHP 5.2.6
Database: MySQL 5.0.51
IDC: ServeNet
ปีหน้าเอา atom server มารันดีมั้ยเนี่ย :D
0061 | PHP simple object cache
Tuesday, June 2nd, 2009 Posted in Database, PHP Coding, Programming, Web Server | 3 Comments »ระบบ cache มาอีกแล้ว เอ๊อกๆ
คราวนี้เป็น object cache ครับ ไม่ใช่ cache ทั้งหน้าแบบคราวก่อน
<?php $_cachetime = 3600; $_cacheroot = '/path/to/cache/'; function cacheget($key) { global $_cachetime, $_cacheroot; $_cachename = sprintf('%x', crc32($key)); $_cachefolder = $_cacheroot.substr($_cachename,0,2).'/'; $_cachefile = $_cachefolder.$_cachename; if (file_exists($_cachefile) && (filemtime($_cachefile) > time() - $_cachetime || (file_exists($_cachefile.'.lock') && time() - filemtime($_cachefile.'.lock') < 120))) { return unserialize(file_get_contents($_cachefile)); } return false; } function cachelock($key) { global $_cacheroot; $_cachename = sprintf("%x", crc32($key)); $_cachefolder = $_cacheroot.substr($_cachename,0,2).'/'; $_cachefile = $_cachefolder.$_cachename; umask(0); if (!file_exists($_cachefolder)) { mkdir($_cachefolder,0777); } touch($_cachefile.'.lock'); } function cacheset($key, $value) { global $_cacheroot; $_cachename = sprintf('%x', crc32($key)); $_cachefolder = $_cacheroot.substr($_cachename,0,2).'/'; $_cachefile = $_cachefolder.$_cachename; umask(0); if (!file_exists($_cachefolder)) { mkdir($_cachefolder,0777); } if ($_h = fopen($_cachefile, 'w')) { fwrite($_h, serialize($value)); fclose($_h); unlink($_cachefile.'.lock'); } } ?> |
วิธีติดตั้ง:
include ไฟล์ไปบนสุดเลย แก้ตัวแปร $_cacheroot กับ $_cachetime ด้วยนะครับ
chmod 777 folder ตามที่ตั้งใน $_cacheroot ไว้ด้วย
วิธีเรียกใช้:
สมมติว่า cache คำสั่ง sql นะครับ
ถ้าปกติใช้อย่างนี้
<?php $query = 'SELECT * FROM table'; $sql = mysql_query($query); while ($row = mysql_fetch_assoc($sql)) { var_dump($row); } ?> |
ก็แก้เป็นประมาณนี้
<?php $query = 'SELECT * FROM table'; if (!$rows = cacheget($query)) { cachelock($query); $sql = mysql_query($query); $rows = array(); while ($row = mysql_fetch_assoc($sql)) $rows[] = $row; cacheset($query, $rows); } foreach($rows as $row) { var_dump($row); } ?> |