This short document outlines some optional features to add if:
- You are doing the project for MEng project credit, or
- You just want more of a challenge, or
- You really, really, need an A+ in this course, or
- You just are the obsessive type, with no social life, and figure it may
impress a date if you can tell her or him about the really neat optional stuff
you added to your project. (Hint: don't ask... don't tell...)
Due Date and Demo:
Optional features are due as part of the final project submission (last day
of classes). Hand in your code and a short document explaining how you
solved each problem, much as you did for parts I, II, III and IV of the project.
Demo your solution as part of your phase 4 demo if you are doing this for an MEng project.
Additional bank "operations" to support:
- MoveAccount( acnt, branch ): moves the designated account
to the indicated branch. Obviously, this feature "breaks" the direct
mapping from account numbers to branches; you'll need to deal with that.
- Link( acnt-a, acnt-b ): links two accounts. Once linked,
an overdraft on acnt-a will automatically trigger a transfer from acnt-b to
cover the overdraft.
Additional clustering and distributed computing features to support:
- Partitioning: Divides the accounts within the cluster so that (for
example) nodes A and B handle even-numbered accounts, nodes C and D odd number
accounts, or something similar. Designing a good partitioning mechanism
is part of your task. We won't insist that the solution be particularly
"dynamic" even though, in the real world, you might ideally want this to be
responsive to the pattern of loads and accounts actually seen by the bank.
After all, one bank branch may see many people named Franks, Jones and Smith,
while another branch has a curiously large number of people named Dubois,
LeBlanc and Brebeouf! (The point being that the best partitioning
function for a US branch might not be ideal for a Parisian one, etc).
- Automated disaster recovery. Deals with the risk that a tornado will
wipe a branch from the face of the earth by maintaining a backup in the form
of a "log" from which some other branch can take over, if necessary
- System manager's console: Provides a web interface with which an operator
can see which branches are operational and how the cluster at each branch is
configured, and permitting some operator actions (like forcing a crash or a
restart).