KR100673627B1 - 분산 처리 시스템에서 메세지 통과 커널을 갖는클러스터형 엔터프라이즈 java™ - Google Patents

분산 처리 시스템에서 메세지 통과 커널을 갖는클러스터형 엔터프라이즈 java™ Download PDF

Info

Publication number
KR100673627B1
KR100673627B1 KR1020017005752A KR20017005752A KR100673627B1 KR 100673627 B1 KR100673627 B1 KR 100673627B1 KR 1020017005752 A KR1020017005752 A KR 1020017005752A KR 20017005752 A KR20017005752 A KR 20017005752A KR 100673627 B1 KR100673627 B1 KR 100673627B1
Authority
KR
South Korea
Prior art keywords
processing device
delete delete
software
server
java
Prior art date
Application number
KR1020017005752A
Other languages
English (en)
Other versions
KR20010099790A (ko
Inventor
야곱딘비.
랭젠아노알.
Original Assignee
비이에이 시스템즈 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 비이에이 시스템즈 인코포레이티드 filed Critical 비이에이 시스템즈 인코포레이티드
Publication of KR20010099790A publication Critical patent/KR20010099790A/ko
Application granted granted Critical
Publication of KR100673627B1 publication Critical patent/KR100673627B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • G06F9/548Object oriented; Remote method invocation [RMI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/465Distributed object oriented systems

Abstract

클러스터형 엔터프라이즈 JavaTM 분산 처리 시스템이 개시된다. 이 분산 처리 시스템은 통신 매체에 결합된 제 1, 2 컴퓨터를 포함한다. 제 1 컴퓨터는 JavaTM 가상 머신(JVM) 및 메세지들을 전송하기 위한 커널 소프트웨어층을 포함하며, 이 커널 소프트웨어층은 원격 JavaTM 가상 머신(RJVM)을 포함한다. 제 2 컴퓨터는 JVM, 및 RJVM을 갖는 커널 소프트웨어층을 포함한다. 메세지들은 제 1 컴퓨터의 RJVM과 JVM을 통해 제 2 컴퓨터의 JVM과 RJVM에 전송된다. 메세지들은 중간 서버를 통해 전송되거나, 또는 네트워크 재구성후 재라우팅될 수 있다. 각 컴퓨터는, 부하 밸런싱 소프트웨어 컴포넌트 및 페일오버 소프트웨어 컴포넌트를 포함하는 복사 핸들러를 갖는 스마트 스터브를 포함한다. 각 컴퓨터는 노드에 스마트 스터브들의 풀을 저장하기 위한 복사된 서비스 네이밍 트리를 포함한다. 컴퓨터들은 스테이트리스, 스테이트리스 팩토리, 또는 스테이트풀 프로그래밍 모델로 프로그램될 수 있다. 클러스터형 엔터프라이즈 JavaTM 분산 처리 시스템은 확장성 및 폴트 허용도를 개선할 수 있다.
분산 처리 시스템, 클러스터, 엔터프라이즈, 자바, 스마트 스터브, 커널층

Description

분산 처리 시스템에서 메세지 통과 커널을 갖는 클러스터형 엔터프라이즈 JAVA™{CLUSTERED ENTERPRISE JAVA™ HAVING A MESSAGE PASSING KERNEL IN A DISTRIBUTED PROCESSING SYSTEM}
본 발명은 분산 처리 시스템들에 관한 것으로서, 특히 분산 처리 시스템들에서의 컴퓨터 소프트웨어에 관한 것이다.
관련 출원들
본 출원은 1998년 11월 5일 출원된 미국 가 특허 출원 제60/107,167호의 이득을 주장한다.
하기의 동시 계류중인 미국 특허 출원들은 본 출원의 양수인에게 양도되었으며, 이들은 본원의 참조로서 인용된다:
(A) 명칭이 "분산 처리 시스템에서의 스마트 스터브 또는 엔터프라이즈 JAVATM 빈(A SMART STUB OR ENTERPRISE JAVATM BEAN IN A DISTRIBUTED PROCESSING SYSTEM)"이며, 딘 비. 야곱(Dean B. Jacobs) 및 에릭 엠. 핼펀(Eric M. Halpern)에 의해 일 출원된 미국 특허 제 호(대리인 참조 No. BEAS1029);
(B) 명칭이 "분산 처리 시스템에서의 복사된 네이밍 서비스(A DUPLICATED NAMING SERVICE IN A DISTRIBUTED PROCESSING SYSTEM)"이며, 딘 비. 야곱(Dean B. Jacobs) 및 에릭 엠. 핼펀(Eric M. Halpern)에 의해 일 출원된 미국 특허 제 호(대리인 참조 No. BEAS1030).
(C) 초기 명칭이 "안전 분산 처리 시스템에서의 클러스터형 엔터프라이즈 JAVATM(CLUSTERED ENTERPRISE JAVATM IN A SECURE DISTRIBUTED PROCESSING SYSTEM)"이며, 딘 비. 야곱(Dean B. Jacobs) 및 아노 알. 랑젠(Anno R. Langen)에 의해 일 출원된 미국 특허 제 호(대리인 참조 No. BEAS1031).
분산 처리 시스템에는 몇 가지의 형태가 있다. 일반적으로, 분산 처리 시스템은, 통신 매체에 결합된 2개의 컴퓨터들과 같은 다수의 처리 장치들을 포함한다. 통신 매체들은 유선 매체들, 무선 매체들, 또는 이서넷 국부 영역 네트워크 또는 셀룰러 네트워크와 같은 이들의 결합을 포함할 수 있다. 분산 처리 시스템에서, 적어도 하나의 처리 장치는 통신 매체 상의 정보를 다른 처리 장치에 전송할 수 있다.
도 1a에 도시된 클라이언트/서버 아키텍쳐(110)는 한 타입의 분산 처리 시스템이다. 이 클라이언트/서버 아키텍쳐(110)는 클라이언트(105) 및 애플리케이션 서버(103)로서 도시된 적어도 2개의 처리 장치들을 포함한다. 클라이언트(108)와 같은 부가적인 클라이언트들 또한 통신 매체(104)에 결합될 수 있다.
전형적으로, 서버(103)는 비즈니스 논리를 호스트하고, 그리고/또는 클라이언트(103) 그리고/또는 클라이언트(108)와 같은 다른 처리 장치에 서비스를 제공할 때 트랜잭션들을 조정한다. 애플리케이션 서버(103)는 전형적으로 어떠한 서비스를 제공하기 위한 소프트웨어로 프로그램된다. 소프트웨어는, 도 1a 및 1b에 도시된 엔터프라이즈 JAVATM 빈(bean) ("EJB")(100b)과 같은 다양한 프로그래밍 모델들을 이용하여 프로그램될 수 있다. 서비스는, 예를 들어 데이터베이스로부터의 데이터 검색 및 전송, 이미지의 제공 그리고/또는 방정식의 계산을 포함한다. 예를 들어, 서버(103)는 클라이언트(105)로부터의 요구에 응답하여 통신 매체(102)를 통해 불변 기억장치(persistent storage)(101)의 데이터베이스(101a)로부터 데이터를 검색할 수 있다. 이후, 애플리케이션 서버(103)는 요구된 데이터를 통신 매체(104)를 통해 클라이언트(105)에 전송할 수 있다.
클라이언트는 서버로부터의 서비스를 이용하고 이 서비스를 요구할 수 있는 처리 장치이다. 종종, 사용자(106)는 클라이언트(105)와 대화를 하고, 클라이언트(105)로 하여금 통신 매체(104)를 통해 애플리케이션 서버(103)로부터의 서비스를 요구하도록 할 수 있다. 클라이언트는 종종, 요구들을 수신하고 그 결과들을 디스플레이하는 등 최종 사용자들과 직접 대화를 취급한다.
애플리케이션 서버(103) 그리고/또는 클라이언트(105)를 프로그램시키는 데에는 다른 타입의 다양한 소프트웨어가 이용될 수 있다. 하나의 프로그래밍 언어는 JavaTM 프로그래밍 언어이다. JavaTM 애플리케이션 오브젝트 코드는 JavaTM 가상 머신("JVM")에 적재(load)된다. 이 JVM은 특정 머신 또는 처리 장치를 에뮬레이트하는 처리 장치 상에 적재되는 프로그램이다. JavaTM 프로그래밍 언어에 대한 보다 많은 정보들은 본원의 참조로서 인용되는 http://www.javasoft.com에서 얻을 수 있다.
도 1b는 몇 개의 JavaTM 엔터프라이즈 애플리케이션 프로그래밍 인터페이스("API")들(100)을 도시하는바, 이들은 관련 트랜잭션 시스템들, 데이터베이스들 및 네트워크 하부구조(infrastructure)들로부터 JavaTM 애플리케이션 코드를 독립적으로 유지시킬 수 있다. JavaTM 엔터프라이즈 API(100)들은, 예를 들어 원격 방법 호출("RMI")(100a), EJB(100b), 및 JavaTM 네이밍 및 디렉토리 인터페이스(JNDI)(100c)를 포함한다.
RMI(100a)는 하기에 설명되는 피어 투 피어 아키텍쳐(peer-to-peer architecture)에서 종종 이용되는 분산 프로그래밍 모델이다. 특히, 클래스들 및 인터페이스들의 세트는 일 JavaTM 오브젝트가 다른 JVM에서 실행중인 타 JavaTM 오브젝트의 공용(public) 방법을 호출할 수 있게 한다.
EJB(100b)의 인스턴스(instance)는 전형적으로 상기 설명한 클라이언트/서버 아키텍쳐에서 이용된다. EJB(100b)의 인스턴스는 소프트웨어 컴포넌트 또는 다른 컴포넌트들과 결합될 수 있는 캡슐화된(encapsulated) 애플리케이션 코드의 재사용가능한 프리 빌트 피스(pre-built piece)이다. 전형적으로, EJB(100b)의 인스턴스는 비즈니스 논리를 포함한다. 서버(103)에 저장된 EJB(100b)의 인스턴스는 전형적으로 지속성, 트랜잭션들, 동시발생, 쓰레딩(threading) 및 안전(security)을 관리한다.
JNDI(100c)는 JavaTM 소프트웨어 애플리케이션들에 디렉토리 및 네이밍 기능들을 제공한다.
클라이언트/서버 아키텍쳐(110)는 많은 단점들을 갖는다. 첫 번째, 이 아키텍쳐(110)는 서버(103)가 많은 연결들을 처리해야하기 때문에 양호하게 확장되지 못한다. 즉, 서버(103)에 부착될 수 있는 클라이언들의 수는 제한된다. 또한, 2배의 많은 처리 장치들(클라이언트들)을 부가한다고 해서 반드시 2배의 성능을 제공하는 것은 아니다. 두 번째, 클라이언트들(105 및 108)에 대한 애플리케이션 코드를 유지하기가 어렵다. 세 번째, 이 아키텍쳐(110)는 시스템 고장 또는 단일 포인트(point)의 고장에 영향을 받기 쉽다. 서버(101)가 고장나 백업이 불가능하면, 클라이언트(105)는 서비스를 받을 수가 없다.
도 1c는 멀티 티어 아키텍쳐(multi-tier architecture)(160)를 도시한다. 클라이언트들(151, 152)은 최종 사용자들과 직접 대화를 관리하여, 요구들을 수락하고 결과들을 디스플레이한다. 애플리케이션 서버(153)는 애플리케이션 코드를 호스트하고, 통신, 동기화 및 트랜잭션들을 조정한다. 데이터베이스 서버(154) 및 휴대용 기억 장치(155)는 데이터의 영구적인 트랜잭션 관리를 제공한다.
멀티 티어 아키텍쳐(160)는 상기 설명한 클라이언트/서버 아키텍쳐(110)와 유사한 단점을 갖는다.
도 2는 피어 투 피어 아키텍쳐(214)를 도시한다. 처리 장치들(216, 217 및 218)은 통신 매체(213)에 결합된다. 이 처리 장치들(216, 217 및 218)은 매체(213)를 통해 통신하기 위한 네트워크 소프트웨어(210a, 210b 및 210c)를 포함한다. 전형적으로, 피어 투 피어 아키텍쳐의 각 처리 장치는 유사한 처리 성능 및 애플리케이션들을 갖는다. 피어 투 피어 프로그램 모델들의 예로는 공통 오브젝트 요구 브로커 아키텍쳐("CORBA") 및 분산 오브젝트 컴포넌트 모델("DCOM") 아키텍쳐가 있다.
플랫폼 특정 분산 처리 시스템에서, 각 처리 장치는 동일한 운영 체제를 가동시킬 수 있다. 이에 의해, 처리 장치들 간의 통신을 위해, 공유 디스크들, 멀티 테일 디스크(multi-tail disk)들 및 고속 내부연결들과 같은 주변 하드웨어를 이용할 수 있다. 플랫폼 특정 분산 처리 시스템의 예로는 IBM
Figure 112004048104814-pct00001
사의 S/390
Figure 112004048104814-pct00002
병렬 시스플렉스(Sysplex)
Figure 112004048104814-pct00003
, 컴팩의 직렬 분할 히말라야(Tandem Division Himalaya) 서버, 컴팩의 디지털 장비사TM(DECTM) 분할 오픈VMSTM 클러스터 소프트웨어 및 마이크로소프트
Figure 112004048104814-pct00005
사의 Windows NT 클러스터 서비스(울프팩)가 있다.
도 2b는 트랜잭션 처리(TP) 아키텍쳐(220)를 도시한다. 특히, TP 아키텍쳐(220)는 BEA
Figure 112004048104814-pct00006
시스템즈 인코포레이티드의 TUXEDO
Figure 112004048104814-pct00007
아키텍쳐를 도시한다. TP 모니터(224)는 각각 통신 매체(280, 281 및 282)에 의해 처리 시스템들 ATM(221), PC(222), 및 TP 모니터(22)에 연결된다. ATM(221)은 자동화된 텔러 머신(teller machine)이 될 수 있고, PC(222)는 개인용 컴퓨터가 될 수 있고, 그리고 TP 모니터(223)는 다른 트랜잭션 프로세서 모니터가 될 수 있다. TP 모니터(224)는 통신 매체들(283, 284 및 285)에 의해 백-엔드 서버들(225, 226 및 227)에 결합된다. 서버(225)는 통신 매체(286)에 의해, 데이터베이스(289)를 저장하는 불변 기억장치(287)에 결합된다. TP 모니터(224)는, ATM(221), PC(222) 또는 TP 모니터(223)와 같은 처리 장치들로부터의 서비스 요구들을, 서버(225, 226 및 227)와 같은 다양한 서버들로 라우팅시키기 위한 워크 플로우 컨트롤러(224a)를 포함한다. 이 워크 플로우 컨트롤러(224a)는 (1) 서버들 간의 워크 부하의 밸런싱과, (2) 제한된 확장성(scalability) 또는 부가적인 서버들 그리고/또는 클라이언트의 허용, (3) 리던던트 백-엔드 서버들의 폴트 허용도(fault tolerance)(또는 서비스 요구는 워크 플로우 컨트롤러에 의해 고장나지 않은 서버에 전송될 수 있다), 및 (4) 백-엔드 서버들로의 동시 접속들의 수를 제한하기 위한 세션 집중을 가능하게 한다. 다른 트랜잭션 처리 아키텍쳐의 예로는 IBM
Figure 112004048104814-pct00008
사의 CICS
Figure 112004048104814-pct00009
, 컴팩의 직렬 분할 패스웨이/포드/TS, 컴팩의 DECTM ACMS 및 트랜쟈크(Transarc)사의 엔시나(Encina)가 있다.
TP 아키텍쳐(220) 또한 많은 단점들을 갖는다. 첫 번째, 단일 처리 장치 또는 TP 모니터(224)가 고장나면, 네트워크가 작동하지 않게 된다. 두 번째, TP 모니터(224)에 결합된 처리 장치들(서버들 및 클라이언트들 모두)의 확장성 및 수는 TP 모니터(224)의 하드웨어 및 소프트웨어에 의해 제한될 수 있다. 세 번째, 클라이언트의 요구를 서버에 라우팅시키는데 있어서의 유연성(affinity)이 제한될 수 있다. 예를 들어, 통신 매체(280)가 작동불가능하고, 통신 매체(290)가 작동가능하면, ATM(221)은 전형적으로 통신 매체(290)를 통해 서버(225)로부터 직접 서비스를 요구하지 못하고, TP 모니터(224)를 접속해야 한다. 네 번째, 클라이언트는 전형적으로 백-엔드 서버 또는 다른 처리 장치의 상태를 알지 못한다. 다섯 번째, 어떠한 산업 표준 소프트웨어 또는 API도 부하 밸런싱에 이용되지 못한다. 여섯 번째, 클라이언트가 유효 서비스를 가능하게 하는 적절한 정보를 가지고 있다고 하더라도, 이 클라이언트는 전형적으로 특정한 서버를 선택할 수 없다.
따라서, 종래 기술의 분산 처리 시스템들의 고유의 단점들을 갖지 않으면서 장점들 만을 갖는 분산 처리 시스템, 특히 분산 처리 시스템 소프트웨어를 제공하는 것이 바람직하다. 이 소프트웨어는, 전형적으로 클라이언트/서버, 멀티 티어, 또는 피어 투 피어 분산 처리 시스템들에서 이용되는 산업 표준 API를 고려해야 한다. 이 소프트웨어는 다양한 컴퓨터 프로그래밍 모델들을 지원해야 한다. 또한, 이 소프트웨어는 (1) 강화된 폴트 허용도, (2) 효율적인 확장성, (3) 유효한 부하 밸런싱 및 (4) 세션 집중 제어를 가능하게 해야 한다. 이 개선된 컴퓨터 소프트웨어는 재라우팅 또는 네트워크의 재구성을 가능하게 해야 한다. 또한, 이 컴퓨터 소프트웨어는 처리 장치의 상태를 결정할 수 있어야 한다.
개선된 분산 처리 시스템, 특히 분산 처리 시스템을 위한 컴퓨터 소프트웨어가 제공된다. 이 컴퓨터 소프트웨어는 효율적인 확장성을 가능하게 할 뿐 아니라 분산 처리 시스템의 폴트 허용도를 개선한다. 이 컴퓨터 소프트웨어는 효율적인 부하 밸런싱 및 세션 집중을 가능하게 한다. 이 컴퓨터 소프트웨어는 컴퓨터 네트워크의 재구성 또는 재라우팅을 지원한다. 이 컴퓨터 소프트웨어는 다양한 컴퓨터 프로그래밍 모델들을 지원하며, 클라이언트/서버 아키텍쳐 및 피어 투 피어 분산 처리 아키텍쳐 모두에서 이용되는 산업 표준 API의 이용을 허용한다. 이 컴퓨터 소프트웨어는 서버 또는 다른 처리 장치의 상태를 결정할 수 있게 한다. 이 컴퓨터 소프트웨어는 또한, 안전 모델을 포함하는 다양한 환경하에서의 메세지 전송을 지원한다.
본 발명의 일 양상에 따르면, 분산 처리 시스템은 제 1 처리 장치 및 제 2 처리 장치에 결합된 통신 매체를 포함한다. 제 1 처리 장치는 데이터 구조("RJVM1")를 갖는 제 1 커널 소프트웨어층을 포함하는 처리 장치("JVM1")를 에뮬레이트하는 제 1 소프트웨어 프로그램을 포함한다. 제 2 처리 장치는 데이터 구조("RJVM2")를 갖는 제 1 커널 소프트웨어층을 포함하는 처리 장치("JVM2")를 에뮬레이트하는 제 1 소프트웨어 프로그램을 포함한다. 제 1 처리 장치로부터의 메세지는 제 1 처리 장치의 제 1 커널 소프트웨어층과 제 1 소프트웨어 프로그램을 통해 제 2 처리 장치의 제 1 커널 소프트웨어층과 제 1 소프트웨어 프로그램에 전송되는 식으로 제 2 처리 장치에 전송된다.
본 발명의 다른 양상에 따르면, 제 1 처리 장치의 제 1 소프트웨어 프로그램은 JavaTM 가상 머신("JVM")이고, 제 1 처리 장치의 데이터 구조는 원격 JavaTM 가상 머신("RJVM")이다. 유사하게, 제 2 처리 장치의 제 1 소프트웨어 프로그램은 JVM이고, 제 2 처리 장치의 데이터 구조는 RJVM이다. 제 2 처리 장치의 RJVM은 제 1 처리 장치의 JVM에 대응한다.
본 발명의 다른 양상에 따르면, 제 1 처리 장치의 RJVM은 소켓 매니저 소프트웨어 컴포넌트, 쓰레드 매니저 소프트웨어 컴포넌트, 메세지 라우팅 소프트웨어 컴포넌트, 메세지 압축 소프트웨어 컴포넌트 그리고/또는 피어 중단(peer-gone) 검출 소프트웨어 컴포넌트를 포함한다.
본 발명의 다른 양상에 따르면, 제 1 처리 장치는 전송 제어 프로토콜("TCP"), 안전 소켓층("SSL"), 하이퍼텍스트 트랜스포트 프로토콜("HTTP") 터널링 및 인터넷 interORB 프로토콜("IIOP") 터널링으로 구성된 그룹으로부터 선택된 프로토콜을 이용하여 제 2 처리 장치와 통신한다.
본 발명의 다른 양상에 따르면, 제 1 처리 장치는 JavaTM 애플리케이션을 위한 메모리 기억장치를 포함한다.
본 발명의 다른 양상에 따르면, 제 1 처리 장치는 제 2 처리 장치의 피어이다. 또한, 제 1 처리 장치는 서버이며 제 2 처리 장치는 클라이언트이다.
본 발명의 다른 양상에 따르면, 제 2 통신 매체가 제 2 처리 장치에 결합된다. 제 3 처리 장치가 제 2 통신 매체에 결합된다. 제 3 처리 장치는 제 1 데이터 구조("RJVM1") 및 제 2 데이터 구조("RJVM2")를 갖는 커널 소프트웨어층을 포함하는 처리 장치("JVM3")를 에뮬레이트하는 제 1 소프트웨어 프로그램을 포함한다.
본 발명의 또 다른 양상에 따르면, 제 1 처리 장치는 복사 핸들러(replica-handler) 소프트웨어 컴포넌트를 갖는 스터브(stub)를 포함한다. 복사 핸들러 소프트웨어 컴포넌트는 부하 밸런싱 소프트웨어 컴포넌트 및 페일오버(failover)(고장 복구를 의미함) 소프트웨어 컴포넌트를 포함한다.
본 발명의 다른 양상에 따르면, 제 1 처리 장치는 엔터프라이즈 JavaTM 빈 오브젝트를 포함한다.
본 발명의 또 다른 양상에 따르면, 제 1 처리 장치는 트리의 노드에 저장된 스터브들의 풀(pool)을 갖는 네이밍 트리를 포함하고, 제 2 처리 장치는 이 네이밍 트리의 복사본(duplicate)을 포함한다.
본 발명의 또 다른 양상에 따르면, 제 1 처리 장치는 스테이트리스(stateless) 프로그램 모델로 코드화된 애플리케이션 프로그램을 포함하고, 이 애플리케이션 프로그램은 스테이트리스 세션 빈을 포함한다.
본 발명의 또 다른 양상에 따르면, 제 1 처리 장치는 스테이트리스 팩토리 프로그램 모델로 코드화된 애플리케이션 프로그램을 포함하고, 이 애플리케이션 프로그램은 스테이트풀(stateful) 세션 빈을 포함한다.
본 발명의 또 다른 양상에 따르면, 제 1 처리 장치는 스테이트풀 프로그램 모델로 코드화된 애플리케이션 프로그램을 포함하고, 이 애플리케이션 프로그램은 엔티티 세션 빈을 포함한다.
본 발명의 또 다른 양상에 따르면, 정보 저장 매체를 포함하는 물품이 제공된다. 이 물품은 메세지를 제 1 처리 장치의 RJVM으로부터 제 2 처리 장치의 RJVM에 전송하기 위한 제 1 세트의 디지털 정보를 포함한다.
본 발명의 또 다른 양상에 따르면, 상기 물품은 다수의 서비스 제공자들로부터 서비스 제공자를 선택하기 위한 부하 밸런싱 소프트웨어 프로그램을 갖는 스터브를 포함하는 제 1 세트의 디지털 정보를 포함한다.
본 발명의 또 다른 양상에 따르면, 상기 스터브는 다수의 서비스 제공자들로부터 잘못된 서비스 제공자를 제거하기 위한 페일오버 소프트웨어 컴포넌트를 갖는다.
본 발명의 또 다른 양상에 따르면, 부하 밸런싱 소프트웨어 컴포넌트는 특정한 서비스 제공자에 대한 유연성에 기초하여 서비스 제공자를 선택한다.
본 발명의 또 다른 양상에 따르면, 부하 밸런싱 소프트웨어 컴포넌트는 라운드 로빈 방식(round robin manner)으로 서비스 제공자를 선택한다.
본 발명의 또 다른 양상에 따르면, 부하 밸런싱 소프트웨어 컴포넌트는 서비스 제공자를 임의로 선택한다.
본 발명의 또 다른 양상에 따르면, 부하 밸런싱 소프트웨어 컴포넌트는 각 서비스 제공자의 부하에 기초하여 다수의 서비스 제공자들로부터 서비스 제공자를 선택한다.
본 발명의 또 다른 양상에 따르면, 부하 밸런싱 소프트웨어 컴포넌트는 요구된 데이터 타입에 기초하여 다수의 서비스 제공자들로부터 서비스 제공자를 선택한다.
본 발명의 또 다른 양상에 따르면, 부하 밸런싱 소프트웨어 컴포넌트는 물리적으로 가장 가까운 서비스 제공자에 기초하여 다수의 서비스 제공자들로부터 서비스 제공자를 선택한다.
본 발명의 또 다른 양상에 따르면, 부하 밸런싱 소프트웨어 컴포넌트는 각 서비스 제공자가 응답하는 시간에 기초하여 다수의 서비스 제공자들로부터 서비스 제공자를 선택한다.
본 발명의 또 다른 양상에 따르면, 상기 물품은 다수의 서비스 제공자들로부터 서비스 제공자를 선택하기 위한 엔터프라이즈 JavaTM 빈 오브젝트를 포함하는 제 1 세트의 디지털 정보를 포함한다.
본 발명의 또 다른 양상에 따르면, 스터브는 분산 처리 시스템의 처리 장치에 저장된다. 이 스터브는 서비스 제공자들의 리스트를 얻는 단계와, 이 서비스 제공자들의 리스트로부터 서비스 제공자를 선택하는 단계로 구성된 방법을 포함한다.
본 발명의 또 다른 양상에 따르면, 상기 방법은 또한 서비스 제공자들의 리스트로부터 잘못된 서비스 제공자를 제거하는 단계를 포함한다.
본 발명의 또 다른 양상에 따르면, 상기 장치는 제 1 처리 장치 및 제 2 처리 장치에 결합된 통신 매체를 포함한다. 제 1 처리 장치는 서비스 제공자에게 액세스하기 위한 원격 방법 호출(Remote Method Invocation)("RMI") 스터브를 포함하는 네이밍 트리를 저장한다. 제 2 처리 장치는 복사된 네이밍 트리 및 서비스 제공자를 갖는다.
본 발명의 또 다른 양상에 따르면, 상기 네이밍 트리는 현재 서비스 제공자들의 서비스 풀을 포함하는 노드를 갖는다.
본 발명의 또 다른 양상에 따르면, 상기 서비스 풀은 스터브를 포함한다.
본 발명의 또 다른 양상에 따르면, 분산 처리 시스템은 제 2 컴퓨터에 결합된 제 1 컴퓨터를 포함한다. 이 제 1 컴퓨터는 서비스 제공자를 액세스하기 위한 원격 호출 스터브를 포함하는 네이밍 트리를 구비한다. 제 2 컴퓨터는 복사된 네이밍 트리 및 서비스 제공자를 갖는다.
본 발명의 또 다른 양상에 따르면, 제 2 처리 장치에 결합된 제 1 처리 장치를 구비하는 분산 처리 시스템이 제공된다. 제 1 처리 장치는 JVM 및 제 1 RJVM을 포함하는 제 1 커널 소프트웨어층을 구비한다. 제 2 처리 장치는 제 1 JVM 및 제 2 RJVM을 포함하는 제 1 커널 소프트웨어층을 포함한다. 메세지는 제 1 JVM과 제 2 JV 사이에 이용가능한 소켓이 없을 때 제 1 처리 장치로부터 제 2 처리 장치에 전송될 수 있다.
본 발명의 또 다른 양상에 따르면, 제 1 처리 장치는 방화벽(firewall) 뒤에서 애플릿 안전 모델(applet security model) 하에서 작동하거나 또는 클라이언트이며, 제 2 처리 장치 또한 클라이언트이다.
본 발명의 다른 양상들 및 장점들은 첨부 도면을 참조하여 설명되는 하기의 상세한 설명 및 청구범위로부터 명확해질 것이다.
도 1a는 종래 기술에 따른 클라이언트/서버 아키텍쳐를 도시한다.
도 1b는 종래 기술에 따른 JavaTM 엔터프라이즈 API를 도시한다.
도 1c는 멀티 티어 아키텍쳐를 도시한다.
도 2a는 종래 기술에 따른 피어 투 피어 아키텍쳐를 도시한다.
도 2b는 종래 기술에 따른 트랜잭션 처리 아키텍쳐를 도시한다.
도 3a는 본 발명의 일 실시예의 단순화된 소프트웨어 블록도를 도시한다.
도 3b는 도 3a에 도시된 커널의 단순화된 소프트웨어 블록도를 도시한다.
도 3c는 클러스터형 엔터프라이즈 JavaTM 아키텍쳐를 도시한다.
도 4는 클러스터형 엔터프라이즈 JavaTM 네이밍 서비스 아키텍쳐를 도시한다.
도 5a는 스마트 스터브 아키텍쳐를 도시한다.
도 5b는 EJB 오브젝트 아키텍쳐를 도시한다.
도 6a는 부하 밸런싱 방법을 나타낸 제어 흐름도이다.
도 6b 내지 6g는 부하 밸런싱 방법들을 나타낸 제어 흐름도들이다.
도 7은 페일오버 방법을 나타낸 제어 흐름도이다.
도 8은 도 3 내지 5에 도시된 클러스터형 엔터프라이즈 JavaTM 아키텍쳐의 클라이언트/서버의 하드웨어 및 소프트웨어 컴포넌트들을 도시한다.
이제 본 발명은 도면을 참조하여 설명되는 하기의 상세한 설명으로부터 보다 명확히 설명될 것이다. 도면에서, 동일한 참조 부호들은 동일한 요소들을 나타낸다.
Ⅰ. 클러스터형 엔터프라이즈 JavaTM 분산 처리 시스템
A. 클러스터형 엔터프라이즈 Java TM 소프트웨어 아키텍쳐
도 3a는 본 발명의 실시예에 따른 클러스터형 엔터프라이즈 JavaTM 시스템의 처리 장치의 소프트웨어층들의 단순화된 블록도(380)를 도시한다. 클러스터형 엔터프라이즈 JavaTM 분산 처리 시스템에 대한 상세한 설명은 하기에 제공된다. 소프트웨어의 제 1 층은, 이서넷 국부 영역 네트워크와 같은 통신 매체를 통해 정보를 전송하고 수신하기 위한 통신 매체 소프트웨어 드라이버(351)를 포함한다. 전송 제어 프로토콜("TCP") 소프트웨어 컴포넌트(353) 및 인터넷 프로토콜("IP") 소프트웨어 컴포넌트(352)를 포함하는 운영 체제(310)는 정보의 패키지들 또는 블록들을 특정한 포맷으로 검색 및 전송하기 위한 상위 소프트웨어층이다. 이러한 "상위" 소프트웨어층은 일반적으로 1개 또는 그 이상의 "하위" 소프트웨어층들 또는 소프트웨어 컴포넌트들을 이용하거나 또는 이들을 액세스하는 소프트웨어 컴포넌트로서 정의된다. 이후, JVM(354)이 실행된다. 그런 다음, 원격 JavaTM 가상 머신(356)을 갖는 커널(355)이 JVM(354) 상에 층을 이룬다. 하기에서 상세히 설명되는 커널(355)은 클러스터형 엔터프라이즈 JavaTM 분산 처리 시스템의 처리 장치들 간에 메세지들을 전송하는 데에 이용된다. 원격 방법 호출(357) 및 엔터프라이즈 JavaTM 빈(358)은 커널(355)의 상위 소프트웨어층들이다. EJB(358)는 다양한 JavaTM 애플리케이션들을 위한 컨테이너이다.
도 3b는 도 3a에 예시한 커널(355)의 상세도이다. 이 커널(355)은 소켓 매니저 컴포넌트(363), 쓰레드 매니저 컴포넌트(364) 및 RJVM(356)을 포함한다. 이 RJVM(356)은 메세지 라우팅 소프트웨어 컴포넌트(360), 단축 테이블(abbreviation table)(161c)을 포함하는 메세지 압축 소프트웨어 컴포넌트(361) 및 피어 중단 검출 소프트웨어 컴포넌트(362)를 포함하는 데이터 구조이다. RJVM(356) 및 쓰레드 매니저 소프트웨어 컴포넌트(364)는 소켓 매니저 소프트웨어 컴포넌트(363)와 대화하여 처리 장치들 간에 정보를 전송한다.
B. 분산 처리 시스템
도 3c는 클러스터형 엔터프라이즈 JavaTM 분산 처리 시스템(300)의 단순화된 블록도이다. 처리 장치들은 통신 매체(301)에 결합된다. 이 통신 매체(301)는 유선 그리고/또는 무선 통신 매체 또는 이들의 결합이 될 수 있다. 일 실시예에서, 통신 매체(301)는 국부 영역 네트워크(LAN)이다. 다른 실시예에서, 통신 매체(301)는 인터넷 또는 월드 와이드 웹과 같은 전세계 네트워크(WAN)이다. 또 다른 실시예에서, 통신 매체(301)는 LAN 및 WAN 모두이다.
다른 타입의 다양한 처리 장치들이 통신 매체(301)에 결합될 수 있다. 일 실시예에서, 처리 장치는 도 8에 도시되어 하기 설명되는 범용 컴퓨터(100)가 될 수 있다. 당업자라면 도 8 및 그에 대한 설명이, 다른 소프트웨어 및 하드웨어 구성들을 갖는 다수의 다른 타입의 처리 장치들이 본 발명의 실시예에 따라 이용될 수 있는, 한 특정 타입의 처리 장치를 설명하고 있다는 것을 알 수 있을 것이다. 다른 실시예에서, 처리 장치는 프린터, 포켓용 컴퓨터, 랩탑 컴퓨터, 스캐너, 셀룰러폰, 무선 호출기 또는 등가물이 될 수 있다.
도 3c는 서버들(302 및 303)이 통신 매체(301)에 결합되는 본 발명의 일 실시예를 도시한다. 서버(303)는 또한 통신 매체(305)에 결합되는바, 이 통신 매체(305)는 통신 매체(301)에 관련하여 상기 설명된 것과 유사한 실시예들을 가질 수 있다. 클라이언트(304) 또한 통신 매체(305)에 결합된다. 다른 실시예에서, 클라이언트(304)는 도 3c에서 점선 박스로 도시한 바와 같이 통신 매체(301)에 결합될 수 있다. 이해될 사항으로서, 다른 실시예에서, 서버(302)는 (1) 클라이언트 및 서버 모두이거나, 또는 (2) 클라이언트이다. 유사하게, 도 3은 3개의 처리 장치들이 제시되는 실시예를 도시하는바, 여기서 본 발명의 다른 실시예들은 타원으로 도시된 다수의 다른 처리 장치들 또는 통신 매체들을 포함한다.
서버(302)는 네트워크 소프트웨어(302a) 및 네트워크 소프트웨어(303a)를 각각 이용함으로써, 정보를 통신 매체(301)를 통해 서버(303)에 전송한다. 일 실시예에서, 네트워크 소프트웨어들(302a, 303a 및 304a)은 통신 매체 소프트웨어 드라이버(351), 전송 제어 프로토콜 소프트웨어(353) 및 인터넷 프로토콜 소프트웨어(352)("TCP/IP")를 포함한다. 클라이언트(304)는 또한 통신 매체(305)를 통해 서버(303)에 정보를 전송하기 위한 네트워크 소프트웨어(304a)를 포함한다. 서버(303)의 네트워크 소프트웨어(303a)는 또한 통신 매체(305)를 통해 클라이언트(304)에 정보를 전송하는 데에 이용된다.
본 발명의 일 실시예에 따르면, 클러스터형 엔터프라이즈 JavaTM 아키텍쳐(300)의 각 처리 장치는 멀티 티어 및 피어 투 피어 기능 모두를 지원하는 메세지 통과 커널(message-passing kernel)(355)을 포함한다. 커널은 처리 장치 상의 다른 소프트웨어 프로그램들에 기본 서비스들을 제공하는 데에 이용되는 소프트웨어 프로그램이다.
구체적으로, 서버(302), 서버(303) 및 클라이언트(304)는 각각 커널들(302b, 303b 및 304b)을 갖는다. 특히, 2개의 JVM들이 서로 대화하기 위해서, 이들이 클라이언트들이건 서버들이건에 관계없이, 각 JVM은 다른 한측을 나타내는 RJVM을 구성한다. 메세지들은 한 측의 상위층으로부터, 대응하는 RJVM, 통신 매체, 피어 RJVM을 통해 다른 측의 상위층에 전달된다. 다양한 실시예들에서, 메세지들은 여러 가지 다른 프로토콜들을 이용하여 전송될 수 있는바, 이러한 프로토콜들은 전송 제어 프로토콜/인터넷 프로토콜("TCP/IP"), 안전 소켓층("SSL"), 하이퍼텍스트 트랜스포트 프로토콜("HTTP") 터널링 및 인터넷 interORB 프로토콜("IIOP") 터널링 및 이들의 결합을 포함하지만, 오직 이것들에만 한정되지는 않는다. RJVM들 및 소켓 매니저들은 이러한 프로토콜들에 기초하는 소켓들을 생성 및 유지한 다음, 이들을 상위층들의 모든 오브젝트들 간에 공유시킨다. 소켓은 분산 처리 시스템의 처리 장치들 간의 말단을 나타내는 논리 위치이다. 커널은 실행 쓰레드들의 풀을 유지하고, 쓰레드 매니저 소프트웨어 컴포넌트(364)는 소켓 판독 및 요구 실행 동안 쓰레드들을 다중화한다. 쓰레드는 실행하는 프로그램 코드 세그먼트들 또는 기능들의 시퀀스이다.
예를 들어, 서버(302)는 JVM1 및 JavaTM 애플리케이션(302c)을 포함한다. 서버(302)는 또한 서버(303)의 JVM2를 나타내는 RJVM2를 포함한다. 메세지가 서버(302)로부터 서버(303)에 전송되어야 하는 경우, 메세지는 서버(302)의 RJVM2를 통해 서버(303)의 RJVM1에 전송된다.
C. 메세지 전송
클러스터형 엔터프라이즈 JavaTM 네트워크(300)는 중간 서버를 통해 메세지를 전송할 수 있다. 이러한 기능은 클라이언트가 프론트-엔드 게이트웨이를 통해 백-엔드 서버로부터 서비스를 요구하는 경우에 중요하다. 예를 들어, 서버(302)(클라이언트(302)) 및 특히 JVM1으로부터의 메세지는 서버(303)(프론트-엔드 게이트웨이) 또는 JVM2를 통해 클라이언트(304)(백-엔드 서버(304)) 또는 JVM3에 전송될 수 있다. 이러한 기능은 세션 집중을 제어하거나 또는 얼마나 많은 연결들이 서버와 여러 클라이언트들 사이에 설정되었는지 제어하는 데에 있어서 중요하다.
또한, 메세지 전송은 소켓이 2개의 JVM들 사이에서 생성될 수 없는 상황에서 이용될 수 있다. 예를 들어, 메세지 송신기는, 소켓이 초기 서버에 대해 생성되지 못하는 애플릿 안전 모델하에서 작동된다. 애플릿 안전 모델에 대한 상세한 설명은 본원의 참조로서 인용되는 http://javasoft.com에서 제공된다. 다른 예들은 메세지의 수신기가 방화벽 뒤에 있을 때를 포함한다. 또한, 하기에 설명되는 바와 같이, 메세지 전송은, 송신기가 클라이언트이고 수신기 또한 클라언트이며, 이에 따라 유입되는 소켓들을 수락할 수 없는 경우에 적용가능하다.
예를 들어, 메세지가 서버(302)로부터 클라이언트(304)에 전송되는 경우, 이 메세지는 서버(303)를 통해 라우팅되어야 한다. 구체적으로, 302f로 도시된 바와 같이, 서버(302) 내에서 (클라이언트(304)를 나타내는) RJVM3와 서버(303)를 나타내는 RJVM2의 사이에서 메세지 핸드오프가 일어난다. 메세지는 서버(302)의 RJVM2와 서버(302)의 RJVM1 사이에서 소켓들(302e)을 이용하여 전송된다. 이후, 메세지는 점선(303f)으로 도시한 바와 같이, 서버(303)의 RJVM1에서 RJVM3으로 핸드오프된다. 이후, 메세지는 서버(303)의 RJVM3와 클라이언트(304)의 RJVM2의 소켓들 간에 전달된다. 이후, 메세지는 점선(304f)으로 도시한 바와 같이 클라이언트(304)의 RJVM2로부터 클라이언트(304)의 RJVM1으로 전달된다.
D. 재라우팅
클라이언트/서버의 RJVM은 언제라도 다른 RJVM들에 대해 통신 경로들 또는 통신 매체들을 스위치시킬 수 있다. 예를 들어, 클라이언트(304)가 서버(302)에 대한 직접 소켓을 생성하는 경우, 서버(302)는 서버(303)를 통해 메세지를 전송하는 대신에 소켓을 이용하여 시작할 수 있다. 이 실시예는 클라이언트(304)를 나타내는 점선 박스에 의해 도시된다. 일 실시예에서, RJVM들에 의한 메세지 전송을 이용하게 되면, 네트워크 재구성후, 신뢰적이고 순서적(in-order)인 메세지 전달을 보장한다. 예를 들면, 클라이언트(304)가 도 3에 도시된 통신 매체(305) 대신 통신 매체(301)에 대해 재구성된 경우이다. 다른 실시예에서, 메세지는 순서대로 전송되지 않을 수 있다.
RJVM은 라우팅을 통해 수행되는 몇 개의 엔드-투-엔드 오퍼레이션(end-to-end operation)들을 수행한다. 먼저, RJVM은 각 클라이언트/서버가 갑자기 정지하게 되는 때를 검출한다. 일 실시예에서, 도 3b에 도시한 바와 같이, 피어 중단 선택 소프트웨어 컴포넌트(362)가 이러한 기능을 책임진다. 일 실시예에서, RJVM은 소정의 시간 동안 어떠한 다른 메세지도 전송되지 않을 때에 다른 클라이언트들/서버들에 하트비트 메세지(heartbeat message)를 전송한다. 클라이언트/서버가 소정의 카운트 시간 동안 하트비트 메세지를 수신하지 못한다면, 그 하트비트를 전송한 고장난 클라이언트/서버가 검출된다. 일 실시예에서, 고장난 클라이언트/서버는 접속 타임 아웃에 의해 검출되거나, 또는 이 고장난 클라이언트/서버에 의해 소정의 시간 동안 어떠한 메세지도 전송되지 않을 경우에 검출된다. 다른 실시예에서, 고장된 소켓은 고장난 서버/클라이언트를 나타낸다.
두 번째로, 메세지의 직렬화(serialization) 동안, RJVM들, 특히 메세지 압축 소프트웨어(360)는 대개 메세지 크기를 줄이기 위해 전송된 데이터 값들을 단축시킨다. 이를 달성하기 위해, 각각의 JVM/RJVM 쌍은 매칭하는 단축 테이블들을 유지한다. 예를 들어, JVM1은 단축 테이블을 포함하고, RJVM1은 매칭하는 단축 테이블을 포함한다. 중간 서버들 간에 메세지를 전송하는 동안, 메세지의 본체(body)는 경로상의 중간 서버에서 비직렬화(deserialization)되지 않는다.
E. 멀티 티어/피어 투 피어 기능
클러스터형 엔터프라이즈 JavaTM 아키텍쳐(300)는 멀티 티어 및 피어 투 피어 프로그래밍을 허용한다.
클러스터형 엔터프라이즈 JavaTM 아키텍쳐(300)는 멀티 티어 분산 처리 아키텍쳐와 일치하는 클라이언트/서버 프로그래밍을 위한 명확한 신택스(syntax)를 지원한다. 일예로서, 하기의 클라이언트측의 코드 프래그먼트(code fragment)는 서버의 로그 파일에 정보 메세지를 기록한다.
Figure 112001010499918-pct00010
제 1 라인은 t3 프로토콜을 이용하여 acme 서버와의 세션을 확립한다. RJVM들이 아직 존재하지 않으면, 각 JVM은 다른 것에 대한 RJVM을 구성하고, 관련 TCP 소켓이 확립된다. 이 세션의 클라이언트측 표현(representation)-T3 클라이언트 오브젝트- 및 서버측 표현은 이러한 RJVM들을 통해 통신한다. 서버측은 데이터베이스 액세스, 원격 파일 액세스, 워크스페이스들, 이벤트들 및 로깅(logging)을 포함하는 다양한 서비스들을 지원한다. 제 2 라인은 LogService 오브젝트를 얻고, 제 3 라인은 메세지를 기록한다.
클러스터형 엔터프라이즈 JavaTM 컴퓨터 아키텍쳐(300)는 또한 피어 투 피어 분산 처리 아키텍쳐와 일치하는 서버 중립 신택스도 지원한다. 예로서, 하기의 코드 프래그먼트는 서버 상에서 JNDI 순응(JNDI-compliant) 네이밍 서비스들로부터 RMI 오브젝트들에 대한 스터브를 얻고, 그 방법들중 하나를 호출한다.
Figure 112001010499918-pct00011
일 실시예에서, JNDI 네이밍 콘텍스트(context)들은 원격 액세스를 실행하기 위해 RMI 오브젝트들로서 패키지된다. 따라서, 상기 코드는 일종의 RMI 부트스트랩핑(bootstrapping)을 나타낸다. 첫 번째 4개의 라인들은 acme 서버 상의 초기 콘텍스트에 관한 RMI 스터브를 얻는다. RJVM들이 아직 존재하지 않는 다면, 각 측은 다른 것에 대한 RJVM을 구성하고, t3 프로토콜에 대한 관련 TCP 소켓이 확립된다. 호출자측 오브젝트-RMI 스터브-와 호출된측 오브젝트-RMI impl-는 RJVM들을 통해 통신한다. 다섯 번째 라인은, 다른 RMI 오브젝트, Example을 acme.eng.example의 네임에서 검색하고, 여섯 번째 라인은 예시적인 방법들중 하나를 호출한다. 일 실시예에서, Example impl은 네이밍 서비스와 동일한 처리 장치 상에 없다. 다른 실시예에서, Example impl은 클라이언트 상에 있다. Example 오브젝트의 호출은, 이들이 아직 존재하지 않는 경우 적절한 RJVM들의 생성을 야기시킨다.
Ⅱ. 복사 인식(Replica-Aware) 또는 스마트 스터브들/EJB 오브젝트들
도 3c에서, 처리 장치는 RMI 그리고/또는 EJB 오브젝트들을 복사함으로써 아키텍쳐(300)의 다른 처리 장치들에 서비스를 제공할 수 있다. 따라서, 아키텍쳐(300)는 쉽게 확장가능하며 폴트 허용도가 개선된다. 복사된 RMI 그리고/또는 EJB 오브젝트들을 기존의 처리 장치 또는 새롭게 부가된 처리 장치에 부가함으로써, 부가적인 서비스가 아키텍쳐(300)에 쉽게 부가될 수 있다. 또한, RMI 그리고/또는 EJB 오브젝트들은 아키텍쳐(300)에 대해 전체적으로 복사될 수 있기 때문에, 단일 처리 장치, 다중 처리 장치들, 그리고/또는 통신 매체가 고장날 수 있기는 하지만, 아키텍쳐(300)를 작동불가능하게 하거나 기능을 상당히 저하시키지는 않는다.
도 5a는 아키텍쳐(500)의 복사 인식("RA") 또는 스마트 스터브(580)를 도시한다. 이 아키텍쳐(500)는 통신 매체(501)에 결합된 클라이언트(504)를 포함한다. 서버들(502 및 503)은 각각 통신 매체(501)에 결합된다. 불변 기억 장치(509)는 각각 통신 매체(560 및 561)에 의해 서버들(502 및 503)에 결합된다. 다양한 실시예들에서, 통신 매체(501, 560 및 561)는 상기 설명한 바와 같이 유선 그리고/또는 무선 통신 매체들이 될 수 있다. 유사하게, 일 실시예에서, 클라이언트(504), 서버(502) 및 서버(503)는 상기 설명한 바와 같이 클라이언트들 및 서버들이 될 수 있다. 당업자라면, 다른 실시예들에서, 다수의 다른 서버들 및 클라이언트들이 타원형으로 나타낸 바와 같이 아키텍쳐(500)에 포함될 수 있다는 것을 알 수 있을 것이다. 또한, 상기 설명한 바와 같이, 다른 실시예들에서는, 클라이언트(504), 서버(502), 서버(503)의 하드웨어 및 소프트웨어 구성이 도 8을 참조하여 하기 설명된다.
RA RMI 스터브(580)는, 서비스 제공자들에 대한 모든 것을 알아낼 수 있고 부하 밸런싱 방법(507) 그리고/또는 페일오버 방법(508)에 기초하여 이들 사이를 스위치시킬 수 있는 스마트 스터브이다. 일 실시예에서, RA 스터브(580)는 적절한 부하 밸런싱 방법(507) 그리고/또는 페일오버 방법(507)을 선택하는 복사 핸들러(506)를 포함한다. 다른 실시예에서는, 단일 부하 밸런싱 방법 그리고/또는 단일 페일오버 방법이 실행된다. 다른 실시예들에서, 복사 핸들러(506)는 다수의 부하 밸런싱 방법들 그리고/또는 다수의 페일오버 방법들 및 이들의 결합을 포함할 수 있다. 일 실시예에서, 복사 핸들러(506)는 다음과 같은 인터페이스를 실행한다.
Figure 112001010499918-pct00012
방법을 실행하기 직전에, RA 스터브(580)는 부하 밸런싱 방법(507)을 호출하는바, 이는 현재의 서버를 취해 대체물(replacement)을 복귀시킨다. 예를 들어, 클라이언트(504)는 데이터베이스(509a) 또는 개인용 기억 장치(509)에 대한 데이터를 검색하는 데에 서버(502)를 이용할 수 있다. 서버(502)는 서비스 요구들로 오버로드되기 때문에, 부하 밸런싱 방법(507)은 서버(503)로 스위치될 수 있다. 복사 핸들러(506)는 아마도 서버(502)의 부하에 관한 정보를 이용하여 호출자에 대한 서버 대체물을 완전하게 선택하거나, 서버(502)에게 특정한 타입의 데이터 검색을 요청할 수 있다. 예를 들어, 복사 핸들러(506)는 방정식의 계산을 위해 특정한 서버를 선택할 수 있는데, 이는 서버의 계산 능력이 강화되었기 때문이다. 일 실시예에서, 복사 핸들러(506)는 모든 호출에 대해 제공자들을 실제적으로 스위치시킬 필요는 없는데, 그 이유는 복사 핸들러(506)가 생성되는 연결들의 수를 최소화하고자 노력하기 때문이다.
도 6a는 도 5a 및 5b에 도시된 부하 밸런싱 소프트웨어(507)를 나타내는 제어 흐름도이다. 이해될 사항으로서, 도 6a는 부하 밸런싱 방법(507)의 소프트웨어에 의해 수행되는 기능들 또는 단계들의 논리 시퀀스를 나타낸 제어 흐름도이다. 다른 실시예들에서는, 부가적인 기능들 또는 단계들이 달성된다. 또한, 다른 실시예에서, 하드웨어는 특정한 기능 또는 모든 기능들을 수행할 수 있다.
부하 밸런싱 소프트웨어(507)는 원(600)으로 나타낸 바와 같이 시작된다. 이후, 논리 블록(601)에서 호출 쓰레드가 특정한 서버에 대해 "유연성"를 확립했는 지에 대한 결정이 이루어진다. 클라이언트는 그의 현재 트랜잭션을 조정하는 서버에 대해 유연성을 갖고, 서버는 그 자체에 대해 유연성을 갖는다. 유연성이 확립되었으면, 제어는 논리 블록(602)으로 진행되고, 그렇지 않으면 제어는 논리 블록(604)으로 진행된다. 논리 블록(602)에서는 유연성 서버가 요구된 서비스들을 제공하는 지에 대한 결정이 이루어진다. 그렇다면, 제어는 논리 블록(603)으로 진행된다. 그렇지 않으면, 제어는 논리 블록(604)으로 진행된다. 유연성 서버 상의 서비스 제공자는 논리 블록(603)에서 클라이언트로 복귀된다. 논리 블록(604)에서는, 네이밍 서비스가 컨택되며, 현재 서비스 제공자들에 대한 갱신된 리스트가 얻어진다. 논리 블록(605)에서는 서비스 제공자를 얻기 위해 getNextProvider 방법이 호출된다. 이 getNextProvider 방법의 다양한 실시예들이 도 6b 내지 6g를 참조하여 하기에서 상세히 설명된다. 논리 블록(606)에서는 서비스가 제공된다. 논리 블록(606)에서 서비스가 제공되지 않는 다면 페일오버 방법(508)이 호출되며, 논리 블록(608)으로 나타낸 바와 같이 부하 밸런싱 방법(507)이 종료된다. 페일오버 방법(507)의 일 실시예는 도 7을 참조하여 하기에서 상세히 설명된다.
도 6b 내지 6g는 도 6a의 논리 블록(605)에서 이용되는 getNextProvider 방법의 다양한 실시예들을 도시한다. 도 6b에 도시한 바와 같이, getNextProvider 방법은 라운드 로빈 방식으로 서비스 제공자를 선택한다. getNextProvider 방법(620)이 원(621)으로 나타낸 바와 같이 시작된다. 논리 블록(622)에서 현재 서비스 제공자들의 리스트가 얻어진다. 논리 블록(623)에서는 포인터가 증분된다. 다음 서비스 제공자가 논리 블록(624)에서 포인터에 기초하여 선택되고, 새로운 서비스 제공자가 논리 블록(625)에서 복귀되며, getNextProvider 방법(620)은 원(626)으로 나타낸 바와 같이 종료된다.
도 6c는 서비스 제공자를 임의로 선택함으로써 서비스 제공자를 얻는 getNextProvider 방법의 다른 실시예를 도시한다. getNextProvider 방법(630)이 원(631)으로 나타낸 바와 같이 시작된다. 현재 서비스 제공자들의 리스트가 논리 블록(632)에서 얻어진다. 다음 서비스 제공자가 논리 블록(633)으로 나타낸 바와 같이 임의로 선택되며, 새로운 서비스 제공자가 논리 블록(634)에서 복귀된다. 이후, 원(635)으로 나타낸 바와 같이 getNextProvider 방법이 종료된다.
getNextProvider 방법의 또 다른 실시예가 도 6d에 도시되는바, 여기에서는 서비스 제공자들의 부하에 기초하여 서비스 제공자를 얻는다. getNextProvider 방법(640)이 원(641)에 의해 나타낸 바와 같이 시작된다. 현재 서비스 제공자들의 리스트가 논리 블록(642)에서 얻어진다. 각 서비스 제공자의 부하는 논리 블록(643)에서 얻어진다. 논리 블록(644)에서는 최소의 부하를 갖는 서비스 제공자가 선택된다. 이후, 새로운 서비스 제공자는 논리 블록(645)에서 복귀되며, getNextProvider 방법(640)은 원(646)에 의해 나타낸 바와 같이 종료된다.
도 6e는 getNextProvider 방법의 다른 실시예를 도시하는바, 여기에서는 서비스 제공자로부터 얻어진 데이터의 타입에 기초하여 서비스 제공자를 얻는다. getNextProvider 방법(650)이 원(651)으로 나타낸 바와 같이 시작된다. 현재 서비스 제공자들의 리스트가 논리 블록(652)에서 얻어진다. 서비스 제공자들로부터 요구된 데이터의 타입은 논리 블록(653)에서 결정된다. 이후, 논리 블록(654)에서 데이터의 타입에 기초하여 서비스 제공자가 선택된다. 서비스 제공자는 논리 블록(655)에서 복귀되며, getNextProvider 방법(650)은 원(656)으로 나타낸 바와 같이 종료된다.
도 6f는 getNextProvider 방법의 또 다른 실시예를 도시하는바, 여기에서는 서비스 제공자들의 물리적인 위치들에 기초하여 서비스 제공자를 선택한다. getNextProvider 방법(660)이 원(661)에 의해 나타낸 바와 같이 시작된다. 서비스제공자들의 리스트가 논리 블록(662)에 의해 나타낸 바와 같이 얻어진다. 각 서비스 제공자에 대한 물리적인 거리는 논리 블록(663)에서 얻어지며, 요구하는 클라이언트에 가장 가까운 물리적인 거리를 갖는 서비스 제공자가 논리 블록(664)에서 선택된다. 이후, 새로운 서비스 제공자가 논리 블록(665)에서 복귀되며, getNextProvider 방법(660)은 원(666)에 의해 나타낸 바와 같이 종료된다.
도 6g는 getNextProvider 방법의 또 다른 실시예를 도시하는바, 여기에서는 서비스 제공자가 이전의 요구들에 응답하는 데에 걸린 시간량에 기초하여 서비스 제공자를 선택한다. getNextProvider 방법(670)의 제어가 원(671)에 의해 나타낸 바와 같이 시작된다. 현재 서비스 제공자들의 리스트가 논리 블록(672)에서 얻어진다. 각 서비스 제공자가 특정한 메세지에 응답하는 시간이 논리 블록(673)에서 결정된다. 가장 짧은 시간에 응답하는 서비스 제공자가 논리 블록(674)에서 선택된다. 이후, 새로운 서비스 제공자가 논리 블록(675)에서 복귀되며, getNextProvider 방법(670)으로부터의 제어는 원(676)에 의해 나타낸 바와 같이 종료된다.
서비스 방법의 호출이 재시도가 보증되는 방식으로 실패한다면, RA 스터브(580)는 페일오버 방법(508)을 호출하는바, 이 방법은 고장난 서버 및 그 고장이 무엇인지를 나타내는 예외를 이용하여, 재시도를 위해 새로운 서버를 복귀시킨다. 새로운 서버를 입수할 수 없다면, RA 스터브(580)는 예외로 규정한다.
도 7은 도 5a 및 5b에 도시된 페일오버 소프트웨어(508)를 나타낸 제어 흐름도이다. 페일오버 방법(508)이 원(700)으로 나타낸 바와 같이 시작된다. 논리 블록(701)에서 현재 서비스 제공자들의 리스트로부터 고장난 제공자가 삭제된다. 이후, 서비스 제공자를 얻기 위해 getNextProvider 방법이 호출된다. 이후, 새로운 서비스 제공자가 논리 블록(703)에서 복귀되며, 페일오버 방법(508)은 원(704)으로 나타낸 바와 같이 종료된다.
도 6 및 7이 복사 핸들러(506)의 실시예들을 도시하기는 하지만, 다른 실시예들은 라운드 로빈 방식으로 실행되는 하기의 기능들 또는 그 결합들을 포함한다.
첫 번째, 서비스의 서버들 또는 서비스 제공자들의 리스트가 유지된다. 이 리스트가 사용될 필요가 있고 리스트가 최근 갱신되지 않았을 때 마다, 복사 핸들러(506)는 하기에 설명되는 바와 같이 네이밍 서비스를 컨택하고, 제공자들의 최근 리스트를 얻는다.
두 번째, 복사 핸들러(506)가 리스트로부터 제공자를 선택하려 하고, 마지막 하트비트 기간 동안 어떠한 메세지도 수신되지 않았던 호스팅 서버에 대해 기존의 RJVM 레벨 연결이 있다면, 복사 핸들러(506)는 그 제공자를 건너뛴다. 일 실시예에서, 몇 개의 하트비트 기간 이후 피어의 죽음(death)이 결정되기 때문에, 서버는 이후 복구될 수 있다. 따라서, 서버의 부하에 기초하는 부하 밸런싱이 얻어진다.
세 번째, 제공자가 고장났을 때, 복사 핸들러(506)는 리스트로부터 그 제공자를 삭제한다. 이에 의해, 작동하지 않는 서비스 제공자들을 이용하려는 반복된 시도들에 의해 야기되는 지연들을 방지한다.
네 번째, 서비스가 이 서비스의 제공자를 호스트하는 서버로부터 호출된다면, 이 제공자가 이용된다. 이는 서비스들의 연쇄적인 호출에 대해 제공자들의 동시 배치(co-location)를 용이하게 한다.
다섯 번째, 서비스가 트랜잭션의 범위 내에서 호출되고 트랜잭션 조정기(transaction coordinator)의 역할을 하는 서버가 이 서비스의 제공자를 호스트한다면, 이 제공자가 이용된다. 이에 의해, 트랜잭션 내에서의 제공자들의 동시 배치가 용이해진다.
상기 방법이 호출되는 동안 발생할 수 있는 고장들은 (1) 애플리케이션 관련, 또는 (2) 하부구조 관련으로 구분될 수 있다. 애플리케이션 관련 고장의 경우에는, 문제들이 개선되리라는 어떠한 기대도 할 수 없기 때문에, RA 스터브(580)는 오퍼레이션을 재시도하지 않는다. 하부구조 관련 고장의 경우, RA 스터브(580)는 그 오퍼레이션을 안전하게 재시도할 수도 있고 못할 수도 있다. 데이터베이스의 필드 값의 증분과 같은 어떠한 초기 비 멱등(idempotent) 오퍼레이션이 수행될 수 있다. 일 실시예에서, RA 스터브(580)는 (1) 사용자가 서비스 방법들이 멱등이라고 표명하거나, 또는 (2) 시스템이 요구의 처리가 결코 시작될 수 없다고 결정할 수 있는 경우에만, 하부구조 고장 이후 재시도를 할 것이다. 후자의 예로서, RA 스터브(580)는, 부하 밸런싱 방법의 일부로서 스터브(580)가 고장난 호스트를 갖는 서비스 제공자로 스위치시키는 경우, 재시도할 것이다. 다른 예로서, RA 스터브(580)는 트랜잭션 오퍼레이션에 대한 부정적 확인(negative acknowledgement)을 받을 경우 재시도할 것이다.
RMI 컴파일러는 컴파일러에게 오브젝트에 관한 RA 스터브를 생성시킬 것을 명령하는 특별한 플래그를 인식한다. 서비스 방법들이 멱등임을 특정하기 위한 부가적인 플래그가 이용될 수 있다. 일 실시예에서, RA 스터브(580)는 도 5a를 참조하여 상기 설명된 복사 핸들러를 이용할 것이다. 부가적인 플래그를 이용하여 다른 복사 핸들러를 특정할 수 있다. 또한, 서비스가 전개되어, 즉 하기에 설명되는 바와 같이 클러스터형 네이밍 서비스로 바인딩(binding)되는 포인트에서, 핸들러는 무효화(override)된다.
도 5b는 본 발명의 다른 실시예를 도시한 것으로서, 도 5a에 도시한 스터브 대신에 EJB 오브젝트(551)가 이용된다.
Ⅲ. 복사된 JNDI 순응 네이밍 서비스
도 4에 도시한 바와 같이, 아키텍쳐(400)의 서비스 제공자들에 대한 액세스는, 아키텍쳐(400)를 통해 복사되어 어떠한 단일 고장 포인트도 없는 JNDI 순응 네이밍 서비스를 통해 얻어진다. 따라서, JNDI 순응 네이밍 서비스를 제공하는 처리 장치가 고장난다면, 복사된 네이밍 서비스를 갖는 다른 처리 장치가 이용될 수 있다. 서비스의 인스턴스를 제공하기 위해, 서버는 복사된 네이밍 트리의 특정한 노드에서 서비스 제공자를 광고한다. 일 실시예에서, 각 서버는 네이밍 트리의 서버 카피의 노드에 저장된 호환성있는 서비스 풀에 제공자에 대한 RA 스터브를 부가한다. 새로운 타입의 제공이 기존의 풀의 제공들의 타입과 호환성이 없다면, 새로운 제공은 보류되고, ConflictHandler 인터페이스를 통해 콜백(callback)이 이루어진다. 어떠한 타입의 제공이 취소된 후, 궁극적으로는 다른 것이 어디에서든지 인스톨될 것이다. 클라이언트가 서비스를 검색할 때, 이 클라이언트는 서비스 제공자들의 클라이언트 리스트를 리프레시하기 위해 서비스 풀을 컨택하는 RA 스터브를 얻는다.
도 4는 아키텍쳐(400)의 복사된 네이밍 서비스를 도시한다. 일 실시예에서, 서버들(302 및 303)은 각각 example 서비스 제공자(P1 및 P2)를 제공하고, 각각 네이밍 서비스 트리(402 및 403)의 복사물을 갖는다. 네이밍 서비스 트리(402 및 403)의 노드 acme.eng.example은 각각, example 서비스 제공자(P1 및 P2)에 대한 레퍼런스를 포함하는 서비스 풀(402a 및 403a)을 갖는다. 클라이언트(304)는 acme.eng.example 노드에서 네이밍 서비스 검색을 수행함으로써 RA 스터브(304e)를 얻는다. 이 스터브(304e)는 이용가능한 서비스 제공자들에 대한 현재 레퍼런스 리스트를 얻기 위해 서비스 풀의 인스턴스를 컨택한다. 스터브(304e)는 부하 밸런싱 및 페일오버에 필요하면, 서비스 풀의 인스턴스들 사이를 스위치시킬 수 있다.
네이밍 서비스의 초기 콘텍스트에 관한 스터브들은 네이밍 서비스 제공자들 간의 부하를 초기에 밸런싱하고 고장의 경우 스위치시키는 복사 인식 또는 스마트 스터브들이다. 네이밍 서비스 트리의 각 인스턴스는 현재 네이밍 서비스 제공자들의 완전한 리스트를 포함한다. 스터브는 현재 이용하고 있는 인스턴스로부터 새로운 리스트를 얻는다. 이러한 프로세스를 부트스트랩시키기 위해, 본 시스템은 도메인 네이밍 서비스("DNS")를 이용하여 (잠재적으로 불완전한) 초기 인스턴스들의 리스트를 찾아내고, 이들중 하나로부터 완전한 리스트를 얻는다. 예로서, 네이밍 서비스의 초기 콘텍스트에 관한 스터브는 다음과 같이 얻을 수 있다.
Figure 112001010499918-pct00013
아키텍쳐의 서버들의 어떠한 서브셋들은 acmeCluster의 네임하에서 DNS로 바인딩된다. 또한, 애플리케이션은 여전히 개별적인 서버의 어드레스를 특정할 수 있지만, 이렇게 되면 이 애플리케이션은 스터브를 얻고자 최초로 시도할 때에 단일 고장 포인트를 갖게 될 것이다.
신뢰성있는 멀티캐스트 프로토콜이 바람직하다. 일 실시예에서, 제공자 스터브들이 분배되고 복사된 네이밍 트리들이 IP 멀티캐스트 또는 포인트 투 포인트 프로토콜에 의해 생성된다. IP 멀티캐스트 실시예에서는, 3종류의 메세지들: 즉, 하트비트, 어나운스먼트(Announcement) 및 스테이트덤프(StateDump)가 있다. 하트비트들은 서버들 간에 정보를 운반하는 데에 이용되고, 이들의 부재에 의해 고장난 서버들을 식별할 수 있다. 어나운스먼트는 한 세트의 서비스 제공들 및 취소를 포함한다. 각 서버로부터의 어나운스먼트들은 순차적으로 번호가 매겨진다. 각 수신기는 잃어버린 어나운스먼트들을 식별하기 위해 어나운스먼트를 처리한다. 각 서버는 그의 하트비트들에, 자신이 전송한 마지막 어나운스먼트의 시퀀스 넘버를 포함한다. 잃어버린 어나운스먼트에 대한 부정정 확인("NAK")이 이후 나가는 하트비트들에 포함된다. 이러한 NAK들을 처리하기 위해, 각 서버는 자신이 전송한 마지막 몇 개의 어나운스먼트들의 리스트를 유지한다. 삭제된 어나운스먼트에 대한 NAK가 도달하면, 서버는 StateDump를 전송하는바, 이는 서버의 서비스들의 완전한 리스트 및 자신의 다음 어나운스먼트의 시퀀스 넘버를 포함한다. 새로운 서버가 기존의 아키텍쳐에 참가하면, 이 새로운 서버는 각각의 다른 서버로부터의 제 1 메세지에 대해 NAK를 함으로써, StateDump가 전송되게 한다. 서버가 소정의 시간후 다른 서버로부터 하트비트를 수신하지 못하면, 이 서버는 하트비트를 발생시키지 않는 서버에 의해 제공되는 모든 서비스들을 취소한다.
Ⅳ. 프로그래밍 모델
도 3 내지 5에 도시된 아키텍쳐에서 이용되는 애플리케이션들은 애플리케이션 상태가 처리되는 방법에 따라, 다음의 3개의 기본 프로그래밍 모델들: (1) 스테이트리스 또는 직접, (2) 스테이트리스 팩토리 또는 간접, 또는 (3) 스테이트풀 또는 목표가 정해진(targeted), 중에서 하나를 이용한다. 스테이트리스 모델에서, 네이밍 서비스 검색에 의해 복귀된 스마트 스터브는 서비스 제공자들을 직접 참조한다.
Figure 112001010499918-pct00014
본 예에서는, example에 대한 2개의 호출들은 서로 다른 서비스 제공자들에 의해 처리될 수 있는데, 이는 스마트 스터브가 부하 밸런싱을 위해 이들 사이를 스위치할 수 있기 때문이다. 따라서, example 서비스 오브젝트는 애플리케이션을 위해 정보를 내부적으로 저장할 수 없다. 전형적으로, 스테이트리스 모델은 제공자가 스테이트리스인 경우에만 이용된다. 예로서, 순수한 스테이트리스 제공자는 그의 독립변수들(arguments)의 일부 수학적인 함수를 계산하여 그 결과를 복귀시킬 수 있다. 스테이트리스 제공자들은 자신들을 위해, 예를 들어 금전적인 목적으로 정보를 저장할 수 있다. 보다 중요하게는, 스테이트리스 제공자들은 관련 불변 기억 장치들을 액세스하고, 필요할 때 애플리케이션 상태를 메모리에 적재시킬 수 있다. 예를 들어, example이 독립변수들로서 자신에게 전달된 모든 러닝 값(running value)들의 합을 복귀시키기 위해, 이 example은 데이터베이스로부터 이전 합을 읽고, 그의 현재 독립변수에 부가하고, 새로운 값을 쓴 다음, 그것을 복귀시킨다. 이러한 스테이트리스 서비스 모델은 확장성을 증진시킨다.
스테이트리스 팩토리 프로그래밍 모델에서, 검색에 의해 복귀된 스마트 스터브는, 스마트 스터브들이 아닌 바람직한 서비스 제공자들을 생성하는 팩토리이다.
Figure 112001010499918-pct00015
본 예에서, example에 대한 2개의 호출들은 동일한 서비스 제공자에 의해 처리되는 것이 보장된다. 따라서, 서비스 제공자는 애플리케이션을 위한 정보를 안전하게 저장할 수 있다. 스테이트리스 팩토리 모델은 호출자가 제공자와의 "대화"에 관여할 필요가 있을 때에 이용되어야 한다. 예를 들어, 호출자 및 제공자는 상호 교섭에 관여할 수 있다. 복사 인식 스터브들은 스테이트리스 및 스테이트리스 팩토리 모델들에서 일반적으로 동일하며, 유일한 차이점은 스터브들이 서비스 제공자들을 참조하느냐, 아니면 서비스 제공자 팩토리들을 참조하느냐 하는 것이다.
제공자 팩토리 스터브는 제공자를 생성하고자 노력함에 있어서 마음대로 페일오버될 수 있는데, 그 이유는 이러한 오퍼레이션이 멱등이기 때문이다. 간접 서비스의 유용성을 더욱 증가시키기 위해, 애플리케이션 코드는 서비스 생성 및 호출에 대한 명백한 재시도 루프를 포함해야 한다.
Figure 112001010499918-pct00016
이는, 예를 들어 팩토리에 의해 성공적으로 생성되었던 제공자 e의 고장을 취급할 것이다. 이 경우, 애플리케이션 코드는 비 멱등 오퍼레이션들이 완료되었는 지의 여부를 결정한다. 유용성을 더욱 증가시키기 위해, 애플리케이션 코드는 상기의 오퍼레이션들을 취소하고 재시도하고자 시도할 것이다.
스테이트풀 프로그래밍 모델에서, 서비스 제공자는 어떠한 고유의 시스템 와이드 키(system-wide key)에 의해 식별되는 오래 생존하는 스테이트풀 오브젝트이다. 이러한 모델을 이용하여 액세스될 수 있는 "엔티티들"의 예로는 데이터베이스 테이블의 로우들 및 원격 파일 시스템들이 있다. 각 제공자가 한 클라이언트에 의해 한번 이용되는 나머지 2개의 모델들과 달리, 목표가 정해진 제공자는 많은 클라이언트들에 의해 다수회 액세스될 수 있다. 목표가 정해진 제공자들에 대한 스터브들은 키가 단순히 네이밍 서비스 네임인 직접 검색에 의해, 또는 키가 오퍼레이션을 생성하기 위한 독립변수들을 포함하는 팩토리를 통해 얻어질 수 있다. 어느 경우이든, 스터브는 부하 밸런싱 또는 페일오버를 하지 않을 것이다. 만일 있다면, 재시도들은 스터브를 명확하게 다시 얻어야 한다.
EJB에는 3종류의 빈들이 있는데, 이들 각각은 3개의 프로그래밍 모델들중 하나에 맵핑(mapping)된다. 스테이트리스 세션 빈들은 특정한 호출자를 위해 생성되지만, 호출들 간에 어떠한 내부 상태도 유지하지 않는다. 스테이트리스 세션 빈들은 스테이트리스 모델에 맵핑된다. 스테이트풀 세션 빈들은 특정한 호출자를 위해 생성되며, 호출들 간에 내부 상태를 유지한다. 스테이트풀 세션 빈들은 스테이트리스 팩토리 모델에 맵핑된다. 엔티티 빈들은 시스템 와이드 키에 의해 식별되는 단일의 스테이트풀 오브젝트들이다. 엔티티 빈들은 스테이트풀 모델에 맵핑된다. 3가지 타입의 모든 빈들은 EJB 홈이라 불려지는 팩토리에 의해 생성된다. 일 실시예에서, EJB 홈들 및 이들이 생성하는 빈들은 모두 RMI를 이용하여 참조된다. 도 3 내지 5에 도시된 아키텍쳐에서, EJB 홈에 대한 스터브들은 스마트 스터브들이다. 스테이트리스 세션 빈들에 대한 스터브들은 스마트 스터브들이고, 스테이트풀 세션 빈들 및 엔티티 빈들에 대한 스터브들은 그렇지 않다. EJB 기반 서비스에 대해 이용하기 위한 복사 핸들러는 자신의 전개 기술자(deployment descriptor)로 특정될 수 있다.
오브젝트가 호출자를 위해 상태를 유지하는 경우에 필요한 간접 RMI 기반 서비스를 생성하기 위해, 애플리케이션 코드는 팩토리를 명백하게 구성해야 한다. 목표가 정해진 RMI 기반 서비스는 어떠한 특별한 플래그들없이 RMI 컴파일러를 가동시킨 다음, 결과적인 서비스를 복사된 네이밍 트리에 바인딩함으로써 생성될 수 있다. 오브젝트에 대한 스터브는 네이밍 트리의 각 인스턴스에 직접 바인딩되고, 어떠한 서비스 풀도 생성되지 않을 것이다. 이는 키가 네이밍 서비스 네임인 목표가 정해진 서비스를 제공한다. 일 실시예에서, 이는 원격 파일 시스템들을 형성하는 데에 이용된다.
Ⅴ. 하드웨어 및 소프트웨어 컴포넌트들
도 8은 도 3 내지 5에 도시된 예시적인 서버 그리고/또는 클라이언트들의 하드웨어 및 소프트웨어 컴포넌트들을 도시한다. 도 8의 시스템은, 연결부(829)와 같은 1개 또는 그 이상의 통신 매체에 의해 LAN(840) 및 본원에서는 인터넷(880)으로 나타낸 WAN에 연결된 범용 컴퓨터(800)를 포함한다. LAN(840)을 통해, 컴퓨터(800)는 파일 서버(841)와 같은 다른 국부 컴퓨터들과 통신할 수 있다. 일 실시예에서, 파일 서버(801)는 도 3에 도시된 서버(303)이다. 인터넷(880)을 통해, 컴퓨터(800)는, 국부 및 원격으로 월드 와이드 웹 서버(881)와 같은 다른 컴퓨터들과 통신할 수 있다. 일 실시예에서, 웹 서버(881)는 도 3에 도시된 서버(303)이다. 알 수 있는 바와 같이, 컴퓨터(800)로부터 인터넷(880)으로의 접속은 다양한 방법들, 예를 들어 접속(829)을 통해 바로 이루어지거나, 또는 국부 영역 네트워크(840)를 통해 또는 모뎀(미도시)에 의해 이루어질 수 있다.
컴퓨터(800)는 개인용 또는 사무용 컴퓨터, 예를 들어 워크스테이션, 개인용 컴퓨터, 또는 다른 단일 사용자 또는 다중 사용자 컴퓨터 시스템이 될 수 있으며; 예시적인 실시예는 Sun SPARC-20 워크스테이션(캘리포니아 마운틴뷰 소재의 선 마이크로시스템즈 인코포레이티드사)을 이용한다. 설명을 위해, 컴퓨터(800)는 하드웨어 컴포넌트들(801) 및 소프트웨어 컴포넌트들(802)로 편리하게 분할될 수 있지만; 당업자라면 이러한 분할은 개념적이고 다소 임의적이며, 하드웨어와 소프트웨어 간의 라인은 변경불가능하게 고정된 것이 아니라는 것을 알 수 있을 것이다. 또한, 호스트 컴퓨터와 그에 부착된 주변장치들 간의 라인 또한 변경불가능하게 고정된 것이 아니며, 특히 어떠한 컴퓨터들의 주변장치들로 간주되는 요소들은 다른 컴퓨터들의 필수 부분들로 간주된다는 것을 알 수 있을 것이다. 따라서, 예를 들어, 사용자 I/O(820)는, 각각 컴퓨터 자체의 일부 또는 주변장치로서 간주될 수 있는 키보드, 마우스, 및 디스플레이 모니터를 포함할 수 있으며, 또한 전형적으로 주변장치로 간주되는 로컬 프린터를 포함할 수 있다. 다른 예로서, 불변 기억장치(808)는 컴퓨터의 주변장치이거나 컴퓨터에 내장될 수 있는 CD ROM(컴팩 디스크 판독 전용 메모리) 유닛을 포함할 수 있다.
하드웨어 컴포넌트들(801)은 프로세서(CPU)(805), 메모리(806), 불변 기억장치(808), 사용자 I/O(820) 및 네트워크 인터페이스(825)를 포함하는바, 이들은 버스(810)에 결합된다. 이러한 컴포넌트들은 당업계에 널리 공지되어 있으므로, 이에 대해서는 간단히 설명한다.
프로세서(805)는, 예를 들어 마이크로프로세서 또는 멀티프로세싱을 위해 구성된 마이크로프로세서들의 집합체가 될 수 있다.
메모리(8006)는 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 가상 메모리, 또는 단일 또는 결합의 다른 메모리 구성들을 포함할 수 있다. 불변 기억장치(808)는, 예를 들어 자기 하드 디스크, 플로피 디스크, 또는 단일 또는 결합의 다른 불변 판독-기록 데이터 저장 장치들을 포함할 수 있다. 이는 또한, CD ROM 또는 다른 대용량 저장 기술에 의해 제공될 수 있는 매스(mass) 또는 기록(archival) 저장 장치를 포함할 수 있다. (주목할 사항으로서, 파일 서버(841)는 프로세서(805)가 이용할 수 있는 부가적인 저장 용량을 제공한다.)
사용자 I/O(입/출력) 하드웨어(820)는 전형적으로 CRT 또는 평판 디스플레이와 같은 가상 디스플레이 모니터와, 문자 숫자식 키보드, 및 마우스 또는 다른 포인팅 장치를 포함할 수 있으며, 그리고 선택적으로 프린터, 광 스캐너, 또는 사용자 입력 및 출력을 위한 다른 장치들을 더 포함할 수 있다.
네트워크 I/O 하드웨어(825)는 컴퓨터(800)와 바깥 세상 간의 인터페이스를 제공한다. 보다 구체적으로, 네트워크 I/O(825)는 프로세서(805)가 접속(829)에 의해, LAN(840) 및 인터넷(880)을 통해 다른 프로세서들과 통신하게 한다.
소프트웨어 컴포넌트들(802)은 운영 체제(310)와, JavaTM 애플리케이션 프로그램(860) 등의 운영 체제(310)의 제어 하에 있는 태스크들의 세트와, 그리고 중요하게는 JVM 소프트웨어(354) 및 커널(355)을 포함한다. 운영 체제(310)는 또한 프로세서(805)가, 불변 기억장치(808), 사용자 I/O(820) 및 네트워크 인터페이스(825)와 같은 다양한 장치들을 제어할 수 있게 한다. 프로세서(805)는 메모리(806) 및 컴퓨터 시스템(800)의 다른 요소들과 함께, 애플리케이션(860), JVM(354), 커널(355) 및 운영 체제(310)의 소프트웨어를 실행시킨다. 일 실시예에서, 소프트웨어(802)는 도 3c의 서버(302)에 도시된 바와 같이 네트워크 소프트웨어(302a), JVM1, RJVM2 및 RJVM3를 포함한다. 일 실시예에서, JavaTM 애플리케이션 프로그램(860)은 도 3c에 도시된 바와 같이 JavaTM 애플리케이션(302c)이다.
당업자라면 도 8의 시스템이 제한적인 것이 아니라 예시적인 것이며, 도 8에 도시된 것 대신에, 또는 이에 부가하여, 광범위한 계산, 통신 및 정보 장치들이 이용될 수 있다는 것을 알 수 있을 것이다. 예를 들어, 인터넷(88)을 통한 접속은 일반적으로 중간 라우터 컴퓨터들(미도시)에 의한 패킷 교환을 수반하고, 컴퓨터(800)는, 전형적인 웹 클라이언트 세션 동안, 컴퓨터(800) 및 웹 서버(881)를 포함하지만 결코 이에 한정되지 않는 어떠한 수의 웹 서버들을 액세스할 것이다.
본 발명의 바람직한 실시예에 대한 상기의 설명은 예시 및 설명의 목적으로 제공된 것이다. 본 발명은 개시된 형태로 한정되지 않는다. 명백하게는, 많은 변형들 및 변경들이 당업자들에 의해 이루어질 수 있다. 상기 실시예들은 본 발명의 원리들 및 그 실제 응용들을 설명하기 위해 선택된 것으로서, 당업자라면 본 발명이 다양한 실시예들, 및 특정하게 이용하기에 적절한 다양한 변형들을 갖는 다는 것을 알 수 있을 것이다. 본 발명의 범위는 하기의 청구범위에 의해서만 한정된다.

Claims (35)

  1. 통신 매체와;
    상기 통신 매체에 결합되며, 제 1 처리 장치를 에뮬레이트하는 제 1 소프트웨어 프로그램("JVM1")을 갖는 제 1 처리 장치와, 여기서 상기 제 1 처리 장치는 제 1 커널 소프트웨어층을 더 포함하고, 상기 제 1 커널 소프트웨어층은 제 1 데이터 구조("RJVM2")를 가지며, 상기 제 1 처리 장치는 스터브를 더 포함하고, 상기 스터브는 복사 핸들러를 포함하며, 상기 복사 핸들러는 복수의 복사된 오브젝트들중에서 하나를 선택하기 위한 부하 밸런싱 소프트웨어 컴포넌트와 페일오버 소프트웨어 컴포넌트를 포함하며; 그리고
    상기 통신 매체에 결합되며, 제 2 처리 장치를 에뮬레이트하는 제 2 소프트웨어 프로그램("JVM2")을 갖는 제 2 처리 장치를 포함하며, 상기 제 2 처리 장치는 제 2 커널 소프트웨어층을 더 포함하고, 상기 제 2 커널 소프트웨어층은 제 2 데이터 구조("RJVM1")를 가지며, 상기 제 1 처리 장치로부터의 메세지는 상기 제 1 처리 장치의 상기 제 1 커널 소프트웨어층과 상기 제 1 소프트웨어 프로그램을 통해 상기 제 2 처리 장치의 상기 제 2 소프트웨어 프로그램과 상기 제 2 커널 소프트웨어층에 전송되는 식으로 상기 제 2 처리 장치에 전송되고; 그리고
    상기 제 1 처리 장치의 상기 제 1 소프트웨어 프로그램은 JavaTM 가상 머신("JVM")이고 상기 제 1 처리 장치의 상기 제 1 데이터 구조는 원격 JavaTM 가상 머신("RJVM")이며,
    상기 제 2 처리 장치의 상기 제 2 소프트웨어 프로그램은 JavaTM 가상 머신("JVM")이고 상기 제 2 처리 장치의 상기 제 2 데이터 구조는 원격 JavaTM 가상 머신("RJVM")이며, 상기 제 2 처리 장치의 상기 RJVM은 상기 제 1 처리 장치의 상기 JVM에 대응하는 것을 특징으로 하는 분산 처리 시스템.
  2. 제 1 항에 있어서,
    상기 제 1 처리 장치의 상기 제 1 소프트웨어 프로그램은 JavaTM 가상 머신("JVM")이고, 상기 제 1 처리 장치의 데이터 구조는 원격 JavaTM 가상 머신("RJVM")이며,
    상기 제 2 처리 장치의 상기 제 1 소프트웨어 프로그램은 JavaTM 가상 머신("JVM")이고, 상기 제 2 처리 장치의 데이터 구조는 원격 JavaTM 가상 머신("RJVM")이며, 상기 제 2 처리 장치의 상기 RJVM은 상기 제 1 처리 장치의 상기 JVM에 대응하는 것을 특징으로 하는 분산 처리 시스템.
  3. 제 1 항에 있어서,
    상기 제 1 처리 장치는 상기 제 2 처리 장치의 피어인 것을 특징으로 하는 분산 처리 시스템.
  4. 제 1 항에 있어서,
    상기 제 2 처리 장치에 결합된 제 2 통신 매체와; 그리고
    상기 제 2 통신 매체에 결합된 제 3 처리 장치를 더 포함하며;
    상기 제 3 처리 장치는 1) 처리 장치를 에뮬레이트하는 소프트웨어 프로그램("JVM3")과, 2) 제 1 데이터 구조("RJVM1") 및 제 2 데이터 구조("RJVM2")를 구비하는 제 1 커널 소프트웨어층을 갖는 것을 특징으로 하는 분산 처리 시스템.
  5. 제 1 항에 있어서,
    상기 제 1 처리 장치는 스터브를 포함하는 것을 특징으로 하는 분산 처리 시스템.
  6. 삭제
  7. 통신 매체와;
    상기 통신 매체에 결합되며, 제 1 데이터 구조를 갖는 제 1 커널 소프트웨어층을 포함하는 제 1 처리 장치를 에뮬레이트하는 제 1 소프트웨어 프로그램을 갖는 제 1 처리 장치와, 여기서 상기 제 1 처리 장치는 복수의 복사된 오브젝트들 중에서 하나를 선택하기 위한 페일오버 소프트웨어 컴포넌트와 부하 밸런싱 소프트웨어 컴포넌트를 갖는 복사 핸들러를 포함하는 스터브를 가지며;
    상기 통신 매체에 결합되며, 제 2 데이터 구조를 갖는 제 1 커널 소프트웨어층을 포함하는 제 2 처리 장치를 에뮬레이트하는 제 2 소프트웨어 프로그램을 갖는 제 2 처리 장치를 포함하여 구성되며, 상기 제 1 처리 장치로부터의 메세지는 상기 제 1 처리 장치의 상기 제 1 커널 소프트웨어층과 상기 제 1 소프트웨어 프로그램을 통해 상기 제 2 처리 장치의 상기 제 2 소프트웨어 프로그램과 상기 제 2 커널 소프트웨어층에 전송되는 식으로 상기 제 2 처리 장치에 전송되고; 그리고
    상기 제 1 처리 장치의 상기 제 1 소프트웨어 프로그램은 JavaTM 가상 머신("JVM")이고 상기 제 1 처리 장치의 상기 제 1 데이터 구조는 원격 JavaTM 가상 머신("RJVM")이며,
    상기 제 2 처리 장치의 상기 제 2 소프트웨어 프로그램은 JavaTM 가상 머신("JVM")이고, 상기 제 2 처리 장치의 상기 제 2 데이터 구조는 원격 JavaTM 가상 머신("RJVM")이며, 상기 제 2 처리 장치의 상기 RJVM은 상기 제 1 처리 장치의 상기 JVM에 대응하는 것을 특징으로 하는 분산 처리 시스템.
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
KR1020017005752A 1998-11-05 1999-10-21 분산 처리 시스템에서 메세지 통과 커널을 갖는클러스터형 엔터프라이즈 java™ KR100673627B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US10716798P 1998-11-05 1998-11-05
US60/107,167 1998-11-05
US09/405,318 US6385643B1 (en) 1998-11-05 1999-09-23 Clustered enterprise Java™ having a message passing kernel in a distributed processing system
US09/405,318 1999-09-23

