คลังเก็บป้ายกำกับ: amazon ec2

Cloud Computing ราคาถูก

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

ถึงแม้ทุกวันนี้จะมีบริการ Cloud Computing รายเล็กรายน้อยผุดขึ้นมาเยอะแยะ แต่ทุก ๆ ที่ก็คล้าย ๆ กันคือ แพง และ ไม่เสถียร สุดท้ายก็เลยต้องหันกลับมามองเจ้าใหญ่ ๆ สามเจ้าซึ่งได้แก่ Amazon EC2, Windows Azure และ Google App Engine

สำหรับ Amazon EC2 ผมเคยลองแล้ว ใช้ได้ดีแต่ไม่มีอะไรได้มาฟรี คิดตังค์ทุกเม็ดไม่ว่าจะทำอะไร ถ้าใช้เครื่องระดับจิ๋วก็เสียเดือนล่ะ 800 บาท ถ้าเครื่องระดับเล็กก็เสียเดือนล่ะ 2000 บาท ผมเคยลองเครื่องระดับเล็กสองเครื่อง โดนไปเดือนล่ะ 4000 บาท เสียดายตังค์มาก เพราะแค่ลองก็ต้องเสียตังค์ซะล่ะ

ส่วน Window Azure นี่ยังไม่เคยลอง แต่โดยส่วนตัวแล้วไม่ชอบ เพราะมันผูกขาดทุกอย่างกับเทคโนโลยี .NET มันเป็นอะไรที่ขัดแย้งกับการทำ Web Application มาก ๆ เลยไม่ค่อยจะสนใจมันซักเท่าไหร่ ถึงมันจะมี ASP.NET มาให้ใช้ด้วยก็เถอะ

สุดท้ายก็ Google App Engine ซึ่งในตอนแรกผมไม่ค่อยชอบเท่าไหร่ เพราะมันรองรับแต่ภาษาคอมพิวเตอร์อย่าง Java และ Python แต่พอเห็นว่ามันฟรีในระดับเบื้องต้น และถ้าอยากได้เยอะ ๆ ก็ต้องเสียตังค์เพิ่ม มันก็เลยทำให้ผมคิดว่าไอ้เจ้า Google App Engine นี่มันก็น่าสนใจเหมือนกัน แถมล่าสุดผมยังเพิ่งไปค้น ๆ เจอว่า มีคนใจดีทำกลไกเพื่อให้สามารถขับเคลื่อน PHP บน Java ได้อีกต่างหาก อันนี้ยิ่งเลิศใหญ่

ผมเลยว่าผมจะไปลอง ๆ Google App engine ดู เพราะผมชอบของฟรี

วิธีใช้ Amazon EC2 แบบยืดหยุ่น

คิดว่าคงมีหลาย ๆ คนที่เข้าใจแนวคิดว่า Amazon EC2 เป็นบริการ Cloud Computing ซึ่งเป็นอะไรที่ยืดหยุ่น ขยายได้ หดได้ ตามการใช้งานของเรา

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

งั้นมาดูแก่นแท้ของวิธีใช้ Amazon EC2 ที่ยืดหยุ่นกันจริง ๆ กันดีกว่า …

จากภาพข้างบนจะเห็นว่า วิธีออกแบบเพื่อใช้งาน Amazon EC2 ที่ดูที่สุด คือการออกแบบให้แต่ล่ะชิ้นส่วน “แยกจากกัน”

โดยเราต้องมองว่า กระดูกสันหลังหลักที่ทำให้ Amazon EC2 ยืดหยุ่นก็คือ Instance ซึ่งเราสามารถเลือกได้หลายระบบปฏิบัติการ เช่น อาจเป็น Linux หรือ Windows, เลือกได้หลายสมรรถนะ เช่น เอา RAM เยอะ ๆ หรือเอา CPU เยอะ ๆ หรือเอาทั้งสองอย่าง

ดังนั้น ถ้าส่วนของ Instance คือส่วนที่เราต้องเปลี่ยนไปเปลี่ยนมาบ่อย ๆ ตามขนาดการใช้งานของเรา งั้นเราก็ไม่ควรจะเอา Script หรือ File อื่น ๆ หรือ Database (ซึ่งก็คือชุดของ File นั่นแหล่ะ) ไปวางไว้ใน Instance ที่จะทำเป็น Web Container หรือ RDBMS หากแต่ใช้วิธีวางไว้ใน Elastic Block Storage แล้วทำการ Mount ไอ้เจ้า Elastic Block Storage เข้ากับ Instance โดยให้มันมองเห็นเป็น Device นึงแทน (เหมือน External Hard Disk)

จากนั้นก็เข้าไปที่ Apache เพื่อ Configure ให้อ่าน Script จาก Device ที่ Mount เข้ามาใหม่ และเข้าไปที่ MySQL เพื่อ Configure ให้อ่าน/เขียน Databases จาก Device ที่ Mount เข้ามาใหม่ ซึ่งอาจจะเป็นที่เดียวกับ Script หรือคนล่ะที่ก็ได้ อันนี้แล้วแต่เราจะออกแบบ

โดยส่วนตัวผมมองว่าภาพข้างบนเป็นพื้นฐานของสิ่งที่ควรจะเป็น สำหรับระบบที่จะมีคนเข้าใช้งานประมาณซัก … 30,000 คนต่อวัน โดยมีการใช้งานพร้อมกัน 300 คนต่อช่วงเวลา!!!

