Open Your Business Rules!
Rules-based
Operational Decision Services
OpenRules Classic: Performance and Scalability
OpenRules is used as a component of complex multi-transactional and multi-user applications for years, and it has a proven record of high performance and scalability. These days most Rule Engines demonstrate a high level of performance, but OpenRules is frequently chosen over major commercial BR products because of the following differentiators:
- High performance
- High scalability for multi-user environments
- Efficient use of memory.
Consider the results cited in a report OpenRules received from a major international bank. The bank created a series of performance and scalability tests before selecting OpenRules as the BR product of choice. They demonstrated that OpenRules scales to more than 300 concurrent users on a hyper-threaded server. Each concurrent user executed its rules 10,000 times with the following results:
Their risk management system utilizes OpenRules in a multi-user environment with millions of transactions per da, and the bank is highly satisfied with the real-world results. The references to this and other customer accounts are available upon requests.
OpenRulesEngine is thread-safe and works very efficiently in multi-threaded environments supporting real parallelism. Contrary to many other rule engines, OpenRules' rule engine is stateless. It allows a user to create only one instance of the class OpenRulesEngine, and then share this instance between different threads - there are no needs to create a pool of rule engines. A user may also initialize the engine with application data common for all threads, and attach this data directly to the engine using the methods setAttachment(Object attachment). Different threads will receive this instance of the rule engine as a parameter, and will safely run various rules in parallel using the same engine.
OpenRules installation includes examples "HelloFromThreads" and "DecisionHelloMultiThreaded" which demonstrate how to organize a parallel execution of the same OpenRulesEngine's instance in different threads and how to measure their performance.