High Scale Web Infrastructure 2012

porsche cayenne งามจริงๆ 🙂

สวัสดีครับ ช่วงนี้ ผมมักจะพูดถึงแต่เรื่อง Web Security ไม่ค่อยได้พูดถึงเรื่อง
การวาง Web Infrastructure มากนัก เพราะว่า ถ้าวางแผน วางครั้งแรก ดีๆ
มีการ monitor และ มีระบบ alert เมื่อ service มีปัญหา ก็จะทำให้ ปัญหาจุกจิกไม่มี

วันนี้ ผมจะมาพูดถึง technology ของเว็บในปี 2012 ว่า เราสามารถใช้ Open Source
ตัวไหนมาช่วยได้บ้าง ในที่นี้ผมจะพูดถึงเว็บทั่วๆ ไป และอ้างอิง technology ที่ใช้กัน
กับเว็บใหญ่ๆ ระดับโลกเช่น Facebook, Youtube และอื่นๆ ..
Varnish ตัวนี้ เป็น caching อย่างดี สำหรับเว็บในยุคนี้ คือจะสามารถ cache
ได้หลายระดับมาก และยังเขียน VCL (Varnish Configuration Language) ได้ละเอียด
ผมชอบตัวนี้มากๆ มันทำได้ดีและง่ายกว่าพวก hardware หรือ load balancer ราคาแพงๆ
เสียอีก เหมาะอย่างยิ่งกับเว็บที่เป็น static page ล้วนๆ แทบจะไม่ต้องไปเรียก web server
กันเลยทีเดียว หรือ dynamic page ก็สามารถ caching ได้ แต่เวลาที่มีการ update page
ใหม่ ต้องมีการ purge/ban URL หรือ page หรือ file ที่ไม่ต้องการให้ cache ออกไป
nginx (Engine X) ตัวนี้เป็น web server ที่ผมชอบมากๆ ส่วนตัวแล้ว ผมเอามาทำ
เป็น web server สำหรับ static file เพราะถ้าเทียบกับ web server รุ่นเก๋าอย่าง Apache22
แล้ว nginx เองทำงานเบากว่ามากๆ เรียกได้ว่า แทบไม่เปลือง memory ของเครื่องเลย
หรือถ้าเป็นไปได้ เอามาใช้กับเว็บที่ใช้ PHP แทน Apache22 ได้ ก็จะทำให้ web server
ทำงานบำลง แต่ได้ประสิทธิภาพเพิ่มขึ้นมาก ..
memcached เป็นอีกตัวนึงที่ใช้ร่วมกันเวลาเขียนโปรแกรม แล้วไม่ต้องเก็บ data เล็กๆ
บางอย่างลง file หรือเวลา query data มาจาก database ก็สามารถ เก็บลงบน memcached
ที่เป็น memory ก่อน ก็จะทำให้ ทำงานได้เร็วขึ้นมาก ..
FlashCache อันนี้ผมพูดถึงระดับ Kernel ของเครื่องที่ใช้ทำ File Server ตัวนี้ จะช่วยได้มาก
เวลาที่มีการเรียก file ต่างๆ ซ้ำๆ กัน จะไม่ต้องไปเรียก จาก file จริงๆ แต่จะมีการเรียกที่ระดับ
cache ของ Kernel แทน ตรงนี้ เป็นข้อดีของ Linux ที่ออกแบบโครงสร้างของ OS มาได้ดีมาก
PHP ผมจะไม่พูดถึงก็เป็นไปไม่ได้ เพราะว่าเว็บประมาณกว่า 90% ของโลก ใช้ PHP เขียน
สำหรับ PHP เอง ก็มีวิธีการที่ให้ทำงานได้เร็ว และมีประสิทธิภาพมากขึ้น โดยไม่ต้องทำอะไรมาก
เราสามารถใช้พวก Alternative PHP Cache (APC) มาลดการใช้งาน CPU ในการ compile code
ของ PHP ลงได้ ตัวนี้ ต้องลองใช้กันดูครับ สำหรับเว็บที่มีการใช้งาน PHP หนักๆ ..

สำหรับในเรื่องของส่วนอื่นๆ ที่ไม่ใช่ส่วนของ web server กันบ้าง แต่ก็มีความเกี่ยวข้องกัน
MySQL ผมว่าเป็น Database ที่ดีมากๆ ตัวนึง อยู่ที่ว่าเราออกแบบโครงสร้างและ optimize
ได้ดีเพียงใดเท่านั้น การทำ index ก็เป็นเรื่องที่สำคัญ บางครั้ง ผมเจอ load จำนวนมหาศาล
และทำงานได้ช้ามาก พอเข้ามาดูพบว่า ไม่มีการทำ index ที่ดี พอทำไป load หายไปหมด
และทำให้ทำงานได้เร็วขึ้นมากๆ ด้วย ตรงนี้ เป็นส่วนที่สำคัญมากครับ ..
noSQL มีอยู่หลายตัวที่นิยมนำมาใช้กัน แต่ผมจะไม่ได้พูดถึงในที่นี้ เพราะต้องยอมรับว่า
ที่ผ่านมา งานผมแค่ MySQL+Memcached ก็เอาอยู่แล้ว เลยยังไม่จำเป็นต้องใช้พวก
noSQL ต่างๆ พวกนี้ มาช่วยลดภาระของ Database หลัก ..
Wowza ตัวนี้ ไม่ถือว่าเป็น Open Source แต่ราคาก็ถือว่าไม่แพงมาก ถ้าเทียบกับ
Software ที่ใช้ทำ Streaming Server ตัวอื่น และประสิทธิภาพ เท่าที่ผมได้ทดลองใช้
ถือว่ายอดเยี่ยมเลยทีเดียว รองรับจำนวนผู้ใช้งานจำนวนมากได้พร้อมๆ กัน และยัง
มี format ในการ stream ได้รองรับทุก OS ทุก browser ไม่ว่าจะเป็น iOS, Android

