Mô hình đối tượng phân tán

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu các thuật toán giám sát và xử lý cạnh tranh giữa các thành phần phần mềm trên môi trường phân tán Luận văn ThS. Công nghệ thông tin 1 01 10 (Trang 26 - 31)

Một tiến trình đang chạy trên máy chủ A thực hiện lời gọi một phương thức tới một đối tượng phân tán trên máy chủ B, truyền dữ liệu thông qua các biến (nếu có).

Phương thức gọi đến một hoạt động được thực hiện bởi một phương thức trên máy chủ B và giá trị trả về (nếu có) sẽ được gửi từ máy chủ B về máy chủ A.

Tiến trình thực hiện việc sử dụng đối tượng từ xa sẽ được gọi là tiến trình xử lý phía khách (client process) của đối tượng đó và các phương thức của đối tượng sẽ được gọi là phương thức từ xa (remote method).

Mô hình đối tượng phân tán tập trung vào lời gọi các phương thức, còn việc truyền số liệu chỉ đóng vai trò thứ yếu.

Đối tượng phân tán sẽ được cung cấp bởi tiến trình xử lý từ máy phục vụ đối tượng (object server). Để thuận tiện, việc đăng ký đối tượng (object registry) cần phải thể hiện trong kiến trúc hệ thống để các đối tượng từ xa có thể được đăng ký.

Để truy cập vào đối tượng từ xa, tiến trình xử lý từ máy khách (object client) sẽ tra cứu các đối tượng đăng ký để tham chiếu tới đối tượng. Tham chiếu ở đây được coi như là “một điều khiển” (handle) tới đối tượng; nó là sự trình diễn mà qua đó có thể xác định vị trí đối tượng tại máy tính chứa đối tượng đó. Sự tham chiếu này được máy khách đối tượng dùng để thực hiện lời gọi tới các phương thức.

Về mặt logic, các object client có thể thực hiện lời gọi trực tiếp đến phương thức từ xa. Trong thực tế, các lời gọi lại thường được điều khiển bởi các thành phần phần mềm, còn được gọi là uỷ quyền máy khách (client proxy), nó sẽ tương tác với phần mềm trên máy chủ phía khách (máy chủ thực hiện lời gọi)…

Việc hỗ trợ trong thời gian chạy là để đáp ứng việc truyền thông liên tiến trình cần thiết cho việc truyền lời gọi đến máy chủ từ xa, bao gồm cả việc sắp xếp thứ tự các biến dữ liệu cần thiết cho việc truyền tới các đối tượng từ xa.

Một kiến trúc tương tự cũng cần phải có ở phía server, nơi mà sự hỗ trợ thời gian chạy cho hệ thống đối tượng từ xa điều khiển việc nhận các thông điệp, không sắp xếp dữ liệu, và chuyển tiếp lời gọi đến thành phần phần mềm được gọi là uỷ quyền máy chủ (server proxy).

Server proxy giao tiếp thông qua giao diện với đối tượng phân tán qua lời gọi đến phương thức cục bộ, chuyển tiếp các dữ liệu không sắp xếp lại(để nguyên) cho các biến.

Kết quả trả về của lời gọi phương thức sẽ được thực hiện bởi một số công việc (task) ở trên máy chủ server. Kết quả trả về của việc thi hành phương thức, bao gồm cả dữ liệu được sắp xếp sẽ được truyền từ máy chủ server tới máy chủ client thông qua hỗ trợ thời gian chạy (runtime support) và hỗ trợ mạng (network support) ở cả hai phía.

Mô hình đối tượng phân tán được kế thừa trong các ứng dụng phân tán, theo đó hầu hết các kỹ thuật trên mô hình này đều có thể áp dụng được. Một số kỹ thuật được biết đến là:

- Kiến trúc môi giới gọi các đối tượng chung (Common Object Request Broker Architecture – CORBA)

- Mô hình đối tượng thành phần phân tán (Distributed Component Object Model - DCOM)

- Các kỹ thuật hỗ trợ Giao thức truy nhập đối tượng đơn giản (Simple Object Access Protocol SOAP).

2.2 Sự phân tán trong môi trường Java: RMI

2.2.1 Hệ thống đối tượng phân tán trong môi trường Java

Các hệ thống phân tán đòi hỏi sự truyền thông giữa các quá trình tính toán diễn ra trong các không gian địa chỉ khác nhau, rõ hơn đó là các host khác nhau. Đối với kĩ thuật truyền thông cơ bản, ngôn ngữ lập trình Java hỗ trợ các socket, một cơ chế khá mềm dẻo và hiệu quả cho sự truyền thông thông thường. Tuy nhiên, các socket đòi hỏi client và server phải tham gia vào các giao thức mức ứng dụng (applications-level protocols) để mã hóa và giải mã các thông điệp được trao đổi, và việc thiết kế các giao thức đó là nặng nề và có thể dễ gây lỗi[10].

Một sự thay thế các socket đó là lời gọi thủ tục từ xa (RPC - Remote Procedure Call), trừu tượng hóa giao diện truyền thông tới mức của một lời gọi thủ tục. Thay cho sự làm việc trực tiếp với các socket, lập trình viên có cảm giác như đang gọi một thủ tục địa phương, khi mà trong thực tế các đối số của lời gọi được đóng gói và được gửi tới đích ở xa của lời gọi. Các hệ thống RPC mã hóa các đối số và trả về các giá trị, sử dụng một sự biểu diễn dữ liệu bên ngoài, ví dụ như XDR.

RPC, tuy nhiên lại không truyền đạt tốt vào trong các hệ thống đối tượng phân tán, nơi mà sự truyền thống giữa các đối tượng mức chương trình (program-level objects) cư trú trong các không gian địa chỉ được yêu cầu. Để so khớp các ngữ nghĩa của lời gọi đối tượng, các hệ thống đối tượng phân tán cần đến lời gọi phương thức từ xa hay RMI (Remote Method Invocation) . Trong các hệ thống được đề cập trên, một đối tượng đại diện địa phương (local surrogate (stub) object) sẽ quản lý các lời gọi trên một đối tượng từ xa.

Mục đích hỗ trợ đối tượng phân tán trong ngôn ngữ Java là:

- Hỗ trợ liền mạch triệu gọi từ xa đối tượng trên các máy ảo khác nhau. - Hỗ trợ callback từ các server tới các applet.

- Tích hợp mô hình đối tượng phân tán vào ngôn ngữ lập trình Java một cách tự nhiên trong khi vẫn giữ lại được hầu hết ngữ nghĩa đối tượng của ngôn ngữ lập trình Java.

- Tạo nên sự khác biệt giữa mô hình đối tượng phân tán với mô hình đối tượng của nền Java cục bộ.

- Duy trì được các kiểu an toàn (type-safety) cung cấp bởi môi trường runtime của nền Java.

- Hỗ trợ các kiểu tham chiếu ngữ nghĩa khác nhau cho các đối tượng từ xa; ví dụ các kiểu tham chiếu trực tiếp (live), không liên tục hay các kiểu tham chiếu liên tục hay lazy activation.

Duy trì nền an toàn của nền Java được cung cấp bởi các security manager và các class loader.

Các mục đích trên cũng chính là yêu cầu đối với mô hình RMI sao cho đơn giản (dễ sử dụng) và tự nhiên (hợp với ngôn ngữ).

Sự khác biệt giữa mô hình phân tán và không phân tán trong môi trường Java như sau

Trong nền Java, mô hình đối tượng phân tán và mô hình đối tượng có những điểm chung:

 Một tham chiếu đến một đối tượng từ xa có thể được gửi như là một đối số hay được trả về như là một kết quả của lời gọi phương thức (cả cục bộ hay từ xa).

 Một đối tượng từ xa có thể đặt(cast) trong tập các giao diện từ xa bất kỳ hỗ trợ bởi các thi hành có sử dụng cú pháp cho việc đặt được cài sẵn trong ngôn ngữ lập trình Java.

 Toán tử cài sẵn instanceof có thể sử dụng để test các giao diện từ xa được cung cấp bởi một đối tượng từ xa.

Trong nền Java, mô hình đối tượng phân tán khác với mô hình đối tượng ở những điểm sau:

 Các client của các đối tượng từ xa tương tác với các giao diện từ xa chứ không tương tác với lớp thi hành của các giao diện đó.

 Các đối không từ xa gửi tới, và kết quả trả về từ lời gọi phương thức từ xa được gửi bằng một bản copy chứ không phải là tham chiếu. Đó là vì các tham chiếu tới đối tượng chỉ có tác dụng trong một máy ảo đơn.

 Một đối tượng từ xa được gửi đi bằng tham chiếu chứ không phải là một bản copy của sự thực thi từ xa thật sự

 Ngữ nghĩa của một số phương thức được định nghĩa trong lớp java.lang.Object cũng thích ứng với các đối tượng từ xa.

 Khi chế độ lỗi của triệu gọi đối tượng từ xa phức tạp hơn chế độ lỗi của triệu gọi đối tượng cục bộ thì phía client sẽ phải thêm vào các ngoại lệ (exception) có thể xảy ra trong quá trình triệu gọi phương thức từ xa.

2.2.2 Giới thiệu ứng dụng phân tán với RMI

Trong mô hình đối tượng phân tán Java, một đối tượng từ xa (remote object) là đối tượng có các phương thức có thể được gọi từ một máy ảo Java khác, có thể nằm trên

một máy chủ khác. Đối tượng dạng này sẽ được mô tả bởi một hay nhiều giao diện từ xa (remote interface), đó là các giao diện được viết bởi ngôn ngữ lập trình Java khai báo các phương thức của đối tượng từ xa[10].

