RPC는 원격 절차 호출의 약어입니다. 대규모 분산 응용 프로그램에서 널리 사용됩니다. 그 기능은 시스템의 수직 분할을 돕고 시스템을 쉽게 확장 할 수 있도록하는 것입니다. Java에는 각각 고유 한 특성을 가진 많은 RPC 프레임 워크가 있으며 널리 사용되는 프레임 워크에는 RMI, Hessian, Dubbo 등이 있습니다. RPC의 또 다른 기능은 언어를 교차 할 수 있다는 것입니다. 이 기사는 RPC 만 Java 언어로만 취합니다.
RPC에 대한 논리적 관계 다이어그램이 있으며 RMI를 예로 들어 보입니다.
다른 프레임 워크 구조는 유사하며, 차이점은 객체의 직렬화 방법, 객체를 전송하기위한 통신 프로토콜, 등록 센터의 관리 및 장애 조치 설계 (Zookeeper 사용)에 있습니다.
클라이언트와 서버는 다른 JVM에서 실행할 수 있습니다. 클라이언트는 인터페이스 만 소개하면됩니다. 런타임에 필요한 인터페이스 및 데이터 구현은 모두 서버 측에 있습니다. RPC의 주요 종속성 기술은 직렬화, 사막화 및 전송 프로토콜입니다. Java는 객체의 직렬화, 사제화 및 전송 및 직렬화 된 데이터의 전송에 해당합니다. RMI 직렬화 및 사제화는 Java가 소유합니다. Hessian의 직렬화 및 사제화는 개인이며, 전송 프로토콜은 HTTP이며, Dubbo Serialization은 여러 가지 방법으로 선택 될 수 있습니다. 일반적으로 Hessian 직렬화 프로토콜이 사용되며 전송은 TCP 프로토콜로, 고성능 NIO 프레임 워크 Netty를 사용합니다. 직렬화와 관련하여 Google의 Profuffer, Jboss Marshalling, Apache Thrift 등과 같은 몇 가지 사항도 이전에 Probuffer를 소개하는 블로그 게시물을 썼습니다.
1. RMI (원격 메소드 호출)
Java와 함께 제공되는 원격 방법 호출 도구에는 특정 제한 사항이 있습니다. 결국, 그것은 처음에 Java 언어의 디자인이었습니다. 나중에 많은 프레임 워크의 원칙은 RMI를 기반으로했습니다. RMI의 사용은 다음과 같습니다.
외부 인터페이스
public interface iservice 확장 원격 {public String QueryName (문자열 번호)은 remoteexception을 던집니다. } </span>서비스 구현
java.rmi.remoteexception import; import java.rmi.server.unicastremoteobject; // 서비스 구현 공개 클래스 서비스 이플은 단일 조치를 확장합니다. 단일 조치 전환 구현 Iservice {/ ***/ private static final long serialversionuid = 682805210518738166L; / ** * @Throws Remoteexception */ protected servicempl ()는 remoteexception {super (); } / * (비 Javadoc) * @see com.suning.ebuy.wd.web.iservice#queryName (java.lang.string) * / @override public String QueryName (String No)은 remoteexception을 던졌습니다. return string.valueof (System.CurrentTimeMillis ()); }}RMI 클라이언트
java.rmi.remoteexception import; java.rmi.registry.locateregistry; Java.rmi.registry.registry import; // RMI 서버 공개 클래스 서버 {public static void main (String [] args) {// Register Manager Registry Registry = null; try {// 서비스 레지스트리 생성 = locateregistry.createregistry (8088); } catch (remoteexception e) {} try {// service servicepl server = new servicepl (); // 서비스를 바인딩하고 레지스트리의 이름을 지정합니다 .rebind ( "Vince", Server); System.out.println ( "Bind Server"); } catch (remoteexception e) {}}}서비스 등록 관리자는 서버에 작성되었으며 물론 별도의 서비스로 추출 할 수도 있습니다. 다른 프레임 워크에서 Zookeeper는 종종 등록 관리 역할로 사용됩니다.
2. Hessian (HTTP 기반 원격 메소드 호출)
HTTP 프로토콜 전송을 기반으로 성능은 완벽하지 않습니다. 로드 밸런싱 및 고장 전송은 응용 프로그램의로드 밸런서에 따라 다릅니다. Hessian의 사용은 RMI와 유사합니다. 차이점은 레지스트리의 역할을 경시한다는 것입니다. 표시된 주소 통화를 통해 HessianProxyFactory는 구성된 주소를 기반으로 프록시 객체를 사용합니다. 또한 Hessian의 JAR 패키지도 소개됩니다.
3. Dubbo (TCP 기반 RPC 프레임 워크 Open Source on Taobao)
NIO 프레임 워크 Netty를 기반으로 한 고성능 RPC 프레임 워크는 Alibaba의 오픈 소스입니다. 전체 원칙은 다음과 같습니다.
Dubbo를 이해하기 전에 먼저 Zookeeper에 대한 심층적 인 이해가 있어야합니다. Zookeeper를 이해 한 후 Dubbo는 비밀이 없습니다.
Zookeeper는 Dubbo Services의 등록 센터입니다. Dubbo의 원래 데이터베이스 기반 등록 센터는 Zookeeper를 사용하지 않았습니다. Zookeeper는 분산 서비스 프레임 워크입니다. 트리 유형 디렉토리 서비스를위한 데이터 스토리지이며 클러스터의 데이터를 관리 할 수 있습니다. Dubbo Services의 등록 센터로 사용할 수 있습니다. Dubbo는 Zookeeper와 함께 클러스터 배포를 수행 할 수 있습니다. 공급자가 정전 또는 기타 오프 에이어와 같은 비정상적인 다운 타임이있는 경우, Zookeeper 등록 센터는 공급자 정보를 자동으로 삭제할 수 있습니다. 제공자가 다시 시작하면 등록 데이터 및 구독 요청을 자동으로 복원 할 수 있습니다.
Dubbo의 자세한 설명은 Taobao 오픈 소스에서 매우 상세합니다. 많은 생산 프로젝트에서 Dubbo는 많은 생산 프로젝트에 사용됩니다. 그 과정에서 나는 또한 많은 정보, 특히 제대로 설정되지 않은 많은 구성에주의를 기울여야 할 많은 것들을 발견했으며 기존 오픈 소스 Dubbo를 기반으로 사용자 정의하고 최적화하는 것이 가장 좋습니다.