CHƯƠNG TRÌNH PHÂN TÁN ĐẢM BẢO GẮN BÓ DỮ LIỆU TRÊN CÁC SERVER NGANG HÀNG - Pdf 24

Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng
ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA

TIỂU LUẬN
LẬP TRÌNH MẠNG
1.2 Đề tài :
CHƯƠNG TRÌNH PHÂN TÁN
ĐẢM BẢO GẮN BÓ DỮ LIỆU TRÊN CÁC SERVER
NGANG HÀNG
Giáo viên hướng dẫn: PGS.TS. LÊ VĂN SƠN
Học viên thực hiện: LÊ VĂN HOÀNG VŨ-
PHẠM THỊ HÀ PHƯƠNG
Lớp: Khoa học máy tính – Khóa 11
Niên khóa: 2009 - 2011
GIỚI THIỆU
Trang 1
Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng
Với hệ thống mạng cục bộ và internet phát triển vượt bậc, 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
người ta gọi là môi trường đa Server. Trong môi trường đa Server và việc truy cập từ xa có
thể truy xuất đồng thời đảm bào toàn vẹn dữ liệu vì dữ liệu có thể lưu trữ dự phòng trên
nhiều Server khác nhau.
Đây là hệ thống đa Server rất phức tạp nhưng hệ thống đảm bảo gắn bó dữ liệu giữa
các Server đồng thời không làm phức tạp việc truy xuất dữ liệu.
Với lý do đó nhóm chúng em trình bày chủ đề “ Xây dựng chương trình phân tán
đảm bảo gắn bó dữ liệu trên các Server ngang hàng”. Nhóm dùng công cụ ngôn ngữ lập
trình Java và bộ thư viện hỗ trợ lập trình mạng phân tán RMI. Ứng dụng thuật toán danh
sách di chuyển .

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.
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.
Trang 4
Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng
Đề 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.
II/ 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:
1. Hệ thống gồm nhiều server ( 3 Server ) được bố trí tại nhiều nơi khác nhau và các
server chứa CSDL giống nhau.
2. Cho phép nhiều đại lý cập nhật thông tin khách hàng đồng thời.
3. Hệ thống phải tuyệt đối đảm bảo gắn bó dữ liệu tránh trình trạng hàng hoá cung
cấp hết cho khách hàng A tại đại lý A nhưng vẫn được bán cho khách hàng B ở
một đại lý nào đó.
Đây là một hệ thống thông tin phức tạp gồm nhiều ứng dụng được thiết kế để giải quyết bài
toán một cách tổng thể toàn diện. Ở đây với mục đích tìm hiểu và nghiên cứu ta có thể thu
nhỏ bài toán cơ sở dữ liệu gồm bảng khách hàng.
Sanpham(Masp,Tensp, Soluong,Dongia)
Người sử dụng muốn được cung cấp thông tin về một yêu cầu nào đó qua câu truy vấn trên
Server tiếp nhận câu truy vấn và xử lý câu truy vấn rồi chuyển lại cho người yêu cầu.
Có một khách hàng ở địa điểm A muốn biết thông tin về giá cả, số lượng của mặt
hàng có tại đại lý B tại địa điểm B ở xa để làm được việc này hệ thống phải xử lý các công
việc nhất định.
Trước hết khi Client ra yêu cầu hệ thống phải xác định Client đang ở vị trí nào . đây
chính là vấn đề trỏ thông tin nội dung chủ yếu của việc trỏ thông tin là biến đổi địa điểm B
thành tên của hệ thống cục bộ quản lý để hệ thống có thể nhận dang được. Tên của hệ thống

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.
Trong thực tế việc treo hệ vẫn có thể xảy ra ví dụ : một khách hàng A mua hàng hoá
K tại đại lý B và C khách hàng này nhận được lời chấp nhận với một số lượng cụ thể, nhưng
số lượng mặt hàng này không có hoặc có mà không đủ tại đại lý B và C. trong khi ra lệnh thì
Trang 6
Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng
yêu cầu của khách hàng vẫn được chấp nhận vì số lượng vẫn còn ở một địa điểm khác. Vì
vậy xảy ra vấn đề khách hàng A nhận được phản hồi chấp nhận mà trên thực tế số lượng
hàng hoá tại vị trí ấy không có.
Trang 7
Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng
CHƯƠNG 2 : LẬP TRÌNH HỆ THỐNG ĐA SERVER BẰNG NGÔN NGỮ JAVA.
2.1 Giới thiệu mô hình đối tượng phân tán RMI
RMI là một công nghệ Java cho phép một máy ảo Java này tương tác với một máy ảo
Java khác và gọi các phương thức đối tượng. Các đối tượng có thể gọi các phương thức trên
các đối tượng khác nằm ở xa một cách dễ dàng như chúng nằm cùng trên máy chủ cục bộ
(mỗi khi một số công việc khởi tạo đã được thực hiện).
Mỗi dịch vụ RMI (RMI service) được định nghĩa bởi một giao diện, nó mô tả các
phương thức đối tượng mà nó có thể được thực hiện từ xa. Giao diện này phải phải được chia
sẽ bởi tất cả những người phát triển người mà sẻ viết phần mềm cho dịch vụ đó. Nó hoạt
động như là một bản thiết kế cho các ứng dụng mà chúng sử dụng và cung cấp sự cài đặt của

