gPRC + Healthcheck 뽀개기
gRPC 개념 설명
gRPC 사용할 때 주의할점
- retry 이슈
- gRPC는 HTTP2 기반인데, 양방향 통신이라 커넥션을 계속 붙잡고 있는데, 이게 가끔 30분에 한번씩 끊길때가 있다 (뭐가 헤더 크기를 넘어가면서..어쩌구저쩌구 들었던거 같은데 다시 찾아봐야함)
- 그럴땐 클라이언트 쪽에서 보낸 요청이 fail되고 서버가 못듣게 되는데 단순히 클라가 한번 더 retry해주면 된다.
- 보통 http2를 쓰는 프로토콜은 retry 로직이 필수라한다
- 헬스체크 이슈 (ulimit, channel close, Too many open files)
- grpc는 status 를 제공하고 health check 프로토콜도 제공한다.
어찌다가 try except으로 에러날때 status 코드를 꺼내는 방식으로 꼼수로 구성한적이 있었다..(이럼 안되지.. 이것 때문에 연차썼다가 출근해서 반차처리한 적이..흑흑) - 이때 grpc connect을 따로 close해주지 않으면 소켓연결이 쌓이게 되고 리눅스 운영체제에서 file open개수에 대한 ulimit을 초과하면 Too many open files 에러가 뜬다
- 보통 이런경우 ulimit을 올려주면 되지만, 근본적인 에러원인인 소켓 증가 이유를 찾아야했고 찾다보니 health check때 retry 이슈로 except뜬게 쌓이고 있었다는 결론을 내렸다
- 결과적으로 connect close를 잘해주자 안그러면 too many file opens 에러뜨니까
- grpc는 status 를 제공하고 health check 프로토콜도 제공한다.
gRPC.proto 살펴보기
- filename: projectname.proto
1 | // Copyright 2015 The gRPC Authors |