Confirm Dialog อยู่ไหน!!!

คุณเคยไหมที่ Remote Desktop เข้าไปเช็ค IP/DNS ที่ Network Properties ของ Server แล้วกดปุ่ม Properties พลาด เพราะเน็ตดันกระตุก แถมดันไปโดนปุ่ม Disable ตัว Network Card แทน!!!! (╯°□°)╯︵ ┻━┻)

กดไปปั้บ Remote Desktop มัน Terminate ตัวเอง แทบร้องกรี๊ดสาวแตกลั้นบ้าน!!! เพราะระบบมันยัง online production อยู่ เล่นเอา down ไป 1 ชั่วโมงกว่าๆ (ดีนะที่มีคนเข้า site งานพอดี และยังไม่มีคนใช้งาน เลยให้เค้าไป Enable กลับได้)

พี่ Microsoft ครับ พี่ช่วยทำ Confirm Dialog ให้สักหน่อยก็ดีนะครับ ผมไหว้หล่ะ -/\-
(Windows 8 พี่ก็ไม่ถามสักนิดเหมือนกัน)

2013-02-25_160726

จ่ายเท่าที่ใช้งานกับ Cloud Virtual Machines

ช่วงนี้ผม deploy ตัวงานขึ้น Windows Azure Virtual Machines ไป 1 ระบบแล้ว และในช่วงวันหยุดนี้กำลังจะมีอีก 1 ระบบ และในอนาคตอีกหลายตัว

เหตุผลที่ตอนนี้ผมแนะนำ Cloud Virtual Machines เยอะขึ้นเรื่อยๆ เพราะค่าใช้จ่ายเริ่มต้นของระบบที่ไม่แพงมาก เมื่อเทียบกับหลายๆ อย่างที่ได้รับมา (ไม่ได้หมายความว่าจะใช้แต่ของ Windows Azure นะ Amazon EC2 ก็ใช้ได้ แล้วแต่ถนัดแล้วกัน)

คือการลงทุนตัว H/W อย่าง Server นั้นมีค่าใช้จ่ายเริ่มต้นที่แพง และสินค้าเทคโนโลยีมีแต่ราคาค่าเสื่อมที่ลดลง เพราะฉะนั้น เราซื้อ H/W ราคาหนึ่งในวันนี้ ใน 18 เดือนต่อมาอาจมีราคาของระบบเพียง 20-60% ของราคาที่ซื้อมาเท่านั้น (แล้วแต่ H/W แต่ละประเภทด้วย) การตั้งต้นระบบที่ไม่แน่ว่าจะทำตลาดได้ดีหรือไม่ หรือมีภาระระบบที่โหลดหนักๆ เพียงไม่กี่ครั้งต่อปีนั้น ดูจะเป็นการลงทุนเผื่ออนาคตที่สูงมากเกินไป

ส่วนตัวแล้วนั้นตอนนี้ผมจึงย้ายระบบที่ Consult หลายๆ ตัวมาไว้บน Cloud เยอะขึ้น เพราะดูที่ค่าใช้จ่ายของลูกค้าที่ต้องจ่ายลงไปแล้วนั้นจะมีค่าใช้จ่ายเริ่มต้นที่ไม่สูงมากนัก

โดยตัวระบบที่ใช้นั้นคือตัว Windows Azure Virtual Machines ซึ่งรองรับ OS หลายตัว ซึ่งมีทั้ง Windows Server 2008 R2, Windows Server 2012, Suse, Ubuntu และ CentOS เป็นต้น โดย Windows Server เราไม่ต้องมาจ่ายเงินค่า Licensing เพิ่มเติม (เหมือนเราจ่ายลงไปเมื่อใช้งานอยู่แล้ว แต่ในจำนวนที่น้อยมากๆ คือจ่ายเฉพาะตอนที่ใช้งาน)

ตัว Windows Azure Virtual Machines เป็น Infrastructure as a Service (IaaS) ที่การคิดเงินของตัว VM นั้น 3 ส่วนหลักๆ คือ
– Compute Time คือจ่ายเฉพาะตอนนี้ VM มันทำงานอยู่เท่านั้น
– Storage Space คือจ่ายเฉพาะพื้นที่ที่ใช้งานจริง
– Data Transfer คือจ่ายเฉพาะที่ใช้ Data ออกจากระบบเท่านั้น

มาดูที่ราคา Compute Time ก่อน จากด้านล่าง

