-
Notifications
You must be signed in to change notification settings - Fork 81
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enable using gRPC client for GCS #92
Conversation
GCP has an experimental feature which allows using gRPC when talking to GCS. For the time being, it requires buckets to be explicitly added to an allowlist, but eventually the feature will become GA. This commit allows using a gRPC client when creating a GCS bucket by toggling a boolean flag in the bucket config. Signed-off-by: Filip Petkovski <[email protected]>
Signed-off-by: Filip Petkovski <[email protected]>
3e72eef
to
c035baa
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
Signed-off-by: Filip Petkovski <[email protected]>
providers/gcs/gcs.go
Outdated
Bucket string `yaml:"bucket"` | ||
ServiceAccount string `yaml:"service_account"` | ||
UseGRPC bool `yaml:"use_grpc"` | ||
GRPCConnPoolSize int `yaml:"grpc_conn_pool_size"` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I did a bit of testing by tweaking this parameter up and down. Performance follows a U-shaped curve where using 1 connection is abysmally slow, even slower than HTTP. With a pool size of 512 performance is better, but it seems to be best with 256.
We could consider using that (or some other number) as the default to make sure users do not need to guess in the beginning. We can still keep the value configurable if anyone needs further customization.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Turns out we had to enable direct path as documented here https://cloud.google.com/go/docs/reference/cloud.google.com/go/storage/latest#hdr-Experimental_gRPC_API.
If the application is running within GCP, users may get better performance by enabling DirectPath (enabling requests to skip some proxy steps). To enable, set the environment variable GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS=true and add the following side-effect imports to your application:
import (
_ "google.golang.org/grpc/balancer/rls"
_ "google.golang.org/grpc/xds/googledirectpath"
)
This made the connection pool config obsolete (as a matter of fact, anything higher than 1 would hang the client). The config option is still useful when direct path is not enabled though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can probably mention the direct path option as a comment?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good point, updated.
@saswatamcode any thoughts on this one? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks! I think this generally looks good!
providers/gcs/gcs.go
Outdated
Bucket string `yaml:"bucket"` | ||
ServiceAccount string `yaml:"service_account"` | ||
UseGRPC bool `yaml:"use_grpc"` | ||
GRPCConnPoolSize int `yaml:"grpc_conn_pool_size"` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We can probably mention the direct path option as a comment?
Signed-off-by: Filip Petkovski <[email protected]>
GCP has an experimental feature which allows using gRPC when talking to GCS. For the time being, it requires buckets to be explicitly added to an allowlist, but eventually the feature will become GA.
This commit allows using a gRPC client when creating a GCS bucket by toggling a boolean flag in the bucket config.
Changes
Verification