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.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 사용은 필수 : 고성능을 요하는 분야에서 활용하기 어려움에도 불구하고 사용 중
- 사용 분야 : 게임, 실시간 금융 거래, 모니터링 등
- 마이크로서비스의 시대
- 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 가능 : 적용 분야 다양성 증가
- Connection Multiplexing
단점
- 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
'초보 개발자의 스터디룸' 카테고리의 다른 글
[gRPC] Protobuf란? (0) | 2023.01.31 |
---|---|
[gRPC] gRPC 기초적인 추가 정보 2. 스트리밍 방식, 개발 순서 (0) | 2023.01.31 |
[Logstash] 로그스태시란? 개요, 기능, 특징 (0) | 2023.01.09 |
[Elastic Search] 엘라스틱서치란? 3. 장/단점, ES vs RDBMS (0) | 2023.01.06 |
[Elastic Search] 엘라스틱서치란? 2. 역 색인(Inverted Index) (0) | 2023.01.06 |