$0.013/hr – Extra small VM (1GHz CPU, 768MB RAM)
$0.08/hr – Small VM (1.6GHz CPU, 1.75GB RAM)
$0.16/hr – Medium VM (2 x 1.6GHz CPU, 3.5GB RAM)
$0.32/hr – Large VM (4 x 1.6GHz CPU, 7GB RAM)
$0.64/hr – Extra large VM (8 x 1.6GHz CPU, 14GB RAM)

ถ้าระบบเราเพิ่งเริ่มต้นก็ใช้ Extra small VM ไปก่อนในการทดสอบระบบ เมื่อ production ไปสักพัก และระบบเริ่มโหลดเยอะจนเริ่มช้า ก็ปรับไปใช้ Small VM และตัวสูงๆ กว่าได้ และเมื่อระบบไม่โหลดก็กลับมาอยู่ที่ Extra small VM ได้ โดยไม่ไม่จำเป็นต้องย้าย Storage ไปมาแต่อย่างใด แค่ restart VM เท่านั้น (ใช้เวลา 5-10 นาที) ก็สามารถย้ายระบบไปใช้ Compute ที่ต่ำหรือสูงกว่าได้ทันที โดยจ่ายเงินเป็นรายชั่วโมงที่ใช้

ในส่วนต่อมาคือ Storage Space ที่เป็น Geo Redundant Storage คือตัว Storage ไม่ได้อยู่ที่เดียว แต่อยู่หลายๆ ที่ โดยวิธีแบ่งไว้ตาม Region โดยมี Primary Region และ Secondary Region ที่ตั้งเป็นค่าเริ่มต้น อย่างที่ผมใช้ก็คือใช้ Primary Region ไว้ที่ Southeast Asia ที่ IDC อยู่ Singapore และระบบมีค่ามาตรฐานที่ทำการตั้งให้ Secondary Region เป็น East Asia ที่มี IDC อยู่ที่ Hong Kong (China) อีกที่ ช่วยป้องกัน link ของ IDC นั้นมีปัญหาจาก Primary Region ซึ่งตัวระบบจะสลับไปอีก IDC ได้ทันที พูดง่ายๆ เหมือนได้ใช้ Server ที่ใส่เว็บไว้สอง IDC โดยจ่ายเงินเท่ากับ IDC เดียว สำหรับราคา Storage Space คิดราคาไว้ 2 แบบคือ Locally Redundant Storage และ Geo Redundant Storage (แบบแรกคือไว้ที่ Region เดียว) โดยราคาเริ่มเต้นที่ 1TB แรกต่อเดือน อยู่ที่ $0.095/GB สำหรับ Geo Redundant และ $0.070/GB สำหรับ Locally Redundant

ต่อมาคือราคา Data Transfer โดย 5GB แรกฟรี ไม่คิดเงิน และราคา GB ต่อไป GB ละ $0.12 แต่ราคา Data Transfer ก็แบ่งตาม Zone ด้วย ตัวอย่างเช่น 10 TB แรก คิดต่อเดือน ที่ $0.12/GB ถ้าใช้ Data Transfer ส่งไปที่ North America และ Europe ส่วนราคา $0.19/GB จะเป็นที่ Zone ของ Asia Pacific, Latin America, Middle East / Africa ถ้าเราทำระบบที่รองรับหลายๆ Zone ก็มีราคาค่าใช้จ่ายที่แตกต่างกันไป

จากที่อธิบายคราวๆ จะเห็นว่าราคานั้นอยู่ที่เราใช้งานเยอะแค่ไหน และจ่ายเท่าที่ใช้งานเท่านั้น ซึ่งจากตัวอย่างที่บอกมานั้น เป็นแค่ Basic เริ่มต้นเท่านั้น ถ้าระบบที่อยาก Scale ออกไปแบบไม่ต้อง downtime ตอน scale up/down ก็จะมีการปรับส่วนของ Load Balancing และเพิ่ม VM เป็น 2-3 ตัวให้ตัวที่กำลัง scale up/down นั้นได้ scale up/down ระบบ และให้ตัว VM ที่ยังไม่ scale up/down นั้นรองรับงานต่อไปก่อนได้ ต้องมีการออกแบบระบบเพิ่มเติมหลายส่วนบน Cloud ซึ่งสามารถทำได้ โดยเราไม่ต้องลงทุนเรื่อง H/W ราคาแพงพวกนี้