อือม แต่เอาเข้าจริงแล้วก็ไม่แน่นะ อาจจะใช้ของน้อยกว่านี้ก็ได้ อันนี้แล้วแต่ความเก๋าของแต่ล่ะคน เช่น อาจจะเอา Apache, PHP และ MySQL ไว้บน Instance เดียวกัน แล้วเปิดใช้งาน Elastic Block Storage อันเดียว เพื่อเอาไว้ใส่ทั้ง Script และ Database แล้วพอวันดีคืนดีระบบรับไม่ไหว ก็ค่อยมาขยายกันอีกทีทีหลัง อะไรประมาณนี้

หุ ๆ คนเราอ่ะนะ ถ้าได้ของฟรี ๆ มาใช้ คงไม่ต้องใช้สมองคิดขนาดนี้หรอกเน้อะ?

วิธีใช้ Amazon EC2 เพื่อประมวลผล Facebook Application

ผมเขียนภาพข้างล่างนี้ขึ้นมาอย่างพื้นฐานและง่ายที่สุด เพื่อแจกแจงว่า ถ้าหากเราต้องการใช้ Amazon EC2 เพื่อประมวลผล Facebook Application แล้วล่ะก็ มันจะมีรูปภาพออกมาเป็นยังไง?

อธิบายภาพข้างบนสั้น ๆ ได้ดังนี้

  1. คุณต้องติดตั้ง Facebook Canvas เป็น, เข้าใจใน Facebook Graph API และเข้าใจใน Facebook Client Libraries (ทั้งหมดฟรี)
  2. คุณต้องจดทะเบียน Domain (เสียตังค์) กับ Domain Registrar (Domain ที่ว่าก็คือ ไอ้พวก http://www.yourdomain.com อะไรเทือกนั้นแหล่ะ) เช่น Godaddy เป็นต้น
  3. คุณต้องจดทะเบียน DNS (เสียตังค์) กับ DNS Provider เพื่อที่คุณจะได้ผูก Domain ของคุณเข้ากับ Amazon EC2 ได้
  4. คุณต้องสมัครเพื่อใช้งาน Amazon EC2 (ไม่ต้องเสียตังค์) แล้วเข้าไปสร้าง Application + Db Instance (เสียตังค์ตามการใช้งาน) โดยสร้างขึ้นมาแค่ Instance เดียวก็พอ (ต่อไปถ้าคุณเก่ง คุณสามารถสร้างเยอะ ๆ ก็ได้นะเออ)
  5. คุณต้องสร้าง Elastic IP ขึ้นมา (เสียตังค์) เพื่อให้ Instance ของคุณ สามารถติดต่อกับโลกภายนอกได้ โดยสร้างแค่ IP เดียวก็พอ (ก็ใช้แค่ Instance เดียวไง ก็เลยใช้แค่ IP เดียวก็พอ)
  6. บังเอิญว่า Instance ใน Amazon EC2 เป็นพวกความจำสั้น ดังนั้น ถ้ามันโดน Restart หรือ Terminate เมื่อไหร่ล่ะก็ มันจะลืมทุกอย่างไปหมดเลย (รวมทั้ง Code และ DB ด้วย) ดังนั้น น่าจะเป็นการดี หากเราจะสร้าง Elastic Block Store ขึ้นมา (เสียตังค์) เพื่อเอามาเป็นที่พักข้อมูลจาก Instance เผื่อว่า Instance มันล่มหรืออะไรยังไง มันจะได้มีตัวสำรอง
  7. แต่ถ้าคุณคิดว่า Elastic Block Store จะไม่ชัวร์ กลัวว่าตัวมันเองก็อาจจะล่ม คุณก็สามารถจะติดตั้ง Snapshot To S3 (เสียตังค์) เพื่อให้มันทยอยโอนข้อมูลของคุณ ไปเก็บไว้ใน Bucket (เสียตังค์) ของ Amazon S3 ก็ได้ (คุณต้องสมัครเพื่อขอใช้ Amazon S3 อันนี้ฟรี ไม่เสียตังค์)

สรุปว่าจะประมวลผล Facebook Application บน Amazon EC2 ก็ต้องจ่ายพอตัวเหมือนกัน แต่ถ้าทำออกมาดี ๆ ก็น่่าจะคุ้มอ่ะนะ เพราะถ้าให้ไปประมวลผลบน Shared Hosting ก็คงไม่ได้ เพราะทรัพยากรจำกัดจำเขี่ยเหลือเกิน เกิดผีเข้าผีออก มีคนเข้า Facebook Application ของเราเยอะขึ้นมา ไปทำ Shared Hosting เขาล่ม เดี๋ยวเขาจะเฉดหัวออกมาแทบไม่ทัน

ส่วนจะไปประมวลผลบน Dedicated Server หรือ Virtual Private Server ก็ยุ่งยาก ต้องติดตั้งทุกอย่างเองทั้งหมด (Amazon EC2 มันเทพ สั่งสร้าง Instance โป้งเดียว มันติดตั้งระบบปฏิบัติการและปรับแต่งทุกอย่างให้หมดเลย)

ยิ่งเป็น Co-Location ก็ยิ่งแล้วใหญ่ เพราะเดี๋ยวนี้ฮาร์ดแวร์มันทันสมัยขึ้นแทบทุกวี่ทุกวัน จะให้เช่าซื้อ Server มาเป็นของตัวเองมันจะไม่คุ้ม แบบว่ายังไม่ทันไร Server ที่มีก็ตกยุคซะแล้ว หรือถ้าไม่ตกยุค แต่ต้องมาอัด RAM ทำ Server Farm เองก็หลังแอ่นเหมือนกัน