<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"
}