Bài tập tiểu luận Môn: Lập trình mạng nâng cao
ĐẠI HỌC ĐÀ NẴNG
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO MÔN HỌC
LẬP TRÌNH MẠNG
LẬP TRÌNH MẠNG
ĐỀ TÀI :
VIẾT CHƯƠNG TRÌNH ĐẢM BẢO GẮN BÓ DỮ LIỆU
TRÊN CÁC CSDL PHÂN TÁN TẠI CÁC SERVER
GV hướng dẫn : PGS.TS Lê Văn Sơn
Chuyên ngành : Khoa Học Máy Tính
Khóa : 11
Học viên : Trương Văn Thới
: Hoàng Phi CườngL ỜI MỞ ĐẦU
Trang: 1 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
À N NG, 10/2010Đ Ẵ
Bài tập tiểu luận Môn: Lập trình mạng nâng cao
Đối với các công ty lớn có chi nhánh đặt ở các địa điểm khác nhau trên các vùng lãnh
thổ khác nhau, việc lưu trữ dữ liệu trên một máy tính rất khó khăn do vượt quá điều kiện của
công ty. Vì vậy đòi hỏi cần có một cách lưu trữ dữ liệu ở nhiều nơi khác nhau nhưng phải
thống nhất. Nhờ hệ thống mạng cục bộ và internet phát triển vượt bậc như hiện nay mà ta
phát triển hệ thống quản lý công ty trên một một môi trường mới khác hoàn toàn so với môi
trường cũ chạy cục bộ trên máy tính cục bộ đó là môi trường mạng phân tán. Các ứng dụng
chạy trên môi trường mạng phân tán ngày càng nhiều và trở nên thông dụng như hiện nay và
bắt đầu có mặt tại Việt Nam.
Với môi trường mạng phân tán này sẽ có nhiều Server đặt ở những nơi khác nhau
ở tầng cơ sở dữ liệu. Trong tầng này các yêu cầu không thể trực tiếp giải quyết
được nó chuyển đến một đối tác xử lý khác như Web Server, hoặc File Server
để xử lý.
o Tầng CSDL ( cơ sở dữ liệu) nơi các Server chứa các cơ sở dữ liệu chuyên
dùng như SQL Server, Oracle để quản lý CSDL, nhằm xử lý, truy cập truy xuất
các dữ liệu dược xử lý từ tầng trung gian đưa tới.
Hình 1 : Mô hình phân tầng
Trang: 3 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
Tầng Users
Tầng CSDL
Tầng Trung Gian
Bài tập tiểu luận Môn: Lập trình mạng nâng cao
1.1 Kỹ thuật lập trình Server – Server giải quyết bài toán cập nhật dữ liệu.
Ta có mô hình đa server như sau:
- Bài toán đảm bảo gắn bó dữ liệu : có một cơ sở dữ liệu được đặt tại các Server ở
những vị trí khác nhau muốn chèn một record mới lên cơ sở dữ liệu đã có trong mô hình
Server – Server ( Server ngang hàng).
Ta có mỗi Server có nhiều Client tương tác với nó mỗi khi một Client của một server
nào đó có nhu cầu chèn một record thì CSDL ở các Server khác cũng nhận được record đó
với độ trễ cho phép.
Trang: 4 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
Bài tập tiểu luận Môn: Lập trình mạng nâng cao
Với ưu điểm trên ngày càng có nhiều ứng dụng trên môi trường mạng phân tán đáp
ứng nhiều bài toán và nhiều giải cho các công ty lớn.
Đề cử như bài toán bán vé máy bay, điều hành tour du lịch, giảng dạy trực tuyến phân
tán, bán hàng… nhưng đây là một công nghệ tương đối mới thách thức các nhân viên lập
trình muốn triển khai các ứng dụng lớn trên môi trường mạng phân tán này.
1.2 Triển khai hệ thống.
Với bài toán cơ sở dữ liệu bán hàng từ xa hệ thống mạng phân tán có những đặt điểm
sau:
server. Sự tác động này gọi là sự giao dịch.
Client A :
{Goiyeucau(B,yc) // client gởi server B
Nhanyeucau(ketqua)}
Server B
{ Nhanyeucau(s,nh)
Nếu(hợp lệ)
Bắt đầu
Tracuucsdl
Thongke
Traketqua(s,kq)
}
Câu truy vấn có thể cài đặt tại Client hoặc tại máy Server. Hai giải pháp này khác nhau ở
khối lượng thông tin trao đổi giữa các client với nhau. Giả sử rằng ta đang theo tác trên môi
trường Web. Vậy chương trình có thể triển khai trên Server và trên Client chỉ cần trình
duyệt Web mà thôi (các trình duyệt Web như Internet Explorer, Netcape Navigator). Web
Server xử lý các yêu cầu từ Client gởi lên sau khi xử lý xong và trả về kết quả Client. Như
vậy với mô hình này thì chương chình được cài đặt toàn bộ trên Server.
Với mô hình trên ta thấy độ tin cậy của thông tin. Thông tin là đúng tại thời điểm
Server nhận được thông điệp và đọc nó, có thể không đúng khi khi client nhận được. Điều
này liên quan đến việc làm tươi dữ liệu.
Vì vậy ta phải có giải pháp cho việc truy cập đồng thời vào dữ liệu dùng chung. Hiện
tại ta có một số hệ quản trị CSDL như SQL Server 2005 hoặc Oracle có tính năng bảo mật
và phân quyền rất tốt do đó đảm bảo tính an toàn cho hệ thống thông tin.
Có một số hệ quản trị CSDL có tính năng Transaction ( lập phiên giao dịch) cho phép
đảm bảo tính thống nhất trong khi lưu trữ dữ liệu đảm bảo không xẩy ra treo hệ khi nhiều
Client cùng truy xuất vào một CSDL.
Trang: 6 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
Bài tập tiểu luận Môn: Lập trình mạng nâng cao
2.2 Mô tả hoạt động:
Các C1, C2, , Cn là các Client truy cập vào Web Server bằng trình duyệt Web. Các yêu
cầu này đòi hỏi việc xử lý phải truy vấn đến các cơ sở dữ liệu phân tán. Do đó việc xử lý
thành công hay không phụ thuộc vào kết quả của tất cả các truy vấn này. Điều đó có nghĩa
là, xử lý sẽ thành công nếu tất cả các truy vấn đều thành công, ngược lại, xử lý sẽ không
thành công nếu có bất kỳ một truy vấn nào bị lỗi hoặc không thực hiện được. Khi nhận được
Trang: 8 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
Bài tập tiểu luận Môn: Lập trình mạng nâng cao
một yêu cầu từ các Ci, i=1,n, các Servlet sẽ dựa vào yêu cầu này để thành lập nên một danh
sách các Database Server sẽ truy vấn và các câu lệnh SQL tương ứng được thực hiện tại mỗi
Server. Việc thành lập danh sách các câu lệnh SQL truy vấn tại mỗi Database Server được
dựa theo thứ tự ưu tiên SELECT, DELETE, UPDATE, INSERT. Sau khi thành lập danh
sách di chuyển, Servlet chuyển danh sách di chuyển này cho TPC-Server-App đầu tiên trong
danh sách di chuyển thông qua phương thức gọi từ xa RMI.
Mỗi TPC-Server-App cài đặt một giao diện cung cấp phương thức xử lý theo thuật
toán 2PC tuyến tính với tham số là danh sách di chuyển, chỉ mục hiện tại của danh sách và
trả về kết quả là danh sách kết quả truy vấn của chính nó và các Server đứng phía sau nó
trong danh sách di chuyển.
public interface TPCApp extends Remote
{
public ResultQueryList queryApp(MovableList movableList,int index) throws
RemoteException;
}
Nếu quá trình xử lý tại bất kỳ một TPC-Server-App nào bị lỗi thì kết quả trả về là
null. Dựa vào kết quả trả về này, các TPC-Server-App commit hoặc transaction đang quản
lý. Như vậy, khi TPC-Server-App đầu tiên nhận được danh sách di chuyển, TPC-Server-App
bắt đầu một transaction để thực hiện các câu lệnh SQL truy vấn CSDL cục bộ thông qua kết
nối CSDL được lấy từ ConnectionPool cục bộ .Tiếp theo, TPC-Server-App tăng chỉ mục
hiện tại của danh sách di chuyển lên 1 và chuyển danh sách di chuyển này đến TPC-Server-
App kế tiếp. Quá trình này được lặp lại cho đến khi kết thúc danh sách di chuyển. Tại Server
Client nhận tham chiếu đến các đối tượng ở xa (đối tượng do chương trình Server tạo ra) và
triệu gọi chúng như các đối tượng cục bộ.
2.4 Cơ chế hoạt động của RMI
Các hệ thống sử dụng RMI để tương tác được chi làm hai nhóm chính : Client và
Server. Server cung cấp dịch vụ RMI, và Client triệu gọi các phương thức đối tượng của dịch
vụ này.
RMI Server phải đăng ký với dịch vụ tra cứu, để Client có thể tìm thấy chúng, hoặc
người ta có thể làm cho có thể tham chiếu đến dịch vụ theo một số cách khác. Đi kèm như là
một phần của Java platform là một ứng dụng được gọi là rmiregistry, nó chạy như một tiến
trình riêng và cho phép các ứng dụng đăng ký các dịch vụ RMI hoặc thu nhận một tham
chiếu tới một dịch vụ. Mỗi khi server đã đăng ký, thì nó sẽ đợi cho đến khi có yêu cầu RMI
đến từ các Client. Hình 3 minh họa các dịch vụ đăng ký với một registry RMI đơn. Được kết
hợp với mỗi một đăng ký dịch vụ là một tên (biểu diễn bằng một chuỗi), để cho phép các
client chọn dịch vụ thích hợp. Nếu dịch vụ chuyển từ Server này đến Server khác, client chỉ
cần tra cứu registry để xác định vị trí mới. Nếu như dịch vụ không sẵn sàng vì tắt máy, quản
trị hệ thống có thể nạp một thể hiện mới của dịch vụ trên một hệ thống khác và đăng ký nó
với RMI registry. Registry không quan tâm một dịch vụ được đăng ký từ máy chủ nào (host),
và client nhận vị trí của dịch vụ trực tiếp từ registry.
Hình 4. Nhiều dịch vụ có thể đăng ký từ cùng registry
Trang: 11 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
Bài tập tiểu luận Môn: Lập trình mạng nâng cao
RMI Client sẽ gửi thông điệp RMI để gọi phương thức đối tượng từ xa. Tuy nhiên,
trước khi một triệu gọi phương thức từ xa thực hiện, Client phải có một tham chiếu đối tượng
từ xa. Điều này bình thường được thực hiện bằng cách tìm kiếm một dịch vụ trong registry.
Ứng dụng client yêu cầu một tên dịch vụ cụ thể, và nhận một URL (Universal Reference
Link) tới một tài nguyên từ xa. Nhớ rằng, URL không chỉ dành cho HTTP, hầu hết các giao
thức có thể được biểu diễn sử dụng cú pháp URL. Mẫu sau được sử dụng bởi RMI để biểu
diễn một tham chiếu đối tượng từ xa:
rmi://hostname:port/servicename
trong đó, hostname là tên của một server (hoặc địa chỉ IP), port là vị trí của dịch vụ trên máy
cách cho phép chương trình Server đăng ký các đối tượng của nó vào rmiregistry.
• Giao tiếp với các đối tượng ở xa. Chi tiết về giao tiếp giữa các đối tượng hoàn toàn
do Java xử lý, đối với người lập trình, việc gọi các đối tượng ở xa cũng tương tự như
việc gọi các đối tượng cục bộ.
• Tải mã bytecode động. RMI cho phép tải mã bytecode của đối tượng về máy cục bộ
và truyền dữ liệu đến đối tượng ở xa.
Hình vẽ 5 dưới đây minh hoạ một ứng dụng phân tán RMI sử dụng registry để xác
định tham chiếu đến các đối tượng ở xa. Hình vẽ này cũng cho thấy RMI sử dụng Webserver
để tại mã bytecode của đối tượng ở xa khi cần thiết.
Trang: 13 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
Bài tập tiểu luận Môn: Lập trình mạng nâng cao
Hình 6. Ứng dụng phân tán RMI sử dụng Registry
2.5 Xây dựng bài toán bằng Java RMI
Chúng ta xây dựng bài toán nêu trên theo mô hình đối tượng phân tán RMI. Hệ thống
gồm nhiều Server chứa các chương trình và cơ sở dữ liệu giống nhau, cơ sở dữ liệu tại các
Server phải đảm bảo gắn bó, công việc này được thực hiện tự động mỗi khi Client cập nhật
dữ liệu vào một Server nào đó. Trên mỗi server chứa hai module xử lý chính:
• Module giao tiếp với Client. Module này có tên là ClientHandle, nó có chức năng
nhận dữ liệu từ các chương trình Client để lưu vào cơ sở dữ liệu.
• Module xử lý danh sách di chuyển. Module này có tên MobListHandle, nó có chức
năng nhận dữ liệu từ module ClientHandle và cập nhật vào tất cả các server theo giải
thuật danh sách di chuyển mà chúng ta sẽ trình bày ở phần sau.
Trang: 14 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
Bài tập tiểu luận Môn: Lập trình mạng nâng cao
CHƯƠNG 3
XÂY DỰNG HỆ THỐNG ĐA SERVER VÀ MINH HỌA GIAO DỊCH
3.1 : Một số khái niệm về giao dịch :
- Giao dịch là gì?
Tập hợp của hàng loạt các sự kiện mà tất cả điều phải hoàng tất đến cùng hoặc không
có bất cứ sự kiện nào được thực hiện.
chuyển đến Server kế tiếp trong hệ thống đa Server .
4. Nếu Server cuối cùng trong danh sách di chuyển, nếu việc thực thi các câu lệnh
truy vấn trên CSDL cục bộ thành công thì chuyển sang trang thái uỷ thác
(Commit Transaction) và trả danh sách kết quả khác Null về cho Server liền trước
nó. Ngược lại trả về Null và chuyễn sang trạng thái khôi phục ( Rollback
Transaction) .
5. Sever nhận được danh sách kết quả từ Sever sau nó trong danh sách di chuyển –
nếu kết quả khác Null thì chuyển sang trạng thái ủy thác ( Commit Transaction )
và gáng kết quả truy vấn cục bộ vào danh sách kết quả và trả về Server liền trước
nó. Ngược lại chuyển sang trạng thái khôi phục ( Rollback Transaction) trả về kết
quả là Null cho Server liền trước.
6. Khi Server đầu tiên nhận được danh sách kết quả nếu danh sách kết quả khác Null
thì chuyển sang trạng thái ủy thác ( Commit Transaction và trả danh sách kết quả
cho ClientHandle> ngược lại chuyển sang trạng thái khôi phục ( Rollback
Transaction ) và kết quả là Null cho ClientHandle.
7. ClientHandle nhận được danh sách kết quả và xử lý trên danh sách kết quả.
Trang: 16 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
Bài tập tiểu luận Môn: Lập trình mạng nâng cao
MÔ HÌNH DANH SÁCH GIAO DỊCH
Hình 7. Mô hình danh sách giao dịch
Trang: 17 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
Server N
Bắt Đầu
Nhận yêu
cầu từ client
Server 1
Mở giao dịch
Truy Vấn
CSDL cục bộ
ủy thác
Chuyển sang
trạng thái
khôi phục
Chuyển sang
trạng thái
ủy thác
Chuyển sang
trạng thái
khôi phục
Server n
Mở giao dịch
Truy Vấn
CSDL cục bộ
!
=Null
Kết thúc giao dịch
Kết thúc giao dịch
Trả kết quả về
cho Server liền
trước
Trả kết quả về
cho Server liền
trước
S
Kết nối
đến server 2
Kết nối đến
Server n
Đ S Đ S
Một số đoạn Code chính của chương trình.
/
*************************************************************************
Class that scan for other Servers - Server 1
*************************************************************************
/
import java.util.*;
import java.sql.*;
import java.rmi.*;
public class DSDCThread extends java.rmi.server.UnicastRemoteObject implements
Runnable {
public DSDCServerInt serverList1,serverList2;
static String serverName2 = "rmi://127.0.0.1:1099/DSDC2";
static String serverName3 = "rmi://127.0.0.1:1099/DSDC3";
private int serverID = 0; // ID = 0 mean sever 3
public DSDCThread() throws java.rmi.RemoteException {super();}
public void run() {
int tmpID = -1;
while (true) {
try {
Thread.sleep(1000); // Dừng 1 giây
try {
serverList1=(DSDCServerInt)
Naming.lookup(serverName2); // Tìm đối tượng Server 2
tmpID = serverList1.connectionList(serverID);
//System.out.println(tmpID);
if (tmpID != serverID) {
Thread.yield();
}catch(Exception e) {
System.out.println("Error: " + e);
}
}
}
Ghi chú : Đây là lời triệu gọi vòng tương tự 3 Server còn lại là Server2, Server 3 và
server 4.
Trang: 21 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
Bài tập tiểu luận Môn: Lập trình mạng nâng cao
TÀI LIỆU THAM KHẢO
1. Hệ tin học phân tán : tác giả Lê Văn Sơn Nxb Đại học quốc gia thành phố Hồ Chí
Minh.
2. Java Lập trình mạng : Nguyễn Phương Lan, Hoàng Đức Hải Nhà xuất bản Lao động
– Xã hội.
3. Các tài liệu trên Internet.
4. Lê Văn Sơn, Nguyễn Xuân Tiến, Nghiên cứu phát triển giải pháp hiệu quả khai thác
luật kết hợp trong cơ sở dữ liệu phân tán.
5. Lê Văn Sơn, Phạm Đình Hân, Phát triển giải pháp kỹ thuật đảm bảo gắn bó dữ liệu
cho các hệ thống thông tin đào tạo trên mạng Internet/Intranet
Trang: 22 Nhóm thực hiện: Trương Văn Thới – Hoàng Phi Cường
Bài tập tiểu luận Môn: Lập trình mạng nâng cao
MỤC LỤC
Chương 1 : Viết chương trình đảm bảo gắn bó dữ liệu trên các CSDL phân tán
tại các server. 2
1.1 Kỹ thuật lập trình Server – Server
giải quyết bài toán cập nhật dữ liệu 3
1.2 Triển khai hệ thống 4