CS290I - Scalable Internet Services and Systems

Thorsten von Eicken - UCSB - Spring 2001

Handout #6 - Project 4

Last call: Tuesday June 12th, noon

Important:

Objective

In this project you will run your stock trading site on three front-end machines, all using the same database on bugatti (4th machine). We will load-balance incoming requests round-robin to your 3 servers. Provide the best performance you can, and make your service resilient to server and machine failures (i.e. we will kill your processes and/or halt the machines).

Configuration

The test configuration for your service will be as follows:

hosts type function
lotus, bentley, daimler Solaris E450 2-cpu apache + servlet engine
bugatti Solaris E450 2-cpu mysql database
roadrunner FreeBSD load balancer
porsche, corvette, maserati Solaris Ultra-30 load generators

Persistency

Your system must commit each trade entered into the web site to persistent store, i.e. the database on bugatti, before returning the HTTP response. That is, if all three web servers failed simultaneously, all orders for which a response was received before the crash must be stored in one form or another in the database.

Testing

We will provide the following test aids:

Benchmark scenarios

We will benchmark your system under the following conditions:

  1. Random test: all 3 servers operational, 100 accounts, trading in dozens of stocks, random distribution.
  2. Company test: all 3 servers operational, 100 accounts, trading in one stock only ("company announced results and investors are panicking").
  3. Account test: all 3 servers operational, 1 account ("gone wild"), trading in dozens of stocks.
  4. Failure test: same as random test, except that we will fail up to two web servers at a time, and then restart them.

Each of the benchmarks will have requests for quotes in addition to the stock trading requests. Probably around 4x to 10x as many quote requests as trading requests.

With each benchmark we will verify that all the trades were executed correctly and we will measure the total time taken to execute the trades.

Project write-up

The write-up should expand on the write-up of project 3. The write-up should contain the following sections:

Overall, keep it brief, and focus on the description of the distribution and failure handling.

Schedule

Thursday May 31st, after class: we will perform an initial round of benchmarking. This will give you an initial idea of what to expect.

Thursday June 7th, after class: we will perform the real benchmarking. At this point your system must perform well on the first 3 benchmarks (i.e. those without failure scenarios).

Tuesday June 12th, morning: we will perform a catch-up round of benchmarking, running the failure test on any systems that failed it during the 2nd round. Project write-ups are due by noon in the class homework box.

Neither Josep nor Thorsten will be around after June 12th, so that will be the final deadline!