SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
LẬP TRÌNH PHÂN TÁN THEO CHỦ ĐỀ 
Cao Tuấn Dũng 
Trịnh Tuấn Đạt 
1 
RPC
Nội dung 
1. Đặt vấn đề 
2. Lời gọi thủ tục thông thường 
3. Thực thi RPC 
4. Các vấn đề trong RPC 
5. Lập trình với RPC 
2
1. Đặt vấn đề 
Khó khăn khi lập trình socket: 
Tương tác trong Socket là đơn giản: 
[connect] 
read/write 
[disconnect] 
NHƯNG … bắt buộc có cơ chế Read/Write 
Chúng ta thường sử dụng một “Procedure call” 
Để lập trình phân tán trong suốt với lập trình viên, như lập trình tập trung: 
I/O không thể được lựa chọn 
3
1. Đặt vấn đề 
Lịch sử ra đời: 
1984: Birrell & Nelson: “Mechanism to call procedures on other machines: Remote Procedure Call” 
Mục tiêu: RPC đối với lập trình viên chỉ như lời gọi hàm thông thường 
4
Cách thức các lời gọi thủ tục thông thường hoạt động? 
5
2. Lời gọi thủ tục thông thường 
Quá trình gọi & trả về chia làm 3 giai đoạn: 
Truyền tham số 
Xử lý biến cục bộ 
Trả về dữ liệu 
6
2. Lời gọi thủ tục thông thường 
Ví dụ: 
Khi viết lệnh: x = f(a, “test”, 5); 
Compiler phân tích và sinh code để: 
Đẩy giá trị 5 vào stack 
Đẩy địa chỉ của string “test” vào stack 
Đẩy giá trị hiện tại của a vào stack 
Sinh 1 lời gọi tới hàm f 
Khi biên dịch hàm f, compiler sinh code để: 
Đẩy các thanh ghi sẽ bị ghi đè vào stack để lưu lại giá trị 
Điều chỉnh stack, tạo không gian cho biến cục bộ & biến tạm thời 
Trước khi trả về, để stack lại nguyên dạng như trước khi điều chỉnh, đặt giá trị trả về vào 1 thanh ghi và thực thi câu lệnh return. 
7
3. Thực thi RPC 
Không có kiến trúc nào trực tiếp hỗ trợ RPC 
Thủ thuật 
Tạo các hàm stub, để lập trình viên thấy như 1 lời gọi local 
Hàm stub có giao diện như của hàm ban đầu 
8
Hàm Stub 
1. Client gọi hàm stub 
9 
client 
server 
network routines 
server functions 
server stub (skeleton) 
network routines 
client functions 
client stub
Hàm Stub 
2. Stub (client) đóng gói tham số vào thông điệp mạng 
10 
client 
server 
server functions 
server stub (skeleton) 
network routines 
client functions 
client stub 
network routines
Hàm Stub 
3. Thông điệp được gửi tới Server 
11 
client 
server 
client functions 
client stub 
network routines 
server functions 
server stub (skeleton) 
network routines
Hàm Stub 
4. Receive message: send to stub 
12 
client 
server 
client functions 
client stub 
network routines 
server functions 
server stub (skeleton) 
network routines
Hàm Stub 
5. Mở gói lấy tham số, gọi thủ tục server 
13 
client 
server 
client functions 
client stub 
network routines 
server functions 
server stub (skeleton) 
network routines
Hàm Stub 
6. Hàm phía server trả về kết quả 
14 
client 
server 
client functions 
client stub 
network routines 
server functions 
server stub (skeleton) 
network routines
Hàm Stub 
7. Đóng gói kết quả và gửi thông điệp 
15 
client 
server 
client functions 
client stub 
network routines 
server functions 
server stub (skeleton) 
network routines
Hàm Stub 
8. Chuyển thông điệp 
16 
client 
server 
client functions 
client stub 
network routines 
server functions 
server stub (skeleton) 
network routines
Hàm Stub 
9. Nhận thông điệp – đưa về stub (client) 
17 
client 
server 
client functions 
client stub 
network routines 
server functions 
server stub (skeleton) 
network routines
Hàm Stub 
10. Mở gói, trả về kết quả tại hàm client 
18 
client 
server 
client functions 
client stub 
network routines 
server functions 
server stub (skeleton) 
network routines
Lợi ích 
Giao diện : lời gọi hàm 
Viết các ứng dụng được đơn giản hóa 
RPC ẩn tất cả các đoạn code mạng, truyền thông vào các hàm stub 
Người lập trình ứng dụng không cần quan tâm chi tiết về: 
Sockets, số hiệu cổng, thứ tự các bytes 
19
4. Một số vấn đề trong RPC 
4.1. Truyền tham số 
Truyền tham trị: đơn giản, chỉ cần copy dữ liệu vào thông điệp (network message) 
Truyền tham chiếu: vô nghĩa nếu không có bộ nhớ chia sẻ 
20
4. Các vấn đề trong RPC 
4.2. Biểu diễn dữ liệu: 
Hệ thống địa phương: 
Không có “Vấn đề về xung đột, không nhất quán” 
Từ xa 
Khác biệt về thứ tự byte (đầu to, đầu nhỏ, …) 
Khác biệt về kích thước dữ liệu: integer, long, … 
Khác biệt về biểu diễn dấu phẩy động cho số thực 
Khác biệt về tập ký tự 
21
4.2. Biểu diễn dữ liệu: 
IP (headers) bắt buộc sử dụng kiểu big endian (đầu to) cho các giá trị 16 và 32 bit 
Sparc, 680x0, MIPS, PowerPC G5: Big Endian 
x86/Pentiums sử dụng kiểu Little endian 
22 
main() { 
unsigned int n; 
char *a = (char *)&n; 
n = 0x11223344; 
printf("%02x, %02x, %02x, %02xn", 
a[0], a[1], a[2], a[3]); 
} 
Output on a Pentium: 44, 33, 22, 11 Output on a PowerPC: 11, 22, 33, 44
4.2. Biểu diễn dữ liệu: 
Cần có enconding chuẩn tắc để cho phép truyền thông giữa các hệ thống dị bộ 
Ví dụ: 
Sun’s RPC uses XDR (eXternal Data Representation) 
ASN.1 (ISO Abstract Syntax Notation) 
Định kiểu ẩn 
Chỉ truyền đi giá trị, không truyền kiểu dữ liệu hoặc thông tin về tham số 
VD: Sun XDR 
Định kiểu tường minh 
Mỗi giá trị được kèm với kiểu dữ liệu khi truyền đi 
Ví dụ: ISO’s ASN.1, XML 
23
4. Các vấn đề trong RPC 
4.3. Giao thức truyền tải 
Một số thực thi của RPC sử dụng duy nhất 1 giao thức (đại đa số: TCP) 
Hầu hết hỗ trợ nhiều giao thức 
Cho phép Lập trình viên lựa chọn 
24
4. Các vấn đề trong RPC 
4.4. Khi có lỗi 
Lời gọi cục bộ 
Nếu bị lỗi coredump, toàn bộ tiến trình sẽ hỏng. 
Với RPC, sẽ có nhiều khả năng gặp lỗi hơn 
Ứng dụng phải tự lường trước các lỗi của RPC 
Các lỗi có thể: 
1. Client không thể định vị được server 
2. Client request bị lỗi 
3. Hỏng Server 
4. Trả lời từ Server bị lỗi 
5. Hỏng Client 
25
4. Các vấn đề trong RPC 
4.4. Khi có lỗi: 
Ngữ nghĩa của lời gọi thủ tục từ xa: 
Lời gọi cục bộ: Chỉ 1 lần 
Một RPC có thể được gọi 
0 lần: server bị crash hoặc tiến trình server chết trước khi thực hiện code phía server 
1 lần: mọi giai đoạn OK 
1 hoặc nhiều: quá độ trễ, hoặc mất phản hồi từ server  truyền lại 
26
4.4. Khi có lỗi- Ngữ nghĩa của RPC 
Hầu hết các hệ thống RPC hỗ trợ hoặc: 
ít nhất một (At-least-once-semantics) 
hoặc nhiều nhất một (At-most) 
Trong 1 ứng dụng, phải nhận biết 
idempotent functions: có thể chạy 1 số lần bất kỳ mà không gây hại 
Non-idempotent functions: 
27
4. Các vấn đề trong RPC-Khắc phục lỗi 
1. Client không định vị được server: 
Giải pháp đơn giản: thông báo lại cho ứng dụng client  Mất tính trong suốt 
2. Client mất request: 
Giải pháp: gửi lại message 
Sử dụng message ID, phân biệt giữa các message 
28
4. Các vấn đề trong RPC-Khắc phục lỗi 
3. Server crashes: 
Khó xử lý vì không biết server thực hiện đến đâu 
Cần quyết định cần kiểu server nào : 
Ít nhất một 
Nhiều nhất một 
29
4. Các vấn đề trong RPC-Khắc phục lỗi 
4. Mất các phản hồi 
Khó phát hiện, vì có thể nguyên nhân là do server chậm. Ta không thể biết server có phải đang thực hiện không 
Giải pháp: Không có giải pháp tổng quát 
Cố gắng tạo ra các thao tác idempotent 
30
4. Các vấn đề trong RPC-Khắc phục lỗi 
5. Client crashes 
 Server thực hiện công việc và tài nguyên vô nghĩa (gọi là orphan computation). 
