RSS

RMI & CORBA – P1

06 Jan

I.Các đối tượng phân tán

Trong lập trình Java thông thường thì tất cả các đối tượng tạo nên một chương trình sẽ nằm trên cùng một máy và trong cùng một tiến trình hay trên cùng một máy ảo Java (JVM).

Khi một đối tượng gọi một phương thức trên một đối tượng khác thì đối tượng gọi phải biết địa chỉ vùng nhớ của đối tượng bị gọi và có thể chỉ thay đổi bộ đếm chương trình máy để bắt đầu chạy trong một đối tượng mới. Địa chỉ của đối tượng được goik được lưu trữ trong ngăn xếp của máy, vì thế khi phương thức được gọi trả về giá trị thì địa chỉ trong ngăn xếp sẽ được nạp lại vào trong bộ đếm chương trình máy và tiếp tục thực thi trở lại trong đối tượng gọi. Dãy các bước trên là chung đối với tất cả các ngôn ngữ lập trình mà thực thi trong một tiến trình đơn, trên cùng một máy

Triệu gọi phương thức từ xa (RMI) và kiển trúc môi giới yêu cầu đối tượng chung (CORBA) là tầng giữa hỗ trợ việc gọi phương thức phân tán

Nền Java lý tưởng cho việc lập trình phân tán vì nhiều lý do:

•Nền Java định nghĩa một kích thước nhất quán và định dạng cho các kiểu cơ bản, như kiểu số nguyên và số thực, cũng như việc thể hiện các số giống nhau cho tất cả cài đặt trên nền. Đây là phương tiện để cơ chế chuyển tải có thể được đơn giản hóa một cách quan trọng vì nó không phải thực hiện bất kỳ dịch chuyển hay điều chỉnh nào khi nói chuyện với phía bên kia.

•Các hàm thư viện chính dành cho lập trình phân tán trên Java là RMI lại là một phần trong phiên bản chuẩn của ngôn ngữ Java và vì thể nó có trên tất cả các hệ thống hỗ trợ Java

•Java RMI dễ sử dụng

•Các bộ nạp lớp (classloader) của Java có thể tự động tải các đoạn mã bên phía máy khách đối với mô hình nặng về phía máy khách hay các ứng dụng ngang hàng

•Các tham số của Java có thể được truyền tham chiếu hay tham trị

•Nếu bạn không chắc rằng ngôn ngữ Java có trên tất cả các phia của một ứng dụng phân tán, bạn vẫn có thể dùng ngôn ngữ để gọi các đối tượng trên hệ thống khác được viết bằng một ngôn ngữ lập trình khác, ví dụ C++, bằng cách sử dụng CORBA

•Cuối cùng nền Java cũng hỗ trợ cho nhiều kỹ thuật lập trình phân tán khác nhu mô hình lập trình socket

Tại sao chúng ta lại muốn tính toán phân tán?

•Tính toán phân tán được dùng khi có một nguồn tài nguyên trung tâm, ví dụ như một cơ sở dữ liệu mà chúng ta muốn chia sẻ cho nhiều người sử dụng hay nhiều máy khách

•Tính toán phân tán được dùng để kết hợp sức mạnh tính toán của nhiều hệ thống để giải quyết một bài toán hiệu quả và nhanh hơn việc thực hiện với một hệ thống đơn.

Nhiều hệ thống máy tính có thể được cấu hình theo nhiều cách để chia sẻ xử lý, bao gồm chia sẻ bộ nhớ, chia sẽ đĩa, và còn chia sẻ kênh giao tiếp chung. Kỹ thuật gần đây cho phép các hệ thống mà các thành phần vật lý ở xa nhau có thể hợp tác với nhau trong việc giải quyểt các bài toán tính toán

Cũng trên ảnh hưởng của chủ đề sức mạnh tính toán thì sự trỗi dậy của mạng Internet và giao thức TCP/IP đi kèm cũng dẫn đến việc kết nối chưa hề thấy của hàng triệu các hệ thống máy tính. Đối với một vài ứng dụng thì cần sức mạnh tính toán để giải quyết các bài toán.

Chúng ta hãy cùng xem xét 3 mô hình đã từng ảnh hưởng đối với tính toán phân tán:

•Thin client-server: mô hình này đã phổ biến hôm nay, với sự phổ biến của các trình duyệt web. Trong mô hình này thì không có các đoạn mã của ứng dụng chạy trên máy khách – máy khách thực hiện yêu cầu của các phản hồi nhận được từ máy chủ thông qua trình duyệt web; máy chủ sẽ thực thi yêu cầu và gởi về các phản hồi cho máy khách. Đặc tính đẹp nhất của mô hình này là một người dùng có thể thực thi ứng dụng một cách tùy ý mà không cần phải cài đặt, và người dùng có thể chạy ứng dụng từ bất cứ nơi đâu thông qua Internet. Mô hình này ít sử dụng đến các tính toán phân tán, trừ các giao diện người dùng và một vài kiểm tra định dạng và các hàm xử lý đơn giản thông qua các ngôn ngữ như JavaScript. RMI có thể được sử dụng như là một giao thức trong các môi trường này nhưng nói chung thì không nên thay vào đó thì HTTP là giao thức phổ biến hơn trong mô hình này.