มาดูกันว่า CPU execution time ของ Colocation Server, Virtual Private Server และ Cloud Virtual Machines มา benchmark กันจะเป็นอย่างไร

เอา Server ที่ใช้งานเอามาเทียบกันทั้งหมด 5 ตัวคือ

  • Dell PowerEdge 1425 – Intel Xeon 3.0 GHz Processor (64 Bit)
    ตัวนี้อายุเกือบๆ 6 ปีแล้ว แต่ยังทำงานได้ดีอยู่
  • Windows Azure Virtual Machines (VM) Extra Small (XS/S) – Virtual CPU 1Ghz Processor x 1 cores
    ตัวที่ให้บริการ blog นี้อยู่
  • VPS – Intel Virtual CPU 2.4Ghz x 2 cores
    เช่ามาใช้งานเฉพาะด้าน
  • Dell PowerEdge R410 – Intel Xeon E5620 2.40GHz Processor x 4 cores
    อายุใช้งานยังไม่ถึง 1 ปีดี
  • Dell PowerEdge R210 Server – Intel Xeon X3450 2.66Ghz Processor x 4 cores
    อายุใช้งานยังไม่ถึง 1 ปีดี

ตัวซอฟต์แวร์ที่ใช้ในการ benchmark คือ sysbench

คำสั่งที่ใช้คือ

sysbench --test=cpu --cpu-max-prime=20000 run

การรัน benchmark ใช้การทำงานเพียง 1 Thread เท่านั้น เพื่อทดสอบ process เพียงหน่วยประมวลผลเดียว เพื่อลดความได้เปรียบเสียเปรียบจาก CPU Core แต่เมื่อมี Core ของ CPU ที่มากก็สามารถรับโหลดได้เยอะขึ้นสำหรับซอฟต์แวร์ที่ทำงานแบบขนานได้

ผลการรันชุดคำสั่งทดสอบเป็นดังนี้

Server Info/CPU execution time
Dell PowerEdge 1425
– Intel Xeon 3.0 GHz Processor (64 Bit)
78.9891s
Windows Azure
Virtual Machines (VM) Extra Small (XS/S)
AMD Opteron Processor 4171 HE 2.1GHz
– Virtual CPU 1Ghz Processor x 1 cores
–  Shared Core
Virtual Machines (VM) Small (S)
– Virtual CPU 1Ghz Processor x 1 cores
– Reserved Core
45.9640s
(Shared Core – XS)

45.7989s
(Reserved Core – S)

VPS
– Intel Virtual CPU 2.4Ghz x 2 cores
36.1133s
Dell PowerEdge R410
– Intel Xeon E5620 2.40GHz Processor x 4 cores
27.3706s
Dell PowerEdge R210 Server
– Intel Xeon X3450 2.66Ghz Processor x 4 cores
24.5454s

* ตัวเลข execution time ยิ่งน้อยยิ่งเร็ว

จะเห็นได้ว่าความเร็วของการประมวลผลบน Windows Azure นั้นทำออกมาได้ดีกว่า Server เดี่ยวๆ เมื่อหลายปีก่อนพอสมควรเลย ลองตัดสินเอาเองว่าเราต้องการความเร็วในการประมวลผลเยอะเพียงใด และซอฟต์แวร์ที่ใช้เน้นการประมวลผลแบบขนานหรือไม่ ถ้าใช้การประมวลผลแบบขนาน เราสามารถเพิ่ม CPU Core บน VM ได้เรื่อยๆ ตามความต้องการเลยทีเดียว

ผลการทดสอบแบบละเอียด

Dell PowerEdge 1425
Intel Xeon Processor 3.0 GHz (64 Bit) x 1 cores

Maximum prime number checked in CPU test: 20000
Test execution summary:
total time:                          78.9891s
total number of events:              10000
total time taken by event execution: 78.9686
per-request statistics:
min:                                  5.72ms
avg:                                  7.90ms
max:                                 50.48ms
approx.  95 percentile:              14.34ms
Threads fairness:
events (avg/stddev):           10000.0000/0.00
execution time (avg/stddev):   78.9686/0.00

Windows Azure Virtual Machines (VM) Extra Small (XS/S)
AMD Opteron(tm) Processor 4171 HE 2.1GHz
Virtual CPU 1Ghz x 1 cores

