Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/darvid/proxenos
A rendezvous hashing and service routing toolkit for Python.
https://github.com/darvid/proxenos
hash hashing python python-3 rendezvous routing routing-algorithm
Last synced: 2 months ago
JSON representation
A rendezvous hashing and service routing toolkit for Python.
- Host: GitHub
- URL: https://github.com/darvid/proxenos
- Owner: darvid
- License: mit
- Created: 2017-01-23T02:22:21.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2021-10-21T18:11:14.000Z (about 3 years ago)
- Last Synced: 2024-10-03T23:07:51.161Z (3 months ago)
- Topics: hash, hashing, python, python-3, rendezvous, routing, routing-algorithm
- Language: Python
- Size: 61.5 KB
- Stars: 8
- Watchers: 3
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.rst
- License: LICENSE
Awesome Lists containing this project
README
========
proxenos
========.. image:: https://img.shields.io/pypi/v/proxenos.svg
:target: https://pypi.python.org/pypi/proxenos.. image:: https://img.shields.io/pypi/pyversions/proxenos.svg
:target: https://pypi.python.org/pypi/proxenos.. image:: https://travis-ci.org/darvid/proxenos.svg?branch=master
:target: https://travis-ci.org/darvid/proxenos.. image:: https://img.shields.io/coveralls/darvid/proxenos.svg
:target: https://coveralls.io/github/darvid/proxenos.. image:: https://badges.gitter.im/python-proxenos/Lobby.svg
:alt: Join the chat at https://gitter.im/python-proxenos/Lobby
:target: https://gitter.im/python-proxenos/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badgeA Python toolkit for Rendezvous/Highest Random Weight (HRW) hash based routing.
.. code-block:: pycon
>>> import proxenos.mappers.consul
>>> import proxenos.rendezvous
>>> mapper = proxenos.mappers.consul.ConsulClusterMapper(
... host='localhost', port=8500)
>>> mapper.update()
>>> mapper.cluster
{SocketAddress(host=IPAddress('::'), port=8000),
SocketAddress(host=IPAddress('::'), port=8001),
SocketAddress(host=IPAddress('::'), port=8300),
SocketAddress(host=IPAddress('::'), port=8500)}
>>> mapper.select('github.com', proxenos.rendezvous.HashMethod.SIPHASH)
SocketAddress(host=IPAddress('::'), port=8001).. code-block:: shell
$ proxenos select -b consul -h localhost -p 8500 github.com
0.0.0.0:8300Features
========* Support for multiple service discovery backends possible. *Currently
only support for Consul is implemented, but other backends coming
eventually.*
* Supports many different hash functions and PRFs. The default hashing
method is the `SipHash `_ PRF.
* Provides a command-line interface for quickly testing/debugging
node selection.Installation
============.. code-block:: shell
$ pip install proxenos[consul]
$ # If you'd like Murmur3 support, use:
$ pip install proxenos[consul,murmur]Configuration
=============Proxenos can be configured through environment variables.
* **PROXENOS_MMH_SEED** (int): The seed used for MurMur3 hashes.
* **PROXENOS_MMH_OPTIMIZE** (str): Set to ``x64`` or ``auto``.
* **PROXENOS_PRF** (str): The default hashing method to use. Defaults to
``siphash``. Can be set to one of ``md5``, ``sha1``, ``sha224``,
``sha256``, ``sha384``, ``sha512``, ``mmh_32``, ``mmh_64``,
``mmh_128``, or ``siphash``.
* **PROXENOS_SIPHASH_KEY** (str): The 128-bit SipHash key. A default
key is provided, but users are advised to generate their own.Notes
=====**proxenos** uses Python's PRNG for calculating the weight of nodes in
a cluster, rather than using a linear congruential generator (LCG_)
as described in the `original paper on Rendezvous hashing`__. Seeded
weights generated are limited to ``sys.maxsize``, which means the
resulting weights will differ depending on the platform architecture... _LCG: https://en.wikipedia.org/wiki/Linear_congruential_generator
.. _thaler_ravishankar_1996: http://www.eecs.umich.edu/techreports/cse/96/CSE-TR-316-96.pdf__ thaler_ravishankar_1996_
Similar projects
================* `clandestined `_
* `nikhilgarg28/rendezvous `_