migdalor


Namemigdalor JSON
Version 0.0.3 PyPI version JSON
download
home_page
SummaryA cluster membership library for modern asyncio Python distributed systems running in Kubernetes
upload_time2023-05-23 19:08:43
maintainer
docs_urlNone
author
requires_python>=3.9
licenseMIT
keywords peer discovery kubernetes service-discovery cluster-membership-management
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <p align="center">
<img src="https://github.com/roma-glushko/migdalor/blob/main/docs/imgs/logo-wide.png?raw=true" width="100%" alt="Migdalor - a Kubernetes native cluster management for modern Python" />
</p>

# Migdalor

Migdalor is a cluster membership library for modern asyncio Python distributed systems running in Kubernetes.

Migdalor doesn't require a separate broker (e.g. Redis, etcd, Zookeeper, Chabby, etc) to work, but leverage Kubernetes out-of-the-box capabilities
to solve the peer discovery problem.

## Features

- 🐍 Modern Asyncio Pythonic API
- 🔦 Brokerless Kubernetes native peer discovery based on headless services
- 🔭 Hooks into membership change events 
- 🛠️ Ability to manage membership manually

## Installation

```bash
pip install midgalor
# or
# poetry add midgalor
# pdm add midgalor
```

## Usage

```python
import migdalor

cluster = migdalor.Cluster(
    node_address=(node_address),  # the current node address (e.g. 127.0.0.1:8001)
    discovery=migdalor.KubernetesServiceDiscovery(service_address=cluster_address), # Kubernetes headless service address (e.g. cluster:8000)
    ## Callbacks on different events
    # nodes_added_handlers=[...] 
    # nodes_removed_handlers=[...],
    ## Membership update rate
    # update_every_secs=10,
)

await cluster.start()

# You can also add or remove nodes manually if you support that in your protocol
await cluster.add([("127.0.0.1", 8001)])
# await cluster.remove([("127.0.0.1", 8001)])

await cluster.stop()
```

Midgalor comes with some comprehensive example to help you get started:
- [The Party Cluster](/examples/party_cluster) - An example of using Migdalor to implement peer discovery in Kubernetes cluster

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "migdalor",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "",
    "keywords": "peer discovery kubernetes service-discovery cluster-membership-management",
    "author": "",
    "author_email": "Roman Glushko <roman.glushko.m@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/b6/16/4ea7a11fec661ad6faf253208ad73a36434ea3f09b7cd54179904a2c64c0/migdalor-0.0.3.tar.gz",
    "platform": null,
    "description": "<p align=\"center\">\n<img src=\"https://github.com/roma-glushko/migdalor/blob/main/docs/imgs/logo-wide.png?raw=true\" width=\"100%\" alt=\"Migdalor - a Kubernetes native cluster management for modern Python\" />\n</p>\n\n# Migdalor\n\nMigdalor is a cluster membership library for modern asyncio Python distributed systems running in Kubernetes.\n\nMigdalor doesn't require a separate broker (e.g. Redis, etcd, Zookeeper, Chabby, etc) to work, but leverage Kubernetes out-of-the-box capabilities\nto solve the peer discovery problem.\n\n## Features\n\n- \ud83d\udc0d Modern Asyncio Pythonic API\n- \ud83d\udd26 Brokerless Kubernetes native peer discovery based on headless services\n- \ud83d\udd2d Hooks into membership change events \n- \ud83d\udee0\ufe0f Ability to manage membership manually\n\n## Installation\n\n```bash\npip install midgalor\n# or\n# poetry add midgalor\n# pdm add midgalor\n```\n\n## Usage\n\n```python\nimport migdalor\n\ncluster = migdalor.Cluster(\n    node_address=(node_address),  # the current node address (e.g. 127.0.0.1:8001)\n    discovery=migdalor.KubernetesServiceDiscovery(service_address=cluster_address), # Kubernetes headless service address (e.g. cluster:8000)\n    ## Callbacks on different events\n    # nodes_added_handlers=[...] \n    # nodes_removed_handlers=[...],\n    ## Membership update rate\n    # update_every_secs=10,\n)\n\nawait cluster.start()\n\n# You can also add or remove nodes manually if you support that in your protocol\nawait cluster.add([(\"127.0.0.1\", 8001)])\n# await cluster.remove([(\"127.0.0.1\", 8001)])\n\nawait cluster.stop()\n```\n\nMidgalor comes with some comprehensive example to help you get started:\n- [The Party Cluster](/examples/party_cluster) - An example of using Migdalor to implement peer discovery in Kubernetes cluster\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A cluster membership library for modern asyncio Python distributed systems running in Kubernetes",
    "version": "0.0.3",
    "project_urls": {
        "Homepage": "https://github.com/roma-glushko/migdalor",
        "Source": "https://github.com/roma-glushko/migdalor"
    },
    "split_keywords": [
        "peer",
        "discovery",
        "kubernetes",
        "service-discovery",
        "cluster-membership-management"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ce3a1273e061e6f75d6e3458315243d867fbd0eac8c2cd8a1738c908d02737f7",
                "md5": "a9ed674699fa0036ea5d69c7751df1dd",
                "sha256": "cf28b499ad9e6314fc19ce56466ba5f46089496c95e69fafa9528f742efb5772"
            },
            "downloads": -1,
            "filename": "migdalor-0.0.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "a9ed674699fa0036ea5d69c7751df1dd",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 5544,
            "upload_time": "2023-05-23T19:08:41",
            "upload_time_iso_8601": "2023-05-23T19:08:41.058247Z",
            "url": "https://files.pythonhosted.org/packages/ce/3a/1273e061e6f75d6e3458315243d867fbd0eac8c2cd8a1738c908d02737f7/migdalor-0.0.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b6164ea7a11fec661ad6faf253208ad73a36434ea3f09b7cd54179904a2c64c0",
                "md5": "fec187c07759654ddd3a008c59b173b2",
                "sha256": "fcf1a79ed7b1c19d76aaa9f3083bc366184594d858c2261a7b42d88c9614178c"
            },
            "downloads": -1,
            "filename": "migdalor-0.0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "fec187c07759654ddd3a008c59b173b2",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 4513,
            "upload_time": "2023-05-23T19:08:43",
            "upload_time_iso_8601": "2023-05-23T19:08:43.575177Z",
            "url": "https://files.pythonhosted.org/packages/b6/16/4ea7a11fec661ad6faf253208ad73a36434ea3f09b7cd54179904a2c64c0/migdalor-0.0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-05-23 19:08:43",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "roma-glushko",
    "github_project": "migdalor",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "migdalor"
}
        
Elapsed time: 0.07166s