구글에서 10년 이상동안 MSA 아키텍쳐 이하 수많은 시스템들, 데이터 센터 간 통신을 위해 사용하던 범용 RPC 프레임워크인 Stubby
를 오픈소스화해 공개한 것
ProtoBuf의 데이터는 message 들로 구성되며 각 message는 field (name, value pair) 로 구성
message Person {
string name = 1;
int32 id = 2;
bool has_ponycopter = 3;
}
높은 생산성과 효율적인 유지보수
Language | Platform | Compiler |
---|---|---|
C/C++ | Linux/Mac | GCC 4.8+, Clang 3.3+ |
C/C++ | Windows 7+ | Visual Studio 2015+ |
C# | Linux/Mac | .NET Core, Mono 4+ |
C# | Windows 7+ | .NET Core, .NET 4.5+ |
Dart | Windows/Linux/Mac | Dart 2.0+ |
Go | Windows/Linux/Mac | Go 1.6+ |
Java | Windows/Linux/Mac | JDK 8 recommended. Gingerbread+ for Android |
Node.js | Windows/Linux/Mac | Node v4+ |
Objective-C | Mac OS X 10.11+/iOS 7.0+ | Xcode 7.2+ |
PHP (Beta) | Linux/Mac | PHP 5.5+ and PHP 7.0+ |
Python | Windows/Linux/Mac | Python 2.7 and Python 3.4+ |
Ruby | Windows/Linux/Mac | Ruby 2.3+ |
HTTP/2 기반 통신
gRPC 는 HTTP/2 기반 통신으로 기존 HTTP 과는 다르게 서버와 클라이언트가 서로 데이터를 스트리밍으로 주고 받을 수 있음
Payload 의 차이
HTTP 버전의 차이
호출방식의 차이
message
, service
를 각 언어에 필요한 형태로 generate됨. 클라이언트에서 service 메소드를 호출하면 그에 해당하는 서버에서 구현한 service가 실행되고, 요청/응답 페이로드는 언어에 맞게 generate 결과를 사용gRPC Gateway
플러그인을 사용하면 gRPC 서비스에 REST API 인터페이스를 제공할 수 있게 go
런타임에서 작동하는 프록시 서버와 Swagger 문서를 generate 해준다. (go 이외 다른 언어는 미지원)
때문에 gRPC 서비스를 이용할 준비가 되지 않은 클라이언트의 경우나 웹 환경에서 사용 가능