กระบวนท่าพื้นฐานของสถาปัตยกรรม Big Data

Big Data เป็นคำที่ฮิตติดปากในช่วงนี้ นักคอมพิวเตอร์น้อยคนนักที่จะไม่เคยได้ยิน และถ้าดูรายละเอียดของระบบ Big Data จะพบว่ามีความหลากหลายมาก ไม่ว่าจะเป็นเรื่องของ Map-Reduce หรือ NoSQL รวมไปถึง In-Memory Computing จนทำให้เกิดความน่าหนักใจในการติดตามเทคโนโลยีนี้ไม่น้อย

แต่ไม่ว่า Big Data จะซับซ้อนเพียงไร สถาปัตยกรรมของ Big Data ก็มาจากพื้นฐานที่สำคัญคือคำว่า Scale-Out โดยปกติแล้วคำในกลุ่มนี้จะเป็นการออกแบบสถาปัตยกรรมให้สามารถประมวลผลได้มากขึ้น รองรับข้อมูลที่ใหญ่ขี้น ซึ่งมีอยู่ 2 คำคือ Scale-Up กับ Scale-Out โดย Scale-Up จะเป็นการที่เราหาเครื่องคอมพิวเตอร์ หรืออุปกรณ์ที่มีขนาดใหญ่ขึ้น หรือมีทรัพยากรที่มากขึ้น นำมาประมวลผลทดแทนเครื่องเดิม เพื่อทำงานได้เร็วขึ้น หรือรองรับข้อมูลที่ใหญ่เพิ่มขึ้นนั่นเอง

scale-up

รูปแบบ Scale-Up เป็นรูปแบบที่ทำได้ง่าย เพราะสามารถใช้ระบบงานที่มีอยู่เดิมได้เลย โดยไม่ต้องไปปรับเปลี่ยนให้ยุ่งยาก คือขอให้มีสตางค์ซื้อเป็นอันทำได้แน่ๆ แต่ก็ยังมีข้อจำกัดอยู่ที่ระบบที่ขยายขึ้นนั้น จะไม่สามารถใหญ่เกินกว่าเครื่องที่มีประสิทธิภาพสูงสุดเพียง 1 เครื่องเท่านั้น ซึ่งเวลาเราเอ่ยถึง Big Data เราพูดถึงข้อมูลขนาดหลักหลาย Terabytes จนถึงระดับ Petabytes กันเลยทีเดียว คงเป็นไปไม่ได้ ถ้าจะใช้ Scale-Up เป็นหลักการทำงานพื้นฐานของ Big Data

ส่วนคำว่า Scale-Out เป็นการเอาเครื่องจำนวนมากมาช่วยกันทำงาน มีการกระจายข้อมูลต่างๆไปไว้ในเครื่องต่างๆ โดยข้อมุล 1 ชุดอาจจะกระจายไปหลายเครื่องพร้อมๆกันเพื่อช่วยกันทำงาน โดยคาดหวังว่าการแบ่งงานกันทำ จะทำให้ระบบทำงานได้มีประสิทธิภาพมากยิ่งขึ้น ฟังแล้วก็เข้ากันกับ Big Data มากๆ เพราะอยากรองรับข้อมูลใหญ่ขึ้นเท่าไหร่ ก็หาเครื่องมาเพิ่ม เพื่อทำงานร่วมกับเครื่องที่มีอยู่เดิม แต่เอาเข้าจริงมักจะไม่เป็นอย่างที่คิด เพราะการนำเอาเครื่องจำนวนมากมาช่วยกันทำงานจำเป็นที่จะต้องแก้ปัญหาหลายข้อ เช่น การที่ข้อมูลมีการผูกพันธ์เป็นกลุ่มก้อนทำให้เกิดการแบ่งข้อมูลไปช่วยกันทำได้ยาก หรือการที่จะต้องระวังว่าถ้ามีการเปลี่ยนแปลงข้อมูลเกิดขึ้น เครื่องทุกเครื่องที่มีการใช้ข้อมูลนั้นอยู่จะต้องรับทราบการเปลี่ยนแปลงนั้นเหมือนๆกัน ไม่งั้นอาจจะเกิดข้อผิดพลาดได้

scale-out

เพื่อแก้ปัญหานี้ ระบบงาน Big Data หลายระบบงานจึงต้องมีการตั้งข้อสมมุติฐานบางอย่างเพื่อให้ระบบสามารถทำงานในแบบ Scale-Out ได้ อาทิเช่น ระบบ NoSQL จะไม่มีการรองรับการเก็บข้อมูลแบบ Relational เพื่อลดความผูกพันธ์ข้อมูลในก้อนต่างๆ เพื่อให้สามารถกระจายข้อมูลในรูปแบบ Scale-Out ได้ดี หรือระบบ HDFS ของ Hadoop ที่มีแนวความคิดว่าข้อมูลที่ใช้ ไม่มีการเปลี่ยนแปลง ดังนั้น จะถูกกระจายออกไปซ้ำๆกันกี่ชุดก็ได้ อยู่ที่ไหนก็ได้ เป้นต้น

จะเห็นได้ว่า จริงๆแล้วหลักการของสถาปัตยกรรมของ Big Data ก็มาจากพื้นฐานความคิดง่ายๆอย่าง Scale-Out เพียงแต่มีการปรับโจทย์หรือตั้งข้อสมมุติฐานต่างๆ เพื่อให้สามารถทำ Scale-Out ได้นั่นเอง

การหา Facebook Page ที่ใกล้กัน (1)

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

