Skip to content

Conversation

@daniel-sanche
Copy link
Contributor

@daniel-sanche daniel-sanche commented Jun 15, 2023

This PR adds dynamic channel pooling, where channel pools will resize depending on channel usage patterns. To implement this, I moved more logic into grpc channel subclasses, resulting in the following classes:

  • _WrappedChannel: a generic class that holds a grpc channel, and delegates all calls to the wrapped object
  • _BackgroundTaskMixin: an interface/mixin class that provides logic for starting and managing a background task associated with a grpc channel
  • RefreshableChannel: a channel that uses _BackgroundTaskMixin and _WrappedChannel to periodically refresh the wrapped channel, and call a warm up callback when the new channel is set up. This replaces some logic that was currently in the client
  • TrackedChannel: a _WrappedChannel that keeps tracks of the counts number of active rpcs as they are sent
  • PooledChannel: a grpc channel subclass that maintains a static pool of channels, and alternates incoming requests between them. For our use-case, (if we allow static channels) each channel in the pool will be a RefreshableChannel.
  • DynamicPooledChannel: a PooledChannel that wraps each channel in the pool in a TrackedChannel, and maintains a _BackgroundTaskMixin task to periodically change the pool size based on channel usage.

custom_channel drawio


TODO:

  • check performance, make optimizations as needed
    • possible optimizations:
      • create a class that combined RefreshableChannel with TrackedChannel, to cut down on the layers of wrapping
      • create CacheableChannel that saves and returns a cahed MultiCallable, to avoid the overhead of creating one on each call (does grpc already do this internally?)
  • add system tests
  • get full unit test coverage

Later:

  • move most classes in _channel_pooling into api_core, to share with other libraries

@product-auto-label product-auto-label bot added size: xl Pull request size is extra large. api: bigtable Issues related to the googleapis/python-bigtable API. labels Jun 15, 2023
@daniel-sanche daniel-sanche changed the base branch from v3 to experimental_v3 August 30, 2023 20:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api: bigtable Issues related to the googleapis/python-bigtable API. size: xl Pull request size is extra large.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant