Golang으로 gRPC 시도

4350 단어 protobufgRPCtech

개시하다


gRPC에 대한 지식이 아직 정리되지 않았기 때문에 나는 gRPC가 도대체 어떤 특징을 가지고 있는지 재조사하고 실제 조작을 시도했다.

gRPC 소개


gRPC는 프로세스 간 통신 기술로 로컬 함수 호출처럼 간단하게 연결, 호출, 조작, 디버깅이 분산된 서로 다른 응용 프로그램을 연결할 수 있다.
gRPC는 인터페이스 정의 언어(IDL) 및 메시지 교환 형식으로 프로토콜 버퍼를 사용합니다.서버와 클라이언트 모두 IDL을 사용하여 코드를 생성할 수 있습니다.
서비스와 소비자 간의 인터넷 통신은 HTTP/2로 진행된다.
gRPC는 전통적인 프로세스 간 통신 기술(CORBA, RMI, SOAP, REST...)이다.단점을 극복할 수 있는 과정 간 통신 기술이다.

gRPC의 이점


4
  • It's efficient for inter process communication(이진 프로토콜을 통해 효과적인 프로세스 간 통신 가능)
    gRPC는 HTTP/2에 프로토콜 버퍼를 설치합니다
  • 4
  • It has simple,well-defined 서비스interfaces와schema(간단하고 정의된 서비스 인터페이스와 모델 제공)
    빠른 설정으로 서비스 인터페이스를 먼저 정의합니다
  • 4
  • It's strongly typed (강도 정의)
    응용 프로그램 간 통신에 사용되는 유형을 명확하게 정의했다
  • 4
  • It's polyglot(다중 언어에 해당)
    gRPC 서비스 정의는 언어에 의존하지 않고 자신이 좋아하는 언어를 선택할 수 있습니다
  • 4
  • It has duplex streaming(흐름 전송 통신 지원)
    로컬은 클라이언트나 서버 측의 흐름 전송을 지원합니다
  • 4
  • It has built-in commondity features(상품 기능 내장)
    인증, 암호화, 복원력(사선 및 시간 초과), 메타데이터 교환, 압축, 부하 분산, 서비스 발견 등 공공 기능을 지원한다
  • 4
  • It's integrated with cloud native ecosystems(Cloud Native 생태계와 통합)
    gRPC는 CNCF의 일부분으로 대부분의 최신 프레임워크는 gRPC의 로컬 지원이다.예를 들어 Envoy 등은 gRPC를 통신 프로토콜로 지원한다
  • 4
  • It's mature and has been widely adopted(성숙하고 널리 사용)
    구글, 스퀘어, 리프트, 넷플릭스, Docker, 사과, 코어OS 등 많은 대형 과학 기술 기업들이 이 제도를 채택했다
  • gRPC의 단점

  • Not human-readable format
    메시지는 Protobuf로 인코딩되기 때문에 수신 효율이 높지만 이진 형식이기 때문에 사람들이 식별할 수 없다
  • Limited browser support
    브라우저 지원은 REST/HTTP 프로토콜에 비해 제한적입니다
  • 한 번 시험해 보았다


    gRPC를 정리해 봤고 실제로 가동해 봤어요.
    이번에 시도한 소스는 아래 창고에 있어요.
    https://github.com/y16ra/hello-grpc

    프로필 작성


    서비스의 정의를 기록합니다.
    프로토 파일의 쓰기 방법은 여기를 참조하십시오.
    https://developers.google.com/protocol-buffers/docs/proto3
    https://github.com/y16ra/hello-grpc/blob/main/hello/hello.proto#L1-L18

    서버 및 클라이언트의 소스 생성


    Makefile을 만들어 보았습니다.명령을 내리다.문건을 기초로 하다hello.proto두 개의 파일을 생성합니다.
    $ make setup
    
    https://github.com/y16ra/hello-grpc/blob/main/Makefile#L1-L10
    다음 명령으로 생성된 파일을 삭제합니다.
    $ make clean
    

    시험해 보다


    Server


    다음 명령을 사용하여 서버를 시작할 수 있습니다.
    $ go run cmd/server/server.go --port 50051
    
    https://github.com/y16ra/hello-grpc/blob/main/cmd/server/server.go

    Client


    상기 서버를 시작한 상태에서 클라이언트를 실행합니다.
    4
    $ go run cmd/client/client.go --name Alice
    
    이렇게 표시하면 성공입니다.
    Greeting: Hello Alice
    
    https://github.com/y16ra/hello-grpc/blob/main/cmd/client/client.go

    끝맺다


    견본 수준에 불과하지만 그래도 한번 시험해 보았다.
    또한, Giithub Actions는 프로모션 파일의 lint와 파괴적인 변경을 감지할 수 있는 Buf 도구를 설정해 보았다.
    https://github.com/y16ra/hello-grpc/blob/main/.github/workflows/pull-request.yaml
    https://buf.build

    참조 페이지


    추가 참조 페이지.
    https://grpc.io
    https://developers.google.com/protocol-buffers/docs/overview

    좋은 웹페이지 즐겨찾기