Remote Procedure Call (RPC) – Thủ tục gọi hàm từ xa là một kỹ thuật tiến bộ cho quá trình kết nối từ Client đến Server để sử dụng các ứng dụng và dịch vụ. RPC cho phép client có thể kết nối tới 1 dịch vụ sử dụng dynamic port nằm ở một máy tính khác. Trong hệ thống mạng máy tính hiện nay có rất nhiều dịch vụ và ứng dụng sử dụng cơ chế kết nối RPC, ví dụ quá trình đồng bộ của các Domain Controller trong hệ thống Active Directory, hoặc khi MS Outlook kết nối tới MS Exchange Server…
Trang 1BÀI TẬP LỚN MÔN HỌC LẬP TRÌNH NÂNG CAO PHẦN I: Các công nghệ triệu gọi hàm/ phương thức từ xa
I RPC (Remote Procedure Call )
1 Giới thiệu
Remote Procedure Call (RPC) – Thủ tục gọi hàm từ xa là một kỹ thuật tiến bộ cho quá trình kết nối từ Client đến Server để sử dụng các ứng dụng và dịch vụ RPC cho phép client
có thể kết nối tới 1 dịch vụ sử dụng dynamic port nằm ở một máy tính khác Trong hệ thống mạng máy tính hiện nay có rất nhiều dịch vụ và ứng dụng sử dụng cơ chế kết nối RPC, ví dụ quá trình đồng bộ của các Domain Controller trong hệ thống Active Directory, hoặc khi MS Outlook kết nối tới MS Exchange Server…
Lời gọi thủ tục xa là một cơ chế cho phép một chương trình có thể gọi thực thi một thủ tục (hay hàm) trên một máy tính khác Trong chương trình lúc này, tồn tại hai loại
thủ tục: thủ tục cục bộ và thủ tục ở xa
Thủ tục cục bộ là thủ tục được định nghĩa, cài đặt và thực thi tại máy của chương trình Thủ tục ở xa là thủ tục được định nghĩa, cài đặt và thực thi trên một máy tính khác
Cú pháp giữa lời gọi thủ tục cục bộ và ở xa thì giống nhau Tuy nhiên, khi một thủ tục ở xa được gọi đến, một thành phần của chương trình gọi là Stub sẽ chuyển hướng để kích hoạt một thủ tục tương ứng nằm trên một máy tính khác với máy của chương trình gọi Đối với người lập trình, việc gọi thủ tục xa và thủ tục cục bộ thì giống nhau về mặt cú pháp Đây chính là cơ chế cho phép đơn giản hóa việc xây dựng các ứng dụng Client-Server Trong hệ thống RPC, Server chính là máy tính cung cấp các thủ tục ở xa cho phép các chương trình trên các máy tính khác gọi thực hiện Client chính là các chương trình có thể gọi các thủ tục
ở xa trong quá trình tính toán của mình
Một Client có thể gọi thủ tục ở xa của nhiều hơn một máy tính Như vậy sự thực thi của chương trình Client lúc này không còn gói gọn trên một máy tính của Client mà nó trải rộng trên nhiều máy tính khác nhau Đây chính là mô hình của ứng dụng phân tán
(Distributed Application)
Trang 2
Remote Procedure Call (RPC)
2 Kiến trúc và cơ chế hoạt động
Một ứng dụng Client-Server theo cơ chế RPC được xây dựng gồm có sáu phần như sơ
đồ dưới đây:
Kiến trúc chương trình kiểu RPC
Phần Client là một quá trình người dùng, nơi khởi tạo một lời gọi thủ tục từ xa Mỗi lời gọi thủ tục ở xa trên phần Client sẽ kích hoạt một thủ tục cục bộ tương ứng nằm trong phần Stub của Client
Trang 3Phần Client Stub cung cấp một bộ các hàm cục bộ mà phần Client có thể gọi Mỗi một hàm của Client Stub đại diện cho một hàm ở xa được cài đặt và thực thi trên server
Mỗi khi một hàm nào đó của Client Stub được gọi bởi Client, Client Stub sẽ đóng
gói một thông điệp để mô tả về thủ tục ở xa tương ứng mà Client muốn thực thi cùng với các tham số nếu có Sau đó nó sẽ nhờ hệ thống RPC Runtime cục bộ gởi thông điệp này đến phần Server Stub của Server
Phần RPCRuntime quản lý việc truyền thông điệp thông qua mạng giữa máy Client và máy Server Nó đảm nhận việc truyền lại, báo nhận, chọn đường gói tin và mã hóa thông tin
RPCRuntime trên máy Client nhận thông điệp yêu cầu từ ClientStub, gởi nó cho
RPCRuntime trên máy Server bằng lệnh send() Sau đó gọi lệnh wait() để chờ kết quả trả về
từ Server
Khi nhận được thông tiệp từ RPCRuntime của Client gởi sang, RPCRuntime bên phía server chuyển thông điệp lên phần Server Stub
Server Stub mở thông điệp ra xem, xác định hàm ở xa mà Client muốn thực hiện cùng với các tham số của nó Server Stub gọi một thủ tục tương ứng nằm trên phần Server
Khi nhận được yêu cầu của Server Stub, Server cho thực thi thủ tục được yêu cầu và gởi kết quả thực thi được cho Server Stub
ServerStub đóng gói kết quả thực trong một gói tin trả lời, chuyển cho phần RPC
Runtime cục bộ để nó gởi sang RPC Runtime của Client
RPC Runtime bên phía Client chuyển gói tin trả lời nhận được cho phần Client Stub ClientStub mở thông điệp chứa kết quả thực thi về cho Client tại vị trí phát ra lời gọi thủ tục
xa
Trong các thành phần trên, RPC Runtime được cung cấp bởi hệ thống Client Stub và Server Stub có thể tạo ra thủ công (phải lập trình) hay có thể tạo ra bằng các công cụ cung cấp bởi hệ thống Cơ chế RPC được hỗ trợ bởi hầu hết các hệ điều hành mạng cũng như các ngôn ngữ lập trình
II DCOM/COM+
1 Giới thiệu
Là công nghệ độc quyền của MS, nó định nghĩa các thành phần của phần mềm được phân tán qua mạng máy tính để truyền thông với các thành phần khác Ngoài ra, nó còn hỗ trợ kết nối giữa các đối tượng và kết nối này có thể thay đổi lúc đang chạy
Trang 4COM (Component Object Model) là một cách thức để viết các thành phần phần mềm (software componet) cung cấp các chức năng phục vụ cho các ứng dụng, các thành phần khác Viết một thành phần COM cũng như viết một hàm API động, hướng đối tượng Các thành phần COM có thể được nối kết với các ứng dụng cũng như các thành phần COM khác COM chỉ là một sự đặc tả Nó chỉ ra làm thế nào để xây dựng các thành phần có thể thay thế một cách “động” COM cung cấp một “chuẩn” để các ứng dụng và các thành phần phải tuân theo để chúng có thể hoạt động được với nhau và sử dụng lại thư viện của nhau
2 Thành phần
Thành phần COM là những đoạn mã hiện thực các hàm, các chức năng được chứa trong file DLL hoặc EXE Thành phần COM cần phải thỏa mãn được những “chuẩn” của COM Các thành phần COM có thể được liên kết động Các thành phần COM có thể được “bao gói” lại vì nó thỏa mãn các ràng buộc:
Thành phần COM hoàn toàn độc lập với ngôn ngữ hiện thực nó Thành phần COM có thể được hiện thực bằng nhiều ngôn ngữ như Visual C++, Visual Basic, Java …
3 Giao diện (Interface)
Giao diện là tất cả đối với COM Các ứng dụng chỉ có thể nhìn thấy và truy xuất đến các thành phần COM thông qua giao diện của nó
Giao diện làm tăng mức độ độc lập giữa ứng dụng và các thành phần COM nhờ có giao diện mà một thành phần COM có thể được thay thế động mà không ảnh hưởng đến ứng dụng đang chạy
Giao diện không bao giờ thay đổi Nếu muốn nâng cấp một giao diện thì giao diện mới phải tồn tại song song với giao diện cũ
4 Các kiến trúc :
Ứng dụng Client và ứng dụng COM chạy trên cùng một máy:
Mục đích xây dựng thành phần đối với mô hình này là :
Ứng dụng COM có thể được tái sử dụng cho nhiều ứng dụng Client khác nhau
Làm cho chương trình dễ viết, dễ kiểm tra lỗi, nâng cấp mà không ảnh hưởng đến những ứng dụng Client đang chạy nó
Trang 5Ứng dụng Client chạy một máy, Ứng dụng COM chạy một máy Nhưng hai máy này cùng một mạng local
Lúc này thành phần COM được gọi là DCOM Có 3 cách để giao tiếp giữa ứng dụng Client và Ứng dụng COM:
ActiveX (.exe)
Dùng MTS (Microsoft Transaction Server) để triển khai ActiveX DLL từ xa
RDS (Remote Data Access)
III RMI
1 Tổng quan
RMI là một cơ chế cho phép một đối tượng đang chạy trên một máy ảo Java này ( Java Virtual Machine) gọi các phương thức của một đối tượng đang tồn tại trên một máy ảo Java khác (JVM)
Thực chất RMI là một cơ chế gọi phương thức từ xa đã được thực hiện và tích hợp trong ngôn ngữ Java Vì Java là một ngôn ngữ lập trình hướng đối tượng, nên phương pháp lập trình trong RMI là phương pháp hướng đối tượng do đó các thao tác hay các lời gọi phương thức đều liên quan đến đối tượng Ngoài ra, RMI còn cho phép một Client có thể gửi tới một đối tượng đến cho Server xử lý, và đối tượng này cũng có thể được xem là tham số cho lời gọi hàm từ xa, đối tượng này cũng có những dữ liệu bên trong và các hành vi như một đối tượng thực sự
Lập trình đối tượng phân tán là một trong những vấn đề nóng bỗng của công nghệ phân
tán phần mềm ngày nay Java là ngôn ngữ đi tiên phong với RMI (Remote Method
Invocation) - một kĩ thuật cài đặt các đối tượng phân tán vô cùng hiệu quả và linh động
Thông thường các chương trình của chúng ta được viết dưới dạng thủ tục hoặc hàm và việc các hàm gọi lẫn nhau, truyền tham số hay kết quả cho nhau chỉ xảy ra ở máy cục bộ Kỷ thuật RMI (Remote Method Invoke) – mang ý nghĩa triệu gọi phương thức từ xa là cách
Trang 6thức giao tiếp giữa các đối tượng trong Java có mã lệnh cài đặt nằm trên các máy khác nhau
có thể triệu gọi lẫn nhau
Để giải quyết một số vấn đề trong việc truyền thông giữa Client/Server RMI không gọi trực tiếp mà thông qua lớp trung gian Lớp này tồn tại ở cả hai phía Client và Server Lớp ở
2 Mục đích của RMI
Hỗ trợ gọi phương thức từ xa trên các đối tượng trong các máy ảo khác nhau
Hỗ trợ gọi ngược phương thức ngược từ 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 theo một cách tự nhiên trong khi vẫn duy trì các ngữ cảnh đối tượng của ngôn ngữ lập trình Java
Làm cho sự khác biệt giữa mô hình đối tượng phân tán và mô hình đối tượng cục bộ không có sự khác biệt
Tạo ra các ứng dụng phân tán có độ tin cậy một cách dễ dàng
Duy trì sự an toàn kiểu được cung cấp bởi môi trường thời gian chạy của nền tảng Java
Hỗ trợ các ngữ cảnh tham chiếu khác nhau cho các đối tượng từ xa
Duy trì môi trường an toàn của Java bằng các trình bảo an và các trình nạp lớp
RMI là một công nghệ phân tán cho phép các phương thức trên các máy ảo Java được gọi từ xa Đây là cách đơn giản để truyền tin giữa một ứng dụng này với ứng dụng khác so với truyền tin trực tiếp với TCP socket, cách truyền tin này đòi hỏi cả hai phía đều sử dụng cùng một giao thức Thay vì viết các chương trình cài đặt giao thức, những người phát triển
có thể tương tác với các phương thức đối tượng được định nghĩa bởi một giao tiếp dịch vụ RMI Mỗi khi có được một tham chiếu tới đối tượng từ xa, tham chiếu này có thể được xem như là một đối tượng cục bộ, đây là cách trực quan để phát triển các ứng dụng mạng
Lập trình đối tượng phân tán là một trong những vấn đề nóng bỗng của công nghệ phân tán phần mềm ngày nay Java là ngôn ngữ đi tiên phong với RMI (Remote Method
Invocation) - một kĩ thuật cài đặt các đối tượng phân tán vô cùng hiệu quả và linh động
3 Các đặt tính của RMI
RMI là mô hình đối tượng phân tán của Java, nó giúp cho việc truyền thông giữa các đối
Trang 7tượng phân tán được dễ dàng hơn
RMI là API bậc cao được xây dựng dựa trên lập trình Socket
RMI không những cho phép chúng ta truyền dữ liệu giữa các đối tượng trên các hệ thống máy tính khác nhau, mà còn triệu gọi các phương thức trong các đối tượng ở xa
(Remote Object)
Việc truyền dữ liệu giữa các máy khác nhau được xử lý một cách trong suốt bởi máy ảo Java (Java virtual machine)
Tương tự như mô hình Client/Server, RMI vẫn lấy/duy trì khái niệm của Client và
Server, tuy nhiên cách tiếp cận (approach) của RMI linh hoạt hơn, mềm dẻo hơn so với môt hình Client/Server
Một điều thuận lợi quan trong nhất của RMI là nó cung cấp cớ chế callbacks, nó cho phép Server triệu gọi các phương thức ở Client
4 Kiến trúc cơ bản của RMI
Remote interface: Nên extend từ java.rmi.remote.Nó khai báo tất cả các phương thức mà Client có thể triệu gọi Tất cả các method trong interface này nên throw RemoteException Remote implementation: Được thực thi từ Remote interface và mở rộng từ
UnicastRemoteObject Triển khai các method được khai báo trong Interface tại đây Nó là một Remote Object thực sự Phát sinh hai lớp trung gian Stub và Skel
Server class bao gồm:
- RMI registry: Bộ đăng kí này sẽ đăng kí một Remote object với Naming Registry Giúp các Remote object được chấp nhận khi gọi các method từ xa
- Các class thực thi trên server
Client class: Truy vấn trên tên Remote object trên RMI registry, thông qua stub để gọi các
phương thức trên server
5 Cách làm việc của RMI
Các Đối tượng ở phía Server đăng kí với bộ đăng kí RMI registry
Trang 8Client kiểm tra các đối tượng ở xa trong RMI Registry
Vị trí của một đối tượng ở xa được xác định trong RMI Registry Một stub được trả về cho Client
Remote object có thể được sử dụng tương tự như Local object để truy xuất đến toàn bộ
tài nguyên Việc truyền thông giữa Client và Server được xử lý bởi Stub và Skel
IV CORBA
1 Giới thiệu CORBA
CORBA còn được gọi là ngôn ngữ đặc tả giao tiếp (IDL-Interface Description
Language)
Mô tả chức năng của đối tượng thông qua hàm, phương thức, thuộc tính…
Không chứa bất kỳ cài đặt mã lệnh nào
Đặc tả đối tượng dựa trên khái niệm interface trong Java
2 CORBA và mô hình phân tán
Trình môi giới trung gian ORB (Object Request Broker)
Cơ chế làm việc của ORB
Giao thức IIOP (Interoperate Internet Object Protocol)
Các đối tượng sau khi tạo ra bởi các ngôn ngữ lập trình khác nhau phải được gọi thông qua một chương trình môi giới trung gian của CORBA gọi là ORB
ORB hoạt động nhờ ngôn ngữ đặc tả IDL
Dựa vào IDL, ORB sẽ biết được tên phương thức cần gọi, đối số, trị trả về,…Từ đó ORB có thể gọi phương thức của đối tuợng
ORB hoàn toàn trong suốt (transparent) đối với lập trình viên và người sử dụng
ORB (Object Request Broker)
ORB Network
C++
Corba Object
Delphi Corba Object
Java Corba Object
Trang 93 Cơ chế hoạt động :
V Web Services
1 Tổng quan
Web Services là một cách chuẩn để tích hợp các ứng dụng trên nền web (Web-based applications) Các ứng dụng có thể sử dụng các thành phần khác nhau để tạo thành một dịch
vụ, ví dụ như máy chủ chạy một trang web thương mại điện tử kết nối với cổng thanh toán điện tử qua một API - Application Programming Interface ( tạo tởi công nghệ NET thì web services chính là nền máy chủ (IIS - Internet Information Services), và các thành phần thanh toán, các thành phần NET được coi là component (các thành phầm bên ngoài) Các thành phần này được gọi bởi phương thức SOAP (Khác phương thức POST, GET) nên không bị gặp phải firewall khi truy xuất các thành phần bên ngoài máy chủ Và toàn bộ các thành phần đó gọi là một Web Services
Các Web Services cho phép các tổ chức thực hiện truyền thông dữ liệu mà không cần phải có kiến thức về hệ thống IT phía sau tường lửa Một số Web Services hiện nay có sẵn miễn phí và càng ngày càng hướng dần vào các doanh nghiệp
Theo định nghĩa của W3C (World Wide Web Consortium), Web Service là một hệ thống phần mềm được thiết kế để hỗ trợ khả năng tương tác giữa các ứng dụng trên các máy tính khác nhau thông qua mạng Internet, giao diện chung và sự gắn kết của nó được mô tả bằng XML
Web Service là tài nguyên phần mềm có thể xác định bằng địa chỉ URL, thực hiện các chức năng và đưa ra các thông tin người dùng yêu cầu Một dịch vụ Web được tạo nên bằng cách lấy các chức năng và đóng gói chúng sao cho các ứng dụng khác dễ dàng nhìn thấy và
Intermidiate class _Stub
Intermidiate class _Skel
C++
Client
Java Corba Object
IIOP
Trang 10có thể truy cập đến những dịch vụ mà nó thực hiện, đồng thời có thể yêu cầu thông tin từ dịch vụ Web khác Nó bao gồm các mô đun độc lập cho hoạt động của khách hàng và doanh nghiệp và bản thân nó được thực thi trên server
Web Service mô tả một cách thức chuẩn để tích hợp các ứng dụng dựa trên nền tảng Web, sử dụng các chuẩn mở XML (Extensible Markup Language), SOAP (Simple Object Access Protocol), WSDL (Web Services Description Language) và UDDI (Universal
Description Discovery and Integration) thông qua giao thức Internet
2 Cơ chế hoạt động
Một ứng dụng web Service bao gồm 2 phần: Client và Server giao tiếp với nhau qua giao thức HTTP
Client gửi yêu cầu qua các lời gọi hàm thông qua HTTP Request đến Server
Server gửi các kết quả được thực thi các ở các hàm thông qua HTTP Response
VI So sánh giữa các công nghệ triệu gọi hàm/ phương thức từ xa
Gọi phương thức từ xa không phải là một khái niệm mới Thậm chí trước khi ra đời lập trình hướng đối tượng phần mềm đã có thể gọi các hàm và các thủ tục từ xa Các hệ thống như RPC đã được sử dụng trong nhiều năm và hiện nay vẫn được sử dụng
Trước hết, Java là một ngôn ngữ độc lập với nền và cho phép các ứng dụng Java truyền tin với các ứng dụng Java đang chạy trên bất kỳ phần cứng và hệ điều hành nào có hỗ trợ JVM Sự khác biệt chính giữa hai mục tiêu là RPC hỗ trợ đa ngôn ngữ, ngược lại RMI chỉ
hỗ trợ các ứng dụng được viết bằng Java
Ngoài vấn đề về ngôn ngữ và hệ thống, có một số sự khác biệt căn bản giữa RPC và RMI Gọi phương thức từ xa làm việc với các đối tượng, cho phép các phương thức chấp nhận và trả về các đối tượng Java cũng như các kiểu dữ liệu nguyên tố (premitive type) Ngược lại gọi thủ tục từ xa không hỗ trợ khái niệm đối tượng Các thông điệp gửi cho một dịch vụ RPC (Remote Procedure Calling) được biểu diễn bởi ngôn ngữ XDR (External Data Representation): dạng thức biểu diễn dữ liệu ngoài Chỉ có các kiểu dữ liệu có thể được định nghĩa bởi XDR mới có thể truyền đi
1 Ưu điểm
RMI: chỉ cần lời gọi phương thức vì đối tượng được gọi đã hiện diện trong máy ảo của máy Đồng thời, được sử dụng trên nhiều nền tảng di động, tích hợp sẵn trong Java
RPC: các thủ tục gọi hàm không cần biết được thực hiện trên máy giống nhau hay khác nhau