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 |
gRPC python file 생성
- grpc module이 설치되어 있어야함
pip install grpcio
1 | python -m grpc_tools.protoc -I./ --python_out=. --grpc_python_out=. ./grpc_modules/projectname.proto |
- 결과:
projectname_pb2.py
,projectname_pb2_grpc.py
두가지 파일이 생성됨
서버 실행
1 | import grpc |
gRPC python examples
Health Checking
- gRPC는 Health Checking도 기존 RPC와 동일하게 핸들링함
- Official gRPC Health Checking Protocol
- Official gRPC Python Health Checking
reference:
- http://blog.naver.com/PostView.nhn?blogId=wideeyed&logNo=221313389714&parentCategoryNo=&categoryNo=&viewDate=&isShowPopularPosts=false&from=postView
- https://grpc.io/docs/quickstart/python/
- https://john-millikin.com/sre-school/health-checking
- https://github.com/grpc/grpc/blob/master/src/python/grpcio_health_checking/grpc_health/v1/health.py
- https://github.com/grpc/grpc/blob/master/doc/health-checking.md
- https://github.com/grpc/grpc/blob/master/src/proto/grpc/health/v1/health.proto
- https://github.com/grpc/grpc/blob/master/doc/statuscodes.md
gPRC + Healthcheck 뽀개기