The main goal of the network design is to assure that work gets done. Work that's put into the system needs to be completed quickly and efficiently and the results need to return to the servers. Expired work has to be purged from the system, and new work always needs to be available to any client that wants it.
All nodes should be able to communicate the information they need to at any time. The design is highly redundant at all levels so that if a node fails, no other node should be affected. Proxies and servers act in rings, where any node in the ring can serve the same functions as any other.
Security is also a critical factor in a large distributed system. No node will act on a command or use data until it has verified that that command or data has come from a trusted source. Anything that is not from a trusted source is discarded, and measures are taken to ignore further commands from that source.
There are three layers in the Cosm network:
Servers are at the top level and serve in clusters of one or more. Servers function to hand out tasks, receive completed work, and serve any data files related to their project. Servers will communicate with any proxy in the layer closest to them, or other peered servers, but will not talk to clients.
Proxies are the middlemen of the network and do most of the communications tasks. The proxies buffer work, cores, project data, and generally anything from upstream of itself. A proxy will also at times talk to other proxies in its layer to distribute messages, load balance, or route around network problems.
Clients are the workers of the network. They are given tasks by proxies and return the results to them. Once they have work, they run the proper core and then report the results back when the work is finished. Clients also serve as DFS nodes if that is desired. The clients are designed to be installed and forgotten, not needing the user to visit them unless security settings need to be changed. The client will never interfere with local users or processes, but will Email its owner for help when there is a problem that cannot be solved without intervention.
Additionally to the servers, proxies, and clients, there are three other components:
Command consoles are the way the user interfaces with other elements of the network. They allow the user to command some or all of the nodes that they have the authority to control. Command consoles are the source of all user commands throughout the system, and are the only way to interact with the system. They will support most human languages, and the interface will be standardized so that any command console can be used if you have the right keys with you.
Cores are what do the "real work" in the system. They will only handle performing the actual work involved in the project. This makes porting the cores to all available processors and operating systems simple and easy. This also allows the cores to be run offline and separate from the client for hosts that have no network connectivity. All cores must be verified before a client will run them, as to prevent using a bad core.
A server module is the element of the server that handles tasks for a specific project. It will register with a standard set of server libraries and then be called by the server to perform the needed tasks. A module will generate new work, as well as process and verify the results. This allows for a standard programming model and rapid scalability if more servers are needed to handle the load of a project.
v0.1 by Adam L. Beberg
© Mithral Inc.
All Rights Reserved.
Mithral® and Cosm® are trademarks of Mithral Inc.