Publications (2)

Publication Number Publication Date
KR20010099790A KR20010099790A (ko) 2001-11-09
KR100673627B1 true KR100673627B1 (ko) 2007-01-24

Family

ID=26804470

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020017005752A KR100673627B1 (ko) 1998-11-05 1999-10-21 분산 처리 시스템에서 메세지 통과 커널을 갖는클러스터형 엔터프라이즈 java™

Country Status (8)

Country Link
US (1) US6385643B1 (ko)
EP (1) EP1138000A4 (ko)
JP (1) JP2002529855A (ko)
KR (1) KR100673627B1 (ko)
CN (1) CN1122229C (ko)
AU (1) AU772975B2 (ko)
CA (1) CA2350645C (ko)
WO (1) WO2000028431A1 (ko)

Families Citing this family (92)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6185611B1 (en) 1998-03-20 2001-02-06 Sun Microsystem, Inc. Dynamic lookup service in a distributed system
US6272559B1 (en) * 1997-10-15 2001-08-07 Sun Microsystems, Inc. Deferred reconstruction of objects and remote loading for event notification in a distributed system
US6938263B2 (en) 1996-04-23 2005-08-30 Sun Microsystems, Inc. System and method for facilitating dynamic loading of “stub” information to enable a program operating in one address space to invoke processing of a remote method or procedure in another address space
US6421704B1 (en) * 1998-03-20 2002-07-16 Sun Microsystems, Inc. Method, apparatus, and product for leasing of group membership in a distributed system
US6466947B2 (en) * 1998-03-20 2002-10-15 Sun Microsystems, Inc. Apparatus and method for dynamically verifying information in a distributed system
US6393497B1 (en) 1998-03-20 2002-05-21 Sun Microsystems, Inc. Downloadable smart proxies for performing processing associated with a remote procedure call in a distributed system
US6832223B1 (en) 1996-04-23 2004-12-14 Sun Microsystems, Inc. Method and system for facilitating access to a lookup service
US6728737B2 (en) 1996-10-11 2004-04-27 Sun Microsystems, Inc. Method and system for leasing storage
US5832529A (en) 1996-10-11 1998-11-03 Sun Microsystems, Inc. Methods, apparatus, and product for distributed garbage collection
US6237009B1 (en) 1996-10-11 2001-05-22 Sun Microsystems, Inc. Lease renewal service
US6604127B2 (en) 1998-03-20 2003-08-05 Brian T. Murphy Dynamic lookup service in distributed system
WO1999044296A2 (en) 1998-02-26 1999-09-02 Sun Microsystems, Inc. Apparatus and method for dynamically verifying information in a distributed system
WO1999044133A2 (en) 1998-02-26 1999-09-02 Sun Microsystems, Inc. Method and system for deterministic hashes to identify remote methods
US20020046228A1 (en) * 1998-03-20 2002-04-18 Sun Microsystems, Inc. Method and system for facilitating access to a lookup service
US6721740B1 (en) * 1998-05-29 2004-04-13 Sun Microsystems, Inc. Method and apparatus of performing active update notification
US7478142B1 (en) * 1998-09-29 2009-01-13 Netscape Communications Corporation Self-contained applications that are applied to be received by and processed within a browser environment and that have a first package that includes a manifest file and an archive of files including a markup language file and second package
US6615235B1 (en) * 1999-07-22 2003-09-02 International Business Machines Corporation Method and apparatus for cache coordination for multiple address spaces
JP3769999B2 (ja) * 1999-09-30 2006-04-26 富士通株式会社 サービス振り分け装置
GB9925510D0 (en) * 1999-10-29 1999-12-29 Ibm Incorporating native code in java archive files
AU2001266656A1 (en) * 2000-06-02 2001-12-17 Zucotto Wireless, Inc. Data path engine (dpe)
WO2001095107A2 (en) * 2000-06-09 2001-12-13 The Trustees Of Columbia University In The City Of New York Distributed computer system using a graphical user interface toolkit
JP5085831B2 (ja) * 2000-07-27 2012-11-28 オラクル・インターナショナル・コーポレイション リクエストの集中及びロードバランシングのためのシステム及び方法
US20030050932A1 (en) * 2000-09-01 2003-03-13 Pace Charles P. System and method for transactional deployment of J2EE web components, enterprise java bean components, and application data over multi-tiered computer networks
US8023421B2 (en) * 2002-07-25 2011-09-20 Avaya Inc. Method and apparatus for the assessment and optimization of network traffic
US7080161B2 (en) * 2000-10-17 2006-07-18 Avaya Technology Corp. Routing information exchange
US7487237B2 (en) * 2000-10-17 2009-02-03 Avaya Technology Corp. Load optimization
US7349994B2 (en) * 2000-10-17 2008-03-25 Avaya Technology Corp. Method and apparatus for coordinating routing parameters via a back-channel communication medium
US7406539B2 (en) 2000-10-17 2008-07-29 Avaya Technology Corp. Method and apparatus for performance and cost optimization in an internetwork
US7336613B2 (en) 2000-10-17 2008-02-26 Avaya Technology Corp. Method and apparatus for the assessment and optimization of network traffic
US7720959B2 (en) 2000-10-17 2010-05-18 Avaya Inc. Method and apparatus for characterizing the quality of a network path
IL155355A0 (en) 2000-10-17 2003-11-23 Routescience Technologies Inc Method and apparatus for performance and cost optimization in an internetwork
US7756032B2 (en) * 2000-10-17 2010-07-13 Avaya Inc. Method and apparatus for communicating data within measurement traffic
US7296275B2 (en) * 2001-01-04 2007-11-13 Sun Microsystems, Inc. Method and system for passing objects in a distributed system using serialization contexts
US20020099465A1 (en) * 2001-01-19 2002-07-25 Allen Su Methods and apparatus for facilitating communication between devices via an industrial network
US7461148B1 (en) 2001-02-16 2008-12-02 Swsoft Holdings, Ltd. Virtual private server with isolation of system components
US6567809B2 (en) * 2001-06-08 2003-05-20 International Business Machines Corporation Disabling and reloading enterprise java beans using database trigger programs
US8650321B2 (en) * 2001-07-24 2014-02-11 Digi International Inc. Network architecture
US7756969B1 (en) 2001-09-07 2010-07-13 Oracle America, Inc. Dynamic provisioning of identification services in a distributed system
US20030051029A1 (en) * 2001-09-07 2003-03-13 Reedy Dennis G. Dynamic provisioning of sevice components in a distributed system
US7660887B2 (en) * 2001-09-07 2010-02-09 Sun Microsystems, Inc. Systems and methods for providing dynamic quality of service for a distributed system
US6877011B2 (en) * 2001-10-10 2005-04-05 Sun Microsystems, Inc. System and method for host based storage virtualization
WO2004013782A1 (en) * 2002-07-31 2004-02-12 Truecontext Corporation Contextual computing system
US6782424B2 (en) 2002-08-23 2004-08-24 Finite State Machine Labs, Inc. System, method and computer program product for monitoring and controlling network connections from a supervisory operating system
KR100463837B1 (ko) * 2002-12-10 2004-12-29 한국전자통신연구원 엔터프라이즈 빈 추출 장치 및 방법
US7587763B2 (en) 2002-12-12 2009-09-08 Finite State Machine Labs, Inc. Systems and methods for detecting a security breach in a computer system
US7406692B2 (en) * 2003-02-24 2008-07-29 Bea Systems, Inc. System and method for server load balancing and server affinity
US7536688B2 (en) * 2003-02-28 2009-05-19 Azul Systems Segmented virtual machine
CN100356326C (zh) * 2003-03-21 2007-12-19 清华大学 基于操作栈记录的恢复的Java线程迁移的方法
JP2004302512A (ja) * 2003-03-28 2004-10-28 Hitachi Ltd クラスタコンピューティングシステム、および、そのフェールオーバー方法
US20040230973A1 (en) * 2003-04-30 2004-11-18 International Business Machines Corporation Mechanism to provide adminstrative control in a multi-process application server
US7047252B2 (en) * 2003-12-02 2006-05-16 Oracle International Corporation Complex computation across heterogenous computer systems
US7386563B1 (en) 2003-12-11 2008-06-10 Unisys Corporation Method for using deferred column retrieval to improve row retrieval and query performance of OLE DB applications
US20050160424A1 (en) * 2004-01-21 2005-07-21 International Business Machines Corporation Method and system for grid-enabled virtual machines with distributed management of applications
US7792874B1 (en) 2004-01-30 2010-09-07 Oracle America, Inc. Dynamic provisioning for filtering and consolidating events
US7716274B1 (en) * 2004-04-14 2010-05-11 Oracle America, Inc. State data persistence in a distributed computing environment
KR101111099B1 (ko) * 2004-09-09 2012-02-17 아바야 테크놀러지 코퍼레이션 네트워크 트래픽 보안 방법들 및 시스템들
US7711952B2 (en) * 2004-09-13 2010-05-04 Coretrace Corporation Method and system for license management
US7620953B1 (en) * 2004-10-05 2009-11-17 Azul Systems, Inc. System and method for allocating resources of a core space among a plurality of core virtual machines
US8090844B2 (en) * 2004-10-08 2012-01-03 Truecontext Corporation Content management across shared, mobile file systems
US8799242B2 (en) 2004-10-08 2014-08-05 Truecontext Corporation Distributed scalable policy based content management
US20060102665A1 (en) * 2004-11-12 2006-05-18 International Business Machines Corporation Retry of methods based on exception type and method type
US7552153B2 (en) 2004-12-28 2009-06-23 Sap Ag Virtual machine monitoring using shared memory
US7500133B2 (en) * 2004-12-28 2009-03-03 Sap Ag Connection manager for handling message oriented protocol-based requests
US7539821B2 (en) * 2004-12-28 2009-05-26 Sap Ag First in first out eviction implementation
US7933947B2 (en) * 2004-12-28 2011-04-26 Sap Ag Connection manager that supports failover protection
US7672949B2 (en) * 2004-12-28 2010-03-02 Sap Ag Connection manager having a common dispatcher for heterogeneous software suites
US20060143256A1 (en) * 2004-12-28 2006-06-29 Galin Galchev Cache region concept
US7971001B2 (en) * 2004-12-28 2011-06-28 Sap Ag Least recently used eviction implementation
US7694065B2 (en) * 2004-12-28 2010-04-06 Sap Ag Distributed cache architecture
US8204931B2 (en) 2004-12-28 2012-06-19 Sap Ag Session management within a multi-tiered enterprise network
EP1842140A4 (en) * 2005-01-19 2012-01-04 Truecontext Corp APPLICATIONS BASED ON MOBILE FORMS ORDERED BY RULES
KR100645537B1 (ko) * 2005-02-07 2006-11-14 삼성전자주식회사 안정적인 패킷 포워딩을 위한 동적인 큐 관리방법 및 이를위한 네트워크 프로세서의 구성요소
US8589562B2 (en) * 2005-04-29 2013-11-19 Sap Ag Flexible failover configuration
US20060271510A1 (en) * 2005-05-25 2006-11-30 Terracotta, Inc. Database Caching and Invalidation using Database Provided Facilities for Query Dependency Analysis
US7689660B2 (en) * 2005-06-09 2010-03-30 Sap Ag Application server architecture
US7464303B2 (en) * 2005-06-09 2008-12-09 International Business Machines Corporation Autonomically adjusting configuration parameters for a server when a different server fails
US7480908B1 (en) * 2005-06-24 2009-01-20 Azul Systems, Inc. Segmented virtual machine transport mechanism
US7966412B2 (en) * 2005-07-19 2011-06-21 Sap Ag System and method for a pluggable protocol handler
EP1955171A4 (en) 2005-12-01 2009-03-11 Firestar Software Inc SYSTEM AND METHOD FOR EXCHANGING INFORMATION IN EXCHANGE APPLICATIONS
US8707323B2 (en) * 2005-12-30 2014-04-22 Sap Ag Load balancing algorithm for servicing client requests
US20080163063A1 (en) * 2006-12-29 2008-07-03 Sap Ag Graphical user interface system and method for presenting information related to session and cache objects
US8356297B1 (en) 2007-03-21 2013-01-15 Azul Systems, Inc. External data source redirection in segmented virtual machine
US7757116B2 (en) * 2007-04-04 2010-07-13 Vision Solutions, Inc. Method and system for coordinated multiple cluster failover
US20090083441A1 (en) * 2007-09-24 2009-03-26 Microsoft Corporation Synchronization of web service endpoints in a multi-master synchronization environment
US8601443B2 (en) * 2008-02-12 2013-12-03 International Business Machines Corporation Method and system for correlating trace data
US9141449B2 (en) * 2009-10-30 2015-09-22 Symantec Corporation Managing remote procedure calls when a server is unavailable
US9122537B2 (en) * 2009-10-30 2015-09-01 Cisco Technology, Inc. Balancing server load according to availability of physical resources based on the detection of out-of-sequence packets
CN101996235A (zh) * 2010-09-21 2011-03-30 用友软件股份有限公司 报表报送方法和装置
US20120324456A1 (en) * 2011-06-16 2012-12-20 Microsoft Corporation Managing nodes in a high-performance computing system using a node registrar
US10489213B2 (en) 2014-10-01 2019-11-26 Red Hat, Inc. Execution of a method at a cluster of nodes
US9703546B1 (en) * 2015-12-21 2017-07-11 Schneider Electric Software, Llc Monitoring application states for deployment during runtime operations
CN109426601B (zh) * 2017-07-17 2022-05-10 华为技术有限公司 一种对程序进行无状态检测的方法和装置

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5155809A (en) 1989-05-17 1992-10-13 International Business Machines Corp. Uncoupling a central processing unit from its associated hardware for interaction with data handling apparatus alien to the operating system controlling said unit and hardware
CA2041992A1 (en) 1990-05-18 1991-11-19 Yeshayahu Artsy Routing objects on action paths in a distributed computing system
CA2046723C (en) 1990-07-11 1998-11-24 Robert Charles Pike Distributed computing system
CA2048306A1 (en) 1990-10-02 1992-04-03 Steven P. Miller Distributed configuration profile for computing system
JPH0827769B2 (ja) 1992-10-30 1996-03-21 インターナショナル・ビジネス・マシーンズ・コーポレイション 通信インターフェースの生成システム及びその方法
EP0604010B1 (en) * 1992-12-21 1999-12-29 Sun Microsystems, Inc. Method and apparatus for subcontracts in distributed processing systems
CA2110243C (en) 1992-12-31 1998-08-11 Philip Steven Winterbottom Apparatus and methods for making a portion of a first name space available as a portion of a second name space
US5564070A (en) 1993-07-30 1996-10-08 Xerox Corporation Method and system for maintaining processing continuity to mobile computers in a wireless network
JP3484779B2 (ja) 1994-10-12 2004-01-06 富士ゼロックス株式会社 名前サービス方式及び名前サービス方法
US5961582A (en) 1994-10-25 1999-10-05 Acorn Technologies, Inc. Distributed and portable execution environment
WO1996017306A2 (en) 1994-11-21 1996-06-06 Oracle Corporation Media server
US5692180A (en) 1995-01-31 1997-11-25 International Business Machines Corporation Object-oriented cell directory database for a distributed computing environment
US5701451A (en) 1995-06-07 1997-12-23 International Business Machines Corporation Method for fulfilling requests of a web browser
US5794006A (en) 1995-08-18 1998-08-11 Microsoft Corporation System and method for editing content in an on-line network
US5680461A (en) 1995-10-26 1997-10-21 Sun Microsystems, Inc. Secure network protocol system and method
US5819019A (en) 1995-12-01 1998-10-06 Silicon Graphics, Inc. System/method for recovering network resources in a distributed environment, via registered callbacks
US5842219A (en) 1996-03-14 1998-11-24 International Business Machines Corporation Method and system for providing a multiple property searching capability within an object-oriented distributed computing network
US5790548A (en) 1996-04-18 1998-08-04 Bell Atlantic Network Services, Inc. Universal access multimedia data network
US6016505A (en) 1996-04-30 2000-01-18 International Business Machines Corporation Program product to effect barrier synchronization in a distributed computing environment
US5901227A (en) 1996-06-20 1999-05-04 Novell, Inc. Method and apparatus for implementing partial and complete optional key escrow
US5862331A (en) 1996-06-21 1999-01-19 Sun Microsystems, Inc. Name service system and method for automatic updating on interconnected hosts
US5818448A (en) * 1996-07-02 1998-10-06 Sun Microsystems, Inc. Apparatus and method for identifying server computer aggregation topologies
US5774660A (en) 1996-08-05 1998-06-30 Resonate, Inc. World-wide-web server with delayed resource-binding for resource-based load balancing on a distributed resource multi-node network
EP0825524B1 (de) * 1996-08-20 2000-01-19 Alcatel Verfahren zur Verwaltung der Benennung von Objekten
US5983351A (en) 1996-10-16 1999-11-09 Intellectual Protocols, L.L.C. Web site copyright registration system and method
US5935242A (en) * 1996-10-28 1999-08-10 Sun Microsystems, Inc. Method and apparatus for initializing a device
GB2321981B (en) * 1997-02-06 2002-01-09 Ibm Hosted machine code installation
US5999988A (en) 1997-03-31 1999-12-07 Sun Microsystems, Inc. Method and apparatus for generating and employing a run-time generated stub to reference an object in object oriented systems
US6003065A (en) 1997-04-24 1999-12-14 Sun Microsystems, Inc. Method and system for distributed processing of applications on host and peripheral devices
US6035118A (en) * 1997-06-23 2000-03-07 Sun Microsystems, Inc. Mechanism to eliminate the performance penalty of computed jump targets in a pipelined processor
US6125382A (en) * 1997-07-25 2000-09-26 International Business Machines Corporation Distributed thread mechanism and method
US5966702A (en) 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
US6026237A (en) * 1997-11-03 2000-02-15 International Business Machines Corporation System and method for dynamic modification of class files

