Databases that use more than one PBServer no longer get IDs consistently.
Three remedies have been proposed:
1) Use a single PBServer on the head node. Is less scalable but is a quick
hack.
2) Use many PBServers and one UserAppServer on the head node. When a new ID
is needed, the PBServer contacts the UAServer, who is a central repository
for IDs. Is more scalable on high-read apps and like (1), the head node is
a central point of failure.
3) Use ZooKeeper or Paxos to have all nodes agree on a new ID before using
it. Requires more messages to be sent and may bog the system down under
high traffic. Also requires more time to implement.
Have reverted to solution 1 for now. Raj is working on implementing (2) and
Soo Hwan is investigating how much work is involved in implementing (3).
Will eventually implement all three and see the performance differences
over different apps. We also plan to switch between the different modes
statically via a command line arg or yaml file indicating what nodes run
what servers.
Original issue reported on code.google.com by shattere...@gmail.com on 22 Jun 2009 at 8:52
Original issue reported on code.google.com by
shattere...@gmail.com
on 22 Jun 2009 at 8:52