https://github.com/elixir-toniq/hlclock
Hybrid Logical Clocks for Elixir
https://github.com/elixir-toniq/hlclock
distributed-systems elixir hybrid-logical-clocks
Last synced: 9 months ago
JSON representation
Hybrid Logical Clocks for Elixir
- Host: GitHub
- URL: https://github.com/elixir-toniq/hlclock
- Owner: elixir-toniq
- License: apache-2.0
- Created: 2017-08-18T14:08:16.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2019-10-04T15:21:15.000Z (over 6 years ago)
- Last Synced: 2024-09-16T19:53:21.182Z (over 1 year ago)
- Topics: distributed-systems, elixir, hybrid-logical-clocks
- Language: Elixir
- Homepage:
- Size: 85.9 KB
- Stars: 49
- Watchers: 4
- Forks: 5
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# HLClock
[](https://travis-ci.org/toniqsystems/hlclock) [](https://hex.pm/packages/hlclock)
## About
Hybrid Logical Clocks (HLC) provide a one-way causality detection using a
combination of logical time and physical NTP timestamp. This library adds an
additional mechanism for resolving conflicts between timestamps by adding a
unique node id to each HLC timestamp.
These timestamps can be used in place of standard NTP timestamps in order to
provide consistent snapshots and causality tracking. HLCs have a fixed space
requirement and are bounded close to physical timestamps.
## Installation
First, add `HLClock` to your `mix.exs` dependencies.
```elixir
def deps do
[{:hlclock, "~> 1.0"}]
end
```
## Usage
Starting in version 1.0.0, the `HLClock.Server` is not started as an application
automatically. `HLClock.start_link/1` is as a short cut to manually start a process:
```elixir
{:ok, clock} = HLClock.start_link()
{:ok, ts} = HLClock.send_timestamp(clock)
```
In practice, it is best to have a single `HLClock` running on any given node.
Toward that end, `HLClock` also provides a `child_spec` that accepts all
standard `GenServer` opts:
```elixir
children = [
{HLClock, name: :my_hlc_server},
]
```