•Thick client-server: Mô hình này được dùng khi cần nhiều xử lý bên phía máy khách. Thick client có thể cung cấp một người dùng với một ứng dụng nhiều chức năng. Tuy nhiên phải có một bước cài đặt đẻ lấy mã người dùng cho ứng dụng trên máy người dùng. RMI thì được dùng phổ biến trong mô hình này

•Peer-to-peer: Nếu chúng ta đặt mối quan hệ giữa máy chủ và máy khách ngang nhau, cho phép cả 2 có thể gởi yêu cầu cho nhau khi đó chúng ta có mô hình ngang hàng. Mô hình này đang phát triển và ngày càng phổ biển, nhiều chương trình chia sẻ nhạc MP3 đều sử dụng mô hình này. RMI có thể được dùng như một giao thức trong môi trường này

Có rất nhiều kỹ thuật có sẵn hiện nay cho việc truyền đạt thông tin, như việc thực thi các đoạn mã chương trình từ xa, và phối hợp xử lý giữa các tiến trình trên cùng máy hay các máy đặt xa nhau.

Một trong những kỹ thuật sớm nhất và vẫn còn phổ biến là mở đường liên kết để truyền đạt thông tin giữa các tiến trình. Khi mà liên kết này được thiết lập thì một tiến trình có thể gởi một luồng dữ liệu được mã hóa cho những hành động xác định và thông tin cần truyền đạt đển một tiến trình khác. Tiến trình này sẽ giải mã luông thông tin và thực hiện một hành động, thường là trả kết quả ngược lại cho tiến trình khởi tạo. Lập trình Socket là một ví dụ của kỹ thuật này, một ví dụ khác là giao thức HTTP cho phép chuyển các thông tin HTML mã hóa giữa máy khách và máy chủ

Vấn đề của kỹ thuật này là người lập trình phải suy nghĩ ra một giao thức và sự phối hợp các lệnh cho mỗi ứng dụng. Kỹ thuật này dẫn đến 2 biến hóa khác nhau là gọi một thủ tục, mô hình truyền tham số địa phương tới ngôn ngữ lập trình và mô hình xử lý lệnh cho lập trình socket. Bên cạnh đó cũng có những điểm khác biệt trong định dạng dữ liệu và thứ tự chuẩn của các bit giữa 2 máy, từ đó làm phức tạp mã.

Một mô hình khác là triệu gọi thủ tục từ xa (RPCs). Ở đây, một lập trình viên có thể gọi một thủ tục từ xa và truyền tham số ngược trở lại và về phía trước giống như việc gọi một thủ tục cục bộ. Điều này cho phép phong cách lập trình giống nhau có thể được dùng cho cả lập trình cục bộ và lập trình phân tán. Vẫn còn tồn tại vấn đề định dạng dữ liệu và thứ tự chuẩn của các bit, ngoài ra RPC không tuân theo mô hình hướng đối tượng

RMI là một giải pháp của Java. RMI cho phép các mô hình lập trình giống nhau để gọi các phương thức hướng đối tượng trên cùng máy cục bộ hay gọi phân tán, giả sử rằng ngôn ngữ Java được dùng cho cả bên gọi và bên phương thức được gọi. RMI cho phép các tham số có thể được truyền một trong 2 cách là:

•Truyền theo tham trị: khi một đối tượng mới được tạo ra trong một tiến trình khác và một bản sao của tham số được tạo ra và đưa vào đối tượng mới.

•Truyền theo tham chiếu: một đối tượng không được tạo ra trong tiến trình khác mà được tham chiếu đến từ xa.

Sự khác nhau giữa RMI và CORBA

•RMI là một phần của bộ J2SDK và là các hàm thư viện hỗ trợ các lời gọi phương thức từ xa và trả về giá trị cho các ứng dụng tính toán phân tán. Chúng ta giả sử rằng ngôn ngữ Java được sử dụng ở cả phía gọi và phía bên phương thức được gọi

•CORBA là một chuẩn công nghiệp cho phép gọi các phương thức từ xa và nhận kết quả trả về, nhưng không giống như RMI, nó có thể được sử dụng khi bên phía gọi và bên phía phương thức được gọi có thể sử dụng các ngôn ngữ lập trình khác nhau, bao gồm cả trường hợp là cả 2 bên đều không sử dụng ngôn ngữ Java

•RMI là một tập các hàm thư viện đơn giản vì cả 2 bên đều sử dụng cùng môt ngôn ngữ lập trình và kiến trúc máy. Điều này sẽ làm cho vấn để triệu gọi phương thức từ xa dễ giải quyết hơn.

•Bộ phát triển J2SDK cũng hỗ trợ RMI-CORBA, cho phép một đối tượng Java gọi một đối tượng CORBA sử dụng hai cách tiếp cận khác nhau.

Reference:

javavietnam.org

    posted by hotdream1990

 
Leave a comment

Posted by on January 6, 2011 in CORBA, Java, zZ_IT_Define_Zz

 

Tags: ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s