và client nhận vị trí của dịch vụ trực tiếp từ registry.
Trang 9
Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng
Hình 4. Nhiều dịch vụ có thể đăng ký từ cùng registry
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
đó, và servicename là mô tả của dịch vụ.
Mỗi khi tham chiếu đối tượng có được, thì Client có thể tương tác với dịch vụ ở xa.
Các chi tiết mạng (Networking details) của yêu cầu hoàn toàn trong suốt đối với người phát
triển ứng dụng và làm việc với đối tượng ở xa trở nên đơn giản như làm việc với đối tượng
cục bộ. Điều này đạt được thông qua việc chia mềm dẻo hệ thống thành hai phần, stub và
skeleton.
Đối tượng stub hoạt động với vai trò của một đối tượng thừa hành (proxy), chuyển tải
các yêu cầu đối tượng tới server RMI ở xa. Nhớ rằng mọi dịch vụ RMI được định nghĩa là
một giao diện (interface), chứ không phải là sự cài đặt (implementation). Đối tượng stub cài
Trang 10
Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng
đặt một giao diện RMI cụ thể, cái mà Client có thể sử dụng như bất kỳ một sự cài đặt đối
tượng nào khác. Tuy nhiên, không phải là stub chính nó thực hiện công việc, mà stub sẽ gửi
đi một thông điệp tới dịch vụ RMI từ xa, chờ trả lời, và trả trả lời này về cho phương thức
gọi (Calling method). Người phát triển ứng dụng không cần quan tâm về nơi chứa tài nguyên
RMI, nó chạy trên Platform nào, hay nó sẽ thực hiện yêu cầu như thế nào. RMI client chỉ
đơn giản gọi một phương thức của đối tượng thừa hành, nó xử lý tất cả các chi tiết cài đặt.

• 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 12
Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng
2.3.1/ Đặt vấn đề:
Với sự phát triển mạnh mẻ của Internet thông tin được cất trên các Server nằm rải rác
trên khắp mọi nơi muốn tìm ra một thông tin hữu ích không phải là chuyện dễ dàng và rất
tốn kém, tốn kém về mặt thời gian, vật chất, tiền bạc và con người. Các nhân viên lập trình
đã giải quyết vấn đề này thông qua giải pháp xử lý đa server.
Lợi ích của việc xử lý đa Server cho phép khai thác tối đa khả năng tính toán của từng
Server của từng vùng. Cho phép khai thác tối đa nguồn dữ liệu của từng server đang có
thông qua giao thức gọi từ xa mỗi Server ở ví trí bất kỳ nơi đâu cũng điều có thể xử lý được
luồng thông tin do Sever khác cung cấp khi có yêu cầu.
Giao thức triệu gọi từ xa từ các tác tử (agent) tạo ra trên mạng là giải pháp chính cho
vấn đề xử lý đa Server với môi hình xử lý thông tin được trình bày như sau:
2.3.2/ Một số ví dụ cho các bước xây dựng một giải pháp xử lý đa server dùng
RMI.
a/ Xây dựng Interface cho các phương thức triệu gọi từ xa cho
server1 ( sever1.java).

public interface Server1 extends java.rmi.Remote {
public abstract java.lang.String getInformation(java.lang.String s )
throws java.rmi.RemoteException; }

b/ 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.DataInputStream;

