Dropwizard als REST-App-Server

Performance, Fazit

Anzeige

Bleibt zum Schluss nur die Zusammenführung aller Komponenten über die aus dem Hello-World-Beispiel bekannte run()-Methode:

class CoffeeStoreApplication
extends Application<CoffeeStoreConfiguration> {
public static void main(String[] args) throws Exception
{
CoffeeStoreApplication app = new CoffeeStoreApplication();

app.run(args);
}

@Override
public void initialize(Bootstrap<CoffeeStoreConfiguration> bootstrap)
{
bootstrap.addBundle(new ViewBundle());
}

@Override
public void run(CoffeeStoreConfiguration configuration,
Environment env)
throws Exception
{
OrderManagement orderManagement =
new OrderManagement(configuration.getOrderLimit());

env.lifecycle().manage(orderManagement);

env.healthChecks().register("orderManagement",
new OrderManagementHealthCheck(orderManagement));

env.jersey().register(new OrderReportResource(orderManagement));
env.jersey().register(new OrderResource(orderManagement));
}
}

Da Dropwizard auf ein einfaches Entwicklungsmodell setzt, verzichtet der Autor bewusst auf Techniken wie Dependency Injection und arbeitet mit Referenzen, allerdings ist auch der Einsatz von Google Guice zusammen mit Dropwizard möglich, selbst wenn ihn das Framework nicht direkt unterstützt.

Ein wichtiger Faktor für die Auswahl eines neuen Application Server ist die damit erreichbare Performance, denn eine hohe Performance hilft, Kosten im laufenden Betrieb niedrig zu halten. Um die mögliche Leistungsfähigkeit einer Anwendung mit Dropwizard beurteilen zu können, wurde hierfür die im Dropwizard-Tutorial gezeigte Hello-Stranger-Anwendung für Dropwizard sowie für GlassFish als auch Tomcat 7 umgesetzt.

Die Anwendung stellt lediglich eine REST-Ressource bereit, die bei ihrem Aufruf einen atomaren Zähler um eins erhöht und dessen aktuellen Wert samt des Strings "Hello stranger" zurückgibt. Da hierfür keine externen Systeme wie Datenbanken anzubinden sind, ist das Beispiel für einen Vergleich gut geeignet. Die Tests wurden auf einem MacBook Pro 2.6 GHz i7 mit OS X 10.9.4 und Oracle Java 1.7.0.45 durchgeführt. Vor der eigentlichen Messung wurden mehrere nichtgezählte Testläufe ausgeführt, um sicherzustellen, dass der Code durch Hotspot optimiert wurde, da sich so eine wesentlich höhere Performance erreichen lässt. Dropwizard 0.7.1 erreichte bei diesem Setup einen durchschnittlichen Durchsatz von 55.000 Req/c, Tomcat 7.0.55 25.000 Req/s und GlassFish 4.0 19.000 Req/s. Das Setup für diese Tests ist in dem online verfügbaren Beispielprojekt auf Bitbucket vorhanden und lässt sich vom Leser selbst nachvollziehen.

Im Rahmen dieses Artikels konnte nicht auf alle Features von Dropwizard eingegangen werden, so wurde unter anderem die Möglichkeit zur Anbindung von Datenbanken, die Integration von Liquibase zum Datenbank-Management oder die Unterstützung beim Erstellen von Client-Anwendungen für eine Dropwizard-Anwendung nicht angesprochen. Hierfür sei auf die vorbildliche Online-Dokumentation des Projekts verwiesen. Zudem existiert inzwischen eine wachsende Liste von Erweiterungen für Dropwizard, die unter anderem Spring-Unterstützung oder Anbindung an ElasticSearch bieten.

Als Fazit bleibt festzuhalten, dass sich mit Dropwizard durch den Einsatz etablierter Frameworks wie beispielsweise Jersey oder Hibernate für Java-Entwickler ohne hohen Lernaufwand performante RESTful-Webanwendungen entwickeln lassen. Dabei zahlt sich die Reduktion der verwendeten Komponenten und Techniken zu Gunsten eines leicht verständlichen Programmiermodells aus. Darüber hinaus sorgen die Möglichkeit der Validierung der Konfiguration und die bereits integrierten und erweiterbaren Monitoring- Fähigkeiten für einen fehlerärmeren Betrieb. Wer auf RESTful-Webservices setzt und sich für leichtgewichtige Architekturen (also solche, die sich unter anderem durch geringeren Ressourcenverbrauch, vergleichsweise einfacher Administrierbar- und Verständlichkeit) interessiert, sollte sich daher näher mit Dropwizard beschäftigen.

Oliver Fischer
ist Senior Software Engineer bei der E-Post Development GmbH und engagiert sich in der JUG
Berlin-Brandenburg.

Anzeige