Giải pháp: 
Orphan bị hủy bởi Client khi Client hoạt động trở lại 
Chi phí cao, và … có thể không thực hiện được 
Client broadcast số epoch mới khi khôi phục trở lại  server sẽ hủy orphan 
Yêu cầu các tính toán phải thực hiện trong T đơn vị thời gian, nếu không, sẽ bị hủy 
31
4. Các vấn đề trong RPC 
4.5. Một số vấn đề khác 
Hiệu năng: 
Security: 
Message truyền đi là visible trên network 
Xác thực Client? 
Xác thực Server? 
32
5. Lập trình với RPC 
Hỗ trợ ngôn ngữ: 
Hầu hết các ngôn ngữ lập trình (C, C++, Java, …) không có khái niệm về RPC 
Bộ biên dịch ngôn ngữ không sinh ra client và server stubs 
Giải pháp truyền thống: 
Sử dụng các bộ biên dịch độc lập để sinh ra các stubs (pre-compiler) 
VD: rmic trong jdk. 
33
Mô hình truyền thống 
Server định nghĩa giao diện dịch vụ sử dụng IDL 
đặc tả tên, tham số, kiểu trả về cho các thủ tục 
Bộ biên dịch stub đọc khai báo IDL và sinh ra các cặp hàm stub tương ứng 
Server-side và client-side
Interface Definition Language-IDL 
Bộ biên dịch stub có thể sử dụng IDL để sinh ra các client và server stubs: 
Mã nguồn liên quan đến Marshaling 
Mã nguồn liên quan đến Unmarshaling 
Các thủ tục truyền tin trên mạng 
Tương thích với giao diện định nghĩa 
Tương tự với function prototypes 
35
RPC Compiler 
36 
IDL 
RPC compiler 
client code (main) 
server functions 
client stub 
headers 
server skeleton 
data conv. 
data conv. 
compiler 
compiler 
server 
client 
Code you write 
Code RPC compiler generates
Viết chương trình 
Code ở client cần có điều chỉnh: 
Khởi tạo chuẩn bị cho RPC 
Dự đoán, xử lý lỗi của RPC 
Server functions: 
Thông thường không cần hoặc ít có điều chỉnh 
37

