Hi everyone,
as of yesterday pm, Clojure is running in a live system in a big veterinarian hospital.
We designed an HL7 message bus to link several services within the hospital.
Presently we link the medical record system with the radiology department.
The main benefit is to avoid re-keying information about patient and requests in every system.
We also provide some key applications on the bus to allow people to share information in a consistent
way along the system they use on a daily basis. It's like a Babel tower, radiologists want to work
with their radiology system while the administration wants to work with the medical record system to
bill, ... each of these systems meet specific needs of a user base.
However there is a need for a common ground to share information. That's what our product offers.
This year the bus will expand to encompass prescription requests with the pharmacy, the lab exams
and a couple of other systems. We have also another prospect so we may end up with more than one site
by the end of 2009.
The bus is designed to be a product, not a set of integration tools to be assembled differently
at each customer site. It is highly configurable, all message based and runs on distributed hardware.
Clojure drives the top level logic of the bus (routing decisions, error handling, archiving, ...).
After digging for some parallel processing language better than Java, Clojure emerged as a logical choice.
The design of this system is distributed with fault tolerance in every software function but we needed to have
some options about the low-level components. Having access to all Java libraries out there was a major factor
in our decision to use Clojure.
Presently it runs on six small boxes like this one:
http://www.fic.com.tw/product/ficimages/minipc.jpg
with an internal redundant network. Each function is running in master/slave mode with automatic fail over.
The throughput of the system is at least two thousands transactions an hour. You can unplug cables, boxes, ...
and it still runs. It can sustain more than one fault before it fails.
In the following year using Clojure and Terracotta we expect to bring the degree of parallelism up to a point were we will
be able to run concurrently all the functions on multiple boxes and get rid of the master/slave mode.
Distributed clusters are also in the pipe to allow to route between different sites while keeping local site traffic and different local applications.
Expect a web site about this product in the next 2/3 months. We will give Clojure visibility on this site.
Many of the key features of the system rely on Clojure so we would like to give credit to Clojure and Rich.
Maybe this will be an incentive for people to look at Clojure as a viable alternative to other functional
languages.
Rich, thank you and congratulation, your baby has grown up well in the last year and it will soon be asking for the car keys :))))
Luc