เมื่อเรารู้แล้วว่า เราพอจะทำอะไรกันเพจเหล่านั้นได้บ้าง คราวนี้ก็ถึงเวลาลองเอาเพจมาวัดระยะกันดูครับ โดยทั่วไปแล้ว มีการวัดระยะอยู่สองแบบ คือ การวัดระยะด้วยความแตกต่างของข้อความ ซึ่งบ่อยครั้งจะเกิดปัญหาในกรณีที่เพจนั้นโพสต์รูปบ่อย ๆ ซึ่งเรามักจะหาข้อมูลจากรูปนั้นไม่ได้ ทำให้ในที่สุดเราจะวัดความเหมือนกันของเพจสองเพจนั้นไม่ได้ ทำให้มีงานวิจัยอีกกลุ่มหนึ่งที่ไม่สนใจเนื้อหาข้างใน แต่สนใจผลลัพธ์ที่เกิดขึ้นจากการโพสต์ นั่นคือ การที่มี User มากระทำการบางอย่าง เช่น Like Comment หรือ Share สถานะ รูป ลิงก์หรืออะไรก็แล้วแต่ในเพจ (รวมไปถึงการที่ User มา Like ตัวเพจเองด้วย) แล้ว User กลุ่มที่มากระทำการบางอย่างนั้น เกิดซ้อนทับกันบ้าง เป็นกลุ่มเดียวกันบ้าง เราก็สามารถเอาความเหมือนกันของกลุ่ม User มาเป็นตัวบอกว่า เพจสองเพจนั้น ใกล้เคียงกันขนาดไหน

และเนื่องจากเราต้องใช้เวลาและพลังการคำนวณในการค้นหาและดึงข้อมูลUser มา ทำให้ในที่สุดแล้ว เราสามารถดึงข้อมูลบางส่วนออกมาได้จากเพจของ Facebook ในระยะ 1 เดือน โดยการเริ่มค้นหาจาก User ที่ไป Like หรือ Comment อะไรก็แล้วแต่ 10 โพสต์ ล่าสุดในเพจทางด้านธนาคารสองเพจ ซึ่งมีผู้กด Like เพจทั้งสองเกินล้านคนทั้งสองเพจ ดึง User ออกมาได้ประมาณ 200,000 คน จากนั้นสุ่มเลือก User 400 คนที่เปิดเผยว่า ตนเอง Like เพจใดอยู่บ้างออกมา จากนั้น จึงค้นลงไปที่ User แต่ละคนว่า User เหล่านั้น กด Like เพจใดบ้าง ด้วยการ Crawl ไปยังหน้า Profile ของ User ทั้ง 400 คนนั้น ทำให้ได้เพจออกมาจำนวน 80,884 เพจ แล้วไปดึงข้อมูล User ที่มีการกระทำกับเพจเหล่านี้ใน 10 โพสต์ล่าสุดของแต่ละเพจ (จำนวนรวมทั้งสิ้น 643,157 โพสต์) ทำให้เราสามารถดึงข้อมูล User ออกมาได้ทั้งหมด 106,638,220 คน

จากนั้นจึงวัดระยะของเพจทั้ง 80,884 เพจด้วยวิธีการวัดที่เน้นจำนวน User ที่มีการกระทำต่อเพจทั้งคู่ โดยสนใจที่เพจขนาดเล็กก่อน (เพจขนาดเล็ก คือ เพจที่มีจำนวน User ซึ่งมีการกระทำต่อเพจเหล่านั้นเป็นจำนวนน้อย) แล้วเรียงลำดับเพจออกมา พบว่า 10 อันดับแรกของเพจที่มีความใกล้เคียงกันมีดังนี้

  1. Tlux51 กับ Bag’s house Shop
  2. ทรัพย์เจริญ แทรเวล กับ หจก.รุ่งทวีการท่องเที่ยว
  3. ขอบสนาม กับ ไบรอัน เดอะซวย
  4. น้าค่อม ชวนชื่น (fanclub) กับ แมนยูคลับ
  5. We Love Coach กับ The Peninsula Bangkok
  6. Bei Otto กับ Voucher_travel
  7. New page Mookies Zapp กับ คลิปดังเฟสบุ๊ค
  8. ภูฝางทัวร์ กับ เอิร์ธ เบาะซิ่ง
  9. บอย ท่าพระจันทร์ FC กับ Kirk Schiller
  10. Sexyเบาเบา กับ รีทวิต

ซึ่งทั้งหมดนี้คำนวณมาจากความสัมพันธ์จำนวน 3,271,070,286 คู่เพจ และในแต่ละคู่เพจ ต้องเปรียบเทียบโดยเฉลี่ย 25,000,000 ครั้ง ทำให้เราต้องเปรียบเทียบถึง 81,776,757,150,000,000 ครั้ง ใช่แล้วครับ คุณอ่านไม่ผิดหรอกครับ ราวๆ แปดหมื่นหนึ่งพันล้านล้านครั้ง ซึ่งไม่สามารถคำนวณได้ บนคอมพิวเตอร์เครื่องเดียวแน่นอน (จริง ๆ ก็คำนวณได้นะครับ แต่คิดว่าต้องรอนานนนนนนนนมากกกกกกกกกกกก) ทำให้เราต้องย้ายไปใช้เครื่องคอมพิวเตอร์คลัสเตอร์บน Amazon EC2 ร่วมกับ Apache Spark ในงานนี้ เราใช้เครื่อง VM จำนวน 18 Instance และใช้เวลาไปทั้งสิ้นเพียง 20 ชั่วโมง

ผมขอเวลาเรียบเรียงข้อมูลอีกเล็กน้อย รวมถึงการสร้างวิธีการวัดที่หลากหลายกว่าเดิม จากนั้นจะเปิดโอกาสให้องค์กรต่าง ๆ Download ความสัมพันธ์ของคู่เพจเหล่านี้นะครับ

Chula Data Science

Chula Data Science