WeLoveBug

Thai Software Testing Blog

By

Case Study: How MySpace tested their live site with 1 million concurrent users

สวัสดีเช้าวันอังคารที่ 30 มีนาคม 2553 ครับเพื่อนพ้องน้องพี่ ห่างหายจากการเขียนบทความลงใน welovebug ไปเกือบ 3 สัปดาห์ เนื่องจากมีภารกิจนิดหน่อย เช้าวันนี้ก็เลยหยิบยก Case Study ของการทำ Performance Testing มาฝากเพื่อนพ้องน้องพี่กันครับ

Case Study Performance Testing ที่นำมาเสนอวันนี้มีชื่อว่า How MySpace tested their live site with 1 million concurrent users ซึ่งผมได้รับการแนะนำบทความต้นฉบับมาจาก คุณภูวดล (@AuntiSPAM) ณ addmoremem.com ขอขอบคุณ คุณภูวดลaddmoremem.com ไว้ ณ ที่นี้ด้วยครับ :) ลองตามไปดูก่อนหน่อยครับว่า MySpace ทำยังไงในการที่จะทดสอบ Performance Testing 1 ล้าน concurrent users

รูปจาก http://www.albertsmusicgifts.com

มารู้จักกับ MySpace กันสักหน่อย

MySpace เป็นเว็บไซต์ในรูปแบบของเครือข่ายชุมชนออนไลน์ ชื่อดังเว็บหนึ่ง ให้บริการทำเว็บส่วนตัว บล็อก การเก็บ ภาพ วิดีโอ ดนตรี และเชื่อมโยงเข้ากับกลุ่มคนอื่น MySpace ก่อตั้งเมื่อ สิงหาคม พ.ศ. 2546 โดย ทอม แอนเดอร์สัน และ คริสโตเฟอร์ เดอโวล์ฟ ในปัจจุบัน MySpace มีพนักงานกว่า 300 คน และในตัวเว็บไซต์มีผู้ลงทะเบียนมากกว่า 100 ล้านคน และมีผู้ลงทะเบียนใหม่ประมาณ 200,000 คนต่อวัน (รายละเอียดเกี่ยวกับ MySpace สามารถอ่านเพิ่มได้ที่ Wikipadia)

Site: http://myspace.com

Overview MySpace Architecture

มาดู Architecture ของ MySpace กันก่อนนะครับ จะได้เห็นภาพเบื้องต้นก่อนว่ามีอะไรอยู่บ้างในระบบของ MySpace

Platform

  • Operating System: Microsoft Windows
  • Web Server: Internet Information Services (IIS)
  • Web Application Framework: ASP.NET 2.0
  • Database Server: SQL Server

What’s inside MySpace

  • 300 million users.
  • Pushes 100 gigabits/second to the internet. 10Gb/sec is HTML content.
  • 4,500+ web servers windows 2003/IIS 6.0/APS.NET.
  • 1,200+ cache servers running 64-bit Windows 2003. 16GB of objects cached in RAM.
  • 500+ database servers running 64-bit Windows and SQL Server 2005.
  • MySpace processes 1.5 Billion page views per day and handles 2.3 million concurrent users during the day.

ทั้งข้อมูล Platform และ ตัวเลข 6 ตัวเลขที่นำมาเสนอต่างน่าสนใจมากสำหรับระบบที่ใช้ผลิตภัณฑ์ Microsoft Windows เพื่อให้บริการ และรองรับจำนวนการให้บริการกับผู้ใช้เป็นจำนวนมาก ข้อมูลเพิ่มเกี่ยวกับ MySpace Architecture แบบละเอียดสามารดอ่านเพิ่มเติมได้ที่ MySpace Architecture

1 Million Concurrent Users

