|Firefox 3.0 Feature request: Deal with byzantine replicated servers.||16. October 2006|
I'd propose a minor protocol extension to support Askemos compliant networks.
A minor protocol extension to support Askemos compliant networks.
Eventually networks are considered Askemos compliant, if they share process state under the sole control of individual owners of those processes in a byzantine agreement over set of physical hosts under sole control of the owners of the hosts.
To this end our implementation requires the client to send POST type requests to at least the majority of the quorum simultaneously.
However it's not a matter of the implementation. Group casting mutating requests to a quorum of servers appears to be an essential component of all fault tolerant systems. Therefore I'd consider it a worthy extension to firefox with potential for reuse.
Since today's browsers don't support group casting and read/write type distinction we have to run a proxy server on the client machines, forwarding GET, HEAD and PROPFIND requests to a random server of the quorum while replicating those POST's etc.
All software installation is obviously an entry barrier.
To overcome this barrier for the casual visitor, we had to "punch a hole" into our security policy: we run such client side proxy code at the servers of public web sites. But that's a very bad idea: it introduces a remote single point of failure, degrading the service to a "try out" quality. Real users have to take the burden and install a local client proxy, before they enjoy service quality. But still on different network, instead of the compromised public one.
The Proposed Solution
The quorum information is available via DNS. askemos.org for instance is currently served from three IP addresses.
Read type requests should choose any of the replicates. For the sake of server load balancing and client privacy it would be beneficial, if the choice was random for each request.
Write type requests would have to be made to each of the hosts. (Try to keep them synchronised. I used to hold the last byte of each request back until the majority of connections is in this hold state, then send finish the requests.)
A cool, but less important feature was, if different authentication data (user name/password, client certificate etc.) could be used for each connection.
The Better Solution
However that a pretty long term idea, probably not for firefox version 3.0, since I don't consider the API definition major.
P.S.: This forum has originally been made as a load test case for BALL. If there where too many replies one day, this page will become in accessible due to timeouts. So don't stress it, please.
Post replies via login host.