Distributed appointment calendar app

Job ID: 32676648

Budget: €30 – €250 EUR

Current state:

There is an application that realizes the functionalities of a distributed appointment
calendar. I provide it as a zip file.

The backend has one server instance. Your job is to extend this single instance to a
multi-layer architecture described in the following section called Target state.
Used Technologies: Java RMI, Java Swing, MySQL.
“Client” and “GUI” packages should not be changed.

Target state:

I expect your project to contain two important parts: Root Server and Child Servers.

Server side structure:

When the application is initiated, your code creates one Root and two Child servers.
The number of Child Servers grows by demand. Note that the structure of the System
must be a binary tree. Your expansion of the current code must have the structure
shown in image (Refer to the "expected_implementation.jpeg").

What I expect as a binary tree is:

● N-layer architecture: the first layer contains 2 Child Servers, the second layer has
4 Child Servers, the third layer contains 8 Child Servers, the fourth layer includes
16 child servers, and so on.

● Each Child Server has its separate database containing three tables. The tables
are User, News, and appointment. This database contains only the data of its
clients.

Main functionalities:

1. If the user is new in the System, it will connect to the Root Server for the first
time, and depending on the traffic the Root Server assigns it to a Child Server.
The root server keeps a record that has the information of each client and the
child server it is connected to. For example Root Server knows that client A is
kept on child server 3.

2. The first 20 clients will be handled by the two child servers of the first layer (10
clients per server). When the number of clients is more than 20, the second layer
is created (by Root Server). The second layer has the capacity to serve 40
clients (10 clients per child server). If the number of clients is more than 60, the
third layer with a capacity of 80 clients is created (by Root Server). Your code
should implement this logic and account for the increase in the number of clients
by creating extra layers and child servers.

3. Your code must be able to search for a specific client in the binary tree. For
example, user X (on the main right branch, layer 3) wants to arrange an
appointment with user Y (on the main left branch, layer 5). This search method
serves as a mechanism to send the invitation (calendar app) from one user to
another user in different layers of the structure.

4. If one of the child servers fails, the clients' data on that server and data on its
Child Servers should be recoverable. Your code contains a backup strategy or
algorithm for recovering the data. (Could be discussed)

Summarized checklist:

1. The load balancing mechanism should be done as described.

2. It is important to describe the search method, how an invitation is sent from
server A, where user A exists, to server B, where user B exists.

3. If a server fails that has additional hierarchy levels downwards, there must be a
mechanism to recover its data.

4. The code must be clean (well-commented and according to proper naming
conventions).