5. DISTRIBUTED OBJECTS AND REMOTE INVOCATION


이 장에서는 분산 객체간의 Remote method invocation에 의한 커뮤니케이션을 소개 한다. Remote method invocation을 받을 수 있는 이러한 객체들은 Remote 객체들에 의해서 호출되어 질수 있으며 remote interface로 구현 되어 질 수 있다. Invoker invoked object들의 실패에 독립적이기 때문에 RMI들은 local call들과 다른 의미를 기진다. RMI는 아주 local invocation들과 비슷해 보이지만, 그러나 Total Transparecny는 다르다. Marshalling unmarshalling을 위한 코드는 자동으로 interface compiler에 의해서 remote interface definition으로부터 생성 되어 진다.

 

5.1. Introduction

Middleware: Software that provides a programming model above the basic building blocks of processes and message passing is called middleware.

 

Location transparency: RPC에서 client의 호출은 그것이 같은 process인지 다른 process인지 알 수 없다. 마찬가지로, Client server location을 알 필요가 없다. 이와 비슷하게 RMI에서도 그것의 invocation local인지 또는 location의 위치에 대해서 알 필요가 없다. 분산 환경에서의 event-based 프로그램에서도 이와 마찬가지로 발생된 이벤트의 위치를 알 필요가 없다.

Communication protocols: protocol들은 middleware의 추상화를 transport 프로토콜과 독립적으로 지원 한다. For example, request-reply protocol UDP 또는 TCP위에서 구현 되어질 수 있다.

Computer hardware: 이것은 message들을 marshaling하고 unmarshalling 할 때 사용되어 진다. 이것은 하드웨어 아키텍쳐 이기 때문에 감춰져 있다. 에를들면, byte ordering이 있다.

Operating Systems: 높은 레벨의 추상화는 underlying operating system과 독립적으로 middleware에 의해서 제공 된다.

Use of several programming languages: 몇몇 middleware는 분산 어플리케이션이 하나 이상의 programming 언어를 사용할 수 있도록 디자인 되었다. 특히 CORBA는 하나 이상의 언어로 작성되었다. 특히 server의 구성 언어가 다르다. 이러한 것이 가능한 이유는 Interface definition language 또는 IDL이 정의되어 있기 때문이다. IDL은 다음 장에서 논한다.

 

 

5.1.1 Interfaces

모듈 사이의 인터렉션을 위해서 명시적으로 interface가 각각의 모듈에 정의가 되어 있다. 모듈의 interface procedure들과 variable들로 구성되어 진다. 이것은 다른 모듈로들로부터 접근이 가능하다. Interface를 통해서 접근 가능한 정보를 제외하고 기본적으로 module은 모든 정보를 숨긴다.

Interfaces in distributed system: 분산 프로그램에서 모듈들은 separate process들에서 실행 될 수 있다. 하나의 process에 있는 module에서 다른 process의 모듈로의 직접적인 변수 접근은 가능하지가 않다. 따라서 RPC거나 RMI intended 되어 진다. variable들에 대한 direct access를 정의 할 수는 없다. 하지만 CORBA IDL interface에서 attribute를 정의할 수 있다. 이것은 룰을 깨트리는것 처럼 보인다. 하지만 attribute들은 직접적으로 접근되어 지지 않는다. 하지만 getter setter procedure가 자동으로 interface에 추가되어 이것을 통해서 제어 된다.

Parameter-passing 매커니즘은 하나의 예로 call by value call by referece가 있지만, 이것은 local에서만 적합하고 caller procedure가 다른 process들에 있을 경우에는 적합하지 않다. Input 이나 output 혹은 둘다는 분산환경에서의 모듈 인터페이스에 있는 procedure 또는 moethod에 명세되어져 있다.

 분산 환경에서의 remote module에서의 또 다른 특징은 pointer를 사용할 수 없다는 것이다. 따라서 pointer를 이용해서는 결과값을 받아오기 힘들다.

   다음 두개의 패러그램에서는 original client –server에서 사용되는 RPC와 분산 object model에서 사용되는 RMI에서의 interface에 대해서 논한다.


Service interfaces: 클라이언트 서버 모델에서 각각의 서버는 프로지서들의 셋을 제공한다. 이것은 클라이언트에 의해서 사용되어 질수있다. For example, 파일 서버는 파일을 읽고 쓸수 있는 procedure들을 제공 한다. service interface라는 텀은 정의된 input output 아규먼트들로 각각의 프로시저들을 사용할 수 있는 것들을 말한다.


Remote interfaces: Distributed object model에서 remote interface는 object들의 method들로 정의된다. 그것은 invocation이 가능하다 다른 프로세서들에서의 오브젝트들에 의해서, 정의된 input output을에 의해서. 이것이 metohod들과의 큰 차이점은 야규먼트와 결과가 오브젝트를 통과할수 있다는 것이다. 더구나, reference들 또한 그냥 통과댈수 있다. 이것은 포인터 충돌을 발생시키지 않는다. 이것은 상세한 메모리 위치를 참조한다. 


remote interface나 service interface 모두 직접적으로 변수에 접근 하는 것은 아니다. 그것은 object variable들의 인스턴스에 직접적으로 접근 하는 것이 된다. 


Interface definition languages: RMI 매커니즘은 통합되었다 실제적인 프로그래밍 랭기지에, interface 정의를 위해서 충분히 설명이 되어 있다면, Input and output 파라메터들을 랭기지가 가지는 기본적인 사용 파라메터로 일대일 맵핑 시킬 수 있다. Java RMI의 RMI에 대한 예제이며, 이 게념에 객체지향 개념을 추가한 것이다. 이 방법 분산 어플리케이션의 모든 부분에 대해서 같은 랭기지쥐로  사용할때 유용하다. 그것은 local과 remote invocation시 하나의 랭기지로 작성을 할 수 있기 때문에 프로그래머에게 편리함을 재공 한다. 

  하지만, 많은 많은 존재하는 유용한 서비스들은 C++ 그리고 다른 언어로들로 작성되어져 있다.



5.2 Communication between distributed objects

 



+ Recent posts