Contenu connexe

Tendances

Naming - Định danh trong các hệ thống phân tán
Naming - Định danh trong các hệ thống phân tánNaming - Định danh trong các hệ thống phân tán
Naming - Định danh trong các hệ thống phân tánPhan Khanh Toan
 
Bài giảng Lập trình mạng
Bài giảng Lập trình mạngBài giảng Lập trình mạng
Bài giảng Lập trình mạngctrl man
 
Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)Linh Nguyen
 
Slides Lập trình mạng
Slides Lập trình mạngSlides Lập trình mạng
Slides Lập trình mạngasakebigone
 
Bai 4 lap trình phia client
Bai 4  lap trình phia clientBai 4  lap trình phia client
Bai 4 lap trình phia clientLee Nam Nguyen
 
Bao cao do an ltm hoan chinh
Bao cao do an ltm hoan chinhBao cao do an ltm hoan chinh
Bao cao do an ltm hoan chinhNgok Ánk
 
Hệ điều hành
Hệ điều hànhHệ điều hành
Hệ điều hànhĐấy Vợ
 
lap-trinh-mang-voi-ngon-ngu-java
lap-trinh-mang-voi-ngon-ngu-javalap-trinh-mang-voi-ngon-ngu-java
lap-trinh-mang-voi-ngon-ngu-javaTruong NGUYEN
 
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng Python
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng PythonBeezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng Python
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng PythonBeezo
 
