rpc /
gRPC
- 구글에서 시작(그래서 google’s RPC)
- CNCF(Cloud Native Computing Foundation) ecosystem 의 일부다
- transport protocol 로 HTTP/2 를 이용
- Protocol Buffers 를 이용한다.
- json 에 비해 message size는 60-80% 작고, 약 8배정보 빠르다.
HTTP/2 의 이점
- binary framing protocol: 텍스트 기반인 HTTP 1.1과 달리 데이터 전송이 가능하다.
- multiplexing 지원 : 여러병렬 요청들을 하나의 연결로 보낼 수 있다. - HTTP 1.1은 한 번에 하나의 요청/응답 메시지 처리만 가능
- Bidriectional full-duplex 통신 : 클라이언트 요청과 서버 응답을 동시에 보낼 수 있다..
- Built-in streaming : request 들과 response들이 비동기적으로 large data set 들을 stream 하는 것을 가능하게 해준다.
- Header 압축 : 네트워크 사용량을 줄여준다.
Protocol Buffers
- cross-platform IDL(Interface Definition Language)을 이용해서, 개발자들은 각 microservice를 위한 service contract 를 정의하게 된다.
- 이 contract 는 text 기반의
.proto
file 로 구현된다. - 이 contract 가 각 서비스에 대한 method, input, output을 정의하게 된다.
- platform 이 다른 server와 client 가 있다고 해도 양쪽에서 같은 contract file 을 사용한다.
이 .proto
file을 protoc
를 이용해서 compile 한다. 그러면 target platform 에 대한 client code 와 service code를 만들어 준다. code는 다음 내용을 가지고 있다.
- Strongly typed objects :
- 이 object들은 client 와 service 사이에서 공유된다.
- service 작업들과 message를 위한 data 요소들 표현한다.
- A strongly typed base class 는 remote gPRC service 가 상속하고, 확장할 수 있는 필수 netowrk 연결(network plubming) 을 가지고 있다.
- A client stub : 이 stub 는 remote gRPC service 를 호출하기 위한 필수 plubing 을 포함한다.
envoy proxy server
browser client 를 위한 gRPC의 javascript 구현이 gRPC-Web 이다. gRPC-web client 들은 gRPC service들에 접근할 때 Envoy(proxy)를 이용해서 연결하게 된다
envoy 가 필요한 이유:
- 브라우저에서 HTTP/1.1 request 를 보내면 그것을 받아서 gRPC request 들로 변환해서 이것을 gRPC service server 로 넘겨주고, 다시 이 서버에서 오는 응답을 client 에게 다시 HTTP/1.1 로 변환해서 넘겨주는 역할을 하게 된다.
envoy proxy server가 web browser에서 보내는 gRPC 요청을 받아서 gRPC server로 넘겨준다.
댓글 없음:
댓글 쓰기