Glenn Engstrand

I have been blogging here a lot about the new kids on the JVM block, namely Clojure and Scala. I wanted to see how they compared against the more established Java frameworks. When version 1 of DropWizard was released, I decided that was the time to write another news feed micro-service implementation. This blog is about the news feed micro-service implementation using DropWizard.

conceptual level class diagram of dropwizard service

I wrote the feed, ran some load tests, then compared the results to the same load tests for the Clojure version. I documented my findings in the PDF at the bottom of this page. Here are some answers to questions about the document below.

Q: How did you come to the conclusion that Guice is more popular than Spring when it comes to Dependency Injection in DropWizard?
A: It's been four months since version 1 of DropWizard has been released. The dropwizard-guice integration was available immediately. There still isn't an integration with Spring yet.
Q: Why did you bother using Swagger?
A: I have been an advocate for MDSD for a long time now. Swagger is fairly popular and I wanted to see just how well the popularity was deserved by using it to generate all the RESTful parts of the service.
Q: Well? What do you think of Swagger?
A: I like the technology. Curiously enough, the web site doesn't mention MDSD even once. The focus seems to be about onboarding start ups to get to market faster using their pre-existing templates. That's cool but the real value comes when you adopt and adjust the templates as an expression of your own architecture. One size does not fit all.
Q: What is your "standard load test?"
A: Basically, it is a program that I wrote that simulates news feed load by creating participants, creating friend relationships between the participants, then posting news to participant outbound feeds.
Q: What is the difference between low load and high load?
A: Running the load test program with one thread vs three threads.
Q: You referenced JDBI in the architecture section and then you mentioned Java annotation in the differences section and then you listed Guice and Jersey. Didn't you also mean to list JDBI in the annotation paragraph too?
A: No. I used the JDBI fluent api instead of the Java annotation approach.
Q: How do you run all these load tests?
A: I used aws for all my load test experiments.
Q: You used to use Solr for the search component. With this implementation of the news feed micro-service, you switched to Elastic Search. Does that mean you now prefer Elastic Search over Solr?
A: I had to switch over to Elastic Search for the DropWizard service due to a version conflict in the downstream dependencies with Jetty. I switched from Solr to Elastic Search for the other news feed apps in order to have a more valid basis for comparison during all the load testing.
Q: Why do you still stand up your own EC2 instances of Elastic Search and Redis when you can just use the AWS PaaS versions of those services?
A: I tried using Amazon Elasticsearch Service and Amazon ElastiCache but I couldn't get it to work. I think that I had to set up IAM based access for those and I just didn't want to. I didn't try very hard because it is pretty easy and quick to stand up those services yourself.
Q: Any interest in switching to Memcached?
A: I already coded those classes and will most probably write a blog in the future comparing news feed performance when using Redis vs Memcached.

DropWizard vs Ring: The Java Framework Strikes Back