Description
Umbrella to add optional client/server streaming capabilities to HBase.
This would allow bandwidth to be used more efficiently for certain operations, and allow clients to use SSL/TLS for authentication and encryption.
Desired client/server scaffolding:
- HTTP/2 support
- Protocol negotiation (blocking vs streaming, auth, encryption, etc.)
- TLS/SSL support
- Streaming RPC support
Possibilities (and their tradeoffs):
- gRPC: Some initial work and discussion on
HBASE-13467(Prototype using GRPC as IPC mechanism)- Has most or all of the desired scaffolding
- Adds additional g* dependencies. Compat story for g* dependencies not always ideal
- Custom HTTP/2 based client/server APIs
- More control over compat story
- Non-trivial to build scaffolding; might reinvent wheels along the way
- Others?
Related Jiras that might be rolled in as sub-tasks (or closed/replaced with new ones):
HBASE-17708 (Expose config to set two-way auth over TLS in HttpServer and add a test)
HBASE-8691 (High-Throughput Streaming Scan API)
HBASE-14899 (Create custom Streaming ReplicationEndpoint)