Lời gọi phương thức từ xa (Remote method invocation - RMI) là một hành động gọi đến một phương thức của một đối tượng từ xa. Điều quan trọng là việc gọi phương thức trên đối tượng từ xa phải có cú pháp tương tự như gọi phương thức trên đối tượng cục bộ.

Các ứng dụng RMI thường được chia thành hai phần chương trình riêng biệt: một ở phía server và một ở phía client. Ứng dụng phía server sẽ tạo các đối tượng từ xa, tạo các tham chiếu để truy cập đến các đối tượng này và chờ phía client gọi các phương thức trên các đối tượng này. Ứng dụng phía client lấy tham chiếu từ xa tới một hoặc nhiều đối tượng và sau đó sẽ gọi các phương thức trên chúng. RMI cung cấp kỹ thuật cho phép server và client kết nối và truyền thông tin qua lại với nhau. Một ứng dụng như vậy được gọi là ứng dụng đối tượng phân tán.

Các ứng dụng đối tượng phân tán cần phải: - Định vị các đối tượng từ xa

Các ứng dụng có thể sử dụng một trong hai kỹ thuật để giành được các tham chiếu tới các đối tượng từ xa. Kỹ thuật thứ nhất là đăng ký đối tượng từ xa với tiện ích đặt tên đơn giản của RMI, rmiregistry, kỹ thuật thứ hai là gửi và trả lại các tham chiếu đối tượng từ xa như là một phần của vận hành bình thường

- Giao tiếp với các đối tượng từ xa

Các chi tiết của sự giao tiếp giữa các đối tượng từ xa được điều khiển bởi RMI; đối với người lập trình, sự giao tiếp từ xa giống như là một lời gọi phương thức chuẩn.

- Tải các mã bytecode cho các đối tượng được chuyển như các tham số hoặc giá trị trả về.

RMI cho phép một đối tượng gọi (caller) chuyển các đối tượng tới các đối tượng từ xa, RMI sẽ cung cấp các kỹ thuật cần thiết cho việc tải mã của đối tượng (object‟s code) cũng như sự truyền nhận dữ liệu của nó.

Hình minh hoạ dưới đây mô tả một ứng dụng phân tán RMI sử dụng bản đăng ký (registry) để lấy các tham chiếu của một đối tượng từ xa. Phía server gọi đăng ký để gán tên cho một đối tượng từ xa. Phía client sẽ tìm kiếm đối tượng theo tên của nó trên bản đăng ký phía server và sau đó gọi một phương thức trên nó. Hình minh hoạ cũng chỉ ra rằng hệ thống RMI sử dụng một web server để tải các đoạn mã lớp được viết bằng ngôn ngữ lập trình Java, từ server đến client và từ client đến server, cho các đối tượng khi cần thiết. RMI có thể nạp các đoạn mã lớp sử dụng bất kỳ giao thức URL nào hỗ trợ nền Java (HTTP, FTP, File…).

2.2.3 Kiến trúc của cơ chế RMI

2.2.3.1 Interfaces nòng cốt của RMI

Kiến trúc RMI dựa trên một yếu tố quan trọng đó là: việc định nghĩa ra các hành vi và sự thi hành của các hành vi đó, các hành vi đó là các nội dung khác nhau. RMI cho phép các đoạn mã định nghĩa ra các hành vi và các đoạn mã thi hành các hành vi đó duy trì ở hai vị trí tách biệt nhau và chạy trên các máy ảo Java khác nhau. Yếu tố này rất phù hợp với các nhu cầu của một hệ thống phân tán, hệ thống phân tán là một hệ thống mà có các client quan tâm đến định nghĩa (giao diện của dịch vụ) của một dịch vụ và các server thì tập trung vào việc cung cấp các dịch vụ[10].

Một cách cụ thể hơn, trong RMI, định nghĩa của một dịch vụ từ xa được viết mã nhờ sử dụng một interface của java, sự thi hành của dịch vụ từ xa được viết mã bên trong một lớp. Do đó chìa khoá để hiểu được cơ chế RMI là đó là: các interface thì định nghĩa ra các hành vi, còn các lớp thì định nghĩa ra các thi hành của hành vi đó

Hình 2.3: Kiến trúc của RMI

Interface của Java không chứa các mã thi hành. RMI hỗ trợ hai lớp thi hành trên cùng một interface. Lớp thứ nhất là sự thực thi của hành vi và nó chạy trên server. Còn lớp thứ hai hoạt động như là một sự uỷ quyền của một dịch vụ từ xa và nó chạy trên client.

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Nghiên cứu các thuật toán giám sát và xử lý cạnh tranh giữa các thành phần phần mềm trên môi trường phân tán Luận văn ThS. Công nghệ thông tin 1 01 10 (Trang 26 - 31)

Tải bản đầy đủ (PDF)

(77 trang)