List of client's needs:
- Easy to Use (a web interface instead of local cmd line)
- Able to add/update database
- Makeflow intergration (mentioned in word doc in dropbox)
- Able to support many users concurrently
Project plan draft
Multiple Instance of Server [Primary]
Multiple instances of SequenceServer with a load balancer
Spin up more instances (docker images of SequenceServer). A load balancer placed in front of all the instances to distribute the load.
- A Web server and multiple BLAST worker server
Split the component that interface with BLAST from SequenceServer, place this portion of workload on worker servers, and there can be many of them. A web server (the rest of SequenceServer) will be responsible for handling incoming search requests, and other management tasks.
(shared/non-shared) web cache in front of all the server instances at the HTTP level, possibly utilizing existing solution (e.g. memcached)
Cache at application level, prevent repeat run of BLAST for identical parameter
Optimize SequenceServer (docker image) [Primary]
Switch web server
Default for docker image is WEBrick, should opt for Nginx or Apache
Faster storage for database
Store the databases on faster storage, such as ramdisk (ramfs, tmpfs)
Profile performance for bottleneck
Check if there is any bottleneck in the ruby codebase for SequenceServer, since there is not much we can do about BLAST codebase
Web interface for database management
Additional web UI
Authentication required for permission to add/update
Web interface for Makeflow integration
Web UI for submitting Makeflow file and corresponding input files.
Authentication required for permission to run.
Presentation: #insert presentation link