java.rmi.Naming.rebind("rmi://"+args[0] + ":1999/Server1", server1impl);
System.out.println("Server1 Ready");
// lay ten cua server2 giữ đấy để khi cần thì gọi
DataInputStream inname = new DataInputStream(System.in);
System.out.print("Nhap Ten Cua Server Thu 2 Vao: ");
nameserver2=inname.readLine();
}catch(Exception exception) {
System.out.println("Create registry failed " + exception.getMessage());
System.exit(0); } }
}
c/ Xây dựng Interface cho các phương thức triệu gọi từ xa cho
Server2 (Server2.java)
package tieuluanmang;
import java.rmi.Remote;
public interface Server2 extends Remote {
public abstract String receive(java.lang.String s)
throws RemoteException;
}
d/ 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.*;
import java.rmi.server.UnicastRemoteObject;
public class Server2Impl extends UnicastRemoteObject implements Server2 {
public Server2Impl()throws RemoteException {
System.out.println("Starting Server2 ");
}
public synchronized String receive(java.lang.String s) {
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 ");

}catch (Exception e){ System.out.println ("Client exception: " + e); } }
}
Việc xử lý đa Server này được áp dụng cho các trung tâm tích hợp dữ liệu lớn ở khắp nơi
trên thế giới như Yahoo, Google.v v
Trang 15
Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng
CHƯƠNG 3:
XÂY DỰNG HỆ THỐNG CƠ SỞ DỮ LIỆU D ( d1 = d2 =… dn)
Trong chương này nhóm chúng tôi xây dựng các cơ sở dữ liệu bằng nhau có tên
Csdl1, Csdl2,
Xây dựng mô hình đa Server là giải pháp cốt lõi cho mô hình trên ta sử dụng công nghệ Java
RMI ( Remote Method Invocation: Viện dẫn phương thức từ xa)
Các phương thức triệu gọi từ xa như sau:
Chèn tên User và Password vào record trên các cơ sở dữ liệu.
public void insert(String user, String pass) throws RemoteException{
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseNa
me=csdl1;user=sa;password=sa;");
if(con==null){
System.out.println("Loi ket noi");
}
st=con.createStatement();
st.executeUpdate("insert into users values('"+user+"','"+pass+"')");

}catch(Exception e){
e.printStackTrace();
}
}
Đây là đoạn chương trình kết nối dữ liệu trên File Server .

4.2 Nội dung của danh sách di chuyển
Giải thuật danh sách di chuyển được trình bài như sau:
1. Khởi động các modul trên file Server, gồm các module MoblistHandle,
ClientHandle, hệ thống cho phép người sử dụng cập nhật dữ liệu từ các chương
trình client.
Trang 17
Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng
2. Modul ClientHandle nhận dữ liệu từ client và thành lập danh sách di chuyển, sau
đó chuyển danh sách cho Modul MobListHandle.
3. MoblistHandle mở ra một giao dịch , thực hiện truy vấn dữ liệu ngay trên cơ sở dữ
liệu cục bộ của mình. Sau đó kết thúc truy vấn, MobListHandle gởi danh sách di
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 18
Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng

Mở giao dịch
Truy Vấn
CSDL cục bộ
Serve
r Cuối
?
!
=Null
Đ
Chuyển sang
trạng thái
ủ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ề

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) {
System.out.println("Connected to " + serverName2);
}

//Thread.yield();

} catch(Exception e) {
System.out.println("Failed connect to : " + serverName2);
//e.printStackTrace();
}

try {
//Thread.sleep(1000);

serverList2=(DSDCServerInt)
Naming.lookup(serverName3);
tmpID = serverList2.connectionList(serverID);

Trang 22
Chương trình phân tán đảm bảo gắn bó dữ liệu trên các server ngang hàng
MỤC LỤC
Trang
1. Chương 1 : Xây dựng chương trình phân tán đảm bảo gắn bó dữ liệu
trên Server ngang hàng. 2
I/Kỹ thuật lập trình Server – Server
giải quyết bài toán cập nhật dữ liệu 2
II/ Triển khai hệ thống 4
2. Chương 2: Lập trình hệ thống đa Server bằng ngôn ngữ Java 7
2.1 Giới thiệu mô hình đối tượng phân tán RMI 7
2.2 Cơ chế hoạt động RMI 8
2.3 Xây dựng bài toán bằng Java RMI 11
2.3.1 Đặt vấn đề 12
2.3.2 Một số ví dụ các bước xây dựng một giải pháp xử lý đa Sever
dùng RMI 12
3. Chương 3: Xây dựng hệ thống CSDL D (d1=d2=… dn) 15
4. Chương 4: Danh sách di chuyển 16
5. Tài liệu tham khảo 21.
Trang 23


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status