สำหรับเพื่อนพ้องน้องพี่ที่เคยทำ Performance Testing มานั้น จำนวน concurrent users ที่เราคุยกันจะเป็น หลักร้อย หรือ หลักพัน แต่นี่ MySpace ได้ทำการทดสอบจำนวน concurrent users ที่ 1 ล้าน!!! เราลองมาดูกันว่า MySpace สามารถสร้าง 1 ล้าน concurrent users ได้อย่างไรครับ

ข้อมูลที่ถูกนำเสนอในบทความนี้มาจาก How MySpace tested their live site with 1 million concurrent users

การดำเนินการทดสอบ Performance Testing ของ MySpace ที่จำนวน 1 ล้าน concurrent users เกิดขึ้นเมื่อประมาณเดือนธันวาคม 2552 MySpace ได้ปล่อย Features Streaming Music Video ใน New Zealand ซึ่งสามารถที่จะดู music video, ค้นหา music video ของศิลปิน, สร้าง list of favorites เป็นต้น

MySpace เล็งเห็นว่า Features ใหม่ที่ได้เปิดให้บริการไปนั้นจะสร้าง Load เพิ่มขึ้นมากให้กับ Architecture ของ MySpace ที่ให้บริการอยู่ จึงได้ร่วมมือกับ SOASTA ในการออกแแบบ และดำเนินการทดสอบ Performance Testing ที่ 1 ล้าน concurrent users เพื่อทดสอบระบบ และแก้ไขปัญหาที่จะเกิดขึ้นก่อนที่จะให้บริการ Features ใหม่กับผู้ใช้ เพราะถ้าไม่ทำ Performance Testing งานอาจจะเข้าได้ :)

SOASTA คือใคร?

SOASTA CloudTest was built to support all common Web application testing types: Load, Performance, Functional, and UI/Ajax either inside your firewall or inside “The Cloud”.

สำหรับผู้ที่สนใจสามารถเข้าไปอ่านรายละเอียดของ SOASTA ได้ที่ http://www.soasta.com/

MySpace ตั้ง Goal ของการทดสอบ Performance Testing ไว้ที่ระบบจะต้องสามารถรองรับ และให้บริการ เมื่อมีผู้ใช้งานอยู่ในระบบ 1ล้าน คนพร้อมกัน เพื่อจะ monitor ดูการทำงานของระบบไม่ว่าจะเป็นส่วนของ Servers ต่างๆ และ การบริหารจัดการ Traffic ด้วยเช่นกัน ดังนั้นด้วย SOASTA จึงนำเสนอ CloudTest เข้ามาเพื่อใช้ในการสร้างจำนวน concurrent users ที่ 1 ล้าน และได้ข้อสรุปของจำนวน Load ที่จะต้องสร้างขึ้นเพื่อใช้ในการทดสอบที่ 1 ล้าน concurrent users (virtual user) ดังนี้

  • 1 million concurrent virtual users
  • Test cases split between searching for and watching music videos, rating videos, adding videos to favorites, and viewing artist’s channel pages
  • Transfer rate of 16 gigabits per second
  • 6 terabytes of data transferred per hour
  • Over 77,000 hits per second, not including live traffic
  • 800 Amazon EC2 large instances used to generate load (3200 cloud computing cores)

อืม…เป็นการทดสอบที่น่าสนใจมากๆ และส่วนตัวผมว่าในประเทศไทยเรา ณ ขณะนี้คงจะไม่มีใครที่จะลงทุนทำได้ขนาดนี้ หลายๆ คน จะสะดุดตากับ 800 Amazon EC2 ว่ามันคืออะไร?

Amazon ได้รุกตลาดของ Cloud Computing โดยเปิดให้บริการที่ชื่อว่า Amazon Elastic Compute Cloud (Amazon EC2) รายละเอียดเพิ่มเติมสามารถอ่านได้ที่

Test Environment Architecture

