บันทึกสั้นๆ กับการลองของบน Windows Azure Web Sites ที่ตั้งให้ทำงานร่วมกับ MySQL บน Windows Azure Virtual Machines

Windows Azure Web Sites เป็นระบบคล้ายๆ กับ Shared Hosting สำเร็จรูปสำหรับใส่เว็บ PHP (เลือกได้ว่าจะเอา 5.3 หรือ 5.4) หรือ ASP.NET ได้ แต่ระบบนั้นสามารถ scale up/down ได้โดยจ่ายเท่าที่ใช้งานจริง โดยภายในมี SQL หรือ MySQL ทำงานด้วย (ใช้พื้นที่เยอะหรือมี load เยอะก็จ่ายตามจริง) แต่ถ้าใช้ MySQL มันจะทำงานกับ ClearDB ที่เป็น Cloud MySQL database ที่ราคาแพงสุดกู่เลยถ้าเอาไปใช้งาน production (มันดีที่ scale ได้ และเป็น Cloud แต่ราคามันก็แพงไป) ด้วยราคาที่แพง ผมจึงปรับแผน ไปใช้ MySQL ที่ผมติดตั้งเองบน Windows Azure Virtual Machines โดยลง Ubuntu Server 12.04 LTS แทน แล้วติดตั้ง MySQL 5.5 บนนั้น โดยการติดตั้งทั้งหมดทำผ่าน SSH แล้วทำการเปิด Firewall Endpoint ที่ port 3306 ให้ Windows Azure Web Sites ติดต่อเข้ามาโดยผมจับ netstat เอาว่าวิ่งเข้ามา IP อะไร แล้ว allow สิทธิ์ตาม IP ที่วิ่งเข้ามา (จากที่เช็คเหมือนไม่ dynamic IP นะ)

การใช้ Windows Azure Web Sites ทำให้เราย้าย Instance ไป regional อื่นๆ หรือเพิ่ม Instance ในกรณีที่ Compute เริ่มตันได้ง่ายๆ ภายในเวลาไม่นานนัก ซึ่งมันง่ายมากๆ สำหรับงานที่ใช้กับเว็บที่รองรับคนเข้าจากหลายๆ พื้นที่บนโลก

โดยรวมตอนนี้ก็โอเคนะ ลองดูที่เว็บที่ลองใช้ตัวอย่างที่ว่าคือ WordPress นั้นเอง (เดี่ยวลอง Drupal อีกตัว)

จากการสำรวจหลังลองของแล้วนั้น บน Windows Azure Web Sites ใช้ Windows Server 2008 R2 Enterprise Edition Service Pack 1 ติดตั้ง IIS 7.1.0761.0, PHP Version 5.3.13 ผ่าน Server API บน CGI/FastCGI ตั้ง memory_limit ที่ 128M ค่าเริ่มต้นของ post_max_size อยู่ที่ 8MB, upload_max_filesize อยู่ที่ 2MB และมี display_errors เป็น Off แต่ 3 ตัวหลังนี้ตั้งค่าเพิ่มเติมได้จาก .user.ini ด้วย

สำหรับ rewrite rule สามารถใช้ได้ โดยผ่าน web.config แต่การตั้งค่าแตกต่างจาก Apache ตรงนี้ต้องศึกษาสักนิดนึง

สำหรับการส่งเมลนั้น ไม่สามารถใช้งานผ่าน mail function บน PHP ไม่ได้ แต่ต้องใช้งานผ่าน 3rd party mail server ข้างนอกแทน (ผ่านพวก SMTP อะไรพวกนั้น) หรือจะใช้ server ที่พ่วงขายร่วมกันก็ได้ (จ่ายเงินเพิ่ม)

Ref.

ความคิดเห็นส่วนตัวกับ Android Camera

