ข้อควรทราบของ Virtual Public IP (VIP) บน Windows Azure Virtual Machines กับ DNS

บน Windows Azure ยังไม่มีบริการแบบเดียวกับ Amazon EC2 Elastic IP Addresses ซึ่งเป็นการเช่าชุดหรือเลข IP สำหรับใช้งานกับบริการประมวลผลต่างๆ โดยไม่มีการเปลี่ยนแปลงใดๆ หรือพูดง่ายๆ คือเป็นเจ้าของเพียงผู้เดียว และควบคุมการใช้งานได้ (ถ้าจ่ายเงินไปตลอด)

ซึ่งบน Windows Azure นั้น ตัว Virtual Machines จะใช้ได้แต่ Virtual Public IP (VIP) ซึ่งมีข้อควรจำ (หรือบางคนเรียกว่าข้อเสียก็ได้) ตรงที่จะเปลี่ยนแปลงทุกครั้งที่ Shutdown หรือลบ Virtual Machines แล้วสร้าง Virtual Machines จาก Image Data ชุดเดิม และเราควบคุม VIP ไม่ได้ เพราะฉะนั้น ใช้ A (address record) Type Record บน Zone file ใน DNS ไม่ได้เลย เพราะต้องกลับมาเปลี่ยนตลอดถ้า Virtual Machines ตัวนั้นพังและต้องสร้างใหม่ ทำให้กำหนดการใช้งานผ่าน VIP จะมีปัญหาตอนโยก development/staging machines ด้วย เพราะมันดิ้นไป-มา

แต่แน่นอนว่าคำแนะนำคือให้ใช้ CNAME (alias record) Type Record แทน เพื่อให้ CNAME จับคู่กับ DNS แทนจะทำงานได้ดีก็ตาม (ลบจุดด้อยได้) แต่ก็มีปัญหาต่อมาคือ CNAME มันกำหนด root domain name ไม่ได้ ต้องใช้ A Type Record แล้วกำหนด IP เท่านั้น ซึ่งต้องหาบริการหรือทำ domain forwarding กับตัว root domain name ร่วมด้วย ไม่งั้นทำงานจะมีปัญหาเวลาคนพิมพ์ domain name จาก root เข้าระบบเว็บที่ทำงานบน Windows Azure Virtual Machines ล้วนๆ ไม่ได้

บันทึกสั้นๆ หลังใช้งาน Windows Azure Storage Table

ตอนนี้ใช้ Windows Azure Storage Table อยู่กับบางบางตัว ซึ่งหลังจากที่ใช้งานมา 3-4 วันที่ผ่านมา เอาสิ่งที่ได้มาแบ่งบันกันเล็กน้อย

  • มันเป็น NoSQL database เรื่อง schema โยนทิ้งไปเลย คิดใหม่ทำใหม่หมด คล้ายๆ Excel มากกว่าด้วยซ้ำ
  • มี Data type ไม่เยอะ ทำงานง่ายพอสมควร
  • รองรับข้อมูลที่ใส่ลงไปไม่เกิน 100 TB ต่อฐานข้อมูล
  • สื่อสารกันผ่าน HTTP / HTTPS มี SDK API ให้หลายๆ ภาษาทั้ง .NET Framework, Java, PHP, Node.js, Python ฯลฯ หรือจะติดต่อผ่าน CURL อะไรพวกนี้ก็ได้ แล้วแต่ความถึกแต่ละคน (แต่ผ่าน SDK มันจะง่ายกว่าเยอะมาก)
  • ใน 1 Table สามารถกำหนด entity (row/record ใน RDBMS) ให้มี properties (field/column ใน RDBMS) หลากหลายได้ ไม่จำเป็นต้องเป็น entity ที่มี properties เหมือนๆ กัน
  • entity แต่ละตัวที่ใส่ลงไปได้มีข้อมูลไม่มากเกินกว่า 1MB ต่อ entity
  • properties ตั้งได้ไม่เกิน 252 ตัวต่อ 1 entity
  • properties ที่จำเป็นต้องส่งเข้าไปหรือใช้งานมี 3 ตัวคือ partition key, row key และ timestamp ซึ่ง partition key, row key เราต้องกำหนดเอง ส่วน timestamp ไม่ส่งเข้าไปก็ได้ระบบจะใช้เวลาของระบบแทน
  • ค่า partition key และ row key จำเป็นอย่างมากในการ update/delete ต้องออกแบบดีๆ ค่า partition key เปรียบเสมือนกลุ่มข้อมูล (คล้าย Class) ซ้ำได้ ส่วน row key จำซ้่ำไม่ได้ในแต่ละ partition key เปรียบเสมือน primary key ใน RDBMS ต้องใส่ข้อมูลทั้งสองลงไปเสมอ
  • การส่งข้อมูลออกมาจากการ Query นั้นจะส่งมาไม่เกิน 1,000 entities เท่านั้น ถ้าต้องการมากกว่านั้นต้อง request อีกรอบด้วยการใช้ NextPartitionKey และ NextRowKey ร่วมด้วยในการ Query ครั้งต่อไปจึงจะได้ข้อมูลช่วงถัดมาอีก 1,000 entities
  • ไม่สามารถ Sorting หรือแบ่ง Pagination ได้ ถ้าอยากทำต้อง query มาทั้งหมดแล้ว Sorting ในระบบเอาเอง หรือใช้ร่วมกับ RDBMS ตัวอื่นๆ แทน แล้วเก็บเฉพาะ partition key และ row key เพื่ออ้างอิงพ่วงกับข้อมูลที่ต้องการ Sorting จะช่วยได้มาก
  • สามารถค้นหาจาก properties ที่ไม่ใช่ partition key, row key และ timestamp ได้ จะ full table query ก็ทำได้ จากที่ลอง 1 แสน entity ก็ทำงานได้ดี (ข้อมูลประมาณ 50MB) ค้นหาด้วย properties ที่ไม่ใช่ตัวหลักของระบบ และเป็น full table query ไม่เกิน execute time
  • การ import ข้อมูลทำได้หลายแบบ ที่สะดวกที่สุดคือ csv ที่ export จาก Excel หรือฐานข้อมูลตัวอื่นๆ แค่กำหนด first line ให้เป็นชื่อ properties ที่กำลังใส่ลงไปมันจะไป map ตัว properties ในตารางให้เอง แต่  Data type มันจะเป็น String
  • ระยะเวลาในการ execute time มากสุดที่ 5 วินาที
  • ระยะเวลาในการให้ client request ไม่เกิน 30 วินาที

อันนี้คือเท่าที่ลองๆ ใช้มา

Drupal in the Cloud with Windows Azure, SlideShare

ข้อมูลบางหน้าของ Slide ที่จัดทำนั้นบางส่วนนำมาจาก Slide ของ Micrsooft เองด้วย เพื่อความรวดเร็วในการจัดทำและเข้าใจตรงกัน พูดใช้เวลาประมาณ 1 ชั่วโมงกว่าๆ และ demo อีก 4 ส่วน

เมื่อ Linux OS Virtual Machinces บน Windows Azure ไม่มี SWAP Partition แก้ไขยังไง?

โดยปรกติแล้ว ถ้าเราลง Linux โดยทั่วไปจะมีการตั้ง SWAP Partition ไว้เป็นปรกติอยู่แล้ว อย่างเช่นตัวอย่างที่ผมเอามาโพสก็คือ Ubuntu Server 12.04.2 LTS มีการติดตั้ง SWAP ไว้อยู่

การตรวจสอบทำได้ด้วยการใช้คำสั่ง shell ด้านล่าง ซึ่งจะได้รายการ SWAP ออกมาว่ามีอยู่หรือไม่ 

ford@ns1:~$ swapon –s

2013-03-02_190758

แต่ถ้าเป็นบน Cloud นั้น ตัว Image ของ Linux OS จะถูกปรับแต่งบางส่วนเพื่อไม่ให้สร้าง SWAP พวกนี้ ด้วยเหตุผลด้านพื้นที่ที่ต้องจองไว้และความไม่จำเป็นโดยทั่วไปของ Cloud อยู่แล้ว (ปรกติใช้ Cloud สำหรับ Compute ข้อมูลที่อาจจะไม่ได้ใช้หน่วยความจำเยอะ) เพราะไม่ใช่ทุกคนที่ลง OS ต้องได้ใช้ SWAP เสมอไป แต่ถ้าอยากลงก็มีทางให้อยู่

แน่นอนว่า Cloud ที่ผมใช้อยู่นั้น อยู่บน Windows Azure สำหรับใครที่ใช้ Amazon EC2 ก็คงต้องหาวิธี ซึ่งก็มีวิธีเช่นกัน (How to add swap to Amazon EC2 instance Ununtu 12.04 LTS?)

ตอนนี้ผมลองทำบน Virtual Machines ผมปัจจุบัน 1 ตัว ซึ่งเป็น Ubuntu Server 12.04.2 LTS โดยใช้คำสั่งข้างต้น ก็จะไม่เจอ SWAP แต่อย่างใด

2013-03-02_190129

อยากสร้างเรามีวิธี โดยจากคู่มือ Creating and Uploading a Virtual Hard Disk that Contains the Linux Operating System นั้นได้อ้างอิงตัว Windows Azure Linux Agent User Guide อีกทีครับ

สรุปง่ายๆ คือ เข้าไปแก้ไข Windows Azure Linux Agent Configuration ซึ่งอยู่ที่ /etc/waagent.conf (sudo ตัวเองเป็น root ก่อนแก้ไข)

เมื่อเปิดไฟล์ขึ้นมาจะตัวตั้งค่าอยู่พอสมควร ให้หาส่วนที่ขึ้นต้นด้วย ResourceDisk ซึ่งจะมีอยู่ทั้งหมด 5 ตัวครับ

