Truyền thông giữa các tiến trình
(Inter-process communication)
Các chủ đề chính
– Các đặc trưng của IPC
– Truyền thông đồng bộ và bất đồng bộ
– Biểu diễn dữ liệu ngoài và marshalling
• CORBA’s Common Data Representation
• Java Object serialisation
– Truyền thông trong Client-Server
• Client-Server Communication
• Truyền thông bên trong các dịch vụ được một nhóm server cung
cấp
– Truyền thông nhóm
– IP multicast
Nhắc lại: Tiếp cận lớp
! The OSI model
Application
Presentation
Session
Transport
Network
Data
Physical
Application
Presentation
Session
Transport
Network
Data
Physical
The network
A message,
descends
through the
layers
Then ascends
through the
layers at the
receiver
A HOST – A COMPUTER A HOST – A COMPUTER
Bài này tập trung vào Middle ware
Application: Applications, services
RMI and RPC
Request Reply Protocol (RRP)
Marshalling and external data representation
Middleware
layers
Transport: UDP and TCP
Other lower lever layers…
Các cơ sở của thông điệp
• API (application programming interface)
– Trong ngữ cảnh của bài này, nó đề cập đến một interface cho các lập
trình viên ứng dụng sử dụng UDP hoặc TCP
• Chuyển thông điệp có hai tác vụ chính
– Gửi và nhận (Request and Reply)
– một tiến trình gởi đến các người nhận khác
– Một yêu cầu đơn giản là cả hai: các nơi nhận và các thông điệp liên
quan đến đồng bộ hóa (synchronisation)
Đồng bộ hóa
– Đồng bộ (blocking)
• Người gởi bị “khóa” nghĩa là bị “đóng băng” trong khi gởi
cho đến khi có phản hồi từ người nhận
• Người gởi và người nhận đồng bộ với nhau
– Bất đồng bộ (non-blocking)
• Người gởi có thể thực hiện xử lý một khi thông điệp đã được
gởi
– Các hệ thống hiện nay nhắm đến đồng bộ
– Bất đồng bộ làm cho mã chương trình thêm phức
tạp
Đồng bộ (tt.)
• Ví dụ
– Blocking:
• Yêu cầu rút tiền từ máy ATM
• Máy ATM bị khóa cho đến khi nhận được xác nhận quyền truy xuất từ
ngân hàng.
– Non-blocking
• Một DIS là non-blocking, nó cho pháp các xủa lý được thực hiện trong
khi đợi trả lời
• Email là một ví dụ trong thế giớ thực về thông điệp non-blocking
• Bạn gởi một email và rồi làm chuyện khác trong khi chờ trả lời
API & IP: truyền thông giữa các tiến trình
• Nơi đến của thông điệp
– Địa chỉ
• Địa chỉ xác định duy nhất một phần cứng, có thể là một máy
tính
• Một cổng cục bộ là một nơi đến trên một máy tính
– Một hoặc nhiều thông điệp có thể được gởi đến các cổng
– Các tiến trình có thể sử dụng một hay nhiều cổng để nhận thông
điệp
Address + port
156.254.12.35:875
API & IP: truyền thông giữa các tiến trình
• Các vấn đề cần quan tâm trong truyền thông
giữa các tiến trình
– Độ tin cậy (Reliability)
• Các hệ thống có thể tin cậy không nên làm hư thông điệp ngay cả
nếu các gói bị mất hay bị hủy
– Tính thứ tự (Ordering)
• Thông điệp được phân phối theo thứ tự gởi
Truyền thông giữa các tiến trình
A computer, IP address = 138.37.543.345
client
ports
server
A computer, IP address = 138.37.53.349
ports
Port: 1
Port: 671
Port: 1
Port: 771
Truyền thông tiến trình và Sockets
• Sockets
– Là một sự trừu tượng theo đó tiến trình liên kết đến
một socket có quan hệ đến một cổng
– Gán một cổng cục bộ đến một tiến trình
– Tiến trình trao đổi với socket – liên quan đến một cổng
– Các tiến trình chỉ có thể truy xuất thông điệp từ các
cổng liên kết đến socket của chúng
Truyền thông giữa các tiên trình
A computer, IP address = 138.37.543.345
client
ports
server
A computer, IP address = 138.37.53.349
ports
Port: 1
Port: 671
Port: 1
Port: 771
Socket maps to a port
Socket maps to a port
Truyền thông theo UDP
◦ UDP và phương pháp Datagram
" Datagram được gởi từ một tiến trình đến tiến trình nhận
" Tr ước hết người gởi (the client) và người nhận (the server) phải
được liên kết đến cùng một socket
" Client có thể liên kết đến bất kỳ cổng nào
" Server liên kết đến cổng bảng bá đã xác định để nhận thông điệp
" client gởi thông điệp của nó đến server bao gồm dịa chỉ nguwowgi
gởi (để nhận trả lời)
" server nhận và xử lý
" server gởi trả lời cho client thông qua địa chỉ và cổng
Truyền thông UDP (tt.)
! Phương thức send là non-blocking (asynchronous)
◦ như vậy chúng ta tự do khi đã gởi
! Phương thức nhận là blocking (synchronous), mặc dù các
threads khác có thể được dùng để tiến hành các công việc
khác.
! Nhận có thể dùng time-outs để giới hạn thời gian bị block.
◦ Tuy vậy việc xác định gia trị timeout tốt là khó
! Thông điệp nhận được được lưu trữ trong hàng đợi liên kết
với socket.
! Người nhận kiểm tra socket liên kết để nhận thông điệp
! Các thông điệp nhận được có thể đến từ khắp nơi
Truyền thông UDP
◦ Sử dụng UDP và phương pháp Datagram
" Hiệu quả khi không quan tâm đến sự cố và khả năng chịu lỗi
" i.e. naming services
" Hiệu quả vì giảm các truyền thông bắt tay để bảo đảm các phương
thức phân phối
Truyền thông UDP
! UDP và phương pháp Datagram
◦ Ví dụ về phương thức:
" aSocket.send(request)
" aSocket.recieve(reply)
" ở đây cả hai request và reply và các gói Datagram
◦ Các phương thức khác:
" setSoTimeout
" connect
API & IP: truyền thông UDP
• In Java
• A DatagramPacket class contains:
• i.e.
In Java a DatagramPacket is constructed:
myPacket = new DatagramPacket(m,args[0].length(), aHost, serverPort);
Note: the DatagramPacket contains the host address (aHost) and the host port
(serverPort)
The message Length of message Internet address Port
3432 543 4531 13 145.25.123.871 589
API & IP: truyền thông UDP
• Trong'Java'
Trong'Java,'một'DatagramPacket'được'gởi'và'nhận'như'sau:'
'
'aSocket.send(myPacket);2
2aSocket.recieve(myPacket);2
'
Ghi'chú:'aSocket'là'một'thể'hiện'của'lớp'DatagramSocket'.'
'