Designing innovative communications services that
scale to facilitate potential new usage patterns can pose
significant challenges. This is particularly the case if these
services are to be delivered over existing protocols and
interoperate with legacy services. This work explores design
choices for such a service: large scale message delivery to
existing Instant Messaging users. In particular we explore
message throughput, accuracy and server load for several
alternative implementation strategies. These strategies focus on
approaches to concurrency, with best practice in current and
emerging techniques thoroughly benchmarked. Specifically, a
conventional Java Executor approach is compared with a
functional approach realised through Scala and its Actors
framework. These could be termed “blocking I/O” technology.
A third approach has also been measured - a “non-blocking
I/O” based on an alternative to Java Virtual Machine
approaches - employing Node.js and Javascript. We believe
that some of the results are startling