การสื่อสารระหว่างโปรเซสถือว่าเป็นหัวใจของระบบแบบกระจาย โดยส่วนใหญ่จะเป็นการสื่อสารแบบ low-level ผ่านเครือข่าย

Remote Procedure Call (RPC)

เป็นการไปเรียกใช้งาน method หรือ service บนเครื่องอื่น และเมื่อเรียกแล้วการทำงานของ process บน client จะหยุดไปชั่วคราวเพื่อรอการ execute ของ method ที่เรียกไป โดยจะส่งไปแค่ parameter ต่างๆ และได้ผลลัพธ์กลับคืนมา ซึ่ง programmer ไม่จำเป็นต้องรู้ถึงการทำงานข้างหลัง เพราะ RPC พยายามจะทำให้การเรียกใช้งานเหมือนการเรียก function ใน โปรแกรมให้มากที่สุด ซึ่ง RPC จะใช้เทคนิคที่เรียกว่า stub ช่วย

  • Client Stub ทำหน้าที่แพค parameters ทำเป็น msg แล้วบอกให้ kernel ส่งไปหา server
  • Server Stubทำหน้าที่ unpack แล้วเรียก method ด้วย parameter ที่ได้มา

กระบวนการ Remote Procedure Call

  1. client process เรียกใช้ client stub
  2. client stub ทำการ marshalling message
  3. client os  (kernel) ส่ง message ไปยัง sv.
  4. server os (kernel) รับ message ส่งไปยัง server stub
  5. server stub unmarshalling
  6. server stub call procudure.
  7. server stub ทำการ marshalling ผลลัพธ์
  8. client kernel รับ message แล้วส่งไปให้ client stub
  9. client stub ทำการ unmarshilling
  10. client stub บันทึกผลลัพธ์กลับ

Passing value parameters
การ ใช้งานไม่จำเป็นต้องเป็นเครื่องเดียวกัน (คุณสมบัติ openess ) ในการส่ง parameter ต้องกำหนดรูปแบบมาตราฐาน เพราะเครื่อง server/client อาจจะใช้มาตรฐานในการเข้าถึงไม่เหมื่อนกัน
การ ทำ Marshalling/Unmarshlling อยู่ใน Presentation Layer ของ OSI model โดยการทำงานนั้นต้องเข้าคู่กัน แปลงไปแล้วต้องสามารถแปลงกลับได้
Marshalling : copy ค่าใน memory มาสร้าง message
Unmarshalling: เอาค่าจาก message มา unpack ไว้ในหน่วยความจำ

Passing Reference Parameters

ทำได้ยากเพราะมีการอ้างอิง address ที่ต่างกันดังนั้นการ call by reference จะถูกเปลี่ยนเป็น call by copy แทน
เครื่องมือในการพัฒนาโปรแกรมประเภท RPC
ใช้ Interface Definition Language (IDL) ในการประกาศว่ามี procedure อะไรบ้าง และมีพารามิเตอร์อะไรบ้างในการเรียกใช้งาน โดยตัว IDL Compiler จะช่วยสร้าง Client/server Stub ที่เข้าคู่กันได้
Synchronous RPC: ต้องการการทำงานฝั่ง server ให้เสร็จก่อนจึงจะทำงานต่อได้
Asynchronous RPC: ตรงข้ามกัน โดย server จะ acknowledge กลับมาว่าได้รับ request แล้ว และจะต้องมีเทคนิคพิเศษที่คอยรับ response กลับจาก server ซึ่งจะช่วยเพิ่มประสิทธิภาพการทำงาน
One-way Asynchronous RPC คือ client ไม่ต้องรอ ACK จาก server ว่าได้รับ request แล้ว

Remote Method Invocation (RMI)
Remote Object Invocation
Method = Procedure
Parameter = state, attr ของ object
เช่นเดียวกับ RPC มี client stub ที่เรียกว่า proxy ส่วน server stub เรียกว่า skeleton แต่มี transparency มากกว่าการทำ RPC โดยใช้เทคนิค Distributed Object ที่ทำให้เครื่อง client เสมือนมี Object นั้นอยู่จริงๆ แต่ที่จริงแล้ว Object อยู่อีกเครื่องหนึ่ง
Message-Oriented Communication(MOC)
มี communication server เป็นตัวกลางในการติดต่อสื่อสารระหว่าง client และ server ความแตกต่างระหว่าง RPC หรือRMI อีกอย่างนึงก็คือ RPC/RMI เมื่อเรียก request แล้ว process จะถูก block จนกว่าจะมีการตอบกลับมา แต่ถ้าเป็น MOC ไม่จำเป็นเพราะมีตัวกลาง เช่น Mail system
Persistent Communication
message ส่งถึงกันได้โดยที่ผู้รับและผู้ส่งไม่จำเป็นต้องอยู่ในระบบพร้อมกัน
Transient Commnucation
message จะส่งไปถึงกันได้ก็ต่อเมื่อทั้งผู้รับและผู้ส่งปรากฎอยู่ในระบบ

Persistence and Synchronoicity in Communication

Persistent Async. ผู้ส่ง message แล้วหยุดการทำงาน โดยที่ message ยังพยายามเดินทางไปยังผู้รับ
Persistent Sync. ผู้ส่ง message จะรอจนกว่า message ส่งไปถึงผู้รับแล้ว จึงจะสามารถทำงานอื่นได้
Transient Async. เมื่อส่ง Message แล้วสามารถทำงานต่อไปได้เลย
Transient Sync. เมื่อส่ง message แล้วต้องรอการ ACK จากผู้รับ โดยแบ่งเป็น
Receipt-based จะส่ง ACK เมื่อได้รับ message แล้ว
Delivery-based จะส่งACK เมื่อผู้รับเริ้มประมวลผล
Response-based จะส่ง ACK เมื่อผู้รับประมวลผลเสร็จแล้ว
Stream-Oriented Communication
คำนึงถึงคุณภาพในการสื่อสาร
Asynchronous – ไม่มีการรับประกันคุณภาพ
Synchronous – กำหนด Delay สูงสุดไว้
Isochronous – กำหนด delay ต่ำสุดและสูงสุดไว้
simple stream คือมี DATA แบบเดียว
complex stream คือมีข้อมูลหลายๆชุดเช่น vdo streaming มี vdo + audio tracks