ที่พูดมานี้ ก็เป็น technology ของยุคนี้ ที่เกี่ยวกับ web service, web application ต่างๆ
จริงๆ แล้วยังมี software อีกหลายๆ ตัวที่น่าสนใจ แต่ยังไม่ได้ใช้เป็นส่วนหลักๆ
วันหลังผมจะมาเขียนถึงแนวคิดต่างๆ ที่ควรคำนึงถึงในการวางระบบใหญ่ๆ ว่า มีอะไรบ้าง
ที่จะทำให้ระบบของเรามีประสิทธิภาพ รองรับกับการใช้งานของคนจำนวนมากได้ และสามารถ
ตรวจสอบปัญหา และแก้ไข ได้เร็ว ทันที ตลอดเวลา ..

Web Security Lesson #2

สวัสดีครับ ช่วงนี้ผมเจอกับเรื่อง security บ่อยมาก ก็เลยมาเขียน Lesson #2 ซะเลย
สำหรับผู้ที่หัดเขียนโปรแกรมใหม่ หรือว่าเขียนมานานแล้ว แต่ไม่ได้ใส่ใจตรงนี้เท่าไรนัก
ลองมาอ่าน ตอนนี้ดูกันครับ เกี่ยวกับการ upload file ไม่ว่าจะเป็น images, video
หรืออะไรก็ตามที่ต้องใช้ การ upload คือให้ user สามารถ upload อะไรไปไว้ที่ server ได้

สิ่งที่ควรระวัง คือ
– ต้องกันไม่ให้ upload file ที่สามารถทำงานได้ เข้าไปบน server เช่น .php, .pl, .asp, .cgi
– การใช้ java script check ประเภทของ file หรือกันประเภทของ file ไม่ควรทำ เพราะ
hacker สามารถ สั่งไม่ให้ browser รัน javascript ได้
– การ check mine type ของ file นั้นไม่เพียงพอ เพราะ hacker สามารถ save file เป็น
type ต่างๆ ตามที่เค้าต้องการได้ เช่น จาก c99.php เป็น c99.jpg แบบนี้ ก็จะสามารถ
upload file php ขึ้นไปรันบน server ได้แล้ว ถึงจะเป็น .jpg ก็จริง แต่ว่า hacker
มีวิธีในการ rename file มากมาย ที่เกิดจากช่องว่างของโปรแกรมในส่วนต่างๆ
– การ check ว่าเป็นรูป จริงหรือไม่ ควรใช้ การ getimagesize() จะน่าเชื่อถือกว่า
ว่าเป็นรูปจริงๆ
– ใน directory ที่ใช้เก็บรูปหรือ file นั้น จำเป็นอย่างยิ่ง ที่จะต้องให้ พวก script ต่างๆ
สามารถทำงานได้ เพราะว่าโอกาสที่ในส่วนของการ upload มีสูง เราจริงควรดูตรงนี้ให้ดี
สำหรับวิธีง่ายๆ ก็คือ สร้าง .htaccess สำหรับ PHP ถ้าเราจะไม่ให้ทำงานใน directory
นี้ได้ ก็ให้ใส่ค่านี้ลงไป php_flag engine off คราวนี้ .php ต่างๆ ก็จะทำงานไม่ได้แล้ว

สำหรับเรื่องพวกนี้ เราควรใส่ใจมาก เพราะถ้าเกิดมีการหลุดของพวก php shell เข้าไปแล้ว
hacker สามารถทำทุกอย่างใน server ได้อย่างเต็มที่ ที่นิยมกันก็คืือ c99, r57

วันหลังผมจะมาเขียนว่า เราจะสามารถหาพวก php shell อันตรายเหล่านี้ใน server เรา
ได้อย่างไร ท้ายที่สุด อยากฝากว่าอย่าละเลยเรื่อง security เพราะพลาดเพียงนิดเดียว
สิ่งที่ไม่คาดคิด หรือหายนะ อาจจะมาเยือนได้ 🙂

สำหรับ Video สอนเกี่ยวกับเรื่อง Web Security ที่น่าสนใจจาก UC Berkeley
สามารถเข้าดูได้ที่ http://61.90.198.151/ucb/