ResourceDisk.Format=y
ResourceDisk.Filesystem=ext4
ResourceDisk.MountPoint=/mnt/resource
ResourceDisk.EnableSwap=n
ResourceDisk.SwapSizeMB=0

ผมจะปรับให้ใช้ SWAP ขนาด 2GB โดยปรับค่า 2 ตัวดังนี้

#เปิดการใช้ SWAP
ResourceDisk.EnableSwap=y

# 2GB หน่วยเป็น MB
ResourceDisk.SwapSizeMB=2048

เมื่อปรับแต่งตัวตั้งค่าทั้ง 2 ตัวแล้ว ก็ Save ตัวไฟล์แล้วออกจากตัว editor เสร็จแล้วสั่ง Deprovision ด้วยคำสั่งด้านล่าง

azureuser@fordantitrust:~$ waagent –force –deprovision
azureuser
@fordantitrust:~$ export HISTSIZE=0

เมื่อสั่งรันคำสั่งจบก็ exit ออกมา

แล้วไปที่ Windows Azure Portal สั่ง Restart ตัว Virtual Machines รอสัก 3-4 นาทีโดยประมาณ ระบบจะบูทกลับมาใหม่ แล้วพิมพ์คำสั่ง swapon –s อีกรอบ จะเจอไฟล์ SWAP ของระบบอยู่ที่ /mnt/resource/swapfile

2013-03-02_192724

เพียงเท่านี้ก็จบกระบวนการ การสร้าง SWAP บน Cloud แล้วครับ

ถ้าอยากใช้ Windows Azure Virtual Machines เค้าคิดราคากันยังไง…

จาก จ่ายเท่าที่ใช้งานกับ Cloud Virtual Machines ซึ่งเป็นแนวคิดเรื่อง deploy ตัวงานขึ้น Windows Azure Virtual Machines นั้น มีหลายคนอยากรู้ว่าราคามันเท่าไหร่เมื่อคิดราคาต่อเดือน ดูตามด้านล่างได้เลยครับ

ผมเสนอแผนและราคาไปคือ Windows Azure Virtual Machines (WAVM) และ GoDaddy.com Secure Sockets Layer (SSL) เพราะเป็นงานด้านเว็บธุรกิจ มีการสื่อสารข้อมูลสำคัญเยอะ เลยมี SSL ด้วย

Windows Azure Virtual Machines (WAVM)

  • Operating System: Linux Virtual Machines (Ubuntu Server 12.04 LTS)
  • Compute: 1 x Extra small VM (Shared 1GHz CPU x 1 core, 768MB RAM)
  • Storage (Geo Redundant): 100GB (IDC Southeast Asia in Singapore and IDC East Asia in Hong Kong/China)
  • Bandwidth: 45GB/mo

GoDaddy.com Secure Sockets Layer (SSL)

  • Standard SSL
  • 1 certificate protects www.domain.com AND domain.com
  • 24/7 live support
  • SSL Installation Tool
  • Site seal options

ราคาที่คิดไว้คือ (Pricing)

  • Compute: $9.36/mo ($0.013/hr)
  • Storage: $9.50/mo
  • Bandwidth: $4.80/mo
  • Standard SSL: $69.99/yr (ถ้ามีคูปองราคาก็ถูกลงไปอีก)

รวมทั้งหมด (Total)

  • WAVM: $23.66/mo (~750Baht/mo)
  • Standard SSL: $69.99/yr (~2,100Baht/yr)

หรือตกปีละประมาณ 11,100 บาท โดยประมาณ (แต่ถ้าเพิ่ม Compute ในบางช่วง หรือัตราแลกเปลี่ยนสูงขึ้น ราคาก็แตกต่างกันไปอีก)

อ้างอิงราคาจาก (Pricing Ref.)

จะเห็นว่าราคาอาจดูสูง แต่ดู Storage (Geo Redundant) ขนาด 100GB และ Bandwidth ขนาด 45GB ต่อเดือน ก็ถือว่าเยอะเมื่อเทียบกับ Hosting โดยทั่วไป ซึ่งถ้าใช้ Storage และ Bandwidth น้อยกว่านี้ราคาก็ถูกลงไปอีก ไม่ได้จ่ายเผื่อแบบจองไว้แบบ Hosting ที่เราๆ ใช้ๆ กันแต่อย่างใด (อย่างที่บอก ใช้เท่าไหร่ จ่ายเท่านั้น) แถมถ้าเป็นช่วงแรกๆ ทดสอบระบบ Bandwidth ใช้ไม่ถึง 5GB ก็ฟรีอีก ไม่ต้องจ่ายเงินแต่อย่างใด ก็ประหยัดไปอีกครับ ลองเอาไปคำนวณเล่นๆ กันดู เผื่อคันไม้คันมืออยากลอง ตอนนี้ Azure มี Trial Account ด้วยนะ ใช้ฟรี 3 เดือน (อยู่ในข้อกำหนดที่พอเอาไปทดลองใช้งานได้สบายๆ เลย)