Also Published As

Publication number Publication date
KR20010099790A (ko) 2001-11-09
WO2000028431A1 (en) 2000-05-18
CA2350645C (en) 2009-02-10
CN1122229C (zh) 2003-09-24
AU1127100A (en) 2000-05-29
AU772975B2 (en) 2004-05-13
EP1138000A1 (en) 2001-10-04
CA2350645A1 (en) 2000-05-18
CN1330785A (zh) 2002-01-09
EP1138000A4 (en) 2006-09-20
US6385643B1 (en) 2002-05-07
JP2002529855A (ja) 2002-09-10

Similar Documents

Publication Publication Date Title
KR100673627B1 (ko) 분산 처리 시스템에서 메세지 통과 커널을 갖는클러스터형 엔터프라이즈 java™
KR100614266B1 (ko) 안전 분산 처리 시스템에서의 클러스터형 엔터프라이즈java™
KR100614265B1 (ko) 분산 처리 시스템에서의 복사된 네이밍 서비스
KR100768959B1 (ko) 분산 처리 시스템의 스마트 스터브 또는 엔터프라이즈 java™ 빈
AU2003244549A1 (en) Clustered enterprise java in a secure distributed processing system

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121226

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20131219

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20141231

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20151217

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20161220

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20171219

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20181226

Year of fee payment: 13