Bao cao da lap trinh manh
Bao cao da lap trinh manhBao cao da lap trinh manh
Bao cao da lap trinh manhBồ Công Anh
 
Lập trình phân tích bắt gói tin mạng bằng Python
Lập trình phân tích bắt gói tin mạng bằng PythonLập trình phân tích bắt gói tin mạng bằng Python
Lập trình phân tích bắt gói tin mạng bằng PythonPhạm Trung Đức
 
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]bookbooming1
 
Bai04 quan ly tien trinh
Bai04   quan ly tien trinhBai04   quan ly tien trinh
Bai04 quan ly tien trinhVũ Sang
 

Tendances (20)

Chapter 8 fault tolerance full
Chapter 8   fault tolerance fullChapter 8   fault tolerance full
Chapter 8 fault tolerance full
 
Lt socket
Lt socketLt socket
Lt socket
 
Naming - Định danh trong các hệ thống phân tán
Naming - Định danh trong các hệ thống phân tánNaming - Định danh trong các hệ thống phân tán
Naming - Định danh trong các hệ thống phân tán
 
Bài giảng Lập trình mạng
Bài giảng Lập trình mạngBài giảng Lập trình mạng
Bài giảng Lập trình mạng
 
--De cuong on tap hdh
 --De cuong on tap hdh --De cuong on tap hdh
--De cuong on tap hdh
 
Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)Bai tap lap trinh mang(1)
Bai tap lap trinh mang(1)
 
Slides Lập trình mạng
Slides Lập trình mạngSlides Lập trình mạng
Slides Lập trình mạng
 
Bai 4 lap trình phia client
Bai 4  lap trình phia clientBai 4  lap trình phia client
Bai 4 lap trình phia client
 
Phan 1 sv
Phan 1   svPhan 1   sv
Phan 1 sv
 
Bao cao do an ltm hoan chinh
Bao cao do an ltm hoan chinhBao cao do an ltm hoan chinh
Bao cao do an ltm hoan chinh
 
Hệ điều hành
Hệ điều hànhHệ điều hành
Hệ điều hành
 
lap-trinh-mang-voi-ngon-ngu-java
lap-trinh-mang-voi-ngon-ngu-javalap-trinh-mang-voi-ngon-ngu-java
lap-trinh-mang-voi-ngon-ngu-java
 
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng Python
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng PythonBeezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng Python
Beezo Share - Đồ Án Thực Tập Công Cụ Giám Sát Mạng Python
 
Linux+04
Linux+04Linux+04
Linux+04
 
Linux+02
Linux+02Linux+02
Linux+02
 
Bao cao da lap trinh manh
Bao cao da lap trinh manhBao cao da lap trinh manh
Bao cao da lap trinh manh
 
Lập trình phân tích bắt gói tin mạng bằng Python
Lập trình phân tích bắt gói tin mạng bằng PythonLập trình phân tích bắt gói tin mạng bằng Python
Lập trình phân tích bắt gói tin mạng bằng Python
 
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
Giao trinh he_dieu_hanh_tech24_vn[bookbooming.com]
 
Chuong5 dong bo_hoa
Chuong5 dong bo_hoaChuong5 dong bo_hoa
Chuong5 dong bo_hoa
 
Bai04 quan ly tien trinh
Bai04   quan ly tien trinhBai04   quan ly tien trinh
Bai04 quan ly tien trinh
 

