Architecture
Nodes
NanoPing is a distributed system that consists of many nodes. A node can be a NanoPing Controller or a NanoPing Client. One NanoPing Controller is responsible for hosting a central Hub Server for the control plane.
Cluster
A NanoPing Cluster consist of nodes that are connected to the same control plane. Clusters are isolated from each other, and can't communicate with each other. A cluster can have many nodes, but only one control plane.
Services
Each node is hosting a set of services that can be accessed via the API. Some services are distributed
across many nodes in the cluster, while other services are only available on a single node. An example
of a service could be the Pipeline Service
, which is responsible for managing the pipelines on a
NanoPing Client.
Control Plane
The control plane is responsible for sending data securely between nodes in a NanoPing Cluster. Every node, whether it is a NanoPing Controller or a NanoPing Client, needs access to the control plane to communicate with other nodes in the cluster. The architecture of the NanoPing Cluster is based on services. Some types of services are distributed across many nodes in the cluster, while other services are only available on a single node. Every service API, on any node, is accessible from every other node. This means that the API is almost the same for every node, no matter which node you're accessing the API from.
For example, if you want to access the tunnel configuration service, which is a single service hosted on only one node, you can access that service via the API from any node. The control plane will take care of routing the request to the correct node. Some services that are distributed need to be accessed with the ID of the node they are running on. For instance, if you want to access the pipelines on a specific NanoPing Client, you will need to send a GET request with the node ID of the NanoPing Client you want to access the pipelines from, and the control plane will route the request to the correct node.
The only service that is not accessible from other nodes is the Hub Client. For a node to connect to the control plane, it must connect to the Hub Server. Thus, every node has a Hub Client that can only be accessed via the API hosted on that specific node. The Hub Server, however, is accessible from every node and can be used to query and fetch information about the nodes connected to the control plane.