จากข่าว ผู้บริหารกูเกิลสัญญา รอพบกับ Nexus พร้อมกล้องคุณภาพเยี่ยม  ส่วนตัวจากที่ได้ลองจับ Android Camera มาแล้วนั้น Android Camera มีปัญหากับการจัดการพลังงานสูงมาก กล้อง DSLR ถ่ายรูป 1,000 shot ด้วยการชาร์จเพียงครั้งเดียวเป็นเรื่องปรกติไปแล้ว แต่ Android Camera ที่มีขายในตอนนี้แค่ 200-300 รูปก็หืดจับแล้ว คือด้วยความที่ Android Camera มันไม่ได้ถูกปรับแต่งให้ใช้งานกล้องอย่างเดียว ตอนที่ใช้ถ่ายรูปจริงๆ แต่ดัานหลังของระบบภายในของมันมีอะไรอีกเพียบที่ทำงานอยู่ และทำให้กินแบตตลอดเวลา ถ้า Android ไม่ปิดระบบพวกที่ว่าได้สมบูรณ์และมุ่งไปที่กล้องและเปิดระบบพวกนี้เฉพาะเวลาที่ใช้จริงๆ มันก็จะมีปัญหาเรื่องนี้อยู่ตลอด และส่วนตัวผมคิดว่า Google คงไม่ได้คิดจะทำแบบนั้น เอาง่ายๆ แค่ต้องมาเปิดจอหลังกล้องตอนถ่ายตลอดเวลาก็กินแบตเป็นว่าเล่นแล้ว บนจอ 4” ขึ้นไป

ซึ่งจากดูก็น่าจะมองออกว่า แค่จำนวนภาพแค่นี้กับการที่เราต้องพกแบตสำรองไปเพื่อถ่ายให้ได้จำนวนเท่ากัน บางครั้ง Android Camera อาจจหนักกว่าเสียด้วยซ้ำ

ประเด็นต่อมาคือ ถ้ากล้องแฮงตอนถ่ายงานสำคัญคงร้องไม่ออก แน่ๆ (ณ ตอนนี้) DSLR ทำขึ้นมาบนพื้นฐานความเสถียรและตรงไปตรงมาของระบบ เพราะปุ่มไม่ต้อง minimalize เน้นตรงไปตรงมา ไม่มีช่างภาพที่ถ่าย DSLR จริงจังมากๆ มากดๆ หลังกล้อง LCD ขนาดใหญ่เพื่อเลือก ISO, F Stop หรือ Speed shutter กับงานที่จริงจังและต้องการการปรับแต่งที่สูงทันทีหรอก เอากล้องนาบดู View finder แล้วต้องปรับพวกนี้ได้จากใน View finder แล้วใช้มือจับๆ ที่กล้องเพื่อปรับแทน มันเร็วและทันต่อเหตุการณ์มากกว่า

จากที่บอกแบบคราวๆ ด้านบน ประเด็นที่ผมกำลังบอกคือ ในปัจจุบันมันยังแทนกันไม่ได้ ถึงจะบอกว่าทำ sensor ขนาดใหญ่ แต่ Electronic Shutter ยังมีข้อที่ต้องระวัง เช่นปัญหา Rolling Effect ที่ยังมีปัญหาอยู่ (ผมว่าคิดในอนาคตคงแก้ไขได้) ต่อมาก็เรื่อง Physic ของแสงระหว่างเลนส์และเซ็นเซอร์ยังเป็นประเด็นอยู่ เพราะมันยังไงก็ได้ไม่เท่ากัน (ภาพเบลอโบเก้สวย หรือภาพคมในระยะอนันก็ยังสู้ไม่ได้ เพราะข้อจำกัดที่ Sensor ขนาด/คุณภาพ Optic) มันมีเรื่องที่ต้องคิดซึ่งเป็นข้อจำกัดที่บางครั้งมันไม่เกี่ยวกับ OS หรือชนิดของกล้องถ่ายรูปเพียงอย่างเดียว แต่คนที่คิดถึง Android Camera คือคนที่คิดถึงภาพของกล้องที่ใช้ OS จากมือถือที่ก็รู้ๆ กันอยู่ว่า OS ตัวนี้มันก็มีแฮงๆ ค้างๆ กันอยู่เป็นเรืองปรกติและกล้องและเลนส์ที่ให้มาบนมือถือส่วนใหญ่ก็ Sensor เล็กกว่า Compact และเลนส์ก็ไม่ได้ดีมากด้วย

นี่ยังไม่รวมไปถึง RAW File ที่ถ้าเทียบกับคนที่จะเอา Android Camera มาแทน DSLR แล้วนั้น ถือว่าสำคัญมาก เพราะบางครั้งภาพที่ถ่ายอาจสวยที่หลังกล้อง แต่สุดท้ายภาพนั้นอาจต้องถูกเอาไปใช้งานต่อและมีการปรับแต่งภายหลัง การที่ Android Camera ให้ภาพที่เป็น JPEG เพียงอย่างเดียวนั้น สำหรับช่างภาพที่จะเอามาทดแทน DSLR นั้นไม่เพียงพอแน่ๆ

ประเด็นของเรื่องที่เล่ามาอยู่บนพื้นฐานส่วนตัวที่ถ่ายรูปด้วย DSLR อยู่และตอนหลังก็พกแต่กล้องมือถือไปถ่ายรูปตอนเที่ยวเสียมากกว่า แต่ผมยังมองว่า คำตอบมันอยู่ที่ว่าคุณต้องการภาพที่ดีที่สุดเท่าที่คุณจะมีอุปกรณ์หาได้หรือ ต้องการความสะดวกสบายในการเที่ยวและมีภาพที่พอใช้ได้กับการท่องเที่ยวนั้นๆ มากกว่ากัน

เคยมั้ย? ที่ต้องซื้อตั๋วแล้วล่ม…

แจ้งเพื่อทราบ: เนื้อหน้าต่อไปนี้ เป็นกรณีศึกษาที่เป็นการคาดเดาเหตุผลที่ทำไมถึงล่ม ซึ่งอยู่บนพื้นฐานข้อมูลจริงบางส่วน นำไปใช้อ้างอิงในเหตุการณ์จริงว่าระบบจะล่มเพราะสิ่งที่คาดการณ์นี้ไม่ได้ แต่เป็นเนื้อหา เพื่อใช้ศึกษาความเป็นไปได้จากประสบการณ์ของผู้เขียนเท่านั้น

จากกรณี เดี่ยว 10 ของโน้ส อุดมหยุดขายบัตรกะทันหันหลังระบบขายบัตรล่ม เลยเอามาตั้งโจทย์เล็กๆ ว่า

“มีร้านเซเว่นอีเลฟเว่นที่มีทั้งหมด 8,500 สาขา มีจุดขายเคาน์เตอร์เซอร์วิสรวม 20,000 จุด มีระบบรองรับธุรกรรมสูงสุดระดับ 1,000,000 รายการภายใน 1 วัน”

พูดง่ายๆ คือ มีระบบที่รองรับได้วินาทีละ 11.57 รายการ ตลอดทั้งวัน

จากข่าวต้นเรื่องและโจทย์ทำให้รู้ว่า มีการทดสอบระบบขายบัตร เดี่ยว 10 พร้อมกัน 600 สาขาก็สามารถรับมือได้ แต่ไม่ได้บอกว่ารองรับได้กี่รายการต่อวินาที แต่ผู้ทดสอบลืมไปหรือเปล่าวระบบต้องรองรับ 20,000 จุด ไม่ใช่ 600 จุด ซึ่งทำให้เห็นว่า คนทดสอบระบบกำลังทดสอบระบบที่อัตราความสามารถระบบที่เพียง 1 ใน 30 ของระบบที่กำลังจะต้องไปใช้งานจริงในอนาคต

ลองนึกภาพตามง่ายๆ ว่ามีเซเว่นอีเลฟเว่นและจุดขายเคาน์เตอร์เซอร์วิส กดปุ่มซื้อพร้อมกันในวินาทีเดียวกัน ตอนเปิดขายบัตร เกือบ 20,000 จุดทั่วประเทศ ระบบที่รองรับได้วินาทีละ 11.57 รายการจะรองรับไหวไหม? เพราะระบบที่จะรองรับการทำรายการแบบนี้ได้ต้องพูดว่า “ระบบรองรับธุรกรรมสูงสุดระดับ 1,728,000,000 รายการภายใน 1 วัน” มันถึงจะถูกมากกว่า วิธีการแก้ไขที่ดีอีกวิธีคือการเลี่ยงยิงระบบโดยเพิ่มระบบคิว แบบคล้ายๆ กับจองตั๋วของ AirAsia ก็เป็นการแก้ปัญหาที่ถือว่าโอเคระดับหนึ่ง แต่ก็ยังทำให้ระบบโดยรวมจองตั๋วไปได้ตลอดจนจบทุกๆ รายที่เข้าไปจอง ส่วนอีกแบบคือใช้พวก Cloud service เอาก็ได้นะ ถ้าระบบที่คาดการณ์ไว้แล้วมันไม่ไหวก็ scale เอาได้ทันที แต่ส่วนตัวคิดว่า วิธีคิดของผู้ใหญ่ที่ตัดสินใจคงยังยึดติดกับอะไรเดิมๆ ก็ได้แต่ยืนไว้อาลัย เช่นเรื่องความลับของข้อมูลอะไรพวกนี้ เพราะงานระดับใหญ่แบบนี้มักเลือก Cloud ระดับ Enterprise ที่ค่อนข้าง private และมี NDA Agreement ที่ค่อนข้างเชื่อถือได้อยู่แล้ว

