>  기사  >  php教程  >  Spider RPC 개발 가이드

Spider RPC 개발 가이드

高洛峰
高洛峰원래의
2016-11-21 13:55:511147검색

프로토콜 및 호환성

Spider는 Java 언어를 사용하여 개발되었으며, Spring을 IoC 컨테이너로 사용하고, 이를 기반으로 TCP/IP 프로토콜을 채택하여 특성에 맞게 설계되었습니다. SaaS 시스템 모델은 다중 테넌트 시스템, 고가용성 및 분산 배포 요구 사항을 충족하는 데 더 유연하고 효율적입니다.

JSON을 직렬화 메커니즘으로 사용하면 후속 버전에서는 protobuf 지원을 고려할 수 있습니다(java/c++/c#은 클래스 라이브러리에서 지원됨).

성능과 안정성을 최대화하기 위해 spider는 Sun JDK1.8을 기반으로 컴파일되므로 더 이상 사용되지 않는 기능을 사용하지 않아야 합니다.

다양한 환경과 인터넷 애플리케이션에 최대한 적응하기 위해서는 최소한 tomcat/jboss 애플리케이션 서버 하에서는 스파이더가 실행될 수 있어야 합니다.

배포 모드

언제든지 Spider는 중앙 관리 모드 또는 독립 관리 모드로 실행될 수 있습니다.

중앙 집중식 관리 모드: 중앙 집중식 모드를 사용하려면 서비스 센터를 활성화해야 합니다. 수십 개의 실행 중인 노드가 있는 대규모 배포의 경우 일반적으로 노드를 추가하거나 축소하거나 서비스를 분할하려면 많은 수의 구성 파일이 필요합니다. 일반적으로 새 노드의 업스트림에 위치한 각 노드는 해당 라우팅 및 매핑 서버 매개 변수를 수정해야 합니다. 중앙 집중식 관리 모델을 사용하면 서비스 센터에 로그인하여 관련 구성을 수정하기만 하면 노드 변경 사항이 해당 업스트림 노드에 자동으로 푸시됩니다. 중앙관리 모드로 실행 시 전체 플랫폼 내 모든 노드의 상태, 서비스별 TPS, 응답시간 등을 서비스 센터에서 확인할 수 있습니다.

독립 관리 모드: 독립 관리 모드에서는 서비스 센터 활성화가 필요하지 않습니다. 예를 들어 전체 플랫폼이 10개 노드를 초과하지 않는 등 노드 수가 적은 경우 일반적으로 독립 모드가 중앙 집중식 관리 모드보다 간단합니다. 독립 관리 모드로 실행 시 스파이더에서 제공하는 Restful API를 통해 현재 노드의 실행 상태를 확인할 수 있습니다.

서비스 식별

Spider는 두 가지 유형의 서비스 게시 주석을 지원합니다.

Spider는 스파이더 서비스를 식별하기 위한 두 가지 사용자 정의 주석을 정의합니다.

서비스 모듈

@Retention(RetentionPolicy.RUNTIME)

public @interface ServiceModule {

String subSystemId() 기본값 "0";

}

@ServiceModule은 단지 클래스 주석입니다. 이 주석이 포함된 인터페이스는 스파이더 서비스 인터페이스 클래스로 간주됩니다. 이 인터페이스의 정의는 스파이더 서비스로 식별되기 위한 필수 조건입니다.

서비스 인터페이스

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Service {
    String serviceId(); // 服务编号,8位ASCII字符,其中00000000-00000099为spider内部保留,00000100-00000199为服务中心保留
    String desc(); //服务描述
    int timeout() default 0; //超时时间,单位毫秒
    boolean needLog() default false; //设置是否记录日志
    int broadcast() default 0;  //设置该请求是否广播,0:不广播;1:广播但无需相应;2:广播并响应
}

@Service는 스파이더 서비스 번호, 스파이더 서비스 설명 및 스파이더 서비스 시간 초과를 설정하는 데 사용되는 세 가지 속성을 포함하는 메서드 주석입니다. 시간 제한은 선택 사항이며 기본값은 spider.xml에 설정된 시간 제한입니다. spider.xml에 정의되어 있지 않으면 기본값은 300초입니다.

@ServiceModule 주석이 달린 인터페이스에 정의된 @Service 주석이 달린 메서드만 스파이더 서비스로 식별됩니다. 올바르게 게시된 후에는 인터페이스를 사용하여 원격 서비스에 대한 서비스 또는 프록시 호출을 제공할 수 있습니다.

Broadcast=2인 서비스의 경우 반환 값은 com.ld.net.spider.pojo.BroadcastResult의 data 속성에 래핑되어야 합니다. 자세한 내용은 이 클래스의 javadoc 설명을 참조하세요.

환경 변수

스파이더에는 관련 옵션을 제어하기 위한 몇 가지 환경 변수가 있습니다. 현재 아래와 같이 설정 가능한 환경 변수가 있습니다.

l SPIDER_LOG, default/tmp/spider/stat/${nodeName}

l SPIDER_HOME, default/usr/local/spider/${nodeName}

l SPIDER_CONFIG, spider.xml을 지정하여 시작 파일, 기본 클래스 경로: spider.xml, 구성 파일 섹션을 참조하세요.

구성 파일

구성 파일 섹션을 참조하세요.

서비스 퍼블리싱 및 대행

서비스 게시: spider.localService 플러그인 아래의 serviceExportPackage 요소는 스파이더 노드가 서버 역할을 할 때 자동으로 게시되는 스파이더 서비스의 패키지 경로를 또는로 구분하여 정의합니다. 서버가 이 파라미터에 해당 경로를 설정해 주기만 하면 자바 클라이언트는 serviceProxyPackage 파라미터에 해당 경로를 설정해 주기만 하면 @Autowired 의존성 주입을 통해 원격 서버 패키지가 제공하는 해당 서비스를 직접 호출할 수 있다.

서비스 프록시: java 클라이언트의 경우 스파이더는 자동 프록시 기능을 제공합니다. 개발자는 로컬 Spring 서비스를 호출하는 것처럼 원격 서버에서 스파이더 서비스를 호출할 수 있습니다. serviceExportPackage 요소는 자동으로 프록시되어야 하는 스파이더 서비스의 패키지 경로를 또는로 구분하여 정의합니다. C# 또는 C++ 클라이언트와 같은 비 Java 클라이언트의 경우 개발자는 해당 SDK 클라이언트를 호출해야 합니다.

공개된 서비스와 에이전트의 서비스가 중복될 수 없습니다. 서비스를 로컬에서 처리하고 스파이더 에이전트에 의해 다운스트림 서버로 전달해야 하는 경우 릴리스 목록에서 해당 서비스를 구성하십시오. 현재 이러한 서비스는 사용자 프로그래밍을 통해 원격으로 호출할 수 없습니다. 일반적으로 이러한 서비스는 특별한 목적으로 사용되며 방송이라는 라벨이 붙습니다.

PS: 기술적으로 말하면 동일한 서비스의 메서드 서명과 서비스 번호가 클라이언트와 서버에서 동일하다면 호출할 수 있습니다(즉, 메서드 이름은 관련이 없습니다). ), 그러나 향후 버전에서는 정확한 일치가 필요할 수도 있습니다.

