Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

hamok

Package Overview
Dependencies
Maintainers
0
Versions
85
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hamok

Lightweight Distributed Object Storage on RAFT consensus algorithm

  • 2.5.1
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
924
increased by81.89%
Maintainers
0
Weekly downloads
 
Created
Source

Logo

Hamok Library

Hamok is a distributed object storage library developed using the Raft consensus algorithm. It provides a framework for building reliable and fault-tolerant distributed systems by enabling synchronized data operations across multiple nodes in a network.

Installation

To use the Hamok library in your project, install it via npm:

npm install hamok

Or via yarn:

yarn add hamok

Table of Contents

Quick Start

import { Hamok } from 'hamok';

(async () => {
	const server_1 = new Hamok();
	const server_2 = new Hamok();
	const storage_1 = server_1.createMap<string, number>({
		mapId: 'my-replicated-storage',
	});
	const storage_2 = server_2.createMap<string, number>({
		mapId: 'my-replicated-storage',
	});

	server_1.on('message', server_2.accept.bind(server_2));
	server_2.on('message', server_1.accept.bind(server_1));

	await Promise.all([
		server_1.join(),
		server_2.join(),
	]);

	console.log('Setting value in storage on server_1 for key-1 to 1');
	console.log('Setting value in storage on server_2 for key-2 to 2');

	await Promise.all([
		storage_1.set('key-1', 1),
		storage_2.set('key-2', 2),
	]);

	await Promise.all([
		server_1.waitUntilCommitHead(),
		server_2.waitUntilCommitHead(),
	])

	console.log('value for key-2 by server_1:', storage_1.get('key-2'));
	console.log('value for key-1 by server_2:', storage_1.get('key-1'));

	await Promise.all([
		server_1.leave(),
		server_2.leave(),
	]);

	console.log('Servers left');

	// if you want to close resources
	server_1.close();
	server_2.close();

})();

Concept

Hamok is a lightweight, distributed object storage library developed using the Raft consensus algorithm. Hamok provides distributed map, queue, event emitters, and record object. It is designed to minimize setup effort and maximize flexibility, offering the essential logic to embed its library and utilize shared storage, enabling efficient object sharing across service instances.

Hamok on RAFT

Raft is a consensus algorithm designed to manage a replicated log across a distributed system. Its primary goal is to ensure that multiple servers agree on a sequence of state transitions, providing consistency and fault tolerance in distributed systems. RAFT breaks down the consensus problem into three subproblems:

  • Leader Election: Ensures that one server acts as the leader, which is responsible for managing the log replication.

  • Log Replication: The leader receives log entries from clients and replicates them to follower servers. The leader waits for a majority of followers to acknowledge the entries before considering them committed.

  • Safety: RAFT guarantees that committed log entries are durable and will not be lost, even in the presence of server failures. It ensures that no two leaders can be elected for the same term and that logs are consistent across servers.

Overall, RAFT is designed to be understandable and easy to implement while providing strong consistency and reliability in distributed systems.

Hamok uses Raft to manage the shared storage across multiple instances.

Features

  • Raft-based Consensus: Ensures consistent data replication across nodes.
  • Distributed Data Structures: Provides maps, queues, records, and emitters.
  • Event-driven Architecture: Emits events for state changes, errors, and communication.

Collections

HamokMap

HamokMap is a distributed map implementation that leverages the RAFT algorithm to ensure consistency and fault tolerance. It provides a key-value store that can be accessed and modified by multiple service instances, allowing for efficient data sharing and synchronization across the system.

HamokQueue

HamokQueue is a distributed queue that allows for asynchronous FIFO-type message passing between service instances. Using RAFT, it maintains the order and durability of messages, ensuring that all instances have a consistent view of the queue contents and can process messages reliably.

HamokEmitter

HamokEmitter is an event emitter designed for distributed systems. It allows service instances to emit and listen to events, facilitating communication between instances.

HamokRecord

HamokRecord is a feature that provides distributed storage for individual record objects. Each record can be accessed and updated by multiple service instances, with RAFT ensuring that all updates are consistently applied and persisted across the system.

User Manual

You can find detailed user manuals here

Contributing

Contributions are welcome! Please feel free to submit issues or pull requests to improve the library.

License

This project is licensed under the Apache-2.0 - see the LICENSE file for details.

Keywords

FAQs

Package last updated on 18 Sep 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc