초보 개발자의 스터디룸

[gRPC] gRPC란? 1. 개요, 특징, 사례

justdoIT0730 2023. 1. 31. 10:12
728x90
728x90

https://www.youtube.com/watch?v=sKWy7BJxIas&t=2524s 

본 게시물은 위 영상을 토대로 작성되었습니다.

 

 

목차

  • [1] gRPC의 개요
  • [2] gRPC의 특징
  • [3] gRPC의 사례

[1] gRPC의 개요

1.1 gRPC의 간단한 설명

  • 다양한 환경에서 실행할 수 있는 고성능 오픈 소스 RPC 프레임워크 : Google 개발
  • 구글이 1주일 동안 띄우는 마이크로 컨테이너의 수 : 20억
  • 구글이 1초 동안 던지는 원격 호출의 수 : 100억

1.2 원격호출(RPC)란?

  • 원격 호출 : RPC(Remote Procedure Call)
  • 원격에 존재하는 함수(Procedure)를 마치 로컬에 존재하는 것 처럼 호출하는 것
    • 원격에 있는 메서드를 호출하는 데 사용하는 호스트(클라이언트) 코드에서는 그저 로컬객체에 있는 메서드를 호출하는 것과 같은 개념
  • 원격 호출 간 고려 사항
    • 원격과의 연결
    • 호출 및 데이터 형식 호환

1.2.1 Stub(스텁)

  • RPC간 고려 사항을 해결하는 역할

  • 로컬과 원격 환경에서 데이터를 상호 간 전송하는 방법에 대해 간단하게 도식한 것
  • 도식화 설명
더보기
  1. 로컬 스텁에 있는 메서드의 파라미터를 전달
  2. 네트워크를 타고 원격으로 이동
  3. 원격에 있는 원격 스텁을 타고 원격에 있는 비즈니스 매서드를 호출
  4. 그 결과를 다시 원격 스텁을 타고 왔던 순서의 역순으로 다시 로컬에 전달

1.2.2 기존 RPC의 특징

  • 갑자기 출현한 신기술이 아님 : 분산 환경 내에서 사용된 과거부터 사용된 기술
  • 종류 : CORBA - IIOP, Java RMI, XML-RPC 등
  • 현재는 잘 사용하고 있지 않음
    • 높은 복잡도, 가파른 학습 곡선, 낮은 개발 생산성

1.2.3 REST ful API의 출현

  • HTTP, JSON을 사용하는 REST ful API가 노후된 RPC 기술을 대체
  • 낮은 복잡도, 완만한 학습 곡선, 높은 개발 생산성, 편리성(JSON을 다루는 다양한 라이브러리)

1.2.4 RPC의 현재

  • 분산환경에서 RPC 사용은 필수 : 고성능을 요하는 분야에서 활용하기 어려움에도 불구하고 사용 중
  • 사용 분야 : 게임, 실시간 금융 거래, 모니터링 등

ex) 고객, 주문, 재고, 배송의 기능을 모듈별 나눌 때 각 모듈을 연결해주는 역할을 REST, RPC가 한다

  • 마이크로서비스의 시대
    • Monolithic(일체형) 아키텍쳐의 경우 다양한 서비스들 하나의 서버에서 운용
    • Microservice 아키텍쳐의 경우 서비스들을 분리하여 여러 서버에서 운용
      • 분리된 모듈은 로컬 메서드 호출로 데이터 교환 불가능
      • 위 그림의 배송 모듈과 타 서비스의 모듈을 호출해주는 기능을 Rest(가장 많이 사용), RPC가 하는 것
  • 위 문제를 해결하기 위해 Google에서 Stubby 개발 : 초당 100억 건의 RPC 호출을 담당
  • Stubby의 오픈소스 버전 : gRPC

[2] gRPC의 특징

1. gRPC의 간단한 소개

  • 16. 08에 v1.0.0 출시(현재 1.51.1)
  • 10개 언어 지원 : Java, C++, C#, Pyhton, Ruby, Node.js 등

2. REST와 비교한 gRPC의 장,단점 및 사용 이유

장점 : 우수한 네트워크 및 메모리 효율성

  • Binary Protocal 사용
    • Protocol Buffers 기반
    • Text 보다 더 적은 데이터 공간으로 처리 가능
  • HTTP/2 사용
    • Connection Multiplexing
      • 하나의 TCP 형태로 여러 위치에서 재사용 가능
    • Header Compression
      • 연결 시 헤더 정보 압축 기술 : 필요 용량 감소, 네트워크 효율성 증가
    • Client/Server 양방향 Streaming 가능 : 적용 분야 다양성 증가

단점

  • Browser에서 사용 불가
  • Client 서버 구조 : Client 업데이트 발생 시 배포 부담
  • Binary 구조 : Not Human Readable
  • 기존의 RPC 보다 간단하게 구현하였으나, REST 보다 다소 복잡

사용 이유

  • Browser가 불필요한 분산 환경
  • gRPC vs REST(Google Cloud Pub/Sub API : HTTP1.1 및 JSON으로 구현)
처리량 : Throughtput(MB/s) CPU 사용률 고려한 처리량 : Throughput(MB/s) per CPU
  • 같은 양의 처리 시 gRPC가 REST보다 CPU 사용량이 1/4 수준
  • 단순 처리량과 위 결과를 고려한 결과 : 약 11배 차이
  • 서버 1대 당 처리 효율 및 비용 측면에서 압도적 우위
    • REST 사용 시 1달 사용료 37.4만원
    • gRPC 사용 시 1달 사용료 9.3만원 + 처리량 3배 증가
    • 서버 수가 증가시 효과는 N배 증가

3. gRPC의 특징

  • protobuf를 이용해 JSON보다 좋은 성능 구현
  • 명확한 서비스 인터페이스, 스키마 및 스트리밍 지원
  • 인증, 암호화, 압축 등 풍부한 내장 기능
  • .proto의 강력한 기능
    • gRPC에 사용되는 자료구조 및 메서드들의 명세를 기록한 단순 텍스트 파일
    • gradle plugin 제공 : 1개의 .proto 파일 작성 시 10개의 언어 중 원하는 파일 더블 클릭 만으로 자동 생성
    • 기존의 RPC보다 편리하고 가벼움
    • 여러 가지 언어와 플랫폼을 가지고 있는 시스템 간 연동에 용이
    • JSON, XML 사용은 가능(Text 기반 프로토콜 사용하기 때문에 성능 향상 효과 감소)
  • 활용처
    • 브라우저가 필요없는 백엔드 서버 간 통신
    • 자원이 다소 빈약한 디바이스(모바일 등)와 서버 간 통신
    • 과금되는 클라우드 환경 사용 간 비용 감소

[3] gRPC의 사례

Clustering(분산 환경)에서 다방면으로 활용 중 : 넷플릭스, 당근마켓 등

  • 당근마켓 서비스 내 gRPC 활용 사례 당근마켓 gRPC 인프라 구성

-21년 기준

  • 5개월 간 gRPC 트래픽 증가율 약 2배
  • gRPC 도입 전 필요한 사전 작업
    • 트래픽 플로우에 대한 이해
    • 어떻게 커넥션(트래픽)이 들어오고, 각 구간별로 패킷이 어떻게 들어오는 지 알아야 한다

 

 

[출처]

https://cloud.google.com/blog/big-data/2016/03/announcing-grpc-alpha-for-google-cloud-pubsub : 현재 접근 불가능
https://appmaster.io/ko/blog/grpcneun-mueosibnigga
https://www.youtube.com/watch?v=sKWy7BJxIas&t=2524s
https://www.youtube.com/watch?v=igHrQPzLVRw&t=494s

  •  
  •  
728x90
728x90