Showing posts with label distributed processing. Show all posts
Showing posts with label distributed processing. Show all posts

Tuesday, 10 July 2012

MapReduce - Programming Model for Distributed System



MapReduce คือ Programming Model ที่ Google นำมาใช้ในการวิเคราะห์ข้อมูลขนาดใหญ่ มักจะใช้ในการกระจายการประมวลผลไปยังเครื่อง computer เครื่องอื่นๆใน Network MapReduce มีต้นแบบมาจาก Map และ Reduce Function ที่มักพบอยู่ในภาษาประเภท Functional Programming อย่างเช่น Ruby และ Python 

ในขั้นตอนการ Map เครื่องที่ทำหน้าที่เป็น Master Node จะนำ input ที่ได้รับมาแบ่งเป็น Sub-Problem หลายๆชิ้น และกระจายไปยังเครื่องที่ทำหน้าที่เป็น Worker Node ซึ่งเครื่อง Worker Node อาจจะนำข้อมูลที่ได้รับไปแบ่งเป็น Sub-Problem อีกที (ในลักษณะของ Multi Level Tree) หรือ Worker Node อาจจะทำการประมวลผล Sub-Problem ที่ได้รับ และส่งผลลัพธ์กลับไปยัง Master Node

ในขั้นตอนการ Reduce จะเกิดขึ้นที่ Master Node โดยที่ Master Node จะนำผลลัพธ์ทั้งหมดที่ได้รับจาก Worker Node และนำมาสรุปเป็นผลลัพธ์สุดท้ายก่อนคืนกลับไปยัง Client

MapReduce ทำให้เกิดการกระจายการทำงาน (Distributed Processing) เพราะมีการแบ่งแยกขั้นตอน Map และ Reduce ออกจากกันอย่างชัดเจน โดยเฉพาะอย่างยิ่งถ้าข้อมูลที่ใช้ในขั้นตอนของการ Map และ Reduce ไม่จำเป็นต้อง Depend ซึ่งกันและกัน จะทำให้กระบวนการ Map และ Reduce สามารถเกิดขึ้นได้พร้อมๆกัน (Parallel)

MapReduce มักจะถูกนำมาใช้ในกรณีที่ข้อมูลมีขนาดใหญ๋มาก โดยที่เครื่อง Server เพียงเครื่องเดียว ไม่สามารถจะ Handle ข้อมูลได้ภายในเวลาที่กำหนด จึงจำเป็นต้องมีการใช้เครื่อง Worker จำนวนหลายๆเครื่องมาช่วยในการประมวลผล

เรามักจะพบการใช้งาน MapReduce ในหลายๆเทคโนโลยีที่รองรับการ Scale ขนาดใหญ่ อย่างเช่น Apache Hadoop Project, MongoDB



Google Technology RoundTable: Map Reduce

แหล่งที่มา: http://en.wikipedia.org/wiki/MapReduce

Thursday, 31 May 2012

Introduction to Gearman

ก่อนจะทำความเข้าใจกับ Gearman เราควรเริ่มทำความเข้าใจเกี่ยวกับเรื่องการกระจายงานกันก่อน ยกตัวอย่างกรณีของ YouTube ซึ่งในแต่ละวัน มีคน Upload Video ไปที่ YouTube เป็นจำนวนมากมาย  ซึ่งแต่ละ Clip นั้น YouTube ต้องทำการ convert ให้เสร็จเรียบร้อยก่อนจึงจะนำมาสามารถบน web ให้เราดูได้  ถ้าหาก YouTube มี Server เพียงแค่เครื่องเดียว คงไม่สามารถ เพียงพอต่อการให้บริการอย่างแน่นอน ซึ่งจาก ยอดคนใช้งานวันละเป็นล้านคน เราก็คงจินตนาการไม่ออกว่า YouTube มี server ที่คอยให้บริการมากมายแค่ไหน... ?

จากตัวอย่างดังกล่าว จะเห็นได้ว่า YouTube น่าจะมีการกระจายงานไปยัง Server เครื่องต่างจำนวนมาก เพื่อให้ช่วยกัน convert video เพื่อที่จะลดเวลาการรอของ user ลง และสามารถเพียงพอต่อความต้องการใช้งานของ user จำนวนมากด้วย ถ้าหากเรามีพัฒนา Web Application ที่ต้องประมวลผลจำนวนมาก และเราต้องการให้มีการกระจายการทำงานคล้ายๆกับ YouTube เราจะทำอย่างไร ? พัฒนาขึ้นมาเอง ก็อาจจะเป็นตัวเลือกนึง แต่มันคงใช้เวลาไม่น้อยในการพัฒนากว่าที่มันจะ Stable ....ถ้าหากไม่พัฒนาเองแล้วเราจะทำอย่างไร ? ซึ่งคำตอบก็คือ "Gearman" นั่นเอง