มาต่อกันด้วย Test Environment ของการทดสอบในครั้งนี้ของ MySpace ว่าเป็นอย่างไร ทางทีม SOASTA ดำเนินการออกแบบ และทดสอบ โดยการเรียกไปยัง API เพื่อสร้าง Request เข้าไปที่ระบบของ MySpace โดยการสร้างจำนวน concurrent users ,เก็บผลจากการทดสอบ และวิเคราะห์ผลการทดสอบ SOASTA ได้ขอให้ทาง Amazon จัดเตรียม EC2 โดยกำหนด Specification ไปดังนี้

  • 7.5 GB memory
  • 4 EC2 Compute Units (2 virtual CPU cores with 2 EC2 Compute Units each)
  • 850 GB instance storage (2×420 GB plus 10 GB root partition)
  • 64-bit platform
  • Fedora Core 8

รวมทั้งเตรียม EC2 เพื่อใช้เป็นระบบ Test Controller โดยกำหนด Specification ไปดังนี้

  • 15 GB memory
  • 8 EC2 Compute Units (4 virtual cores with 2 EC2 Compute Units each)
  • 1,690 GB instance storage (4×420 GB plus 10 GB root partition)
  • 64-bit platform
  • Fedora Core 8
  • PostgreSQL Database

รูปร่างหน้าตาของ Test Environment Architecture จึงเป็นไปตามรูปภาพด้านล่างนี้

รูปจาก http://highscalability.com

สรุปสิ่งที่พบจากการทดสอบ 1 ล้าน concurrent users

ผลที่ได้จากการทดสอบ 1 ล้าน concurrent users จาก Amazon EC2 ไปยัง MySpace Infrastructure สรุปได้ดังต่อไปนี้

  • ขณะที่ดำเนินการทดสอบ ทีมงานของ SOASTA และ Amazon ได้ทำการ monitor ดูระบบ Cloud ที่ใช้ให้ Stable มากที่สุดที่จะเป็นไปได้ และเมื่อตรวจพบว่ามี Server ตายไป ก็จะดำเนินการถอดออกจากระบบ และเพิ่ม Server ตัวใหม่เข้าไปทันที เพื่อให้เป็นไปตาม Test Cases ที่ได้ออกแบบไว้ และลดผลกระทบต่อการสร้าง Load เข้าไปยัง MySpace
  • SOASTA นับเป็นหนึ่งในลูกค้าของ Amazon EC2 ที่มีการใช้งาน Resource มากเป็นอันดับต้นๆ
  • ทีม SOASTA เองก็ได้ทดสอบระบบ CloudTest ของตนเองไปในเวลาเดียวกันด้วย เพราะจำนวนของ Virtual User ที่จะต้องสร้างต่อ 1 server อยู่ที่ 1,300 – 1,500 ซึ่งมากเป็น 3เท่า ของ CloudTest ที่ SOASTA เคยทำมาก่อน
  • MySpace ใช้ Content Distribution Network หรือเรียกกันสั้นๆ ว่า CDN ของ Akamai แอบ งง กันนิดหน่อยสำหรับเพื่อนพ้องน้องพี่หลายๆ คนว่า CDN คืออะไร? อธิบายแบบเข้าใจง่ายๆ CDN เป็นระบบที่จัดเก็บ Content และกระจาย Content ไปตาม Location ต่างๆ เมื่อ User จากประเทศไทยต้องการดู Music Video ระบบของ MySpace ก็จะส่ง Music Video นั่นให้กับ User โดยเลือกให้ Node ที่ใกล้ที่สุดของ User คนนั้นเป็นผู้ส่ง Content ให้ แทนที่จะ MySpace USA จะเป็นคนส่งไปให้ ถ้ายัง งง งง งง และ งง ให้นึกถึงเวลาที่เราโทรเข้าไปสั่ง Pizza เมื่อพนักงานรับ Order เรียบร้อยก็จะดูว่า เราอยู่ ณ เขตไหน และมีสาขาไหนของร้านที่ใกล้กับเรามากที่สุด ก็จะส่ง Order ไปยังสาขานั้น เพื่อให้ทำการจัดส่ง Pizza มาให้
  • ในการทดสอบเกิดขึ้น ณ Amazon’s East Coast ดังนั้น จึงมีการ Request จำนวนมากเกิดขึ้น และวิ่งตรงไปยัง Datacenter ของ Akamai ที่รองรับ zone East Coast จึงทำให้ในขณะที่ดำเนินการทดสอบจะพบว่าเกิด Connection time out และ Refuse connection established เกิดขึ้นจากทางระบบ CDN ของ Akamai
  • ทีม Operation ของ MySpace ได้ดำเนินการ Monitor ทั้งระบบ Servers และ Traffic ไปด้วยในเวลาเดียวกัน เพื่อซ้อมแผนรองรับการใช้งานที่จะเกิดขึ้นจริงไปในตัว และผลที่ได้ออกมาทีม Operation สามารถรับมือได้กับจำนวน Load, Request และ Traffice ที่เกิดขึ้นจาก Performance Testing