스파이더 노드가 NB 역할을 하려는 경우 게시 경로는 serviceExportPackage에 구성되며 서비스의 라우팅 항목인 경우 특정 서비스의 구현도 포함된다는 점에 유의해야 합니다. 로컬 처리로 구문 분석되면 서비스는 NB 노드에서 처리되며 더 이상 전달되지 않습니다. 따라서 NB 역할의 경우 방송 서비스 외에는 serviceExportPackage 하위에 구성하지 않는 것이 좋습니다.

다양한 데이터 유형 지원

현재 버전의 스파이더는 일반 객체를 포함하여 byte[]를 제외한 모든 유형의 데이터 유형을 기본적으로 지원합니다.

서비스 인터페이스 정의 요구사항

유연성, 성능, 개발 효율성 등을 고려하여 서비스 매개변수와 반환값은 객체를 사용하는 것을 권장합니다(기존 RPC 프레임워크는 기본적으로 이 모드(예: gRPC, ICE) 및 매개 변수는 SpiderBizHead 클래스(동적 라우팅 설정과 같은 관련 정보 포함)를 상속합니다. 아래와 같이:

입력 매개변수 DTO:

public class ServiceReq는 SpiderBizHead를 확장합니다. /*동적 라우팅 기능이 필요하지 않으면 SpiderBizHead를 상속할 필요가 없습니다*/ {

}

서비스 서명:

@ServiceModule()

공개 인터페이스 DemoService {

                                ~         

}

또한 사용 중인 C++ 및 기타 프로그래밍 언어에서 동적 프록시를 쉽게 구현할 수 있다는 점도 고려하세요.

C#의 경우 System.Runtime.Remoting.Proxies.RealProxy 클래스 구현을 참조하세요.

==================================== == ==================================

대규모 동시성 j2ee soa 시스템 전문 아키텍처 설계 및 구현, j2ee 시스템 성능 분석 및 최적화에 능숙

oltp&dss oracle&mysql 데이터베이스 설계, 성능 분석 및 최적화, HA, 하위 데이터베이스 및 하위 테이블 애플리케이션 아키텍처 설계 및 구현에 능숙
내 오픈 소스 프로젝트 mysqlawr , dlcache, 로그풀, drpcp. https://git.oschina.net/zhjh256
각 지방의 GSP 규제 요건을 충족하는 지능형 기술 의료기기 관리 시스템 제공

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.