Thành viên:Vhphi
Bách khoa toàn thư mở Wikipedia
[sửa] Xử Lý Đa Server Xu Thế Của Thời Đại Công Nghệ Thông Tin
Cùng với sự bùng nổ thông tin như ngày nay vấn đề đặt ra cho các nhà tin học là làm sao có thể khai thác một cách có hiệu quả nguồn thông tin của nhân loại. Mặc khác, các nguồn thông tin lại nằm rải rác trên các Server ở khắp nơi trên thế giới. Để tập hợp các nguồn thông tin này lại không phải là chuyện dễ, bên cạnh đó còn tốn kém rất lớn và người ta cũng không muốn làm như vậy. Từ ý tưởng làm việc nhóm và hiệu quả của nó mang lại. Các nhà tin học đã giải quyết vấn đề này thông qua giải pháp xử lý đa Server. Trong phạm vi của bài viết này tôi xin đề cập đến hai vấn đề: + Lợi ích của việc xử lý đa Server + Giải pháp thực hiện đa Server A/ Lợi ích của việc xử lý đa Server. Như chúng ta đã biết về lợi ích to lớn của làm việc theo nhóm và sức mạnh của tập thể mang lại. Lợi ích của việc xử lý đa Server cũng vậy, Nó cho phép khai thác tối đa khả năng tính toán của từng Server trong nhóm. Ví dụ như một công việc mà một Server giải quyết thì không hiệu quả và nhanh bằng nhiều Server cùng giải quyết. Lợi ích thứ hai là nó cho phép khai thác tối đa nguồn dữ liệu của mỗi Server đang có. Thông qua các giao thức triệu gọi từ xa, mỗi Server ở bất kỳ nơi đâu cũng đều có thể xử lý được luồng thông tin do Server khác cung cấp khi có nhu cầu. Giao thức triệu gọi từ xa và 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. Tôi thiết nghĩ giải pháp xử lý đa Server này sẽ rất hữu ích và hiệu quả cho đề án 112 của chính phủ trong việc khai thác thông tin và dữ liệu của các sở ban ngành, của các tỉnh và thành phố. Mỗi sở ban ngành đều có cơ sở dữ liệu riêng của họ và họ đều có Server riêng để quản lý nó. Giải pháp xử lý đa Server mà cụ thể là các giao thức triệu gọi từ xa và các tác tử tạo ra trên mạng là giải pháp để khai thác hiệu quả nguồn dữ liệu quí giá này. B/ Giải pháp thực hiện đa Server. Có nhiều giải pháp thực hiện đa Server và có nhiều ngôn ngữ bậc cao hỗ trợ cho việc lập trình đa Server như Java, C#, vv.v. Trong phần này tôi xin dùng ngôn ngữ Java và giao thức RMI (Remote Method Invocation) để giới thiệu cụ thể các bước thiết lập và cài đặt trong việc xử lý hệ thống đa Server. Mô hình xử lý thông tin có thể được trình bày ngắn gọn như sau: Hình:Thí dụ.jpg
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.String getInformation(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 ; //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 đỡ ser2 =(Server2)Naming.lookup("rmi://"+ nameserver2+ ":1099/Server2"); s1= ser2.receive(s); // gọi phương thức của receive(s) của Server2 System.out.println("Goi Server2 lam giup.."); }catch (Exception e){ System.out.println("connect with server2 err "+ e); } return s1; }
public static void main(java.lang.String args[ ] ) { java.lang.System.out.println("Creating Registry Server1..."); try { //Server1 tạo ra đối tượng server1impl và đăng ký nó để sẵn sàng cho việc gọi từ xa java.rmi.registry.LocateRegistry.createRegistry(1999); Server1Impl server1impl = new Server1Impl(); java.rmi.Naming.rebind("rmi://" + args[0] + ":1999/Server1", server1impl); java.lang.System.out.println("Server1 Ready"); // lay ten cua server2 giữ đấy để khi cần thì gọi DataInputStream inname = new DataInputStream(System.in); java.lang.System.out.print("Nhap Ten Cua Server Thu 2 Vao: "); nameserver2=inname.readLine(); } catch(java.lang.Exception exception) { java.lang.System.out.println("Create registry failed " + exception.getMessage()); java.lang.System.exit(0); } } }
+ Xây dựng Interface cho các phương thức triệu gọi từ xa cho Server2 (Server2.java) import java.rmi.Remote; import java.rmi.RemoteException; public 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 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 failed " + exception.getMessage()); java.lang.System.exit(0); } } }
+ Xây dựng chương trình Client để gọi thực hiện (Client.java) import java.io.*; import java.rmi.*;
public class Client { static Server1 obj = null; public static void main (String argv[]){
try{ obj = (Server1)Naming.lookup("rmi://"+ argv[0] +":1999/Server1");
java.lang.String message = obj.getInformation(“Help me !”) ; System.out.println(message);
}catch (Exception e){ System.out.println ("Client exception: " + e); } } }
- Các bước biên dịch để thực thi các chương trình trên để mô phỏng quá trình xử lý Đa Server
- Dùng lệnh javac để dịch các file java ở trên ra class cú pháp như sau: C:\j2sdk1.4.2_5\bin> javac C:\MultiServer\Server1.java (tương tự cho các file còn lại) - Mở 4 của sổ command của Dos ra cùng một lúc trên màn hình - Trong cửa sổ 1 dùng lệnh: rmic để dịch các lớp Server1Impl.class ra các lớp của RMI là Server1Impl_Skel.class và Server1Impl_Stub.class cú pháp của nó như sau: C:\j2sdk1.4.2_5\bin> rmic Server1Impl -d C:\MultiServer (tương tự cho Server2Impl) - Trong cửa sổ thứ 2 ta start Server1 lên để sẵn sàng làm việc bằng lệnh C:\MultiServer> java Server1Impl localhost (localhost hay IP là tên Server cần cài đặt) - Trong cửa sổ thứ 3 ta start Server2 lên để sẵn sàng làm việc bằng lệnh C:\MultiServer> java Server2Impl localhost (localhost hay IP là tên Server cần cài đặt) - Trong cửa sổ thứ 4 ta thực thi Client để gọi các Server này thực hiện bằng lệnh
C:\MultiServer> java Client localhost (localhost hay IP là tên Server cần cài đặt)
Ghi chú: - Có thể cài đặt Server2 lên một máy khác để thấy rõ quá trình làm việc của nó.
- Ở đây ta cài đặt 2 Server và 1 Client trên cùng 1 máy để mô phỏng nên cùng lấy tên là localhost
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 Vì không gian trong tập san có hạn nên tôi không thể trình bày chi tiết, hy vọng trong tập san số sau tôi sẽ đề cập chi tiết hơn một số vấn đề có liên quan. Thân ái Võ Hoàng Phi