Replicated-Key-Value-Store Service
- Multithreaded distributed system which supports RESTful APIs, PUT, GET, DEL and EXIT, on top of TCP/UDP/RMI using Java.
- Generic node supports both client and server side services.
- Supports fault tolerance by implementing a two-phase algorithm based on simplified RAFT-like Consensus Algorithm.
- Supports three different ad hoc network auto-joining methods:
- Dynamic adjacent list: Dynamic adjacency file will be loaded into each node periodically.
- UDP self-discovery: Nodes will send and catch UDP packets to others periodically, a cluster based on this method will be able to self-discover all nodes within the topology.
- TCP centralized discovery: A central communication center will be set up to find all the other nodes within the cluster on top of TCP.
- Deployed using Docker containers as seperate ends on AWS EC2 instances.
- Automatic deployment and testing using Shell/Bash scripts.
- Java 11.0.6 2020-01-14 LTS
- Eclipse 2019-12
- Maven 4.0.0
- Mac Darwin
- Mac Darwin, Linux Ubuntu(Docker container)
- Remove old built images and containers that includes "tcss558server"/"tcss558client" in the name.
- Build new docker images and containers onto AWS EC2 instances.
- Prepare DF/U/T tests.
Prepare DF test, number of DF servers and 1 client will be created:
./config.sh --df_test <number of servers>
Prepare DF test, number of U servers and 1 client will be created:
./config.sh --u_test <number of servers>
Prepare T test, 1 T central server will be created:
./config.sh --t_test_central
Prepare T test, number of T member servers will be created: NOTICE! This parameter will only take effect after ./config.sh --t_test_central is executed!
./config.sh --t_test_member <number of member servers>
Clean all the images and containers related to testing:
./config.sh --clean
Use ifconfig to obtain IP address of TCP servers
Use ./bigtest_tc.sh <TCP server IP address> to run big test of TCP
- Execute
./config.sh --df_test <number of servers> - Use
ifconfigto obtain<TCP server IP address>of TCP servers in each server container - Use
<TCP server IP address>to update/tmp/nodes.cfgmanually in each server container,vim /tmp/nodes.cfg, vim already installed - You may start testing by executing
./bigtest_tc.sh <TCP server IP address>
- Execute
./config.sh --u_test <number of servers> - Use
ifconfigto obtain<TCP server IP address>of TCP servers - You may start testing by executing
./bigtest_tc.sh <TCP server IP address>
- Execute
./config.sh --t_test_centralfirst to activate a centralized membership KV store - Use
ifconfigto obtain<central store IP address>of central server in its container - Update
./a2_dockerfiles/docker_server/tcss558server_t_member/runserver.shmanually, i.e. updateT_CENTRAL_IP_ADDRto be<central store IP address> - Execute
./config.sh --t_test_member <number of member servers>to activate a bunch of member KV stores - Use
ifconfigto obtain<TCP server IP address>of TCP servers in one of the member server container - You may start testing by executing
./bigtest_tc.sh <TCP server IP address>