UMPS
The University of Utah Seismograph Stations Message Passing System.
uOperator

The critical message relay hub in the hub and spoke architecture. More...

Collaboration diagram for uOperator:

Classes

class  UMPS::Services::ConnectionInformation::AvailableConnectionsRequest
 This class requests the connection information for all avialable connections - which includes services, broadcasts, etc. More...
 
class  UMPS::Services::ConnectionInformation::AvailableConnectionsResponse
 This class provides the connection information to for all available connections - e.g., broadcasts, services, etc. More...
 
class  UMPS::Services::ConnectionInformation::Requestor
 This defines the requestor that interacts with the connection information service. More...
 
class  UMPS::Services::ConnectionInformation::RequestorOptions
 This defines the options for the connection information client. More...
 
class  UMPS::Services::ConnectionInformation::Service
 Implements the server-side connection information service. More...
 
class  UMPS::Services::ConnectionInformation::ServiceOptions
 The options for controlling the connection information service. More...
 

Enumerations

enum class  UMPS::Services::ConnectionInformation::ConnectionType { Service , Broadcast }
 Defines the connection type. More...
 
enum class  UMPS::Services::ConnectionInformation::SocketType {
  Unknown , Request , Dealer , Reply ,
  Response , Router , Publisher , XPublisher ,
  Subscriber , XSubscriber , Proxy
}
 This defines the socket type. Note, ZeroMQ may have more socket types than what is enumerated here. These are simply the patterns exposed in UMPS. More...
 

Detailed Description

The critical message relay hub in the hub and spoke architecture.

uOperator

The UMPS Operator (uOperator) is the essential service in UMPS. uOperator's purpose is to overcome the challenge of discovering peers on our network by making a centralized message relay. Essentially, uOperator is a look-up service; you specify who you would like to communicate with and it provides the connection details.


For example, the below figure we consider a custom application in the below figure. Here, the application calls a scalable location service named EventLocator and writes the located events to a broadcast named EventBroadcast.
An example location application.


The natural question is how does your application know what IP addresses to which to connect? The first option is fairly straightforward; hardcode the requisite addresses for the EventBroadcast and EventLocator in a configuration file. It does not require much imagination to see how this will become brittle. Another option is to simply blast through every open port on a network and play Twenty Questions in an effort to figure out what communication occurs through this port. This is not the most efficient strategy. The solution we adopt is to simply make a central service that knows the IP addresses for various communication types. Consequently, to use UMPS you must
  1. Draw your communication architecture and provide names to message patterns.
  2. Let your external applications know one IP address (the address of the uOperator) and the names of the broadcasts and services it needs to communicate with.
By and large, that's it. Though, some more details will come through when looking at a generic uOperator initialization file.
[uOperator]
# The directory to which module log files will be written.
logFileDirectory = logs
# The server's (IP) address. For TCP connections we will append port numbers to this
# base address. For example: 127.0.0.1:8080 (see openPortBlockStart).
# Note, the address can be set with the UOPERATOR_ADDRESS environment variable.
address = 127.0.0.1
#
# Open ports. Typically we will want a block of ports to be open so that
# we can open as many broadcasts/services as necessary for the application.
# The ports begin at the given port beginning and end (inclusively) on the
# ended ports. There must be at least 3 ports open:
# (a) 1 port to allow access the connection information
# (b) 1 port to which to publish heartbeats
# (c) 1 port from which to read heartbeat subscriptions
openPortBlockStart = 8080
openPortBlockEnd = 8090
# This defines the security level for all communication.
# 0 -> Grasslands There is no security.
# 1 -> Strawhouse IP addresses are checked against a blacklist.
# 2 -> Woodhouse IP addresses are checked against a blacklist and
# users must provide a user/name and password.
# 3 -> Stonehouse IP addresses are checked against a blacklist and
# users must provided a public key. Users must also
# specify a private key.
# 4 -> Ironhouse Currently unsupported. But in this model IP addreses
# are checked against a blacklist, users must provide a
# public key, and the server public key must then be
# authenticated by the user.
securityLevel = 0
# User table for any security level above 0
userTable=/home/USER/.local/share/UMPS/tables/user.sqlite3
# The server's public key and private keypair. This is necessary for the
# stonehouse server since uOperator will be a connection authenticator.
serverPublicKeyFile=/home/USER/.local/share/UMPS/keys/serverPublicKey.txt
serverPrivateKeyFile=/home/USER/.local/share/UMPS/keys/serverPrivateKey.txt
################################################################################
# Proxy Services #
################################################################################
# Overview:
# Proxy services are scalable request/reply mechanisms.
[ProxyServices:EventLocator]
name=EventLocator
################################################################################
# Proxy Broadcasts #
################################################################################
[ProxyServices:EventBroadcast]
name=EventBroadcast
Some things to note:
  • The uOperator address is very important.
  • Currently, only tcp connetions are handled. That results in a slight performance penalty if you manage to get all your modules on one processor. Though ZeroMQ has no problem with inproc communication so interprocess communication is technically feasible to implement in UMPS.
asdf

Enumeration Type Documentation

◆ ConnectionType

Defines the connection type.

Enumerator
Service 

The connection is to a service. This will be a generalization of a request-reply socket.

Broadcast 

The connection is to a broadcast. This will be generalization of a publisher-subscribe socket.

◆ SocketType

This defines the socket type. Note, ZeroMQ may have more socket types than what is enumerated here. These are simply the patterns exposed in UMPS.

Enumerator
Unknown 

The socket type is not specified.

Request 

This is a socket that receives requests. This will accept connections from a RESPONSE or DEALER socket.

Dealer 

This is a socket that receives requests asynchronously. This will accept connections from a ROUTER, RESPONSE, or DEALER socket.

Reply 

This is a socket that replies to responses. This will accept connections from a REQUEST or ROUTER socket.

Response 

This is a socket that receives responses. This will accept connections from a REQUEST or DEALER socket.

Router 

This is a socket that receives responses asynchronously. This will accept connections from a DEALER, REQUEST, or ROUTER socket.

Publisher 

This is a publisher socket. This will accept connections from a SUBSCRIBE or XSUBSCRIBE socket.

XPublisher 

This is an extended publisher socket. This will accept connections from a SUBSCRIBE or XSUBSCRIBE socket.

Subscriber 

This is a subscription socket. This will accept connections from a PUBLISH or XPUBLISH socket.

XSubscriber 

This is an extended subscription socket. This accept connections from a PUBLISH or XPUBLISH socket.

Proxy 

A proxy really isn't a socket but a paradigm. It indicates that there could be a REQUEST-ROUTER or XPUB-XSUB pattern. For this socket type the user will have to get the frontend and backend connection details.