DISTRIBUTED BANKING SYSTEM
1 Project Description
It consists of two parts.
You are required to develop a simple distributed banking system. The banking system is implemented using a set of servers, where each server hosts a set of accounts. You can assume that the set of servers in the system and the set of accounts hosted by a server are both static and do not change at run time. The information required to initialize the banking system (e.g., the number of servers, the location of each server, the set of accounts hosted by each server, the initial balance in each account) is stored in a configuration file. A sample configuration file has been provided at the end. Do not change the format of the configuration file.
A user accesses his account using a client program. A client program allows a user to perform one or more of the following tasks:
1. Check the balance of an account.
2. Deposit money into an account.
3. Withdraw money from an account.
4. Transfer money from one account to another.
5. Determine the total amount of money in the banking system.
The first four tasks display the new balance in the appropriate account(s) after the task has been performed. Take suitable precautions to ensure that an account balance never becomes negative. When transferring money, add a random delay between when the money is withdrawn from the source account and when the money is deposited into the destination account to prolong the transfer. Perform the last task by taking a strongly consistent snapshot of the system (i.e., all account values can co-exist at the same time and there are no transfers in progress). You can use the freezing-based protocol discussed in the class to record a strongly consistent snapshot of the system. You can assume that a client executes tasks serially. For the first three tasks (inquiry, deposit and withdrawal), a client connects to the server that hosts the account involved in the task. For the fourth task, it connects to the server that hosts the account from which the money is being transferred. For the fifth task, it acts as a coordinator responsible for initiating the snapshot protocol and collecting the local states. Note that a client may need to connect to different servers to perform different tasks. Also, to obtain full credit, your system should be able to handle multiple instances of snapshot protocol running concurrently. Also, a client should be able to
run in both interactive mode (accept input from the keyboard) as well as batch mode (accept input from a file).
A sample input file has also been provided at the end.
Implement a testing mechanism to ascertain that your snapshot protocol indeed yields a strongly consistent snapshot of the system (e.g., using vector time stamps or some other data structure).
2 Submission Information
You are required to submit all the source files necessary to compile the program and run it. Also, submit a README file that contains instructions to compile and run your program.