Skip to main content

gRPC Load Balancer

grpc_load_balancer is a Python package that allows you to easily configure and manage separate gRPC server and client instances using a metrics-based load balancing approach. This is useful when you have multiple services running and want to distribute the load efficiently among them. The package includes a connection forwarder, a metrics-based server finder, and a configuration loader. It implemetns the following design:

Features

  • Forward connections from clients to gRPC servers.
  • Use Prometheus metrics to select the best server to handle a request.
  • Configure and manage gRPC server finder using environment variables.

Installation

You can install grpc_load_balancer using pip:

pip install grpc_load_balancer

Install promethus-client:

pip install prometheus-client

Usage

Configuring and running a gRPC server

Here's a simple example of how to use grpc_load_balancer with a gRPC server and prometeus-client:

Import the required modules:

import grpc
from grpc_load_balancer import GrpcConnnectionForwarder
from prometheus_client import start_http_server, Gauge

Initialize your gRPC server(s)

    grpc_server = create_example_grpc_server() # implement this function yourself
    connection_counter = Gauge('connections_num', 'Number of connections forwarded')
    forwarder = GrpcConnnectionForwarder(
        grpc_server, callback=lambda value: connection_counter.set(value)
    )
    start_http_server(prometheus_port)
    # forwarder_port - port to listen connections from gRPC clients

    # Note this call is blocking
    forwarder.serve(host="0.0.0.0", port=forwarder_port)

    # If you want to run the server in a separate thread, and want to stop it later, use the forwarder.stop() method
    

Configuring and running a gRPC client

Import the required modules:

import grpc
from grpc_load_balancer import EnvConfigLoader, MetricsBasedServerFinder

Initialize the configuration loader

# This is example how your environment variables can look like
# os.environ['LB_METRICS_NAME'] = 'connections_num'
# os.environ['LB_HOST1_HOST'] = 'localhost'
# os.environ['LB_HOST1_PORT'] = '20000'
# os.environ['LB_HOST1_METRICS_PORT'] = '20001'
# os.environ['LB_HOST2_HOST'] = 'localhost'
# os.environ['LB_HOST2_PORT'] = '30000'
# os.environ['LB_HOST2_METRICS_PORT'] = '30001'

env_config_loader = EnvConfigLoader(prefix="LB")

Initialize the server finder, find the best server and connect to it

    metrics_based_server_finder = env_config_loader.init_metrics_based_server_finder()
    best_host = metrics_based_server_finder.fetch_metrics()
    channel = grpc.insecure_channel(f"{best_host[0]}:{best_host[1]}")
    client = create_example_grpc_client(channel) # implement this function yourself
    # Use the client to send requests to the server

Troubleshooting

If you have any problems with grpc_load_balancer, please open an issue on GitHub. Also, you can check tests/test_grpc_load_balancer.py for more information.

Contributing

We welcome contributions to grpc_load_balancer. If you find a bug or want to propose a new feature, please open a GitHub issue or submit a pull request.

License

This project is licensed under the MIT License. See LICENSE for details.

Release files for grpc-load-balancer 0.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for grpc-load-balancer 0.0.3
File Size Uploaded
grpc_load_balancer-0.0.3.tar.gz 7.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for grpc-load-balancer 0.0.3
File Interpreter ABI Platform
grpc_load_balancer-0.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 14.8 kB

Release files / grpc_load_balancer-0.0.3.tar.gz

Download URL grpc_load_balancer-0.0.3.tar.gz
Size 7.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9e29c29c17aaa08cba7cc297c18119525eaa1cfa802c1d03a1e2f31c2b3e90be
BLAKE2b-256 checksum
How to use checksums
c9404e7f5cfc8c5e03b63dd1e95cf42e95719ad0064a9b7578dce20886a8037f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.3

Release files / grpc_load_balancer-0.0.3-py3-none-any.whl

Download URL grpc_load_balancer-0.0.3-py3-none-any.whl
Size 7.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f590c013cff44ddd2cd57d731f66706f7b4df27f82a6e0cdf2ccf3d0ab1d686e
BLAKE2b-256 checksum
How to use checksums
73ca3774e30dd6c932f52463bae648443315e13201a2462404e3d4d6ee17f903
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.3

Release history Release notifications | RSS feed

This release

0.0.3 This release

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page