เรากลับมาที่ส่วนการออกแบบ ส่วนตัวผมเชื่อว่าระบบออกแบบให้รองรับคนเยอะ มันก็รองรับได้นะ คือจากระบบที่ผมดูแลและยังคงปรับปรุงระบบอยู่เรื่อยๆ นั้น การรองรับการทำงานแบบวินาทีต่อวินาทีที่มีการกระหน่ำเข้ามาแบบนี้ ปัญหานี้ส่วนใหญ่ที่เจอคือ I/O ระหว่าง DB กับ App มันตันครับ ผมเจอเยอะที่ว่า CPU ทำงานยังไม่ถึง 10% เลย แต่ process มันไปค้างที่ I/O ที่กำลังอ่าน-เขียนกันอยู่ โดยผมลอง top ดูรายการของ process จะเห็นเลยว่า process ฝั่ง App ถูก fork เป็นพันตัว แต่โดน waiting เพียบ เพราะมันไป waiting ข้อมูลที่รอจากฝั่ง DB ซึ่ง DB มันก็กำลังปิดงานที่กำลัง process อยู่เรื่อยๆ ซึ่งในระดับของ DB มันมีคิวอยู่แล้ว มันค่อยๆ ทำไปตามสภาพและความสามารถของ H/W ที่มีอยู่ แต่เมื่อคิวมันเริ่มตัน มันทำงานช้าจนไม่พอที่จะตอบสนองได้ทุก process ที่กำลังกระหน่ำเข้ามา มันเลยพาลทำล่มหมดเพราะหน่วยความจำไม่พอที่จะให้ process ของ App มันไปรอ waiting ได้ทุกตัวครับ

วิธีการแก้ของพวกนี้คือทำยังไงก็ได้ให้ I/O ฝั่ง DB มันทำงานให้ตอบหนองทันกับ process ฝั่ง App ให้ได้ เพื่อไม่ให้เกิด waiting ค้างในระบบนานจนล้นกว่าหน่วยความจำที่มีน่ะครับ เดี่ยวนี้ที่เจอๆ ก็มีหลายแบบนะ คือจับ DB ใช้ SSD ตัวแรงสุด ก็ช่วยได้มาก หรือเอา DB ใส่พวก MEMORY DB แทน ก็ทำงานได้เร็วมากๆ (แต่ตัวหลังไฟดับทีนี่งานเข้าเลยนะ) หรือจะแบ่งโหลดไปเลยก็ได้นะ โดยมี App จัดนึงในการคิวขั้นกลางว่า DB ตัวไหนรับโหลดของ process ID อะไรแบบนั้น ซึ่งถ้าเป็นแบบจองตั๋วแบบนี้แบ่งไปเป็น farm server เอาก็ได้นะ ตัวเลือกรอบการแสดง ก็รู้แล้วว่า farm server ตัวไหนจะรับโหลดรอบไหนไปแทน หรือจะให้ละเอียดกว่านั้นก็คือกระจายระดับ zone ของแต่ละรอบก็ทำให้ระบบโดนกระจายโหลดไปได้มาก ไม่ได้กระหน่ำเข้ามาที่ระบบตัวเดียว แล้วพาลทำล่มทั้งระบบ

คือวิธีการแก้ไขหรือวางแผนมีหลายรูปแบบมากๆ อยู่ที่ว่าตอนทดสอบระบบคิดถึงระดับความเลวร้ายที่สุดที่ระบบจะรองรับได้หรือไม่มากกว่า งานนี้คนทดสอบระบบโลกสวยเกินไปหน่อย  (╯°□°)╯︵ ┻━┻)

Nokia ปล่อยตัว update “Portico” ของ Windows Phone 8 สำหรับ Nokia Lumia 920 ในประเทศไทยแล้ว!