Shared Core – XS
Maximum prime number checked in CPU test: 20000
Test execution summary:
total time:                          45.9640s
total number of events:              10000
total time taken by event execution: 45.9519
per-request statistics:
min:                                  4.42ms
avg:                                  4.60ms
max:                                 24.06ms
approx.  95 percentile:               4.68ms
Threads fairness:
events (avg/stddev):           10000.0000/0.00
execution time (avg/stddev):   45.9519/0.00

Reserved Core – S
Maximum prime number checked in CPU test: 20000
Test execution summary:
total time:                          45.7989s
total number of events:              10000
total time taken by event execution: 45.7871
per-request statistics:
min:                                  4.23ms
avg:                                  4.58ms
max:                                 21.47ms
approx.  95 percentile:               4.72ms
Threads fairness:
events (avg/stddev):           10000.0000/0.00
execution time (avg/stddev):   45.7871/0.00

 

My Private Client VPS
CPU Intel Virtual CPU 2.4Ghz x 2 cores

Maximum prime number checked in CPU test: 20000
Test execution summary:
total time:                          36.1133s
total number of events:              10000
total time taken by event execution: 36.1074
per-request statistics:
min:                                  3.00ms
avg:                                  3.61ms
max:                                 16.57ms
approx.  95 percentile:               4.22ms
Threads fairness:
events (avg/stddev):           10000.0000/0.00
execution time (avg/stddev):   36.1074/0.00

Dell PowerEdge R410
Intel(R) Xeon(R) E5620 2.40GHz

Maximum prime number checked in CPU test: 20000
Test execution summary:
total time:                          27.3706s
total number of events:              10000
total time taken by event execution: 27.3697
per-request statistics:
min:                                  2.69ms
avg:                                  2.74ms
max:                                  5.32ms
approx.  95 percentile:               2.77ms
Threads fairness:
events (avg/stddev):           10000.0000/0.00
execution time (avg/stddev):   27.3697/0.00

Dell PowerEdge R210 Server
Intel Xeon X3450 Processor

Maximum prime number checked in CPU test: 20000
Test execution summary:
total time:                          24.5454s
total number of events:              10000
total time taken by event execution: 24.5444
per-request statistics:
min:                                  2.45ms
avg:                                  2.45ms
max:                                  3.64ms
approx.  95 percentile:               2.45ms
Threads fairness:
events (avg/stddev):           10000.0000/0.00
execution time (avg/stddev):   24.5444/0.00

สังคมอุดมเปลือก?

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

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

สังคมอุดมเปลือกซินะ…

Blog in the Cloud!!!

