RPC, 원격 프로시저 호출, 다른 시스템의 서브루틴을 호출하는 한 시스템의 프로그램 동작을 정의하는 원격 프로시저 호출 특징:
원격 구현을 로컬로 이동했습니다. 실제로는 원격 호출과 로컬 호출 간에 차이가 없습니다.
cs 모드를 사용하면 클라이언트가 요청을 시작하고 서버는 요청 매개변수를 받은 후 이를 실행합니다.
프로세스 간 및 네트워크 간 호출의 근본적인 복잡성을 보호하면 비즈니스 로직에 더 집중할 수 있습니다.
1.2 특정 구현 프레임워크
더보(아파치 알리바바 자바)
모탄(웨이보)
tars(Tencent 내부)
GRPC(그프씨씨)
절약
스프링 클라우드 오픈페인
1.3 애플리케이션 시나리오
네트워크 간 통신에 사용할 수 있습니다.
2. RPC의 핵심 기술 포인트 & rpc 프로세스에 대한 단일 호출
2.1 RPC 프로세스
프로세스
클라이언트는 인터페이스를 호출하고 프록시 클래스로 이동하여 요청을 조합하고 직렬화한 다음 프로토콜을 인코딩하여 보냅니다.
서버는 요청을 수신하고 프로토콜 구문 분석 및 역직렬화를 수행하여 요청 매개변수를 얻습니다.
서버는 요청 매개변수를 기반으로 인터페이스 구현을 호출한 다음 응답을 조합합니다.
같은 방식으로 응답이 반환됩니다.
두 개의 네트워크 모듈은 어떻게 연결됩니까?
등록센터는 데이터를 보관하는 곳으로, 모니터링 기능을 제공하는 것이 가장 좋습니다.등록 센터는 rpc 프레임워크와 별개입니다. 공통등록센터 : 사육사, 나코스 등
다른 기능들
경로 필터 사용 가능한 공급자
로드 밸런싱: 사용 가능한 공급자 중에서 사용할 공급자를 선택합니다.
퓨즈 제한: 흐름 제어
네트워크 처리
프로토콜 처리
RPC 장점
더욱 쉽게 분산 애플리케이션을 구축하고, 서비스를 분리하고, 쉽게 확장할 수 있습니다.
RPC는 일반적으로 긴 연결을 사용하므로 모든 통신에 대해 연결을 설정할 필요가 없으며 네트워크 오버헤드가 줄어듭니다.
RPC에는 서비스 변경 사항을 동적으로 감지하고 시각화할 수 있는 등록 센터가 필요합니다.
풍부한 백그라운드 관리 기능, 인터페이스 서비스 통합 관리, 발신자 인식 없음, 통합 운영
간소화된 프로토콜, 더 높은 효율성, 높은 개인 정보 보호 및 보안
로드 밸런싱, 회로 차단기 및 전류 제한과 같은 기능이 있습니다.
2.2 직렬화 기술
모든 직렬화 프레임워크: 핵심 아이디어는 디자인입니다.직렬화 프로토콜,객체 유형, 속성 유형 및 속성 값을 고정된 형식으로 바이너리 바이트 스트림에 기록하여 직렬화를 완료합니다.를 입력한 후 고정된 형식에 따라 객체 유형, 속성 유형, 속성 값을 하나씩 읽어오고, 이 정보를 통해 새로운 객체를 다시 생성하여 역직렬화를 완료합니다.
직렬화 방법
JDK 네이티브 직렬화
경량 텍스트 데이터 교환 형식 - json/XML
가독성이 좋고 읽기 및 디버깅에 편리합니다. 다국어 지원으로 직렬화한 후의 바이트 파일은 상대적으로 크고 상대적으로 비효율적입니다. 그러나 XML에 비해 직렬화 후의 바이트 스트림은 더 작습니다. 특히 프런트엔드와 제3자가 API를 제공합니다.
헤시안동적 유형의 바이너리이며 언어 간 Xu Lihua 프레임워크를 지원합니다.
Hessian 성능은 JDK 및 JSON 직렬화보다 훨씬 효율적입니다. 그리고 생성되는 바이트 수도 더 적습니다.호환성과 안정성이 매우 우수함,따라서 Hessian은 RPC 프레임워크에서 원격 통신을 위한 직렬화 프로토콜로 더 적합합니다.
프로토버프
Google이 출시한 오픈 소스 시퀀스 라이브러리는 다국어를 지원하는 가볍고 효율적인 구조화된 데이터 저장 형식입니다.
빠른 속도, 높은 압축률, 작은 크기. 직렬화 후 볼륨은 JSON 및 Hessian보다 훨씬 작습니다.
PRC는 직렬화 프레임워크를 어떻게 선택합니까?
선택 요인
보안: 첫 번째 고려 사항은 직렬화에 보안 취약점이 있는 경우 온라인 서비스가 침해될 가능성이 있다는 것입니다(JDK 기본 직렬화에는 취약점이 있습니다).
호환성: 버전 업그레이드 후 크로스 플랫폼, 크로스 언어 등 직렬화 프로토콜의 호환성이 매우 좋은가요?
다양성: 모든 유형을 직렬화 및 역직렬화할 수 있습니다. 특정 유형의 매개변수를 추가한 후 서버가 갑자기 서비스 인터페이스 메소드를 호출할 수 없게 되는 일이 없습니다.
성능 및 효율성: 직렬화 및 역직렬화 프로세스는 RPC 호출에 필요한 프로세스입니다. 성능 및 효율성은 RPC 프레임워크의 전체 성능 및 효율성과 직접적인 관련이 있습니다.
공간 오버헤드: 직렬화 후 바이너리 데이터의 크기입니다. 직렬화된 바이트 데이터의 크기가 작을수록 네트워크를 통해 전송되는 데이터의 양이 적어지며, 이는 RPC 호출과 직접적인 관련이 있습니다. 응답 시간
고려사항
구성하기 너무 복잡하고 속성이 많으며 여러 수준의 중첩이 있는 객체는 피하세요.
너무 큰 객체(큰 문자열, 매우 큰 배열 등)는 피하세요.
직렬화 프레임워크에서 지원하지 않는 매개변수로 유형을 전달하지 마세요.
객체가 복잡한 상속 관계를 가지지 않도록 방지
2.3 애플리케이션 계층 통신 프로토콜-http
2.3.1 기본 개념
대부분의 RPC는 http를 자체적으로 개발하고 http1.1도 지원합니다.
IO 란 무엇입니까?
IO는 내부 컴퓨터와 외부 장치 간에 데이터를 복사하는 프로세스입니다. 네트워크 데이터가 도착하면 먼저 운영 체제의 커널 캐시 영역에 저장되고 애플리케이션이 이를 수집할 때까지 기다립니다.
엣지 트리거
에지 트리거 모드를 사용할 때 모니터링되는 소켓 설명자에서 읽기 가능한 이벤트가 발생하면 서버는 epoll_wait에서 한 번만 깨어납니다. 프로세스가 커널에서 데이터를 읽기 위해 읽기 함수를 호출하지 않더라도 여전히 깨어납니다. 따라서 우리 프로그램은 커널 버퍼에 있는 데이터를 한꺼번에 읽어야 합니다.
수평 트리거
수평 트리거 모드를 사용할 때 모니터링되는 소켓에서 읽기 가능한 이벤트가 발생하면 읽기 기능이 커널 버퍼 데이터를 읽을 때까지 서버가 epoll_wait에서 계속 깨어납니다. 그 목적은 읽어야 할 데이터가 있음을 알려주는 것입니다. 읽다. .
이벤트 중심 IO
읽기 요청을 시작한 후 데이터를 읽기 전에 읽기 준비 이벤트 알림을 기다립니다.
비동기식 IO
읽기 요청을 시작한 후 읽기가 완료된 후 운영 체제에서 알림을 보낼 때까지 기다렸다가 구현을 위해 기능을 운영 체제에 완전히 넘겨줍니다.
2.3.2 운영 체제의 IO 모델은 무엇입니까?
동기식 차단 IO 동기식 비차단 IO IO 멀티플렉싱 신호 기반 IO 비동기식 IO
동기식 차단 IO
읽기의 첫 번째 단계가 차단되는데, 이를 흔히 차단 IO라고 합니다. 즉, 읽기가 준비될 때까지 읽기의 첫 번째 단계가 차단되는 경우 이를 차단 IO라고 합니다.