Jun 16, 2008

CDN (Content Delivery Network)

เคยได้ยินคำว่า CDN กันบ้างมั้ยครับ CDN = Content Delivery Network เป็นศัพท์ทั่วไปที่ใช้เรียกพวก provider ระดับโลก เช่น akamai ที่ให้บริการฝาก content ลูกค้าก็จะเป็นพวกเว็บใหญ่ๆ เช่น google, yahoo ระดับโลกกันทั้งนั้น

สาเหตุที่เว็บดังๆ เหล่านี้ต้องมาใช้บริการบริษัทที่เป็นพวก CDN ก็เพราะว่า เค้าต้องการให้ลูกค้าดึงข้อมูลจากเว็บได้เร็วที่สุด เพราะว่าพวก CDN พวกนี้จะเอา server ไปวางไว้ตาม ISP ต่างๆ ทั่วโลกไปหมดเลย สมัยที่ผมเคยทำงานที่ KSC ก็พบว่ามี server ขนาด 1U ราวๆ 10 ตัวของ akamai ตั้งไว้อยู่ ตอนแรกๆ ก็งงว่า ตั้งไว้ทำใม แถมไม่จ่ายตังส์ด้วยมั้ง (ไม่แน่ใจมาไม่ทันตอนเค้าดิวกัน) พอได้ศึกษาเทคโนโลยีของ CDN ก็ถึงบางอ้อว่า เค้าตั้งไว้เป็นประมาณว่า web server / proxy server เอาไว้เก็บ content ให้พวกลูกค้า ให้มาดึงข้อมูลจาก server ที่อยู่ใกล้ที่สุดไป

หลักการทำงานคร่าวๆ (เอาคร่าวๆ นะ ละเอียดไม่รู้ ถ้าผิดก็บอกด้วย) เริ่มต้นเลย สมมุติว่า yahoo มีข่าวอันนึงดังมาก คนเข้าทั้งโลก yahoo บอกว่า server ของ yahoo รับได้แต่อาจจะอืดไปสำหรับข่าวดังๆ แบบนี้ ก็เลยติดต่อ akamai ขอฝากรูปซัก 10 รูปไว้หน่อยนะ ช่วยเอาไป distribute ตาม server ของ akamai ทั้งโลกเลยนะ จากนั้นทาง akamai ก็จะจัดการเอา content ที่ว่า 10 รูปนั้นไปวางตาม server ซึ่งก็ควรจะเป็น automate process ทั้งหมด ทาง yahoo ซึ่งปกติมี image server ของตัวเอง ก็จะเปลี่ยน URL ของ เช่น จากเดิมใช้ http://a.yimg.com/abc.jpg ก็อาจจะเปลี่ยนไปใช้ http://xxx.akamai.net/yyy/zzz/abc.jpg อะไรประมาณนั้น

บางคนอาจจะงงว่า แล้วมันจะเร็วได้ยังงัย ก็ต้องมาดูว่า เมื่อ browser เราดึง content html มาจาก yahoo ได้แล้ว ก็ต้อง follow <a href> link เพื่อไปเอารูปมาแสดง ดังนั้นก็ต้อง nslookup xxx.akamai.net ก่อนเพื่อจะได้เปิด HTTP connection ไปยัง xxx.akamai.net คาดว่าที่ akamai เอง ใช้อุปกรณ์ตัวนึงวางคั่นหน้า primary dns server ของ akamai ตัวอุปกรณ์ตัวนี้มันฉลาด มันมีฐานข้อมูลของเกือบทุกไอพีหมดเลย ว่าไอพีใหนอยู่ที่ประเทศใหน เมื่อมันรู้อย่างนี้มันก็ return A record ของ xxx.akamai.net ตัวที่ใกล้ที่สุดมาให้เรา ดังนั้นเราก็จะรู้สึกเสมือนว่าทำใมเปิดเว็บพวกนี้เร็วจัง เหมือนเปิดเว็บในประเทศเลย

คราวนี้มาดูบริษัทเล็กๆ กันบ้าง ไม่มีตังส์แต่อยากทำแบบนี้ทำได้มั้ย ได้แน่นอน บางที่ใช้ก็ใช้ Load balancer ที่มีฟังก์ชัน GSLB มาทำหน้าที่ปล่อยไอพีแทน บางที่ก็เล่นง่ายๆ ใช้ DNS Server ที่ support การทำ geography มาแทนเลย แบบนี้ก็ได้ ที่คุ้นๆ ตาคิดว่าทำได้คือ PowerDNS ว่างๆ ก็ลอง search มาลองใช้กันดู

ถ้าอยากเห็นตัวอย่างการใช้งานจริงๆ ก็ลองเปิดเว็บ cnn.com ดูนะ เปิด firebug ดูแล้วจะเห็นว่า เทคนิคนี้เค้าใช้กันจริงๆ ครับ ผมจะพิสูจน์ให้ดูง่าย ท่านลองทำตามเลยก็ได้

1. เปิด firebug ดูแล้วจะเห็นว่า มีการวางรูปไว้ที่ domain i.cdn.turner.com
2. เราเปิด cmd บน windows เราแล้ว nslookup มาดู จะได้ว่า i.cdn.turner.com = 207.123.44.123
3. สมมุติว่าเราเป็น User ที่ america เราจะได้ไอพีเดียวกันมั้ย ลองง่ายๆ เปิดเว็บที่เป็น dns tool เช่น www.dnstools.com มา แล้วคีย์ i.cdn.turner.com ออกมาดู ณ ขณะนี้ผลลัพธ์ทีได้คือ 199.93.46.126

เห็นชัดเจนครับว่า ต่าง zone ก็จะได้ ip ของ i.cdn.turner.com ที่ต่างกัน

บางคนที่พอจะเข้าใจเรื่อง dns server ลึกซึ้งหน่อย ก็จะมองออกว่า เอ้ะ มันเหมือนมี single point of failure ที่ระดับ dns server นะ คราวหน้าผมจะมาเฉลยครับว่า ระดับโลกเค้าทำกันอย่างไร เพื่อแก้ไขปัญหานี้

No comments: