JGroups

JGroups
JGroups
개발자벨라 반
안정된 릴리스
5.x5.1.6.최종 / 2021년 4월 6일; 14개월 전(2021-04-06)[1]
4.x4.2.12.최종 / 2021년 4월 1일; 14개월 전(2021-04-01)[1]
저장소github.com/belaban/JGroups
기입처자바
운영 체제크로스 플랫폼
크기2.1 MB
유형신뢰성 높은 멀티캐스트시스템
면허증.Apache 라이센스 2.0
웹 사이트www.jgroups.org

JGroups는 Java 언어로 작성된 신뢰할 수 있는 일대일 또는 일대다 통신을 위한 라이브러리입니다.

멤버가 서로 메시지를 보내는 프로세스 그룹을 만드는 데 사용할 수 있습니다.개발자는 JGroups를 사용하여 신뢰성이 도입의 문제가 되는 신뢰성 높은 멀티포인트(멀티캐스트) 애플리케이션을 작성할 수 있습니다.JGroups는 또한 애플리케이션 개발자가 직접 이 논리를 구현하지 않아도 됩니다.이것에 의해, 개발 시간이 큰폭으로 단축되어 코드를 변경하지 않고 애플리케이션을 다른 환경에 도입할 수 있습니다.

특징들

  • 그룹 생성 및 삭제그룹 멤버는 LAN 또는 WAN으로 분산할 수 있습니다.
  • 그룹 가입 및 탈퇴
  • 가입 멤버/좌측 멤버/크래시 멤버에 대한 멤버쉽 검출 및 통지
  • 크래시 멤버 검출 및 삭제
  • 멤버 투 그룹 메시지 송수신(포인트 투 멀티 포인트)
  • 멤버간 메시지 송수신(포인트 투 포인트)

코드샘플

다음 코드는 JGroups를 사용한 단순한 명령줄 IRC 클라이언트의 구현을 나타냅니다.

일반의 학급 채팅 확장 리시버 어댑터 {     사적인 JChannel 채널.;      일반의 채팅(스트링 소품, 스트링 이름.) {         채널. = 신규 JChannel(소품)             .setName(이름.)             .set Receiver(수신자)(이것.)             .연결하다("채팅 클러스터");     }      일반의 무효 승인필(보다 보다) {         시스템..나가..인쇄물("** 보기: %s\n", 보다);     }      일반의 무효 받다(메세지 메시지) {         시스템..나가..인쇄물("%s부터: %s\n", 메시지.get 소스(), 메시지.get Object(개체)());     }      사적인 무효 보내세요(스트링 ) {         해라 {             채널..보내세요(신규 메세지(무효, ));         } 또 만나 (예외. e) {}     }      일반의 무효 달려.() 던지다 예외. {         버퍼리더  = 신규 버퍼리더(신규 Input Stream Reader(시스템..));          하는 동안에 (진실의) {             시스템..나가..인쇄물(">");             시스템..나가..붉어지다();             보내세요(.회선 읽기().대소문자를 낮추기());         }     }      일반의 무효 끝.() 던지다 예외. {         채널..가까운.();     }      일반의 정적인 무효 개시하다(채팅 고객) 던지다 예외. {         해라 {             고객.달려.();         } 또 만나 (예외. e) {         } 마침내. {             고객.끝.();         }     }      일반의 정적인 무효 주된(스트링[] args) 던지다 예외. {         스트링 소품 = "syslog.xml";         스트링 이름.;          위해서 (인트 i = 0; i < > args.길이; i++) {             한다면 (args[i].동등.("-외부재")) {                 소품 = args[++i];                 계속하다.;             }              한다면 (args[i].동등.(이름)) {                 이름. = args[++i];                 계속하다.;             }              시스템..나가..인쇄("채팅 [-props XML config][-name name]");             돌아가다;         }          개시하다(신규 채팅(소품, 이름.));     } } 

JChannel은 XML Configuration에서 인스턴스화됩니다(예:udp.xml이 채널은 클러스터에 가입하기 위한 엔드포인트입니다.

다음으로 리시버가 설정됩니다.즉, 2개의 콜백이 호출됩니다.

  • viewAccepted(View view)새 멤버가 가입하거나 기존 멤버가 클러스터에서 탈퇴할 때
  • receive(Message msg)다른 클러스터 멤버로부터 메시지를 수신했을 때

그런 다음 채널은 클러스터 "ChatCluster"에 가입합니다.앞으로는 메시지를 송수신할 수 있으며, 모든 클러스터 멤버(새로 가입한 멤버 포함)에 새로운 뷰(이 멤버 포함)가 설치됩니다.

메인 루프에 입력하면 발신인을 포함한 모든 클러스터 구성원으로 전송되는 메시지가 생성됩니다.

채팅 애플리케이션의 인스턴스는 동일한 프로세스에서 로컬네트워크의 다른 호스트, 다른 네트워크의 호스트 또는 클라우드에서 실행할 수 있습니다.코드는 그대로이며 설정만 변경하면 됩니다.

예를 들어 로컬 네트워크에서는 IP 멀티캐스팅을 사용할 수 있습니다.IP 멀티캐스팅을 디세블로 하면, TCP 를 전송으로서 사용할 수 있습니다.클라우드에서 실행되는 경우 TCP와 클라우드 검색 프로토콜이 사용됩니다.

유연한 프로토콜 스택

JGroups의 가장 강력한 특징은 유연한 프로토콜 스택으로, 개발자는 이를 응용 프로그램 요구 사항과 네트워크 특성에 정확히 일치하도록 조정할 수 있습니다.이것의 장점은 사용하는 것에 대해서만 요금을 지불한다는 것이다.프로토콜을 혼합하고 일치시킴으로써 다양한 애플리케이션 요구사항을 충족할 수 있습니다.예를 들어 JGroups에는 다수의 프로토콜이 포함되어 있습니다(단, 누구나 직접 작성할 수 있습니다).

  • 전송 프로토콜: UDP(IP 멀티캐스트), TCP
  • 대용량 메시지의 단편화
  • 결합 노드의 초기 멤버쉽을 검색하기 위한 검색 프로토콜
  • 신뢰할 수 있는 유니캐스트 및 멀티캐스트메시지 전송잃어버린 메시지가 재발송됩니다.
  • 장애 검출: 크래시된 멤버는 멤버십에서 제외됩니다.
  • 주문 프로토콜:Fifo, Total Order(시퀀서 또는 토큰 기반)
  • 가입 또는 크래시된 멤버의 멤버십 및 알림
  • 네트워크 파티션(스플릿 브레인) 검출 및 병합
  • 흐름 제어
  • 암호화 및 인증(SASL 지원 포함)
  • 압축

구성 요소

빌딩 블록은 JGroups 채널을 통해 계층화된 클래스이며 다음과 같은 상위 수준의 추상화를 제공합니다.

  • 개별 또는 모든 클러스터 노드에 대한 RPC
  • 분산 캐시
  • 분산 잠금
  • 분산 아토믹 카운터
  • 분산 태스크 실행

레퍼런스

  1. ^ a b "Releases · belaban/JGroups". github.com. Retrieved 2021-04-13.

외부 링크