สามารถอ่านรายละเอียดเพิ่มเติมได้จาก How MySpace tested their live site with 1 million concurrent users

สรุปปิดท้าย

จาก Case Study ที่หยิบยกมาฝากนั้น ผมคัดลอก และสรุปมาเฉพาะส่วนที่สำคัญๆ เพื่อให้ได้เเพื่อนพ้องน้องพี่ทั้งที่เป็น System Analysis, Developer, Programmer, Tester และบุคคลที่เกี่ยวข้องการการพัฒนา Software หรือ System รวมทั้งทีม Operation ที่จะต้องดูแล Software หรือ System ได้เห็นว่า Performance Testing นั้นสำคัญไฉน

ไม่ว่า System Analysis จะเก๋าในการวิเคราะห์และออกแบบ Software หรือ System ขนาดไหน

ไม่ว่า Developer หรือ Programmer จะเทพเพียงใด

ไม่ว่า Tester จะมีชั่วโมงบินสูงเพียงใด

แต่ก็ไม่สามารถจะบอก หรือการันตีได้ว่า Software หรือ System นั้น จะสามารถให้บริการได้อย่างราบรื่น และจะไม่มีปัญหาเรื่องของ Performance และ Capacity เมื่อเปิดให้ผู้ใช้เข้ามาใช้บริการ และให้บริการไปเรื่อยๆ โดยมี จำนวนผู้ใช้เพิ่มขึ้น, จำนวนของ Content เพิ่มขึ้น และจำนวนข้อมูลใน Database เพิ่มขึ้น เป็นต้น

ดังนั้น Performance Testing ช่วยท่านได้ในการทดสอบ และวิเคระาห์ผลออกมาว่า Software หรือ System ที่ท่านทั้งหลายได้ออกแบบ พัฒนา และทดสอบ มานั้นจะ อึด ถึก ทนทาน ได้ขนาดไหน และมีชีวิตอยู่รอดได้อีกนานเพียงใด

Service Down หรือ Web ล่ม มันมิใช้เพียง ขำๆ แล้วพูดว่า “ไม่เป็นไร สั่ง Reboot Server เดี๋ยวก็กลับมาใช้ได้แล้ว” แต่มันเป็น หน้าตา และภาพลักษณ์ของ บริษัท และองค์กร ของท่านทั้งหลายด้วยเช่นกัน รวมทั้งตัวท่านด้วย (ไปคิดต่อเอาเองครับ : )

เช่นเดิมที่เคยบอกไว้ การแก้ปัญหา Performance กับระบบที่ให้บริการอยู่บน Production มันไม่สนุก และเหนื่อยมา

May the force be with you

Zyracuze

Zyracuze

brother, uncle,waterfall, agile, qa, qc, ITIL, reading, writing, cooking, music, photo, linkinpark, liverpool, coffee, basketball, bicycle, mtb, 66120 and 10220

More Posts - Website

Follow Me:
TwitterFacebookLinkedIn

Leave a Reply

Your email address will not be published. Required fields are marked *


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>