ตอนนี้ผมย้าย blog ตัวเองนี้ (http://www.thaicyberpoint.com/) และ personal web site (http://www.fordantitrust.com/) ใส่เข้า Windows Azure Virtual Machines เรียบร้อยแล้ว (ทั้ง 2 เว็บนี้มันแทบจะเป็นเว็บเดียวกันอยู่แล้ว เพราะฉะนั้น ถ้าจะย้ายก็ต้องทำทั้งสองเว็บไม่งั้นไม่เนียน)

เหตุผลที่ผมเลือกตัว Virtual Machines (VM) และใช้ Extra Small (XS) เพราะราคาต่อชั่วโมงเหมาะสมกับปริมาณการใช้งานตอนนี้ (ราคาต่อชั่วโมงมันแพงสุด แต่ถ้าเทียบ spec ต่อราคาชั่วโมงแล้วมันถูกสุด) ต้องบอกก่อนว่า Cloud สำหรับ VM นั้นคิดราคาที่ Compute เป็นหลัก (ราคาตามการประมวลผล) โดยถ้าเป็น VM จะคิดเหมาทั้งเดือน (เหมือนจองไว้เลย) ซึ่งตกชั่วโมงละ $0.013 หรือตีเป็นเดือนละ $9.36 ถ้าไม่ได้ปรับ scale up/down ตัว Compute ไปตัวที่สูงกว่านี้ (ปรับการ scale up/down ได้นั้นดีที่ระบบมันคิดราคาตามใช้งานจริงเป็นชั่วโมง เหมาะกับเว็บที่มีโหลดเฉพาะเวลาใดเวลานึง ไม่ต้องจ่ายโหลด Compute แบบเหมาตลอดเวลา) ซึ่ง XS VM ที่ได้มีความเร็วที่ CPU 1GHz โดยประมาณ และมี RAM 768 MB ซึ่งผมมองว่าเพียงพอต่อ Blog ผมอยู่แล้ว (กำลังคิดว่าจะย้ายเว็บส่วนตัวมาลงอีกหลายตัว)

OS ใน VM นั้นติดตั้ง Ubuntu Server 12.04 LTS แล้วลง Apache, MySQL และ PHP 5.4 แล้วก็ติดตั้งเหมือน Server Hosting ปรกติทั่วไป (ทำ Virtual Host บน Apache ด้วย) โดยตัว Storage ที่ติดตั้งนั้นจะอยู่บน Cloud ที่จะได้พื้นที่มา 30GB ซึ่งเป็น Storage แบบ Geo Redundant ที่ตั้ง Primary Region ไว้ที่ Southeast Asia ที่ IDC อยู่ Singapore และ Azure ทำการตั้งให้ Secondary Region ผมเป็น East Asia ที่มี IDC อยู่ที่ Hong Kong (China) อีกที่ (เป็นค่ามาตรฐานเลย) ช่วยป้องกัน link ของ IDC นั้นมีปัญหาจาก Primary Region ซึ่งตัวระบบจะสลับไปอีก IDC ได้ทันที พูดง่ายๆ เหมือนได้ใช้ Server ที่ใส่เว็บไว้สอง IDC โดยจ่ายเงินเท่ากับ IDC เดียว

สำหรับความเร็วในการย้ายไฟล์กว่า 700MB นั้นอยู่ที่ประมาณ 15 นาที โดยวืธีการย้ายแบบเร็วที่สุดคือให้ Host (Server) กับ Host (Server) มันส่งไฟล์กันเอง โดยวางไฟล์เป็นก้อนเดียวด้วย tar gzip วางไฟล์อยู่บน Server ที่ IDC เก่า (CSLox CyberWorld) แล้วให้ Azure วิ่งมา wget เอาไฟล์ที่ tar gzip ไปแทน (ส่งไฟล์เป็นก้อนเดียวเร็วที่สุด) ตอนส่งไฟล์ได้ความเร็วประมาณ 700KB-1.5MB/s โดยประมาณ คงเพราะมาจากเป็น inter connection ที่ link ของตู้ที่วางเครื่องอยู่มีอยู่ประมาณนี้ก็เลยได้ความเร็วเท่านี้

สำหรับส่วนเรื่องส่งอีเมลออกจาก VM นั้น จากที่ศึกษาดู VM ที่ Azure จะไม่ยอมให้ส่งอีเมลออกจาก VM บนนั้น (คงกลัวว่าเอา VM ไปตั้งส่ง Spam) คำนแนะนำของ Microsoft คือให้หา 2rd party Mail Server และส่ง SMTP บนนั้นแทน (มีให้เลือกเยอะ) แต่ส่วนตัวผมแล้ว ผมมีเมลของ Live Custome Domain อยู่ ก็ไปตั้ง account สำหรับส่งจาก SMTP บนนั้นโดยเฉพาะแทน คือระบบ blog ผมมันไม่ค่อยมีเมลให้ส่งออกอยู่แล้วก็เลยสบายหน่อย แล้วก็กลับมาตั้งที่ตัว WordPress ให้ส่งอีเมลออกทาง SMTP แทน mail function ของ PHP แทน (ลง plugs in เพิ่ม)

จากทั้งหมด ตอนนี้ผมเน้นเรื่อง uptime เป็นหลัก และการที่เราสามารถเข้าจาก inter ได้ดีที่สุดแทนแล้ว ซึ่งการใช้ VM บน Cloud แบบนี้เราสามารถทำ Sub Region ไปในที่ต่างๆ ได้มากกว่า 1 ประเทศทำให้เว็บเรารองรับการเข้าเว็บได้จากคนทั่วโลกได้ดีมากขึ้น ส่วนตัวการย้าย blog มาใช้ Cloud ก็เป็นแผนทดสอบ Azure โดยส่วนตัวก่อน ว่าจะไม่มีปัญหาใดๆ เมื่อนำไปใช้งานจริงใน production web site ของเว็บที่ผม consult อยู่ด้วย คือถ้าตัวเองไม่กล้าลองเอง แล้วใครเค้าจะกล้าลอง เพราะฉะนั้นจริงเป็นการทำ R&D ในรูปแบบหนึ่ง สำรวจว่ามันทำอะไรได้บ้างและมีข้อจำกัดอะไรบ้างก่อนใช้งานที่ซีเรียสจริงๆ