Similaire à Dsd05 01-rpca

Cau hoi thi ktmt&h h
Cau hoi thi ktmt&h hCau hoi thi ktmt&h h
Cau hoi thi ktmt&h hĐức Sky
 
Mcsa 2012 mạng căn bản phần 7
Mcsa 2012 mạng căn bản phần 7Mcsa 2012 mạng căn bản phần 7
Mcsa 2012 mạng căn bản phần 7laonap166
 
ceh-lab_book_tieng_viet_phan2
ceh-lab_book_tieng_viet_phan2ceh-lab_book_tieng_viet_phan2
ceh-lab_book_tieng_viet_phan2VNG
 
De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1Nahudi Nguyễn
 
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdfBai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdfCanhPhuongVan
 
OpenWIPS-ng report Vietnamese
OpenWIPS-ng report VietnameseOpenWIPS-ng report Vietnamese
OpenWIPS-ng report VietnameseHoàng Tuấn Lê
 
VoIP with Opensips
VoIP with OpensipsVoIP with Opensips
VoIP with OpensipsTrần Thanh
 
Giao trinh-php
Giao trinh-phpGiao trinh-php
Giao trinh-phphieusy
 
Sinh vienit.net --baocaodoan(chatlan)
Sinh vienit.net --baocaodoan(chatlan)Sinh vienit.net --baocaodoan(chatlan)
Sinh vienit.net --baocaodoan(chatlan)natiter
 
Python Beginner Class day-15-networking
Python Beginner Class day-15-networkingPython Beginner Class day-15-networking
Python Beginner Class day-15-networkingKhánh Nguyễn
 
IT005 - Chương 4.pdf
IT005 - Chương 4.pdfIT005 - Chương 4.pdf
IT005 - Chương 4.pdfVTrngon
 
Báo cáo thực tập tuần - VPS
Báo cáo thực tập tuần - VPSBáo cáo thực tập tuần - VPS
Báo cáo thực tập tuần - VPSQuân Quạt Mo
 
418 giaotrinh avr
418 giaotrinh avr418 giaotrinh avr
418 giaotrinh avranhhoi12345
 
Giaotrinh avr tech24.vn
Giaotrinh avr tech24.vnGiaotrinh avr tech24.vn
Giaotrinh avr tech24.vnbibibobo2007
 
Bảo mật dữ liệu
Bảo mật dữ liệuBảo mật dữ liệu
Bảo mật dữ liệuSon Nguyen
 

Similaire à Dsd05 01-rpca (20)

Dsd05 02a-xml-rpca
Dsd05 02a-xml-rpcaDsd05 02a-xml-rpca
Dsd05 02a-xml-rpca
 
Cau hoi thi ktmt&h h
Cau hoi thi ktmt&h hCau hoi thi ktmt&h h
Cau hoi thi ktmt&h h
 
Mcsa 2012 mạng căn bản phần 7
Mcsa 2012 mạng căn bản phần 7Mcsa 2012 mạng căn bản phần 7
Mcsa 2012 mạng căn bản phần 7
 
Giới thiệu chung về plc s7 1200
Giới thiệu chung về plc s7 1200Giới thiệu chung về plc s7 1200
Giới thiệu chung về plc s7 1200
 
ceh-lab_book_tieng_viet_phan2
ceh-lab_book_tieng_viet_phan2ceh-lab_book_tieng_viet_phan2
ceh-lab_book_tieng_viet_phan2
 
Ceh phan2
Ceh phan2Ceh phan2
Ceh phan2
 
Chuong2 nmth
Chuong2 nmthChuong2 nmth
Chuong2 nmth
 
De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1De cuongthuchanhct221 hk2_1920_n1
De cuongthuchanhct221 hk2_1920_n1
 
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdfBai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
Bai giang-Lap trinh he thong-Ch2-Lap trinh Socket.pdf
 
OpenWIPS-ng report Vietnamese
OpenWIPS-ng report VietnameseOpenWIPS-ng report Vietnamese
OpenWIPS-ng report Vietnamese
 
VoIP with Opensips
VoIP with OpensipsVoIP with Opensips
VoIP with Opensips
 
