2008:SE401:Hypothesized Solution
The goal of the project is to autonomously scale a web service to provide a consistent quality of service(QOS). Using Amazon Web Services, it is fairly easy to start additional physical machines which can hold a replica of the service and can be used to help balance the load upon that service(It may be that bottlenecks such as databases affect the ease of which services can be replicated and synchronized).
We propose to create an application in Java (due to its OS generic nature, native network capabilities and experience with the language and tools held by the developers). This application will monitor the quality of the service being provided and start more services when the QOS starts to deteriorate. As the load on these services starts to decrease, while maintaining our standard of QOS, our application will also scale down the quantity of physical machines, thus reducing the cost of providing the service (this is charged by Amazon Web Services at an hourly rate for each physically active machine.)
It is assumed in some cases the load on a service will be predictable, an example of which may be a web service advertising the rate of inflation; it is likely there would be a lot of interest on the day the reserve bank is to announce the newly calculated rate. In such cases it should be possible for our system to pre-emptively scale up the capacity of the service.
Our system should
Problems;
- Delay in server start up times, introducing windows of possibly poor service; this could be controlled by increasing the sensitivity of the system so it starts services sooner, however this increases cost.
- Overriding predictions about the use for a system are hard to determine. Both overestimates and underestimates could be costly (cost of running servers and losing customers respectively).