Báo cáo thu hoạch môn Lập trình mạng nâng cao
PHẦN I : ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
BÁO CÁO LẬP TRÌNH MẠNG
BÁO CÁO LẬP TRÌNH MẠNG
NHÓM 12 - ĐỀ 22
NHÓM 12 - ĐỀ 22
Áp dụng thuật toán duy trì gắn bó,
Áp dụng thuật toán duy trì gắn bó,tránh bế tắc và thiếu thốn vô hạn hai
tránh bế tắc và thiếu thốn vô hạn haipha trong hệ đa Server
pha trong hệ đa Server
Nhóm 12 – Đề số 22 Trang 1
Báo cáo thu hoạch môn Lập trình mạng nâng cao
Giảng viên
Giảng viên
: PGS.TS. LÊ VĂN SƠN
: PGS.TS. LÊ VĂN SƠN
Học viên
Học viên
: Thái Thị Bích Thủy
: Thái Thị Bích Thủy
Nguyễn Thị Diễm Thúy
Nguyễn Thị Diễm Thúy
Lớp
2. Xây dựng hệ thống 3 Server và CSDL (tr. 270 trở đi);
Nhóm 12 – Đề số 22 Trang 3
Báo cáo thu hoạch môn Lập trình mạng nâng cao
3. Xây dựng chương trình thực hiện cập nhật trong điều kiện đảm bảo gắn
bó thông tin;
4. Viết chương trình quan sát quá trình nêu trên.
Trong phạm vi của báo cáo này, chương trình được cài đặt demo trên 3
server, tuy nhiên chúng ta có thể cài đặt trên hệ thống gồm nhiều server. Chương
trình cũng bao gồm một công cụ tạm gọi là monitor nhằm giám sát việc cập nhật dữ
liệu giữa các server, nhằm đánh giá tính gắn bó dữ liệu giữ liệu giữa các server với
nhau.
Cuối cùng, tập thể nhóm 12 mong muốn nhận được các ý kiến đóng góp, bổ
sung của quý Thầy và các bạn.
Xin chân thành cảm ơn!
NHÓM 12.
Nhóm 12 – Đề số 22 Trang 4
Computer A
A2
2
A1
Computer C
C1
C2
C3
Computer B
B1
Báo cáo thu hoạch môn Lập trình mạng nâng cao
I. Kỹ thuật lập trình phân tán đối tượng trong java
I.1 Lập trình phân tán đối tượng
Thông thường các chương trình của chúng ta được viết dưới dạng thủ tục hay hàm
vào ngăn xếp (stack) trong khi tham số truyền cho phương thức của đối tượng ở xa
phải được đóng gói và chuyển qua mạng để đến được với phương thức thực sự.
I.3 Các lớp trung gian (stub và skeletion)
Để giải quyết các vấn đề trên, đối tượng Java trên hai máy khác nhau không gọi
nhau trực tiếp mà thông qua lớp trung gian. Lớp trung gian này tồn tại ở cả hai phía:
máy khách (nơi gọi phương thức của các đối tượng ở xa) và máy chủ (nơi đối tượng
thực sự được cài đặt để thực thi mã lệnh của phương thức). Phía máy khách lớp
trung gian này được gọi là stub (lớp móc), phía máy chủ lớp trung gian này được
Nhóm 12 – Đề số 22 Trang 6
Báo cáo thu hoạch môn Lập trình mạng nâng cao
gọi là skeletion (lớp nối). Ta hình dung stub và skeletion là hai người môi giới giúp
các đối tượng ở xa giao dịch với nhau.
Hình 2 - Gọi các phương thức của các đối tượng thông qua lớp trung gian
Ví dụ bạn có đối tượng C1 được cài đặt chạy trên máy C. Trình biên dịch Java sẽ
giúp bạn tạo ra hai lớp trung gian C1_Skel và C1_stub. Lớp C1_Stub sẽ được đem
về máy computer A. Khi A1 trên máy Computer A gọi C1 nó sẽ chuyển lời gọi đến
lớp C1_Stub. C1_Stub chịu trách nhiệm đóng gói tham số, chuyển tham số quan
mạng đến máy Computer C. trên máy Computer C lớp nối C1-Skel sẽ nhận tham số
chuyển vào vùng không gian địa chỉ tương thích với đối tượng C1 sau đó gọi
phương thức tương ứng. Kết quả nếu có do phương thức của đối tượng C1 trả về sẽ
được lớp C1_Skel đóng gói trả ngược về cho C1_stub. C1-Stub chuyển giao kết quả
cuối cùng lại cho A1. Bằng cơ chế này, A1 luôn nghĩ rằng nó đang hoạt động trực
tiếp với đối tượng C1 ngay trên máy cục bộ. Hơn nữa, nhờ sự giúp đỡ của lớp trung
gian C1-Stub, khi kết nối mạng gặp sự cố lớp trung gian Stub sẽ luôn biết cách
Nhóm 12 – Đề số 22 Trang 7
Computer A
A1
A2
B1_stub
đây là kết quả kiết xuất từ hai máy tính khác nhau. Hay nói cách khác dựa vào máy
ảo Java bạn có thể tuỳ thích tạo ra các máy tính ảo để giao tiếp với nhau giả lập
mạng. Dữ liệu chuyển từ máy ảo Java này sang máy ảo Java khác hoàn toàn tương
tự quá trình giao tiếp và chuyển dữ liệu giữa hai máy tính kết nối vật lý thực sự trên
mạng.
Nhóm 12 – Đề số 22 Trang 8
Báo cáo thu hoạch môn Lập trình mạng nâng cao
Hình 4 - Cơ chế làm việc của các máy ảo Java khi đăng kí và gọi đối tượng giữa
trình khách và trình chủ
Tuy nhiên cũng có một số hạn chế đó là tất cả các máy ảo Java đều dùng chng một
địa chỉ IP vật lý trong khi hai máy ảo Java chạy trên hai máy tính vật lý khác nhau
sẽ có địa chỉ IP khác nhau. Các máy ảo Java chạy trên cùng một máy vật lý sẽ sử
dụng cùng thư viện Java, cùng một chính sách bảo mật, điều này làm bạn rất dễ
nhầm tưởng là chương trình chạy tốt trên cả hai phía máy khách và máy chủ. Trong
khi thực tế nếu máy khách và máy chủ dùng hai thư viện Java (cũng như biến môi
trường CLASSPATH) khác nhau hoặc chính sách bảo mật khác nhau sẽ làm cho kết
nối từ phía máy khách và máy chủ không thực hiện được. Bạn nên lưu ý đến vấn đề
này khi cài đặt các ứng dụng Java trên các máy mạng vật lý thực sự.
I.4.1 Đăng ký rmiregistry
Hình 5 trình bày cơ chế làm việc của trình khách và trình chủ trên máy ảo Java khi
đăng kí và truy xuất rmiregistry
Nhóm 12 – Đề số 22 Trang 9
Máy tính vật lý 1
(IP: 172.16.11.13)
C. Máy ảo Java chạy
chương trình khách
(CalculatorClient)
Máy tính vật lý 2 (IP: 172.16.11.12)
A. Máy ảo Java
I.4.2 Thiết lập và cài đặt hệ đa server dùng Java và RMI
Mô hình xử lý thông tin có thể được trình bày ngắn gọn như sau: Khi Server1
nhận yêu cầu cần xử lý từ Client gửi đến , Server1 xử lý một phần, và có thể xảy ra
việc thiếu dữ liệu và cần lấy dữ liệu từ Server2 để xử lý tiếp hay gửi phần xử lý còn
lại cho Server2 để xử lý giúp. Tất cả các công việc trao đổi dữ liệu hay chia xẻ tác
vụ giữa hai hay nhiều Server này diễn ra đều thực hiện được nhờ vào giải pháp xử lý
đa Server và xử lý song song thông qua giao thức triệu gọi từ xa (RMI mà Java cung
cấp) và các tác tử (Agent) điều kiển được tạo ra. Một ví dụ cụ thể cho các bước xây
dựng một giải pháp xử lý đa Server dùng RMI + Xây dựng Interface cho các
phương thức triệu gọi từ xa cho Server1 (Server1.java) import java.rmi.Remote;
import java.rmi.RemoteException; public interface Server1 extends
java.rmi.Remote{
public abstract java.lang.Stringget
Information(java.lang.String s )
throws java.rmi.RemoteException; }
+ Xây dựng lớp thực thi cho các phương thức triệu gọi từ xa cho Server1
(Server1Impl.java) import java.io.*; import java.rmi.*; public class Server1Impl
extends java.rmi.server.UnicastRemoteObject implements Server1{
public Server1Impl()
throws java.rmi.RemoteException {
java.lang.System.out.println("Starting Server1 ");}
static String nameserver2 = null;
// Khai báo biến để giữ tên của Server2 static Server2 ser2=null ;
Nhóm 12 – Đề số 22 Trang 11
Báo cáo thu hoạch môn Lập trình mạng nâng cao
//khai báo đối tượng của Server2 public synchronized java.lang.String
getInformation(java.lang.String s ) {
java.lang.String s1 = "";
try{ // Server1 tìm kiếm đối tượng xử lý từ xa của Server2 để
xin giúp đỡ
interface Server2 extends java.rmi.Remote {
public abstract java.lang.String receive(java.lang.String s)
throws java.rmi.RemoteException;}
+ Xây dựng lớp thực thi cho các phương thức triệu gọi từ xa cho Server2
(Server2Impl.java) import java.io.*; import java.rmi.*; public class Server2Impl
extends java.rmi.server.UnicastRemoteObject implements Server2 {
public Server2Impl()throws java.rmi.RemoteException {
java.lang.System.out.println("Starting Server2 ");}
public synchronized java.lang.String receive(java.lang.String
s){
java.lang.String s1 = "Yeu cau cua Client duoc Server1 va
anh Server2 xu ly xong";
System.out.println("Server2 da xu ly yeu cau cua Server1
gui den ");
return s1; }
public static void main(java.lang.String args[ ] ) {
java.lang.System.out.println("Creating Registry
Server2 ");
try { //Server2 tạo ra đối tượng server2impl và
đăng ký nó để sẵn sàng cho việc gọi từ xa
Nhóm 12 – Đề số 22 Trang 13
Báo cáo thu hoạch môn Lập trình mạng nâng cao
java.rmi.registry.LocateRegistry.createRegistry(1099);
Server2Impl server2impl = new Server2Impl();
java.rmi.Naming.rebind("rmi://" + args[0] +
":1099/Server2", server2impl);
java.lang.System.out.println("Server2 Ready");
}
catch(java.lang.Exception exception) {
java.lang.System.out.println("Create registry
Điều phối viên gửi thông báo prepare đến thành viên 2. Nếu thành viên 2 chưa sẵn
sàng ủy thác giao dịch, nó gửi thông báo biểu quyết hủy bỏ vote-abort (VA) và giao
dịch bị hủy tại thời điểm này (hủy bỏ đơn phương của 2). Ngược lại nếu thành viên
2 đồng ý ủy thác, nó gửi thông báo vote-commit(VC) cho thành viên 3 rồi chuyển
sang trạng thái READY. Quá trình này tiếp tục cho đến khi một biểu quyết ủy thác
đến được thành viên N. Đến đây kết thúc pha đầu tiên. Nếu N quyết định ủy thác, nó
gửi cho thành viên N-1 thông báo global-commit (GC); bằng không, nó gửi một
thông báo toàn cục global-abort(GA). Theo đó các thành viên sẽ chuyển sang trạng
thái thích hợp (COMMIT hoặc ABORT) và làm lan truyền thông báo trở về điều
phối viên.
II.2 Nghi thức ủy thác 2 pha 2PC
Ủy thác hai pha (Two-phasde commit, 2PC) là một nghi thức đơn giản và tinh tế
đảm bảo hành động ủy thác nguyên tử cho các giao dịch phân tán. Khẳng định rằng
Nhóm 12 – Đề số 22 Trang 15
Báo cáo thu hoạch môn Lập trình mạng nâng cao
tất cả các vị trí liên đới trong việc thực hiện giao dịch phân tán đều đồng ý ủy thác
giao dịch trước khi tác dụng của nó được đưa vào CSDL thực sự.
Khởi đầu, điều phối viên ghi mẫu begin_commit vào nhật ký của nó và gửi thông
báo chuẩn bị (prepare) đến tất cả các thành viên và chuyển sang trạng thái wait. Khi
một thành viên nhận được thông báo chuẩn bị nó kiểm tra xem nó có thể uỷ thác
được giao dich hay không. Nêu được nó ghi một mẫu tin ready vào nhật ký vào gửi
thông báo biểu quyết uỷ thác (vote-commit) đến điều phối viên rồi chuyển sang
trạng thái read. Nếu không nó chuyển nó ghi mẫu tin abort và gửi thông báo vote-
abort đến điều phối viên. Nếu quyết định của vị trí này là huỷ bỏ thì nó có thể quên
giao dịch đi vì quyết định của nó được dùng như một phủ quyết (huỷ bỏ đơn
phương). Sau khi nhận được sự đáp, nó quyết định hay huỷ bỏ giao dịch. Nếu có
một thành viên gửi phủ quyết thì điều phối viên sẽ phải huy bỏ toàn bộ giao dịch .
Vì thế nó ghi mẫu tin Abort vào nhật ký, gửi thông báo global-abort đến tất cả các
thành viên, và chuyển sang trạng thái ABORT , ngược lại nó ghi mẩu tin commit,
gửi global-commit tới tất cả các thành viên rối chuyển sang trang thái commit. Các
Nhóm 12 – Đề số 22 Trang 18
Báo cáo thu hoạch môn Lập trình mạng nâng cao
II.2.2 Cấu trúc 2PC phân quyền
Tất các các thành viên có thể độc lập đưa ra quyết định kết thúc ứng với giao dịch
cụ thể loại bỏ nhu cầu cần phải có pha thứ 2 của nghi thức bởi vì các thành viên có
thể đưa ra quyết định dựa vào chính nó hoạt động như sau điều phố viên gửi thông
báo prepare đến tất cả các thành viên sau đó mỗi thành viên gửi quyết định của
mình đến các thành viên khác ( và đến điều phối viên ) bằng thông báo Vote-
commit hoặc Vote-abort. Một thành viên đợi thông báo từ tất cả các thành viên khác
rồi ra quyết định kết thúc theo theo đúng quy tắc ủy thác toàn cục.
Thuật toán2PC Cho điều phối viên (coordinator)
declare-var
msg:message
Nhóm 12 – Đề số 22 Trang 19
Báo cáo thu hoạch môn Lập trình mạng nâng cao
ev: Event
PL: Danh Sách Thành viên (đượng XD trước khi nghi thức 2PC)
begin
WAIT(ev)
case of ev
MsgArrival;
Begin
đặt thông báo vừa đến trong msg
case msg
Commit:
begin
ghi mẫu tin begin_commit vào nhật ký
gửi thông báo prepare đến tất cả các thành viên trong PL
đặt giờ cho bộ định giờ
end
Báo cáo thu hoạch môn Lập trình mạng nâng cao
declare-var
msg:message
ev: Event
begin
WAIT(ev)
case of ev
MsgArrival;
Begin
đặt thông báo vừa đến trong msg
case msg
prepare:
begin
if nếu sẵn sàng uỷ thác then
begin
ghi mẫu tin ready vào nhật ký
gửi thông báo vote-commit đến điều phối viên
đặt giờ cho bộ định giờ
end
else begin {huỷ bỏ đơn phương}
ghi mẫu tin abort nhật ký
gửi thông báo vote-abort đến điều phồi viên
yêu cầu bộ sử lý dữ liệu huỷ bỏ giao dịch
end
global-abort:
begin
ghi mẫu tin abort nhật ký
yêu cầu bộ sử lý dữ liệu huỷ bỏ giao dịch
end
global-commit
được xử lý, hoặc nó kiểm tra lại trong nhật ký tìm mẫu tin abort và trả lời vote-
abort . Hoặc nó có thể bỏ qua thông báo này. Trong trường hợp này điều phối viên
sẽ quá hạn ở trạng thái Wait. Quá hạn ở trạng thái READY. Trong trường hợp này
thành viên đã biểu quyết ủy thác giao dịch nhưng không thể đưa ra quyết định. Bởi
vị nó trong trạng thái ủy thác. Vì vậy nó không thể thay đổi biểu quyết và đơn
phương hủy bỏ. Ngược lại nó không thể đơn phương ủy thác vì một thành viên khác
biểu quyết hủy bỏ. Trong trường hợp này thành viên sẽ bị phong tỏa cho đến khi
điều phối viên hay một thành viên khác thông tin cho nó biết về kết cục cuối cùng
của giao dịch.
Nhóm 12 – Đề số 22 Trang 22
Báo cáo thu hoạch môn Lập trình mạng nâng cao
II.4 Tác động của sự cố đối với việc gắn bó dữ liệu
Nhằm nghiên cứu và phát triển phương pháp đảm bảo gắn bó dữ liệu một cách khả
thi trong điều kiện có sự cố cho các hệ thống thông tin đăng ký nói riêng, các hệ
thống tin học phân tán nói chung, bản chất của vấn đề gắn bó dữ liệu cũng như
nguyên nhân dẫn đến sự cố làm cho dữ liệu không còn gắn bó được chỉ ra và nhóm
ghép trong quá trình phân tích, thiết kế hệ thống.
Một cơ sở dữ liệu nào đó được gọi là gắn bó, nếu nó thỏa mãn một tập các ràng
buộc về toàn vẹn ngữ nghĩa. Để đảm bảo tính gắn bó dữ liệu nhiều cơ chế khác nhau
như điều khiển hoạt động đồng thời , kiểm soát tính toàn vẹn ngữ nghĩa, …được sử
dụng.
Việc kiểm soát tính toàn vẹn ngữ nghĩa tốt sẽ đảm bảo được tính gắn bó dữ liệu của
hệ thống thông tin. Hiện nay, người ta đang áp dụng hai phương pháp chủ yếu:
1. Loại bỏ các chương trình/thủ tục cập nhật có thể dẫn đến trạng thái không
gắn bó dữ liệu trong các cơ sở dữ liệu [PP
1
]
Nhóm 12 – Đề số 22 Trang 23
Báo cáo thu hoạch môn Lập trình mạng nâng cao
2. Triệu gọi các chương trình/thủ tục đặc biệt đã được cài đặt trên hệ thống
1 Sự cố giao dịch
Transaction Failure
Do một lỗi nào đó trong bản thân giao dịch gây
nên. Ví dụ như dữ liệu nhập không đúng hoặc do
phát hiện ra một khóa gài tiềm tàng hoặc hiện hữu
2
Sự cố vị trí
Site Failure
Do một lỗi phát sinh trong quá trình vận hành hệ
thống. Lỗi này có thể bắt nguồn từ phần thiết bị
như bộ xử lý/bộ vi xử lý, bộ nhớ, các thiết bị
ngoại vi, bị sự cố. Khi bị sự cố, hệ thống lập tức
bị ngừng hoạt động. Hệ thống chương trình, đặc
biệt là các chương trình điều khiển cũng có thể
sinh lỗi. Đó là các lỗi do thuật toán, do lệnh viết
sai, do phần lưu trữ chương trình hay do virus.
Các lỗi này thường là ở các chương trình và cơ sở
dữ liệu
3
Sự cố phương tiện
Media Failure
Do sự cố của các thiết bị lưu trữ thứ cấp dùng để
lưu cơ sở dữ liệu. Khi có sự cố này thì một phần
hoặc tất cả cơ sở dữ liệu trên thiết bị đó được xem
như bị hủy hoại hoặc không thể truy cập một cách
bình thường được
4
Sự cố đường truyền
Transmission Failure
Do lỗi trong các thông điệp, các thông điệp vô trật