ผมนั่งกดๆ Phone update ทุกวันว่าเมื่อไหร่ Windows Phone 8 ตัวที่แก้ไขปัญหาหลายๆ ด้านและเพิ่มความสามารถที่มากขึ้นในรหัส "Portico" (8.0.10211.204) ของ Nokia Lumia 920 จะปล่อยมาให้ update ในประเทศไทยสักที

มาวันนี้ก็ได้อัพกับเค้าสักที กดๆ เล่นๆ มีให้ update เฉยเลย

แน่นอนว่ารายการอัพเดทก็ตามนี้ครับ Nokia และ Microsoft เริ่มปล่อยอัพเดต Lumia 820/920 ให้กับผู้ใช้ในสหรัฐและแคนาดาแล้ว

กด update มันก็บอกให้ต่อ Wi-Fi ก่อน เพื่อ download ตัว update มาลง

wp_ss_20130214_0002 

ระหวางรอก็ลุ้นๆ กันไป

0sFbXB

โหลดเสร็จแล้วก็ยืนยันการติดตั้งว่าจะติดตั้งแล้วนะ ….

wp_ss_20130214_0003

ระหว่างติดตั้งก็นั่งดูอะไรพวกนี้ไปก่อน ใจไม่ค่อยดีเห็นหน้าตาแบบนี้แล้ว เพราะเคย bricked มาก่อน ฮาๆๆๆ

77eSZz

เมื่อทุกอย่างเรียบร้อยก็ให้ตัว update มัน migrate ตัวข้อมูลกันสักพัก แล้วก็ restart สักรอบนึง

wp_ss_20130214_0004 wp_ss_20130214_0005

 

แล้วทุกอย่างก็จบ!!!

wp_ss_20130214_0006

รวมระยะเวลาทั้งหมดใช้เวลาประมาณ 30 – 40 นาทีเห็นจะได้ (เน็ตมันช้าก็ทำใจนิดนึง) และแบตก็แนะนำให้ชาร์จเต็มๆ 100% ไว้ก่อนแล้วกันครับ

WebKit != W3C

ผมนั่งงงว่า เมื่อไม่กี่ปีก่อนตอน IE6 คนใช้เยอะ ทุกคนหวังกับ W3C จะมาช่วยทำให้มันดีขึ้น เรียกร้องให้ใช้ Mozilla Firefox ที่เป็น Gecko Engine ที่ทำตาม W3C และ IE รุ่นใหม่ๆ ที่ Microsoft พยายามทำ Trident Engine ตัวใหม่ๆ ตาม W3C และในที่สุด IE10 ก็ทำตามมาตรฐาน W3C ได้ดีมากๆ รวมไปถึง Apple Safari และ Google Chrome ที่ใช้ WebKit Engine ที่ทำตาม W3C เช่นกัน

มาวันนี้ ทุกค่ายทำตาม W3C เป็นหลักแล้ว มีการสนับสนุน ออกคำแนะนำต่างๆ มากมาย และข่าวล่าสุด Opera ประกาศทิ้งเอนจิน Presto เปลี่ยนไปใช้ WebKit/Chromium ทั้งหมด ทำให้ค่าย Engine หลักในการพัฒนาตัว Render หน้าเว็บเหลือเพียง 3 Engine หลัก และทั้ง 3 ค่ายพยายามอย่างมากที่จะทำตาม W3C ทั้งหมด

แต่แล้วสิ่งที่ไม่คาดคิดก็คือ Developer วันนี้บอกว่า “ขอ WebKit ค่ายเดียวแล้วกัน ง่ายดี!!!”

ผมก็นั่งงงว่า อ้าว แล้วยังไงต่อดี แล้วเมื่อก่อนหวังกับ W3C ไว้ทำไมเมื่ออดีต สรุปทุกคนก็ติด loop ตัวเองซินะ แค่เปลี่ยนจาก IE6 มาเป็น WebKit แค่นั้น ><”

ปล. จะบอกว่า IE6 มันของ Microsoft มันก็ใช่ แต่ตอนนี้ทุกค่ายพยายามที่จะทำตามมาตรฐาน Open Stanard คือ W3C ก็ควรจะทำตามอันนี้หรือเปล่า ส่วน Engine ตัวไหนมันก็อีกเรืองหนึ่งหรือเปล่า อย่าลืมกรณี Java กับ MySQL ซิครับเหล่ามิตรรัก Developer ทุกท่าน ยังเจ็บไม่จำกันอีกเหรอ ><“