sillysky software labs

Nodes

Nodes

A node is a small Java runtime that participates in the nyssr.net network. Its microkernel is roughly 1.2 MByte and contains the messaging core, timers, threads, namespaces, and logging. Networking and other capabilities are loaded as plugins when the node starts.

One runtime, many roles

Nodes are normally built from the same kernel and configured through their plugin list. The same container can therefore take different roles:

  • a registry or coordination node
  • a node hosting application services
  • a node connected to local databases or machines
  • a client or development node

The role is not hardcoded into the container. Plugins provide the capabilities.

Distribute services as needed

A small installation can run all its services on one node. As workload or geography changes, services can be distributed across additional nodes. The services are designed so that clients do not need to know which node currently hosts them.

This separation makes it possible to scale selected services instead of duplicating an entire application.

Key idea: Nodes can remain identical while their plugins and service distribution determine what they do.

A small dependency footprint

The microkernel is deliberately independent of large third-party frameworks so it can also be embedded in ordinary Java client and server programs. The documented third-party dependencies are small:

Library Vendor Size
annotations JetBrains 19 KBytes
json-simple Google 24 KBytes

Together they add just over 40 KBytes. The small footprint and asynchronous startup also allow a central node with registries and TCP servers to start in approximately 200 ms.

In practice

  1. Start with the kernel and a plugin list
  2. Add only the capabilities the node requires
  3. Register or start services through the node
  4. Add more nodes when capacity, locality, or resilience requires it

Related Pages