Raft Consensus Algorithm
    Preparing search index...

    Module @maboke123/raft-grpc

    @maboke123/raft-grpc

    npm version license

    gRPC transport adapter for @maboke123/raft-core.

    Enables Raft nodes to communicate over a real network using gRPC and Protocol Buffers. Use this when you want to run each node in its own process or on separate machines.

    For in-process testing and development, use MockTransport from @maboke123/raft-core/testing instead — it requires no network setup.

    npm install @maboke123/raft-core @maboke123/raft-grpc
    
    import { RaftNode, DiskNodeStorage } from "@maboke123/raft-core";
    import { GrpcTransport } from "@maboke123/raft-grpc";

    async function main() {
    const node = new RaftNode({
    config: {
    nodeId: "node1",
    address: "localhost:50051",
    peers: [
    { id: "node2", address: "localhost:50052" },
    { id: "node3", address: "localhost:50053" },
    ],
    electionTimeoutMinMs: 150,
    electionTimeoutMaxMs: 300,
    heartbeatIntervalMs: 50,
    },
    storage: new DiskNodeStorage("./data/node1"),
    transport: new GrpcTransport("node1", 50051, {
    node2: "localhost:50052",
    node3: "localhost:50053",
    }),
    stateMachine: new MyStateMachine(),
    });

    await node.start();
    }

    main().catch(console.error);

    Run the same code for node2 and node3, adjusting nodeId, port, and data directory. Start all three — one will be elected leader within one election timeout.

    Pass a certPaths object as the fourth argument. Each node needs a shared CA certificate, its own certificate, and its own private key:

    const transport = new GrpcTransport(
    "node1",
    50051,
    {
    node2: "localhost:50052",
    node3: "localhost:50053",
    },
    {
    caCert: "./certs/ca/ca.crt",
    nodeCert: "./certs/node1/node1.crt",
    nodeKey: "./certs/node1/node1.key",
    }
    );

    Each node in the cluster needs its own certificate signed by the shared CA. You can generate self-signed certificates for local testing with the script in the repository.

    Do not commit private key files to your repository.

    new GrpcTransport(
    nodeId: string, // this node's ID
    port: number, // port this node listens on
    peers: Record<string, string>, // { [nodeId]: address }
    certPaths?: { // omit for insecure mode
    caCert: string; // path to CA certificate
    nodeCert: string; // path to this node's certificate
    nodeKey: string; // path to this node's private key
    }
    )

    See @maboke123/raft-core for the complete guide including state machine implementation, events, cluster membership changes, and testing utilities.

    MIT

    Classes

    GrpcTransport