JAVA 에서 자주 사용 하 는 RPC 프레임 워 크 분석

RPC 는 원 격 프로 세 스 호출 의 약칭 으로 대규모 분산 응용 에 광범 위 하 게 응용 되 며 시스템 의 수직 분할 에 도움 이 되 고 시스템 을 더욱 쉽게 확장 하 는 역할 을 한다.자바 에는 RPC 프레임 워 크 가 많 고 각각 특색 이 있 으 며 RMI,Hessian,Dubbo 등 이 널리 사용 된다.RPC 의 또 다른 특징 은 언어 를 뛰 어 넘 을 수 있다 는 것 이다.본 고 는 JAVA 언어의 RPC 만 을 예 로 들 자.
RPC 에 대한 논리 적 관계 도 는 RMI 를 예 로 들 면:

다른 프레임 워 크 구조 도 비슷 하 다.대상 의 직렬 화 방법,전송 대상 의 통신 프로 토 콜,등록 센터 의 관리 와 failover 디자인(zookeeper 이용)과 구별 된다.
클 라 이언 트 와 서버 는 서로 다른 JVM 에서 실행 할 수 있 습 니 다.클 라 이언 트 는 인터페이스 만 도입 하고 인터페이스의 실현 과 실행 에 필요 한 데 이 터 는 모두 서버 에 있 습 니 다.RPC 의 주요 의존 기술 은 직렬 화,반 직렬 화 와 전송 프로 토 콜 입 니 다.JAVA 에서 대응 하 는 것 은 대상 의 서열 화,반 직렬 화 와 직렬 화 된 데이터 전송 입 니 다.RMI 의 직렬 화 와 역 직렬 화 는 JAVA 가 자체 적 으로 가지 고 있 는 것 으로 Hessian 의 직렬 화 와 역 직렬 화 는 사유 이 고 전송 프로 토 콜 은 HTTP 이 며 Dubbo 의 직렬 화 는 여러 가지 선택 이 가능 하 며 일반적으로 Hessian 의 직렬 화 프로 토 콜 을 사용 하고 전송 은 TCP 프로 토 콜 로 고성능 NIO 프레임 넷 티 를 사용 합 니 다.서열 화 에 대해 저 는 Google 의 ProBuffer,JBoss Marshalling,Apache Thrift 등 도 알 고 있 습 니 다.예전 에 ProBuffer 를 소개 하 는 박문 이 있 었 습 니 다.
1.RMI(원 격 방법 호출)
JAVA 가 자체 적 으로 가지 고 있 는 원 격 방법 호출 도 구 는 한계 가 있 습 니 다.왜냐하면 JAVA 언어 가 처음에 디자인 되 었 기 때 문 입 니 다.나중에 많은 구조의 원 리 는 RMI 를 바탕 으로 RMI 의 사용 은 다음 과 같 습 니 다.
대외 인터페이스

public interface IService extends Remote { 
 
  public String queryName(String no) throws RemoteException; 
 
}</span> 
서비스 구현

import java.rmi.RemoteException; 
import java.rmi.server.UnicastRemoteObject; 
 
//      
public class ServiceImpl extends UnicastRemoteObject implements IService { 
 
  /** 
   */ 
  private static final long serialVersionUID = 682805210518738166L; 
 
  /** 
   * @throws RemoteException 
   */ 
  protected ServiceImpl() throws RemoteException { 
    super(); 
  } 
 
  /* (non-Javadoc) 
   * @see com.suning.ebuy.wd.web.IService#queryName(java.lang.String) 
   */ 
  @Override 
  public String queryName(String no) throws RemoteException { 
    //         
    System.out.println("hello" + no); 
    return String.valueOf(System.currentTimeMillis()); 
  } 
   
} 
RMI 클 라 이언 트

import java.rmi.RemoteException; 
import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 
 
// RMI    
public class Server { 
 
  public static void main(String[] args) { 
    //       
    Registry registry = null; 
    try { 
      //             
      registry = LocateRegistry.createRegistry(8088); 
 
    } catch (RemoteException e) { 
       
    } 
    try { 
      //        
      ServiceImpl server = new ServiceImpl(); 
      //         
      registry.rebind("vince", server); 
       
      System.out.println("bind server"); 
    } catch (RemoteException e) { 
       
    } 
  } 
} 
서비스 등록 관리 자 는 Server 에 쓰 여 있 습 니 다.물론 단독 서 비 스 를 추출 할 수 있 습 니 다.다른 프레임 워 크 에 서 는 Zookeeper 로 등록 관리 역할 을 합 니 다.
2.Hessian(HTTP 기반 원 격 호출)
HTTP 프로 토 콜 전송 을 기반 으로 성능 면 에서 완벽 하지 못 하 며,부하 균형 과 실효 전 이 는 애플 리 케 이 션 의 부하 이퀄 라이저 에 의존 하고 있 으 며,Hessian 의 사용 은 RMI 와 유사 하 며,레 지 스 트 리 의 역할 을 약화 시 킨 것 과 구별 되 며,표 시 된 주소 호출 을 통 해 Hessian Proxy Factory 루트 가 설정 한 주소 create 를 이용 하여 프 록 시 대상 을 만 들 고,Hessian 의 Jar 패키지 도 도입 해 야 한다.

3.Dubbo(타 오 바 오 오픈 소스 의 TCP 기반 RPC 프레임 워 크)
NIO 프레임 워 크 Netty 의 고성능 RPC 프레임 워 크 를 바탕 으로 알 리 바 바 가 오픈 한 것 으로 전체적인 원 리 는 다음 과 같다.

Dubbo 를 이해 하기 전에 Zookeeper 에 대해 깊이 이해 해 야 한다.zookeeper 를 이해 한 후에 Dubbo 도 비밀 이 없다.
Zookeeper 는 Dubbo 서비스의 등록 센터 로 서 Dubbo 는 원래 데이터 베 이 스 를 기반 으로 하 는 등록 센터 로 Zookeeper 를 사용 하지 않 았 습 니 다.Zookeeper 는 분포 식 서비스 프레임 워 크 로 트 리 형 디 렉 터 리 서비스의 데이터 저장 으로 클 러 스 터 관리 데 이 터 를 할 수 있 습 니 다.여 기 는 Dubbo 서비스 등록 센터 로 서 Dubbo 는 Zookeeper 와 클 러 스 터 배 치 를 할 수 있 습 니 다.공급 자가 정전 등 이상 정지 가 발생 했 을 때 Zookeeper 등록 센터 는 공급 자 정 보 를 자동 으로 삭제 하고 공급 자가 다시 시작 할 때 등록 데이터 와 구독 요청 을 자동 으로 복원 할 수 있 습 니 다.
Dubbo 의 상세 한 설명 은 타 오 바 오 개원 에서 매우 상세 하 게 말 했 습 니 다.업무 중 에 많은 생산 프로젝트 가 Dubbo 를 사 용 했 습 니 다.그 과정 에서 주의해 야 할 부분 도 많이 발 견 했 습 니 다.특히 그 많은 배치,설정 이 적당 하지 않 으 면 사람 을 귀 찮 게 할 수 있 습 니 다.기 존의 오픈 소스 를 바탕 으로 하 는 Dubbo 를 다시 맞 춤 형 으로 최적화 하 는 것 이 좋 습 니 다.

좋은 웹페이지 즐겨찾기