Giao trinh-php
Giao trinh-phpGiao trinh-php
Giao trinh-php
 
Dsd05 02b-json-rpca
Dsd05 02b-json-rpcaDsd05 02b-json-rpca
Dsd05 02b-json-rpca
 
Sinh vienit.net --baocaodoan(chatlan)
Sinh vienit.net --baocaodoan(chatlan)Sinh vienit.net --baocaodoan(chatlan)
Sinh vienit.net --baocaodoan(chatlan)
 
Python Beginner Class day-15-networking
Python Beginner Class day-15-networkingPython Beginner Class day-15-networking
Python Beginner Class day-15-networking
 
IT005 - Chương 4.pdf
IT005 - Chương 4.pdfIT005 - Chương 4.pdf
IT005 - Chương 4.pdf
 
Báo cáo thực tập tuần - VPS
Báo cáo thực tập tuần - VPSBáo cáo thực tập tuần - VPS
Báo cáo thực tập tuần - VPS
 
418 giaotrinh avr
418 giaotrinh avr418 giaotrinh avr
418 giaotrinh avr
 
Giaotrinh avr tech24.vn
Giaotrinh avr tech24.vnGiaotrinh avr tech24.vn
Giaotrinh avr tech24.vn
 
Bảo mật dữ liệu
Bảo mật dữ liệuBảo mật dữ liệu
Bảo mật dữ liệu
 

