Monday, January 14, 2008

Scalable Enterprise Drools

If you're 17 or 18, and about to finish 2nd level school, chances are that you want to apply to a 3rd Level College or University. Here in Ireland you get 100 points for each 'A' grade in your final school exams (Leaving certificate), 85 points for a 'B' grade and so on. You can then use these points to 'bid' for your preferred course, with Medical and Legal courses 'costing' the most. Think of it as EBay for education, managed by the CAO (Central Applications Office).

Of course, this being a Business Rules post, things are not quite as simple as that. Many courses such as Art and Drama require that you submit a portfolio of work. A lot of courses with strong people skills (e.g. Psychology) require an interview. And from this year, high demand medical courses have additional exams scores (testing for common sense and a personality!). These rules tend to be modified slightly from year to year. All these rules make the process more complex to administer, given that tens of thousands of people apply annually.

17 year olds being 17 year olds, all these applications hit the website in a 2-3 days 'spike' before the February 1st deadline. A 2nd spike hits the system in mid August when the actual exam results are published and college places are distributed.

Given that we're dealing with people's futures here how would you build the system (a) to process the rules clearly and correctly and (b) to guarantee that every application will processed , no matter how big the spike in workload is?. The current system has legacy issues, and has a history of falling over at critical moments (see stories here and here).

Problem A - how to run the course rules clearly and accurately - is a known issue, and can easily be solved using JBoss Drools.

Problem B - how to ensure the website / system is always available can also be solved quite easily : Use JMS to 'Queue' requests.

For example, at busy times in some call centres, instead waiting 'musak' you may get the message ' please leave your details and we'll call you back when you get the head of the queue. BT Ireland do this for their broadband support, and they call you back in the same order that you were waiting. This guarantees that even under large spikes all requests will be handled (eventually), but with no guarantee of when. This is better than the alternative of 'I'll hang around online until I get the complete reply'; if the web site falls over; no guarantee when or even if you'll get a response.

So, how do you put all of these together, perhaps with multiple versions of JBoss Drools (for extra scalability). By complete co-incidence (!) a whitepaper on how to build scalable websites using Drools and JMS messaging is here.