กลับมาประจำการแล้วจ๊ะ หลังจากช่วงสัปดาห์ที่ผ่านมาวุ่นกับการทำโน่นทำนี่ไปหลายอย่าง ทั้งย้าย Server มาอยู่ DigitalOcean ทั้งออกแบบเว็บใหม่ และเขียนโค้ดใหม่หมด (ใหม่หมดจริงๆ) จากเดิมไม่มีโครง อะไร บู๊ๆจนเป็นเว็บขึ้นมา เปลี่ยนมาใช้ Laravel เพื่อให้โค้ดสวยขึ้น ดูแลง่ายขึ้น ถึงเว็บจะยังเสร็จไม่หมด แต่ก็เริ่มเขียน Blog ต่อได้แล้วจ้า
นาทีนี้ DigitalOcean ค่อนข้างได้รับความนิยมพอสมควร ด้วยความที่มันเป็น Cloud Hosting ที่ราคาถูกมากเพียงเริ่มต้นเดือนละ $5 หรือ 160 เท่านั้นเอง ซึ่งตัวเราก็เล่นมาได้สักพักเพื่อทดสอบสิ่งต่างๆ ทั้งเรื่องฟีเจอร์ เรื่อง Latency ฯลฯ ลองผิดลองถูกหลายอย่างเพื่อหาคำตอบจากการใช้งานจริงว่าเหมาะสมหรือไม่อย่างไร เลยสรุปเอามาเล่าให้ฟังกันสักนิดสักหน่อย
รู้จักกับ DigitalOcean
สำหรับคนที่ยังไม่รู้จัก DigitalOcean นิยามตัวเองว่าเป็น Simple Cloud Hosting
พูดให้ง่ายขึ้นก็คือผู้บริการ Hosting แบบที่เรามีสิทธิ์ทำได้ทุกอย่างกับเครื่อง (คือมี Root Access) เทียบได้กับการมีคอมพ์อีกเครื่องวางไว้ให้เราใช้งานโดยเฉพาะ อยากทำอะไรก็ทำ
ก่อนหน้านี้ก็มีหลายเจ้าที่ทำ แต่เจ้านี้มาเจิดจรัสก็ตรงที่ "ค่าบริการมันถูกมาก" ราคาถูกจนใครก็จ่ายไหว ทำให้คนจำนวนมากย้ายเว็บตัวเองมาฝากไว้กับที่นี่ เพราะมันไม่ได้แค่ทำเว็บแล้ว หากแต่ยังสามารถติดตั้งสิ่งต่างๆตามที่เราต้องการได้ แต่ในราคาเท่ากับที่เคยจ่ายหรือแพงกว่าเพียงเล็กน้อย
นอกจากความถูกแล้ว DigitalOcean ยังเสนอ "ความง่าย" บอกว่าทุกอย่างเข้าใจง่าย ใช้ง่าย ไม่ถึงนาทีก็ทำขึ้นมาได้แล้ว !
ไม่ต้องแปลกใจที่มี Cloud Server ถูกสร้างขึ้นมาแล้วกว่า 1 ล้านอัน เติบโตเร็วกว่า Amazon AWS เป็นที่เรียบร้อย
เรื่องพื้นฐานที่ต้องรู้
มีคำศัพท์หลายคำที่ต้องรู้ก่อนจะอ่านต่อ ดังต่อไปนี้
Droplet - Server แต่ละเครื่องที่ถูกสร้างขึ้นมา เราจะเรียกว่า Droplet (ใน Amazon AWS เรียกว่า Instance) เป็นการเล่นคำว่า มหาสมุทร (Ocean) ประกอบด้วยหยดน้ำ (Droplet) จำนวนมากประกอบกันนั่นเอง และทันทีที่สร้าง Droplet ขึ้นมา ก็จะได้ IP Assign ให้ทันที ต่างกับ AWS ที่ต้องผูก IP เอง
Region - ถึงในอุดมคติของ Cloud คือ "มันเป็น Server ที่ล่องลอยอยู่ไหนก็ไม่รู้" แต่ทางปฏิบัติแล้ว สสารต้องการที่อยู่ มันก็มี Site สำหรับวาง Server อยู่ สำหรับ DigitalOcean ตอนนี้มีอยู่ 3 Regions ด้วยกัน ได้แก่ New York, Amsterdam และ San Francisco สามารถเลือกได้ว่าอยากจะวาง Server ไว้ที่ไหน สิ่งที่ต่างกันไปคือความเร็วในการเข้าถึง แนะนำให้อยู่ที่สหรัฐฯ ถ้าเป็น San Francisco ก็ดี เพราะมีบริการอย่างอื่นของเจ้าอื่นที่ทำงานร่วมกันได้ดีถ้า Server อยู่เมกา เช่น CloudFlare หรือ S3
Snapshot - เราสามารถ Backup Droplet ที่ถูกสร้างขึ้นเก็บไว้เป็นก้อนได้ ตรงนี้เราเรียกว่า Snapshot และเราสามารถสร้างเครื่องใหม่จากการ ความเท่คือ Snapshot across Region
ต่อมา เริ่มสร้าง Droplet เลยละกัน !
การสร้าง Droplet
DigitalOcean โปรโมทด้วยคำว่า "สร้าง Server ได้ภายใน 55 วินาที" เท่ๆ มาดูว่า 55 วินาทีจริงมั้ย เริ่มด้วย กำหนดชื่อ Droplet และ เลือกขนาดของเครื่อง โดยส่วนสเปคเครื่องที่สูงๆ จะไม่สามารถเลือกได้จนกว่าจะ Verify Account เป็นกรณีพิเศษ สูงสูดที่คนทั่วไปใช้ได้จึงเป็น 8 CPUS 16GB 160GB Harddisk และ 6TB Transfer ตกเดือนละ $160
แล้วก็เลือก Region ที่จะลง มีอยู่ 3 ประเทศ 5 Regions ถ้าตัดสินใจเลือกอะไรแล้วก็ควรจะใช้ที่นั้นตลอดไป ด้วยเหตุผลหลายประการ ยกตัวอย่างเช่น IP ที่ไม่สามารถใช้ตัวเดิมได้ถ้าเปลี่ยน Region นั่นแปลว่าต้องแก้ DNS ด้วย ใช้เวลาอัพเดตอีกยาวไกล
จากนั้นเลือก Image ของเครื่องว่าจะใช้ OS ไหน ลงอะไรมาแล้วบ้าง โดยมีให้เลือกหลายอย่าง ทั้งจาก OS เพียวๆ หรือจากซอฟต์แวร์บน OS (เช่น Wordpress บน Ubuntu) หรือจาก Snapshot ที่เคยสร้างไว้ก็ได้
จากนั้นเลือก SSH Keys สำหรับ Login (ถ้ายังไม่มีก็ใส่ได้ หรือไม่ใส่ก็ได้) ที่เหลือเป็นพวก Options เสริมต่างๆ เช่น Private Networking ไว้สำหรับเปิดช่องให้แต่ละ Droplet ติดต่อกันผ่าน Private IP ได้ แล้ว Traffic จะได้ไม่ถูกคิดในค่า Transfer (เหมาะกับการวาง Infra แบบแยก Server ที่ทำงานต่างกันออกจากกันเช่นแยก Web ออกจาก Database) แต่ข้อจำกัดคือ ต้องอยู่ใน Region เดียวกันเท่านั้น ส่วนอีก Option นึงคือ Enable Backups ไว้สำหรับทำ Auto Backups เสียค่าใช้จ่ายเพิ่มขึ้น 20% ของราคาต้น
เสร็จแล้วก็กด Create Droplet เลย
จับเวลา 55 วินาทีผ่านไปเป๊ะ ก็เข้าหน้านี้ ... (เหยดดดดดด) เป็นอันเสร็จเรียบร้อย !
เมื่อสร้างเสร็จ Password ก็จะถูกส่งมาทางอีเมล ให้เราสามารถ ssh เข้าไปได้ทันที
สำหรับ Droplet แรกเริ่ม เราจะถูกจำกัดให้สร้างได้มากที่สุด 5 Droplets เท่านั้นครับ
ทำอะไรกับ Droplet Control Panel ได้บ้าง
นี่คือสิ่งที่ทำได้จากหลังบ้าน
Power Cycle - สั่ง Restart เครื่องแบบ "ดึงปลั๊ก" ระบบแนะนำว่าไม่ควรทำ เพราะอาจจะมีข้อมูลเสียหาย ควรไปสั่ง Shutdown ผ่าน Command Line มากกว่า ใช้ในกรณีฉุกเฉินเช่นเข้า ssh ไม่ได้
Power Off - สั่งปิดเครื่องแบบดึงปลั๊ก คำแนะนำเหมือน Power Cycle
Console Access - ต่อ VNC เข้าถึง Console ของเครื่อง
Reset Root Password - กรณีที่ลืม Root Password ก็สั่ง Reset หลังบ้านได้เลย
Fast-Resize - เปลี่ยนสเปค CPU/RAM ใน 1 นาที แต่เนื้อที่จะเท่าเดิม ไม่เปลี่ยน แต่ก่อนจะทำได้ ต้องสั่งปิดเครื่องก่อน ไม่สามารถทำ On the Fly ได้
Take a Snapshot - บันทึก Snapshot เอาไว้เพื่อ Backup หรือปั้มเครื่องใหม่ ต้องปิดเครื่องก่อนทำเช่นกัน ระยะเวลาที่ใช้ขึ้นอยู่กับปริมาณข้อมูล อย่างวันก่อน 20GB ใช้เวลา 22 นาที ระหว่างยิง Snapshot จะไม่สามารถทำอะไรได้ ล่มยาว กลายเป็น Downtime
Restore from Snapshot - ใช้ Snapshot ที่บันทึกไว้มายัดใส่คืน ระยะเวลาขึ้นอยู่กับขนาดของ Snapshot เช่นกัน ตอนนั้น 20GB ใช้เวลา 24 นาทีจ๊ะ
Enable/Disable Private Networking - เปิด/ปิด Private Networking ได้ (ต้องปิดเครื่องก่อน)
Change Kernel - เปลี่ยน Kernel ต้องสั่ง Shutdown เครื่องก่อน แล้วค่อยเปิดใหม่ผ่าน Control Panel ก็จะได้ Kernel ใหม่
Recovery Mode - เข้า Recovery Mode (ต้องสั่งปิดเครื่องก่อน)
Rename - เปลี่ยนชื่อ Droplet
Usage Graphs - กราฟแสดง Bandwidth, CPU และ Disk Space ที่ถูกใช้ในช่วงเวลานั้นๆ
Destroy - ทำลาย Droplet ทิ้ง
Rebuild - เผื่อเราเล่นซนแล้วทำระบบพัง เราสามารถเริ่มต้นใหม่ทั้งหมดได้จากคำสั่ง Rebuild ก็จะได้เหมือนตอนสร้าง Droplet ใหม่ๆ
จะเห็นได้ว่าคำสั่งส่วนหนึ่งต้องปิดเครื่องก่อนถึงจะทำได้ ก็ถือเป็นข้อจำกัดและอุปสรรคต่อ Zero Down Time อยู่พอสมควร ไว้ต่อหัวข้อหลังๆว่าปัจจัยที่เป็นปรปักษ์ต่อ Zero Down Time ยังมีอีกเยอะ สามารถหลีกเลี่ยงได้ แต่ต้องเข้าใจข้อจำกัดเหล่านี้ก่อน
CPU, RAM และ Harddisk ถูกมัดรวม ไม่สามารถเลือกแยกได้
บน Amazon AWS จะมี Instance Type ให้เลือกเยอะพอสมควร เลือกได้ตามต้องการว่าจะใช้ CPU และ RAM เท่าไหร่ บางประเภทก็เน้น CPU เยอะ RAM น้อย บางประเภทก็สมดุล บางประเภทก็เน้นแต่แรม โดยรวมแล้วมีค่อนข้างครบตามความต้องการ และหากต้องการพื้นที่เพิ่มเป็นพิเศษ เช่นเป็นเครื่อง Database ก็สามารถสร้าง EBS Volume มา Attach กับเครื่องได้ตามต้องการ ข้อจำกัดที่เกิดขึ้นก็แค่ IOPS จะน้อยกว่าใน Instance รุ่นที่ถูกกว่า
แต่กับ DigitalOcean นอกจากจะมีตัวเลือกให้เลือกน้อยกว่าแล้ว ทุกอย่างยังถูกมัดรวมกัน CPU, RAM และ Harddisk ให้มาเท่าไหร่ ก็ใช้ได้เท่านั้น ข้อจำกัดใหญ่สุดคือเราไม่สามารถขยายเฉพาะเนื้อที่เพิ่มเติมได้ อยากได้พื้นที่เพิ่ม ทุกอย่างก็จะเพิ่มตามไป ทำให้เปลืองเงินโดยไม่จำเป็น และเนื้อที่มากสุดที่เราสามารถเลือกใช้ได้คือ 160GB และเสียเงินสูงถึงเดือนละ $160 เลยทีเดียว
ส่วนตัวถือว่าเป็นอุปสรรคในการทำ Database Server พอสมควร ถ้าจะทำ Database Pool บน DigitalOcean คงต้องพิจารณาในหนทางของการทำ Master-Master หลายๆเครื่อง
ตรงนี้สงสัยมากว่าทำไม่ได้จริงๆหรอ แต่หลังจากที่ไป Search หาใน Forum ก็ได้รับคำยืนยันว่าทำไม่ได้จริงๆ แต่ทาง DigitalOcean มีแผนที่จะทำอยู่ครับ ก็คงต้องรอกันไป
การคิดเงิน
ถึงแม้เว็บ DigitalOcean จะบอกว่า "เริ่มต้นเพียงเดือนละ $5" แต่ความจริงมันไม่ได้คิดเป็นเดือน หากแต่คิดเป็นเวลาที่ใช้จริง (หน่วยชั่วโมง) เค้าแค่ต้องการสื่อให้ฟังดูง่าย
ค่าใช้จ่ายสามารถดูได้จาก Control Panel จะอัพเดตรายชั่วโมงพร้อม Breakdown ให้เห็นจะจะว่าใช้อะไรไปบ้าง ราคาเท่าไหร่
ค่าใช้จ่ายตอนนี้ส่วนใหญ่จะเทไปกับ Droplet ที่สร้างขึ้นมา จ่ายราคาตาม Tier ที่เลือกไว้ และหากมีการใช้ Bandwidth เกินกว่าที่กำหนด ก็จะถูกชาร์จเพิ่ม 2 เซ็นต์ต่อ 1GB ซึ่งโดยปกติแล้วคนทั่วไป Bandwidth ไม่ถึงหรอก แต่ถ้าเกิน ก็อย่าให้เกินมาก ไม่งั้นการปรับสเปคขึ้นอาจจะคุ้มกว่า เพราะค่า Traffic ที่เกินอยู่ที่ $20/1TB ในขณะที่การเพิ่มสเปคจากเล็กสุดไปเป็นใหญ่ขึ้นมาหนึ่งขั้น ราคาจ่ายเพิ่ม $5 แต่ได้ Traffic เพิ่มขึ้น 1TB และได้อย่างอื่นเพิ่มอีกต่างหาก ใช้วิธีคิดนี้ได้จนถึงตัว $40 ต่อเดือนได้เลย แต่ถ้าเกินนั้น ค่า Traffic จะถูกกว่า (ขอให้สนุกกับการคำนวณ)
ค่าใช้จ่ายที่อาจเพิ่มขึ้นมาอีกก็คือส่วนของการทำ Backup จ่ายเพิ่ม 20% ของราคา Droplet นั้นๆ ถ้าอยากจะ Play Safe ก็ถือว่าโอเคอยู่นะกับราคานี้
สำหรับ Droplet นี้ หากสร้างแล้วจะไม่สามารถ Stop ได้ (อย่างตัว Amazon AWS จะสามารถ Stop ได้ และระหว่าง Stop จะไม่ต้องจ่ายเงินค่า EC2) ดังนั้นถ้าสร้างขึ้นมาแล้วก็ต้องจ่ายทุกชั่วโมง ก็ยังดีที่มันถูก เลยไม่อะไรมาก แต่ถ้าอยากจะประหยัดจริงๆ เช่นไปสร้าง Size ใหญ่ ชั่วโมงนึงหลายตังค์ ก็สามารถยิง Snapshot เก็บไว้แล้วทำลาย Droplet ทิ้งได้ ประหยัดเงินค่า Droplet ได้ แต่ก็แลกกับเวลาที่เสียไปในการยิง Snapshot ขึ้นๆลงๆ
ค่า Snapshot จะอยู่ที่ $0.02/GB ต่อเดือน แต่จากที่ใช้มา ไม่เคยถูกชาร์จค่า Snapshot เลยแฮะ แปลกใจ
ทดสอบเบื้องต้น
หลังจาก Droplet สร้างเสร็จก็ทดสอบเบื้องต้นกันนิดนึง ! ผ่านทาง ssh และ http (Droplet ที่ใช้ทดสอบอยู่ที่ New York 2)
Ping & Latency - แน่นอนแหละว่า Server อยู่เมกา จะไปเร็วเหมือนตอนอยู่ไทยได้ยังไง ต้องยอมรับอย่างหนึ่งว่า มันเข้าช้าลงแน่นอน อึดอัดนะช่วงแรกๆ แต่ก็เริ่มชินละ ทดสอบหลายๆที่ จากเนตบ้าน DOCSIS ได้ Ping 300-600 ms จากออฟฟิศที่เป็น Fiber Optic ก็เหลือน้อยลง แต่ยังหลักร้อยอยู่
http - เข้าเว็บช้าลงอย่างเห็นได้ชัด จากเดิม Server อยู่ไทย เข้าปุ๊บ โหลดปั๊บ ใช้เวลาไม่ถึง 300ms ต่อ 1 Connection ส่วนอันนี้ใช้ประมาณ 750ms - 1.2 วินาที เยอะขึ้นมาก ถ้าไม่จัดการการโหลดดีๆ ก็อาจจะใช้เวลาเป็นสิบวิกว่าจะโหลดเว็บเสร็จ แต่ถ้าถามเรื่องความรู้สึก ก็รู้สึกว่ามันช้าลง แต่ไม่ได้อึดอัดในระดับรอไม่ได้
ssh - อธิบายเป็นความรู้สึกละกัน ตอน ssh กับเครื่องในไทย รู้สึกเหมือนพิมพ์ในคอมพ์ตัวเอง ส่วนอันนี้มีความหน่วงอย่างเห็นได้ชัด พิมพ์ไปแล้วดีเลย์ประมาณ 500ms กว่าจะปรากฎตัวอักษรขึ้นมา ต้องใช้ความอดทนระดับหนึ่ง แต่ส่วนตัวค่อนข้างชินแล้วเพราะ Server MOLO อยู่ที่เมกา และให้ความรู้สึกเดียวกัน
Bandwidth - Droplet ทุกตัวมาพร้อม Link 1Gigabit/sec เมื่อทดสอบโหลดไฟล์จากไทย ผ่าน Server ที่ถูก Cap Bandwidth ก็ได้เพียงหลัก 10-20 KB/sec แต่ก็เพราะถูก Cap Inter Bandwidth เลยทดสอบโหลดไฟล์จากต่างประเทศ ได้ความเร็ว 20MB/sec โหลดสนุกมาก แล้วก็ทดสอบอัพโหลดผ่าน ftp ด้วย Fiber ก็อัพได้ 500-600KB/s
Harddisk I/O - Write ได้ประมาณ 240 MB/s และ Read ได้ประมาณ 1.1 GB/s
โดยรวมแล้ว "ความเร็วในการเข้าถึง" ช้าพอสมควร แต่อย่างสมเหตุสมผล ถ้า Server อยู่เมกาก็จะช้าอย่างงี้แหละ แต่ไม่ได้รู้สึกว่ามันช้ากว่าที่ควรจะเป็น เทียบกับ Server MOLO เหมือนว่า MOLOME จะเร็วกว่าเล็กน้อย วัดแล้วได้ที่ 600-700ms โดยประมาณ เทียบกับที่นี่ ที่ใช้ 900ms+
สิ่งหนึ่งที่ทำให้รู้สึกฟินคือการเป็นมิตรต่อ Server เมกาฯ ก่อนหน้านี้ตอน Server อยู่ไทย ไม่ว่าจะไปที่ไหน ก็จะเจอปัญหาเรื่อง Inter Bandwidth ตลอด ส่งผลให้ Facebook เอย Google+ เอย ไม่สามารถดูดข้อมูลจากเว็บไปแสดงผลได้อย่างถูกต้อง แต่พอย้ายมาที่นี่ ทุกอย่างฉลุย ... แต่ก็แลกมากกับการที่คนไทยเข้าช้าลง และข้อมูลปลอดภัยจากม็อบมั้นท์ลี่
อยากปรับสเปค Server โดยสมบูรณ์ ต้องสร้าง Server ใหม่เท่านั้น
ด้านบนพูดถึงเรื่อง Fast Resize ไปแล้วว่าเราสามารถปรับสเปค Server ด้วย Downtime 1 นาทีได้ แต่เนื้อที่ Harddisk จะเท่าเดิม คราวนี้ถ้าอยากจะปรับทุกอย่างขึ้นหรือลงโดยสมบูรณ์หละ จะทำยังไง?
คำตอบคือ "ต้องสร้าง Server ใหม่" ครับ
โดยวิธีที่จะทำก็ไม่ยาก ทำตามขั้นตอนนี้
1) Shutdown เครื่อง
2) Take Snapshot (ใช้เวลาตามปริมาณข้อมูล)
3) ทำลาย Droplet ทิ้ง
4) สร้างเครื่องใหม่จาก Snapshot ที่สร้าง (ใช้เวลาตามปริมาณข้อมูล) ให้อยู่ใน Region เดิม
สาเหตุที่ต้องทำลาย Droplet ทิ้งก่อน ก็เพราะว่าเป็นข้อจำกัดอีกอย่างนึงของ DigitalOcean ว่า IP Address จะผูกกับเครื่องอย่างแนบชิด ไม่สามารถโยกหรือปรับเปลี่ยนได้ หากแต่ถ้าต้องการสร้าง Server ใหม่โดยได้ IP เดิม จะต้องทำลาย Droplet เก่าทิ้งก่อน ค่อยสร้างอันใหม่ให้ทันเวลา(ไม่รู้ว่าทันเวลานี่กี่ชั่วโมง ยังไม่เคยลองจนมันได้ IP ใหม่) และต้องสร้างอยู่ใน Region เดิมเท่านั้นด้วย ไม่งั้นจะไม่ได้ IP เดิม
แน่นอนว่ามีเสียวหละ เพราะเราไม่อาจรู้ได้เลยว่า Snapshot ที่ยิงไว้มันสมบูรณ์หรือเปล่า แต่ก็ต้องทำลาย Droplet ที่เก็บข้อมูลทั้งหมดทิ้งแล้ว ...
หากกลัว ไม่อยากทำลาย Droplet ทิ้ง ก็จำเป็นต้องเปลี่ยน DNS ให้ชี้ไปเครื่องใหม่ และรออีก 24 ชั่วโมงเพื่อให้ DNS Update ทั้งโลก
โดยรวมแล้ว จาก Process ทั้ง 1-4 มันแปลว่า "มี Downtime ยาวๆ" นั่นเอง
วันก่อน Downsize nuuneoi.com จากเดือนละ $20 เหลือตัว $10 ใช้เวลาทั้งหมด 45 นาทีถ้วน ข้อมูลแค่ 20GB นะนี่ ...
สารพันเรื่อง IP Address
ไหนๆก็พูดถึงเรื่อง IP ละ พูดอีกนิดอีกหน่อยละกัน
IP Address เป็นดั่งบ้านเลขที่ ให้ผู้เยี่ยมชมเข้าบ้านถูก และ IP Address นี่เองก็ถือเป็นจุดอ่อนของ DigitalOcean ในการทำงานแบบ Scalable Server
สำหรับ Amazon AWS ตัว Instance และ IP Address ถูกแยกกันอิสระ กล่าวคือเราสามารถเอา IP Address ไปผูกกับ Instance ตัวใดก็ได้ เวลาอยากจะสลับเครื่อง ก็สลับได้ด้วยการกดคลิกเดียว เครื่องใหม่ก็จะทำงานแทนได้ทันที เป็นอาวุธลับในการทำ Zero Down Time Server Migration ที่ผู้ใช้ไม่ทันได้รู้ว่า Server ถูกเปลี่ยนแล้ว มันเกิดขึ้นเร็วมาก
แต่กับ DigitalOcean ยังไม่มีตัวจัดการ IP Address ที่ Flexible อย่าง AWS ส่งผลให้ความ Flexible ในการให้บริการ รวมถึงการโยกโน่นโยกนี่ขาดผึง ทุกอย่างผูกขาดไว้ที่เครื่องนั้นๆ หากเครื่องนั้นมีปัญหาก็หัวหมุน หัวปั่น ชุลมุนเป็นแน่แท้
ก็ยังดีที่มีวิธีกู้คืน IP Address ตามที่อธิบายไว้ในหัวข้อข้างบน แต่มีข้อจำกัดเล็กน้อยว่า ต้องอยู่ใน Region เดิมเท่านั้น ไม่งั้นจะใช้ IP เดิมไม่ได้ อย่างไรก็ตาม นั่นก็หมายความว่าจะมี Downtime ในการจัดการแน่นอน
วิธีที่พอจะรับมือกับปัญหาดังกล่าวนี้ได้ก็คือ สร้าง HA Proxy Server สำหรับรับหน้าไว้หนึ่งเครื่อง ทำเป็นเครื่องเล็กๆ แล้วชี้ DNS มาที่เครื่องนี้ ก่อนจะ Bypass Traffic ให้ Droplet อื่นๆ ผ่านทาง Private Network จะได้ไม่เสียค่า Traffic ด้วยวิธีนี้จะทำให้เราสามารถสลับเครื่องได้ด้วยซอฟต์แวร์ โดยไม่ต้องไปวุ่นวายกับเครื่องแรกนี้เลย นอกจากเปลี่ยน Private IP ที่ชี้ออก เป็นหนึ่งใน Workaround ที่จะ Migrate Server แบบ Zero Downtime บน DigitalOcean
สำหรับเจ้าเครื่อง HA Proxy นี้ ให้เลือกขนาดเครื่องตาม Traffic ที่เหมาะสมต่อบริการเป็นหลัก เพราะค่า Traffic ที่เกิน จะอยู่ที่ $20/1TB การเพิ่มสเปคจะคุ้มกว่า เพราะจ่ายเพิ่มไม่ถึง $20 แต่ได้ Traffic เพิ่ม 1TB รวมถึงสเปคอื่นๆด้วย แต่ก็หงุดหงิดกลายๆเนอะว่าจะเอาสเปคใหญ่ๆไปทำไม ถ้าเอาใช้แค่รัน HA Proxy ฮ่าๆ ก็ลองคิดดูว่าจะเอาไปทำอย่างอื่นได้มั้ยตามความเหมาะสม เพราะเอาเข้าจริงแล้ว ระบบยังขาดอะไรอีกมากเพื่อจะทำให้เป็น Scalable Server ที่สมบูรณ์ ถ้าเอาระบบต่างๆมาถมในเครื่องนี้ได้ก็คงจะดี
ยังขาดเครื่องมือในการใช้เป็น Scalable Server จริงๆอีกเยอะ
DigitalOcean เป็นบริการ Cloud ที่ Simple สมชื่อ อย่าไปเทียบกับ AWS เรื่อง Function เลย ทางโน้นมีครบกว่าเยอะ แต่ถ้าถามว่าถ้าแค่จะทำ Server ตัวเดียวมารันเว็บ ตัว DigitalOcean เพียงพอมั้ย? ก็ตอบได้ว่า "เกินพอ" แต่หากอยากจะทำ Scalable Server ที่ให้บริการได้จริง ต้องถือว่า DigitalOcean ยังขาดเครื่องมืออำนวยความสะดวกอีกเยอะ หรือจะบอกว่าไม่มีเลยก็คงได้
อย่างแรกที่ควรจะมีคือเรื่อง Loading Balancing ก็ต้องทำขึ้นมาเอง แต่โชคดีที่ราคา Droplet มันถูก เลยตั้งขึ้นเครื่องขึ้นมาทำ Software Load Balance ได้โดยไม่เปลืองตังค์มาก
อย่างที่สองคือ Monitoring Tools ที่สามารถส่ง Notifications ได้ว่าเครื่องมีปัญหาหรือไม่ ประโยชน์คือ หากเครื่องมีปัญหาหรือโหลดเยอะเกิน ก็ต้องยิงเครื่องใหม่ขึ้นมาให้โดยอัตโนมัติ ที่ AWS มี CloudWatch อยู่ ส่วนที่นี่ อยากได้ก็ต้องทำเองเช่นกันจ๊ะ แต่ก็ยังดีที่ DigitalOcean มี API Access ให้เราสามารถสั่งยิงเครื่องขึ้นมาผ่าน API ได้ ถ้าวาง Monitoring Tools เสร็จเมื่อไหร่ ก็สามารถเสียบกับระบบนี้ได้เลย
ความจริงแทบทุกอย่างที่ขาด สามารถทำด้วย Software ได้ หากมีใครทำเครื่องมือวิเศษ ทำทุกอย่างที่จำเป็นต่อการใช้งานเป็น Scalable Server ออกมาเป็น Image แจกก็คงจะดีไม่น้อย ... และผมเชื่อว่าจะมีเร็วๆนี้หละ
ก็ขอแนะนำว่าถ้าคิดจะทำบริการสเกลใหญ่บนนี้ ให้เตรียมทุกอย่างให้พร้อม เพราะที่นี่ไม่มีเครื่องมืออำนวยความสะดวกในการ Scale อีกทั้งยังมีอุปสรรคในบางเรื่องด้วย ยกตัวอย่างเช่น Harddisk ที่ขยายไม่ได้ ก่อนจะลุยก็ออกแบบระบบให้ดีก่อน ยังพอมีทางออกอยู่ครับ
Structure ที่คิดว่าน่าจะเวอร์คที่สุดคือมีเครื่องกลางลง HAProxy เอาไว้รับหน้า แล้วส่งข้อมูลไปยัง Server ที่ Load Balance ไว้ในระบบ โดย Server เหล่านี้จะต้องไม่เก็บข้อมูลไว้แบบ Local ต้องมี Server ที่เก็บข้อมูลกลางไว้อย่างน้อยตัวนึง ทั้ง Database และไฟล์ หากเครื่องไหนไหนร่วง ต้องไม่มีข้อมูลเสียหาย (ยกเว้นเครื่อง Database ห้ามร่วง ทำ Redundancy ไว้ดีๆ) และ Server ที่เอาไว้ทำงานเหล่านี้ต้องมี Snapshot ของโครงสร้าง Server เก็บไว้แบบไม่ต้องมีข้อมูลมาก เวลาสร้างขึ้นมาจะได้ใช้เวลาน้อย หากต้องการจะ Scale ขึ้น ก็ยิงขึ้นมาแล้วให้มัน Sync อัพเดตข้อมูลต่างๆจาก Git ตอน Boot ทุกอย่างน่าจะผ่านไปอย่างสงบสุขทีเดียวเลยแหละ หากวางโครงได้แบบนี้ มันก็คือ Scalable Server โดยสมบูรณ์แบบ
ทำงานร่วมกับ Amazon S3 ได้ดี
ความจริงจุดประสงค์แรกๆที่อยากลอง DitigalOcean คือ อยากรู้ว่าทำงานร่วมกับ S3 ได้ดีแค่ไหน
S3 เป็นบริการ API-Based Storage Service ของ Amazon หรือก็คือ เราสามารถอัพโหลดไฟล์หรือดูดไฟล์ลงมาผ่าน HTTP Request ได้
ข้อดีของ S3 คือ เราไม่จำเป็นต้องมานั่งกังวลว่า Harddisk จะเต็มหรือไม่ ใช้แล้วก็จ่ายตังค์ก็พอ แถมยังช่วยลดภาระในการรับโหลดได้อีกด้วย โดยให้ไปโหลดไฟล์บางไฟล์ผ่านทาง S3 แทน (แต่ก็ต้องจ่ายตังค์นะจ๊ะ)
หลังจากทดสอบทั้งอัพโหลดและดาวน์โหลดแล้ว พบว่ามันทำงานร่วมกับ S3 ได้ดี ไม่มีปัญหาเรื่อง Bandwidth หรือ Failure แต่อย่างใด
ยังไม่ได้วัดเรื่อง Bandwidth ออกมาเป็นตัวเลข แต่บอกได้ว่าเร็วมาก สามารถใช้งานร่วมกันได้เลยครับ
ทำงานร่วมกับ CloudFlare เสริมประสิทธิภาพ
CloudFlare คือบริการสารพัดประโยชน์ที่จะช่วยให้เว็บเข้าได้เร็วขึ้นด้วย CDN และ Caching แถมยังช่วยกรองเหล่า Spam ให้เข้าถึง Server เราได้ยากขึ้นด้วย เป็นบริการที่ได้รับความนิยมมากที่เมืองนอก
เมื่อสักปีสองปีที่แล้ว เคยใช้ CloudFlare กับเว็บที่ Host ในไทย ปรากฎว่าเจ๊งไม่เป็นท่าเพราะปัญหาเรื่อง Inter Bandwidth (อีกแล้ว) ก็เลยล้มเลิกความตั้งใจไป
คราวนี้ย้าย Server ไปอยู่ที่เมกาแล้ว ก็เลยลองดูอีกสักรอบ ปรากฎว่าผลออกมาน่าสนใจ Latency ที่ใช้ในการเข้าเว็บ ลดลงไปราว 30% เลยทีเดียว ช่วยทำให้ความเร็วในการเข้าเว็บสูงขึ้นอย่างรู้สึกได้
ยังไม่ได้ทดสอบอะไรมากมาย แต่ใช้แล้วรู้สึกพอใจ ใครย้ายไป DigitalOcean ก็ลองดูนะครับ แต่ถ้า Server อยู่ไทย ไม่แนะนำอย่างยิ่ง
มี Maintenance เรื่อยๆ
ตัวผู้ให้บริการมีการ Maintenance ระบบเรื่อยๆ อย่างล่าสุดก็จะมี Network Maintenance ที่ NYC2 จะส่งผลให้ Packet Loss และ High Latency ชั่วขณะหนึ่ง
START: 01-26-2014 20:00 EST (UTC-4)
END: 01-27-2014 06:00 EST (UTC-4)
We will be upgrading to provide additional redundancy to our NYC2 data center network,
Expected Impact:
There will be a couple minutes of packet loss and some possible high latency during the maintenance window.
ถ้าคุณเลือกจะใช้บริการที่นี่แล้วอยากได้ 100% Uptime ก็อาจจะเป็นไปไม่ได้ อาจจะมีร่วงบ้างนิดหน่อย แต่ก็คง 99.x% อยู่ดี
DigitalOcean เหมาะ/ไม่เหมาะ กับใคร?
เขียนมายาวเหยียด น่าจะเห็นภาพบ้างแล้วไม่มากก็น้อยสำหรับเจ้าตัว DigitalOcean
แต่ถามว่า DigitalOcean เหมาะกับใคร? คงต้องบอกว่ามันเหมาะกับผู้ที่มีสกิลด้าน System Admin เป็นพื้นฐาน หรืออยากจะลองมือการเป็น System Admin ที่นี่ก็น่าจะถูกที่สุดที่จะหาได้ละ
แล้วมันเหมาะกับคนแค่อยากทำเว็บมั้ย? การเล่นกับ VPS แบบ DigitalOcean นี้ มันต่างจากการเช่า Share Hosting ตรงที่ว่า Share Hosting เมื่อสมัครแล้ว ก็จะทำเว็บได้ทันที ไม่ต้องไปยุ่งกับ Config อะไร แต่กับ VPS เราต้องติดตั้ง แก้ไขทุกอย่างเอง ลง Apache2 หรือ nginx เอง ไล่ Config ไฟล์เองเพื่อให้เหมาะกับ Spec เครื่อง ลง MySQL Server เอง บลาๆๆๆ แล้วถึงค่อยจะทำออกมาเป็นเว็บได้ พูดง่ายๆก็คือ เหมือนซื้อคอมพ์จาก pantip ที่ลง Linux ไว้แล้ว มาทำให้เป็น Server ใช้งานได้นั่นเอง ดังนั้นถ้ามีแค่สกิลทำเว็บก็จะยังไม่เพียงพอที่จะมาเล่นบน DigitalOcean อย่างเต็มตัว แต่ถ้าพร้อมเรียนรู้ก็น่าสนใจ เพราะสกิลทางด้านการวางระบบจะทำให้เข้าใจการทำเว็บให้รับโหลดเยอะๆได้มากขึ้น แต่ก็สกิลคนละสายกันเลยอ่านะ ถึงจะเกี่ยวข้องกันก็ตาม
และถามว่ามันเหมาะกับคนจะทำบริการสเกลใหญ่ๆมั้ย? ก็เท่าที่ลองดู หากไม่ Mind ข้อจำกัดเรื่องที่ Raise ด้านบนนี้แล้ว หรือหากสามารถติดตั้ง Infra ให้มัน Scale ได้แล้ว ตัว DigitalOcean ก็ทำออกมาสมบูรณ์พร้อมใช้งานจริงได้เลยนะ เรื่อง Latency ที่เคย Concern ตอนนี้ก็ Prove แล้วว่าไม่ใช่ปัญหา ส่วนเรื่องอื่นๆก็ยังไม่เจอปัญหาอะไรเลย
ถูกและดี คุ้มค่าทุกบาททุกสตางค์ที่เสียไป
หากให้สรุปว่าคุ้มมั้ยกับเงินที่เสียไป ต้องบอกว่า "คุ้มมากกกกก" คุ้มเสียยิ่งกว่าคุ้ม ถึง Tier ล่างสุด $5 จะไม่เหมาะกับการใช้งานจริงมากมาย เนื่องด้วยแรมไม่ค่อยจะพอใช้ แต่ Tier ยอดนิยมอย่าง $10 ก็เพียงพอที่จะรันหลายๆเว็บพร้อมกันแล้ว จ่ายเพียงเดือนละ 320 บาท แต่ได้ Server ที่มี Root Access และมีประสิทธิภาพล้นเหลือ
หากกังวลว่าจะย้ายมาใช้ที่นี่ดีมั้ย ก็บอกได้ว่าเท่าที่ลอง มันก็มีมาตรฐานเพียงพอที่จะมาเล่นเต็มตัวละ
ตอนแรกก็กลัวว่ามันจะขาดทุนแล้วยกข้อมูลของเราหายไปหมดมั้ย แต่ปรากฎว่า DigitalOcean เพิ่ง Raise Fund ไปได้ราวๆ 100 ล้านบาท (3.2 ล้านเหรียญ) ก็เลยคิดว่าไม่น่ามีปัญหาเรื่อง Financial Term เท่าไหร่ละ
สงครามราคา
เอาราคามา Compare ให้ดูกันแบบคร่าวๆ ไม่สามารถชนกันตรงๆได้ เพราะสเปคไม่ได้ตรงกันเป๊ะทุกที่ เลยเอามาให้เปรียบเทียบกันเองดู
คิดอะไรไม่ออก บอกอะไรไม่ถูก ก็ลองเล่นฟรีซะ
DigitalOcean นอกจากว่าจะถูกแล้ว ยังมีวิธีเรียกแขกที่น่าสนใจอย่างการแจก Coupon Code มูลค่า $10 เพื่อให้คนมาใช้ทดสอบเล่นด้วย โดยเฉลี่ยแล้ว ถ้าแค่เข้ามาเล่นสักวันสองวัน จะจ่ายไปแค่ไม่กี่สิบเซ็นต์เท่านั้นเอง
สำหรับคนที่อยากเล่น เชิญใส่ Coupon Code ว่า 2014SSD ซึ่งจะหมดอายุภายในสิ้นเดือนนี้ (มกราคม 2557) ถ้าเกินเข้ามาเจอบทความนี้เดือนหน้า ก็ลองหา Coupon Code ใหม่ดูครับ เค้าแจกเรื่อยๆ แต่เปลี่ยนเรื่อยๆ เท่านั้นเอง
จบแล้วจ้าาาา สอบถามความคิดเห็น ... Blog ใหม่อ่านง่ายขึ้นมั้ย (ในเชิงของดีไซน์นะ) จะได้เอาไปปรับปรุงธีมจ้า ... แหะๆ ไม่เกี่ยวกับเนื้อหาเลย ^^"