Dsd05 01-rpca

  • 1. LẬP TRÌNH PHÂN TÁN THEO CHỦ ĐỀ Cao Tuấn Dũng Trịnh Tuấn Đạt 1 RPC
  • 2. Nội dung 1. Đặt vấn đề 2. Lời gọi thủ tục thông thường 3. Thực thi RPC 4. Các vấn đề trong RPC 5. Lập trình với RPC 2
  • 3. 1. Đặt vấn đề Khó khăn khi lập trình socket: Tương tác trong Socket là đơn giản: [connect] read/write [disconnect] NHƯNG … bắt buộc có cơ chế Read/Write Chúng ta thường sử dụng một “Procedure call” Để lập trình phân tán trong suốt với lập trình viên, như lập trình tập trung: I/O không thể được lựa chọn 3
  • 4. 1. Đặt vấn đề Lịch sử ra đời: 1984: Birrell & Nelson: “Mechanism to call procedures on other machines: Remote Procedure Call” Mục tiêu: RPC đối với lập trình viên chỉ như lời gọi hàm thông thường 4
  • 5. Cách thức các lời gọi thủ tục thông thường hoạt động? 5
  • 6. 2. Lời gọi thủ tục thông thường Quá trình gọi & trả về chia làm 3 giai đoạn: Truyền tham số Xử lý biến cục bộ Trả về dữ liệu 6
  • 7. 2. Lời gọi thủ tục thông thường Ví dụ: Khi viết lệnh: x = f(a, “test”, 5); Compiler phân tích và sinh code để: Đẩy giá trị 5 vào stack Đẩy địa chỉ của string “test” vào stack Đẩy giá trị hiện tại của a vào stack Sinh 1 lời gọi tới hàm f Khi biên dịch hàm f, compiler sinh code để: Đẩy các thanh ghi sẽ bị ghi đè vào stack để lưu lại giá trị Điều chỉnh stack, tạo không gian cho biến cục bộ & biến tạm thời Trước khi trả về, để stack lại nguyên dạng như trước khi điều chỉnh, đặt giá trị trả về vào 1 thanh ghi và thực thi câu lệnh return. 7
  • 8. 3. Thực thi RPC Không có kiến trúc nào trực tiếp hỗ trợ RPC Thủ thuật Tạo các hàm stub, để lập trình viên thấy như 1 lời gọi local Hàm stub có giao diện như của hàm ban đầu 8
  • 9. Hàm Stub 1. Client gọi hàm stub 9 client server network routines server functions server stub (skeleton) network routines client functions client stub
  • 10. Hàm Stub 2. Stub (client) đóng gói tham số vào thông điệp mạng 10 client server server functions server stub (skeleton) network routines client functions client stub network routines
  • 11. Hàm Stub 3. Thông điệp được gửi tới Server 11 client server client functions client stub network routines server functions server stub (skeleton) network routines
  • 12. Hàm Stub 4. Receive message: send to stub 12 client server client functions client stub network routines server functions server stub (skeleton) network routines
  • 13. Hàm Stub 5. Mở gói lấy tham số, gọi thủ tục server 13 client server client functions client stub network routines server functions server stub (skeleton) network routines
  • 14. Hàm Stub 6. Hàm phía server trả về kết quả 14 client server client functions client stub network routines server functions server stub (skeleton) network routines
  • 15. Hàm Stub 7. Đóng gói kết quả và gửi thông điệp 15 client server client functions client stub network routines server functions server stub (skeleton) network routines
  • 16. Hàm Stub 8. Chuyển thông điệp 16 client server client functions client stub network routines server functions server stub (skeleton) network routines
  • 17. Hàm Stub 9. Nhận thông điệp – đưa về stub (client) 17 client server client functions client stub network routines server functions server stub (skeleton) network routines
  • 18. Hàm Stub 10. Mở gói, trả về kết quả tại hàm client 18 client server client functions client stub network routines server functions server stub (skeleton) network routines
  • 19. Lợi ích Giao diện : lời gọi hàm Viết các ứng dụng được đơn giản hóa RPC ẩn tất cả các đoạn code mạng, truyền thông vào các hàm stub Người lập trình ứng dụng không cần quan tâm chi tiết về: Sockets, số hiệu cổng, thứ tự các bytes 19
  • 20. 4. Một số vấn đề trong RPC 4.1. Truyền tham số Truyền tham trị: đơn giản, chỉ cần copy dữ liệu vào thông điệp (network message) Truyền tham chiếu: vô nghĩa nếu không có bộ nhớ chia sẻ 20
  • 21. 4. Các vấn đề trong RPC 4.2. Biểu diễn dữ liệu: Hệ thống địa phương: Không có “Vấn đề về xung đột, không nhất quán” Từ xa Khác biệt về thứ tự byte (đầu to, đầu nhỏ, …) Khác biệt về kích thước dữ liệu: integer, long, … Khác biệt về biểu diễn dấu phẩy động cho số thực Khác biệt về tập ký tự 21
  • 22. 4.2. Biểu diễn dữ liệu: IP (headers) bắt buộc sử dụng kiểu big endian (đầu to) cho các giá trị 16 và 32 bit Sparc, 680x0, MIPS, PowerPC G5: Big Endian x86/Pentiums sử dụng kiểu Little endian 22 main() { unsigned int n; char *a = (char *)&n; n = 0x11223344; printf("%02x, %02x, %02x, %02xn", a[0], a[1], a[2], a[3]); } Output on a Pentium: 44, 33, 22, 11 Output on a PowerPC: 11, 22, 33, 44
  • 23. 4.2. Biểu diễn dữ liệu: Cần có enconding chuẩn tắc để cho phép truyền thông giữa các hệ thống dị bộ Ví dụ: Sun’s RPC uses XDR (eXternal Data Representation) ASN.1 (ISO Abstract Syntax Notation) Định kiểu ẩn Chỉ truyền đi giá trị, không truyền kiểu dữ liệu hoặc thông tin về tham số VD: Sun XDR Định kiểu tường minh Mỗi giá trị được kèm với kiểu dữ liệu khi truyền đi Ví dụ: ISO’s ASN.1, XML 23
  • 24. 4. Các vấn đề trong RPC 4.3. Giao thức truyền tải Một số thực thi của RPC sử dụng duy nhất 1 giao thức (đại đa số: TCP) Hầu hết hỗ trợ nhiều giao thức Cho phép Lập trình viên lựa chọn 24
  • 25. 4. Các vấn đề trong RPC 4.4. Khi có lỗi Lời gọi cục bộ Nếu bị lỗi coredump, toàn bộ tiến trình sẽ hỏng. Với RPC, sẽ có nhiều khả năng gặp lỗi hơn Ứng dụng phải tự lường trước các lỗi của RPC Các lỗi có thể: 1. Client không thể định vị được server 2. Client request bị lỗi 3. Hỏng Server 4. Trả lời từ Server bị lỗi 5. Hỏng Client 25
  • 26. 4. Các vấn đề trong RPC 4.4. Khi có lỗi: Ngữ nghĩa của lời gọi thủ tục từ xa: Lời gọi cục bộ: Chỉ 1 lần Một RPC có thể được gọi 0 lần: server bị crash hoặc tiến trình server chết trước khi thực hiện code phía server 1 lần: mọi giai đoạn OK 1 hoặc nhiều: quá độ trễ, hoặc mất phản hồi từ server  truyền lại 26
  • 27. 4.4. Khi có lỗi- Ngữ nghĩa của RPC Hầu hết các hệ thống RPC hỗ trợ hoặc: ít nhất một (At-least-once-semantics) hoặc nhiều nhất một (At-most) Trong 1 ứng dụng, phải nhận biết idempotent functions: có thể chạy 1 số lần bất kỳ mà không gây hại Non-idempotent functions: 27
  • 28. 4. Các vấn đề trong RPC-Khắc phục lỗi 1. Client không định vị được server: Giải pháp đơn giản: thông báo lại cho ứng dụng client  Mất tính trong suốt 2. Client mất request: Giải pháp: gửi lại message Sử dụng message ID, phân biệt giữa các message 28
  • 29. 4. Các vấn đề trong RPC-Khắc phục lỗi 3. Server crashes: Khó xử lý vì không biết server thực hiện đến đâu Cần quyết định cần kiểu server nào : Ít nhất một Nhiều nhất một 29
  • 30. 4. Các vấn đề trong RPC-Khắc phục lỗi 4. Mất các phản hồi Khó phát hiện, vì có thể nguyên nhân là do server chậm. Ta không thể biết server có phải đang thực hiện không Giải pháp: Không có giải pháp tổng quát Cố gắng tạo ra các thao tác idempotent 30
  • 31. 4. Các vấn đề trong RPC-Khắc phục lỗi 5. Client crashes  Server thực hiện công việc và tài nguyên vô nghĩa (gọi là orphan computation). Giải pháp: Orphan bị hủy bởi Client khi Client hoạt động trở lại Chi phí cao, và … có thể không thực hiện được Client broadcast số epoch mới khi khôi phục trở lại  server sẽ hủy orphan Yêu cầu các tính toán phải thực hiện trong T đơn vị thời gian, nếu không, sẽ bị hủy 31
  • 32. 4. Các vấn đề trong RPC 4.5. Một số vấn đề khác Hiệu năng: Security: Message truyền đi là visible trên network Xác thực Client? Xác thực Server? 32
  • 33. 5. Lập trình với RPC Hỗ trợ ngôn ngữ: Hầu hết các ngôn ngữ lập trình (C, C++, Java, …) không có khái niệm về RPC Bộ biên dịch ngôn ngữ không sinh ra client và server stubs Giải pháp truyền thống: Sử dụng các bộ biên dịch độc lập để sinh ra các stubs (pre-compiler) VD: rmic trong jdk. 33
  • 34. Mô hình truyền thống Server định nghĩa giao diện dịch vụ sử dụng IDL đặc tả tên, tham số, kiểu trả về cho các thủ tục Bộ biên dịch stub đọc khai báo IDL và sinh ra các cặp hàm stub tương ứng Server-side và client-side
  • 35. Interface Definition Language-IDL Bộ biên dịch stub có thể sử dụng IDL để sinh ra các client và server stubs: Mã nguồn liên quan đến Marshaling Mã nguồn liên quan đến Unmarshaling Các thủ tục truyền tin trên mạng Tương thích với giao diện định nghĩa Tương tự với function prototypes 35
  • 36. RPC Compiler 36 IDL RPC compiler client code (main) server functions client stub headers server skeleton data conv. data conv. compiler compiler server client Code you write Code RPC compiler generates
  • 37. Viết chương trình Code ở client cần có điều chỉnh: Khởi tạo chuẩn bị cho RPC Dự đoán, xử lý lỗi của RPC Server functions: Thông thường không cần hoặc ít có điều chỉnh 37