เว็บบล๊อกผลงาน (Web Blog) นักศึกษาระดับปริญญาโท คณะวิทยาศาสตร์และเทคโนโลยี สาขาวิทยาการคอมพิวเตอร์ มหาวิทยาลัยธรรมศาสตร์

วันอาทิตย์ที่ 21 มีนาคม พ.ศ. 2553

Two-Phase Commit Protocol (Process Model)

Project_Master-Slave แบบที่ใช้ Process

การทำให้ Process สามารถติดต่อสื่อสารกันได้ มีอยู่หลายวิธีด้วยกัน เช่น Pipe, Shared Memory, Message Queue, etc สำหรับโปรแกรมที่เขียนขึ้นนี้ แบ่งออกเป็น 2 แบบ (ทำไว้ 2 วิธี) ในการทำให้ Process ติดต่อสื่อสารกันได้

ส่วนที่ทำเสร็จ

  • list (พิมพ์ slave ทั้งหมด)
  • list-files
  • delete-member (ตัดการเชื่อมต่อแล้วลบออกจากกลุ่ม)
  • run-code (2-phase, เช็คโค๊ดว่ารันได้ไหม, ถ้ารันได้ สั่งให้รันทุก slave, ถ้าไม่ได้ ให้ยกเลิกหมด)
  • put-file (master ส่งไฟล์ให้ slave)
  • get-file (master ขอไฟล์จาก slave)
  • list-files (สั่งให้ slave list ไฟล์)
  • stage-code

คำสั่งที่อาจจะไม่ได้ทำ คือ
  • close-conn
  • check-all-file


ขั้นแรก
ทำให้ Process ติดต่อสื่อสารกันได้ ระหว่าง Parent กับ Child Process (ของ Master)
โดยใช้ Message Queue มีการเรียกใช้งานอยู่หลักๆ 4 ฟังก์ชัน
  • msgget() เริ่ม
  • msgsnd() ส่ง
  • msgrcv() รับ
  • msgctl() ลบ ตอนจบการทำงาน
คำสั่งแบบ command line สำหรับตรวจสอบ


  • ipcs -q
คำสั่งสำหรับลบ

  • ipcrm -Q [หมายเลข key]
Message Queue

  • ปกติเราจะคุ้นเคยกับ เขียนโปรแกรมแบบ synchronous คือ ถามไปต้องตอบมา ขอไปต้องได้รับผล แต่ Message Queue ในที่นี้ เป็นลักษณะของการเขียน Message ลงไปใน Queue คนที่รับก็รอรับในส่วนของการติดต่อระหว่าง Master กับ Slave ใช้ Socket ธรรมดา

Program description



รูปที่1


1.โครงสร้าง Master กับ Slave ตามในรูปที่ 1 ใช้ Virtual Machine (VM) สำหรับการติดตั้ง VM โดยใช้ Xen สามารถเข้าไปศึกษาได้ที่ http://www.lsr.nectec.or.th/index.php/Howto_Install_and_Setup_Xen_Virtualization_on_CentOS_Linux


รูปที่ 2








2. การติดต่อสื่อสารกันระหว่าง Master กับ Slave อยู่ในรูปแบบ Socket โดยที่ Master จะทำการ Fork Process ขึ้นมาหลาย ๆ Child Process เพื่อให้รองรับหลาย ๆ Slave ได้ การติดต่อสื่อสารระหว่าง Parent กับ Child ใช้ Message Queue การติดต่อสื่อสารระหว่าง Master กับ User ผ่าน Command Prompt
รูปที่ 3

 3. การติดต่อสื่อสารระหว่าง User กับเครื่อง Master ผ่าน Prompt "twophase>"




รูปที่ 4


4. หลังจากที่ได้รับคำสั่งจาก User ตัว Parent ก็จะสั่งงานไปยัง Child ในรูปแบบ Message Queue มีโครงสร้างข้อความตามรูป (ทำนองเดียวกันเมื่อ Child ทำงานเสร็จแล้ว จะส่งผลให้ Parent ในรูปแบบ Message Queue เหมือนกัน)


รูปที่ 5




5. เราใช้ Key เป็นตัวแยกแยะว่า Message ไหน ใช้ติดต่อกับ Child ตัวไหน (โปรแกรมที่เขียนขึ้นมานี้ กำหนด Key ตาม Rank)




รูปที่ 6


6. เหมือนมีหลาย ๆ Message ถูกส่งไปยัง Child


จากแนวคิดการเขียนโปรแกรม
น่าจะช่วยเพิ่มความเข้าใจให้กับตัวโปรแกรมมากยิ่งขึ้นนะครับ  ^^

credit:
cs.bong.nine



ไม่มีความคิดเห็น:

แสดงความคิดเห็น

คลังบทความของบล็อก

favourites