2011-08-29 6 views
10

나는 내 마지막 해 컴퓨터 과학 프로젝트를 시작하고 있으며, 나는 나의 첫 걸음을 찾으려고 노력하고있다. 자세한 내용은 page 프로젝트로 이동하십시오.Java 분산 시스템

배경 : 분산 시스템에 대한 경험이 거의 없기 때문에 기본적으로 어떻게 이러한 도전에 직면해야합니까? 제가 생각해 낸 것은 시스템이 다음과 같이 작동해야한다는 것입니다 :

클라이언트는 처리 할 코드가 들어있는 파일이나 파일을 전송합니다. 이 코드는 특정 클래스 인 나에 의해 작성된 분산 알고리즘 인터페이스를 구현합니다. 서버는 클래스에서 객체를 생성합니다. 객체는 실행할 알고리즘을 담당합니다. 서버는 결과를 클라이언트에 리턴합니다. (나는 실제로 RMI에 대해 나중에 읽고 그것을 매우 비슷하게 보았다).

파일 보내기는 일반적인 네트워크 I/O입니다. 실제 문제는 개체를 만들고 런타임에 미리 정의 된 인터페이스로 사용하는 것입니다.

질문 :

  1. 내가 반사 도전처럼 소리를 제시 도전이 맞습니까?
  2. 구현 방법에 대한 첫 번째 팁이 있습니까?

일부 분산 시스템 Java 기술을 검색하기 위해 RMI, TRMI, LINDA, CORBA, JINI 및 기타 여러 가지가 있습니다. RMI는 내가 가장 모아 놓은 솔루션과 비슷하기 때문에 가장 매력적이지만, 오래된 제품이기도합니다.

  1. 이 작업을 완료하는 데 도움이 될 것으로 생각되는 라이브러리에는 어떤 것이 있습니까? 기억 나는 컴퓨터 과학 학생이기 때문에 상자 솔루션을 완벽하게 사용하지 못해 교수님을 고수 할 수 없습니다.
  2. RMI가 오래 되었습니까? 더 좋은 해결책이 있습니까?
  3. TRMI에 대한 포괄적 인 자습서가 있습니까?

내 논리를 잘못 찾은 경우 문제를 해결하십시오.

주제에 관해 더 많은 조언이 있다면 논의해야한다고 생각하는 부분에 언제든지 연락하십시오.

+2

RMI는 Java에서 프로세스 간 통신의 기본값입니다. Java의 시작부터 사용 가능하고 세련되어 왔기 때문에 "오래된"것입니다. 요구 사항/교수에 따라 [Hadoop] (http : //hadoop.apache.org /) 또는 적어도 거기에서 영감을 얻으십시오. –

+0

성숙한 사람보다 위대하다면. 나는 아주 오래된 문서를 발견 했으므로 나의 관점에서 나는 진화하지 않았다고 생각했다. 시간이 지남에 따라 도서관의 발전을 설명하는 링크가 있습니까? – qballer

+0

RMI (* 원격 메소드 호출 *)은 라이브러리가 아닙니다. 그것은 일종의 기술이고 JRE/JDK의 일부입니다. –

답변

1

당신은 this example를 사용하고 (당신이 디스크에 클래스 파일을 저장 한 다음 URLClassLoader의를 사용하여로드 할 수 있습니다. 당신이 디스크에 기록 할 수없는 경우 실행을위한 클래스 파일을 보낼 수 있습니다, McDowell은 a suggestion입니다.)

의사 소통에는 선택할 수있는 것이 많이 있습니다. 여러분이 생각할 수있는 한 가지는 메시지를 동기 또는 비동기로 전달할 것인지 여부입니다. RMI와 같은 동기식 메시징에 대해서는 아무 문제가 없지만 비동기식 솔루션은 최근에 "뜨겁다"고 생각할 수도 있습니다. 아니면 HTTP 나 그와 비슷한 것을 가지고 자신 만의 프로토콜을 사용할 수도 있습니다.

재미있는 일은 노드간에 데이터를 배포하고 이러한 분산 된 데이터에 대해 알고리즘을 실행 한 다음 결과를 결합하는 것입니다. 이 경우 사용자는 두 개의 알고리즘을 지정합니다. 하나는 데이터를 생성하고 다른 하나는 결과를 집계합니다.

+0

URLClassLoader 래퍼를 사용하여 코드를로드하려면 답변을 선택하십시오. – qballer

5

라이브러리 또는 기술 권장 사항에 대한 정보가 충분하지 않습니다.

  • 서버가 파일를 전송) - 보통은 서버과에 요청을 보내는 클라이언트이다, 그래서 나는 당신의 질문의 "추가 팁"부분에 집중하고 싶습니다 서버가 응답을 생성합니다. 당신은 그 대회를 따라야합니다.
  • 파일을 실행해야합니다. - 파일을 실행할 수 없습니다. 파일에는 인터프리터 또는 컴퓨터에서 실행할 수있는 스크립트 또는 이진 코드가 포함될 수 있습니다. 이유가 까다로운 이유 : 파일의 내용 (파싱, 컴파일, 해석, 링크 등)을 수행해야하는 이유
  • 파일이 구현됩니다.] 인터페이스 - 위 참조, 파일은 아무 것도 구현하지 않습니다.
  • 클라이언트는 - 인터페이스 인터페이스를 실행하거나 실행할 수 없습니다. 서버에 대한 알고리즘의
  • 반환 결과 - 위에서 언급 등 : 보통은 서버에 파일 ("요청")를 보낼 것 클라이언트입니다. 그런 다음 서버는 파일을 가져 와서 파일 컨텐츠를 기반으로 계산을 수행하고 결과 ("응답")를 클라이언트에 리턴합니다.

원격 메소드 호출 RMI와

우리가 일반적으로 다음과 같은 시나리오를 가지고, • 클라이언트원격 메소드를 호출하려고합니다. 클라이언트는 인터페이스와 서버 주소를 알고 있습니다. 서버 에는 해당 인터페이스에 대한 구현 인이 있습니다. 이제 클라이언트는 서버에 접속하여 해당 서버의 메소드를 호출합니다.

프로젝트의 경우 다소 다릅니다. 클라이언트에는 알고리즘 (Java 소스 파일 또는 컴파일 된 클래스 파일) 구현이 있으며 하나 이상의 서버로 전송하려고합니다. 서버는 파일을 처리하고 일부 입력 (슬라이스)에 대해 알고리즘을 실행하고 결과를 반환합니다.

RMI 은 파일 전송의 후보가 될 수 있지만 (알고리즘) 메소드 호출의 후보는 아닙니다. 원격 방법은 (우리가 자바 소스 파일을 보내 가정) 그렇게 볼 수 있었다 :

public Result process(String javaSource, Data data); 
+0

자세한 답변을 보내 주셔서 감사합니다. 당신이 제공 한 용어 교정에 관해서 나는 그들과 동의합니다. 필자가 의도 한 바를 명확히하기 위해 클라이언트가 보내고 사용자가 작성한 코드가 나에 의해 작성된 인터페이스를 구현한다는 것입니다. 그 구현의 객체 (서버 상에)를 생성하고 인터페이스를 사용하여 알고리즘을 실행하고 싶습니다. 그렇게하는 방법에 대해 더 자세히 설명해 주시겠습니까? 내가 반사에 대해 심판 한 것. – qballer

1

또한 MTOM이 방법을보다 효율적으로 전송 바이너리 컨텐츠를 제공합니다 .. SOAP 기반의 웹 서비스에보고하십시오.

감사합니다 ..

+1

*** 간단한 *** 개체 액세스 프로토콜, 참으로. – bdares

+2

SOAP은 1.2 이후의 두문자어입니다 ... 감사합니다 ... –

관련 문제