เมื่อ Windows Azure ไม่ให้ ping ก็ใช้ tcping แทนซิ

การ ping เป็นการใช้ ICMP ในการเรียกเข้าไปยัง Server ปลายทาง ปรกติเอาไว้ทดสอบเรื่องการตอบสนองของ Server ปลายทางว่ายังมีการตอบสนองอยู่หรือไม่ และมีความเร็วในการตอบสนองดีอยู่หรือเปล่า (พื้นฐานทั่วไปใช้ประมาณนี้)

แต่ทีนี้ Windows Azure ดันไม่ยอมให้ ICMP เข้าไปที่ Virtual Machines ด้านหลัง Firewall วิธีที่น่าจะโอเคที่สุดคือตรวจสอบด้วยการ GET ข้อมูลผ่าน TCP แทนว่า service ตัวนั้นยังเปิดใช้งานอยู่หรือไม่ ซึ่งแน่นอนว่าต้องมี service บน port ตรงนั้นก่อน แล้วเปิด Endpoint ที่ port นั้นด้วย

โดยแน่นอนว่าเครื่องมือที่ใช้ในการตรวจสอบว่า port นั้นเปิดอยู่หรือไม่นั้นก็มีเยอะนะ แต่ว่าไม่มีตัวไหนเล็กเท่ากับเจ้า tcping.exe – ping over a tcp connection (http://www.elifulkerson.com/projects/tcping.php) โดยเป็น console application ขนาดเล็ก ที่ทำงานบน Win32 Console ซึ่งทำงานได้บน Windows XP, Vista, 7 และที่ผมใช้อยู่อย่าง Windows 8 ซึ่งเจ้าตัวนี้เป็น license แบบ GPL ที่ตัวหน้าเว็บหลักมี source code ให้สำหรับเผื่อเอาไปพัฒนาต่อได้เองด้วย

ตัว tcping.exe เป็น console application เล็กๆ ที่ทำงานคล้ายๆ กับ ping แต่ทำงานบน tcp protocal ทำให้มันมีความสามารถที่มากกว่า ping ที่ใช้ๆ กันเพียงแค่ request/response ตามปรกติ

ตัว tcping.exe เองนั้น default port ที่ใช้คือ port 80 (http service)

C:\Users\Annop>tcping thaicyberpoint.com

Probing 168.63.238.30:80/tcp - Port is open - time=56.492ms
Probing 168.63.238.30:80/tcp - Port is open - time=55.441ms
Probing 168.63.238.30:80/tcp - Port is open - time=44.554ms
Probing 168.63.238.30:80/tcp - Port is open - time=62.413ms

Ping statistics for 168.63.238.30:80
4 probes sent.
4 successful, 0 failed.
Approximate trip times in milli-seconds:
Minimum = 44.554ms, Maximum = 62.413ms, Average = 54.725ms

แต่ถ้าต้องการที่จะตรวจสอบ port อื่นๆ ก็สามารถกำหนดได้ด้วยการใส่หมายเลข port อื่นๆ ต่อท้ายเอา

C:\Users\Annop>tcping thaicyberpoint.com 22

Probing 168.63.238.30:22/tcp - Port is open - time=79.934ms
Probing 168.63.238.30:22/tcp - Port is open - time=60.144ms
Probing 168.63.238.30:22/tcp - Port is open - time=67.704ms
Probing 168.63.238.30:22/tcp - Port is open - time=61.353ms

Ping statistics for 168.63.238.30:22
4 probes sent.
4 successful, 0 failed.
Approximate trip times in milli-seconds:
Minimum = 60.144ms, Maximum = 79.934ms, Average = 67.284ms

และถ้าต้องการทดสอบความเร็วอื่นๆ นอกจาก response time ปรกติ ก็ใส่ -h เข้าไป ก็ได้ข้อมูลเพิ่มเติมมาอีกพอสมควร

C:\Users\Annop>tcping -h thaicyberpoint.com
** Requesting "" from thaicyberpoint.com:
(for various reasons, kbit/s is an approximation)

Probing 168.63.238.30:80/tcp - HTTP is open - time=39.916ms rcv_time=98.247 status=302 bytes=363 kbit/s=~29.558
Probing 168.63.238.30:80/tcp - HTTP is open - time=34.371ms rcv_time=60.109 status=302 bytes=363 kbit/s=~48.312
Probing 168.63.238.30:80/tcp - HTTP is open - time=35.718ms rcv_time=100.248 status=302 bytes=363 kbit/s=~28.968
Probing 168.63.238.30:80/tcp - HTTP is open - time=36.757ms rcv_time=77.558 status=302 bytes=363 kbit/s=~37.443

Ping statistics for 168.63.238.30:80
4 probes sent.
4 successful, 0 failed.
Approximate trip times in milli-seconds:
Minimum = 34.371ms, Maximum = 39.916ms, Average = 36.691ms
Approximate download times in milli-seconds:
Minimum = 60.109ms, Maximum = 100.248ms, Average = 84.041ms

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

การใช้งาน (นำมาจากเว็บ project)

Usage: tcping [-t] [-d] [-i interval] [-n times] server-address [server-port]

-t   : ping continuously until stopped via control-c
-n 5 : for instance, send 5 pings
-i 5 : for instance, ping every 5 seconds
-w 100 : for instance, wait 100 milliseconds for a response
-d   : include date and time on each line
-b 1 : enable beeps (1 for on-down, 2 for on-up,
3 for on-change, 4 for always)
-r 5 : for instance, relookup the hostname every 5 pings
-s   : automatically exit on a successful ping
-v   : print version and exit
-d   : include date and time on each line

HTTP Options:
-h   : HTTP mode (use url without http:// for server-address)
-u   : include target URL on each line
-p   : use POST rather than GET (to avoid caching)

Debug Options:
-o   : use alternate timing function (less precise)
-f   : force tcping to send at least one byte

If you don't pass server-port, it defaults to 80.

จ่ายเท่าที่ใช้งานกับ 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 ในรูปแบบหนึ่ง สำรวจว่ามันทำอะไรได้บ้างและมีข้อจำกัดอะไรบ้างก่อนใช้งานที่ซีเรียสจริงๆ

บันทึกสั้นๆ กับการลองของบน 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.