Hi Carl,
I have two questions concerning failover:
As I understand, the implemented failover is a mixture of load balancing and failover.
It would be more correct to say that the implemented mechanism can be used for both load balancing and failover.
The messages are randomly sent to one of the servers of the "failover-cluster", if one or more of them fail,
the messages are sent to one of the remaining servers of the cluster.
Yes. This process is repeated until success or until the list of servers is exhausted.
Is there a way to do a pure failover? That means: all messages are sent to server1, only if
it fails, then the messages are sent to server2 and so on.
This functionality can be implemented at the application level. A very minor modification of the library would be needed to change the existing implementation to do what you have described. I think that it makes sense to introduce this distinction in future versions of the library.
How can a single nameserver support a failover-cluster of "application"-servers?
When I do the following sequence
1.) start nameserver
2.) start first "application"-server
3.) start second "application"-server
then the nameserver seems to forget the first "application"-server and all messages are
sent to the second "application"-server.
This is because single servers do not know about each other and the name server cannot decide that they actually form a cluster.
You can solve this problem by registering the servers by hand (or by an additional program) under a single name and with a "failover:..." target. In other words, do not allow individual servers to overwrite each other's bindings, but create a single binding for all servers. This way, when the client asks the name server for the location of the given service, the name server will reply with the single "failover:..." entry that lists all servers, which will then be used by the client.
Why are all libraries built as static libraries?
Because they are easier to use. That is, after the programs are linked, there is no need to worry about the libraries any longer.
It is still possible to compile the libraries as shared (there are separate Makefiles for this for Visual Studio users).
Note that the Python library is always based on the shared loadable module.
Regards,
--
Maciej Sobczak *
http://www.inspirel.com