gRPC

홍준섭·2023년 1월 24일
0

네트워크

목록 보기
15/20

RPC(Remote procedure call)

  • 분산 네트워크 환경에서 원격지 컴퓨터의 함수를 호출함
  • 컴퓨터를 연결하는 RPC 프로토콜이 필요함
  • 어플리케이션이 자신의 컴퓨터에서 함수를 호출하도록 하는 경험을 제공하는 stub과 IDL(interface definition language)이 필요함

Protobuf 기능

  • 구조화된 데이터를 직렬화하는 데 사용되는 자유-오픈 소스 크로스 플랫폼 라이브러리
  • 네트워크를 통해 서로 통신하거나 데이터를 저장하는 프로그램을 개발하는 데 유용합니다
  • 이 방법은 일부 데이터의 구조를 설명하는 인터페이스 기술 언어와 구조화된 데이터를 나타내는 바이트의 스트림을 생성하거나 구문 분석하기 위한 그 설명으로부터 소스 코드를 생성하는 프로그램을 포함한다

gRPC 장점

Protobuf (프로토콜 버퍼)

  • gRPC 메시지는 효율적인 이진 메시지 형식인 Protobof를 사용하여 직렬화됩니다
  • 서버와 클라이언트에서 매우 빠르게 직렬화됩니다
  • 직렬화는 작은 메시지 페이로드를 초래하며, 모바일과 같은 제한된 대역폭 시나리오에서 중요합니다

HTTP/2 based

  • gRPC는 HTTP 1.x에 비해 상당한 성능 이점을 제공하는 HTTP의 주요 개정판인 HTTP/2용으로 설계되었다:
    => 이진 프레임 및 압축. HTTP/2 프로토콜은 전송과 수신 모두에서 작고 효율적입니다
    => 단일 TCP 연결을 통해 여러 HTTP/2 호출을 다중화합니다. 멀티플렉싱으로 헤드 오브 라인 차단 제거
  • HTTP/2는 gRPC에만 국한되지 않습니다
    JSON이 포함된 HTTP API를 포함한 많은 요청 유형은 HTTP/2를 사용할 수 있으며 성능 향상의 이점을 얻을 수 있습니다

proto file

그것은 gRPC 서비스와 메시지의 계약을 정의한다
이 파일에서 gRPC 프레임워크는 서비스 기본 클래스, 메시지 및 전체 클라이언트를 생성합니다

서버와 클라이언트 간에 .proto 파일 공유

  • 메시지 및 클라이언트 코드를 끝에서 끝까지 생성할 수 있음
  • 클라이언트의 코드 생성은 클라이언트와 서버의 메시지 중복을 제거하고 강력한 유형의 클라이언트를 생성합니다
  • 클라이언트를 작성할 필요가 없으므로 서비스가 많은 애플리케이션의 개발 시간이 크게 단축됩니다

Strict specification

  • JSON을 사용한 HTTP API의 정식 사양이 존재하지 않습니다.
  • gRPC 사양은 gRPC 서비스가 따라야 하는 형식에 대해 규범적이다. gRPC는 플랫폼과 구현 전반에 걸쳐 일관성이 있기 때문에 논쟁을 없애고 개발자의 시간을 절약한다.

streaming

  • HTTP/2는 오래 지속되는 실시간 통신 스트림을 위한 기반을 제공한다. gRPC는 HTTP/2를 통한 스트리밍에 대한 최고 수준의 지원을 제공한다.
  • gRPC는 스트리밍 없는 서비스, 서버에서 클라이언트로 스트리밍 서비스, 클라이언트에서 서버로 스트리밍 서비스, 양방향 스트리밍 서비스를 제공한다.

Deadline/timeouts & cancellation

  • gRPC를 통해 클라이언트는 RPC가 완료될 때까지 기다릴 수 있는 시간을 지정할 수 있습니다
    => deadline이 서버로 전송되고, 서버는 deadline을 초과할 경우 수행할 작업을 결정할 수 있다.
    => 예를 들어 서버가 시간 초과 시 진행 중인 gRPC/HTTP/데이터베이스 요청을 취소할 수 있습니다
  • 하위 gRPC 호출을 통해 마감 및 취소를 전파하면 리소스 사용 제한 적용에 도움이 됩니다

gRPC 권장 사용 시나리오

  • 마이크로서비스: gRPC는 낮은 지연 시간과 높은 처리량 통신을 위해 설계되었습니다. gRPC는 효율성이 중요한 경량 마이크로서비스에 매우 적합합니다.
  • 포인트 투 포인트 실시간 통신: gRPC는 양방향 스트리밍 지원이 우수하며, gRPC 서비스는 폴링 없이 실시간으로 메시지를 푸시할 수 있습니다.
  • Polyglot 환경: gRPC 툴링은 모든 인기 있는 개발 언어를 지원하므로 gRPC는 다국어 환경에 적합합니다.
  • 네트워크 제약 환경: gRPC 메시지는 경량 메시지 형식인 protobuf로 직렬화됩니다. gRPC 메시지는 항상 동등한 JSON 메시지보다 작습니다.
  • 프로세스 간 통신(IPC): Unix 도메인 소켓 및 명명된 파이프와 같은 IPC 전송을 gRPC와 함께 사용하여 동일한 시스템의 앱 간 통신을 수행할 수 있습니다.

gRPC 단점

Limited browser support

  • 오늘날 브라우저에서 직접 gRPC 서비스를 호출하는 것은 불가능하다
    gRPC는 HTTP/2 기능을 많이 사용하며, gRPC 클라이언트를 지원하기 위해 웹 요청에 필요한 수준의 제어를 제공하는 브라우저는 없다

not human readable

  • HTTP API 요청은 텍스트로 전송되며 사람이 읽고 만들 수 있습니다.
  • gRPC 메시지는 Protobof로 인코딩됩니다
    프로토부프는 송수신이 효율적이지만 이진 형식은 사람이 읽을 수 없습니다
    Protobof를 올바르게 역직렬화하려면 .proto 파일에 지정된 메시지의 인터페이스 설명이 필요합니다
    와이어에서 payload의 프로토부를 분석하고 수동으로 요청을 작성하려면 추가 툴링이 필요합니다
profile
개발 공부중입니다

0개의 댓글