SlideShare utilise les cookies pour améliorer les fonctionnalités et les performances, et également pour vous montrer des publicités pertinentes. Si vous continuez à naviguer sur ce site, vous acceptez l’utilisation de cookies. Consultez nos Conditions d’utilisation et notre Politique de confidentialité.
SlideShare utilise les cookies pour améliorer les fonctionnalités et les performances, et également pour vous montrer des publicités pertinentes. Si vous continuez à naviguer sur ce site, vous acceptez l’utilisation de cookies. Consultez notre Politique de confidentialité et nos Conditions d’utilisation pour en savoir plus.
for high performance
and reliable web
Tomas Lin @tomaslin
Goals for this talk
• Quick tour of Dropwizard functionality
written with Groovy & friends instead of
• Showcase some of the “DevOps” friendly
features in Dropwizard for easy setup,
deployment and monitoring.
This is not a talk about
• Everything I tell you about REST will
probably be a lie.
• Think JSON services over http.
REST-ful API Design - Ben Hale
Beautiful REST + JSON APIs - Les Hazlewood
• Senior Software Engineer at Netﬂix
• Grails developer since 2008
• Takes mature, well known Java frameworks
and glues them together.
• Jetty for HTTP
• Jersey for REST
• Jackson for JSON
• Metrics for metrics
• Etc. ( Logback, Hibernate, Liquibase, etc )
Who uses Dropwizard?
Fraud Detection & Gift Card
Fault Tolerant Job Scheduler
Carl Quinn : Dropwizard +
Netﬂix OSS tools
Dropwizard + Groovy?
• Bloom Health - Insurance carriers data exchange.
Spring Batch, Dropwizard and Groovy.
(25x faster than previous system)
• Sky Find and Watch - Powers the remote record /
watch now functionality
• UnderwriteMe - Watch Marcin’s talk!
Dropwizard + Groovy?
• Editorial Expansion - Time inc. subsidiary in Mexico
Gourmet Awards iPhone app backend.
• By Kyle Boon from Bloom Health
• Available via Lazybones template tool by
• You can get Lazybones via gvm
• Gradle build
• Spock tests
• Hibernate persistance layer
• Fat Jars via Shadow ( like Maven’s Shade )
• CodeNarc for clean code
• Cobertura for test coverage
• Test the application ./gradlew test
• Build a Jar ﬁle for deploy ./gradlew shadow
• Drop a database ./gradlew dropAll
• Setup database ./gradlew migrate
• You can add your own like deployToCloud
• Like an Application in Grails
• Central place where all the other building
blocks are connected.
• The Dropwizard approach to services lets
us see one place where all our other
components are bound and glued together.
• Relationships between other parts must be
explicitly declared. There is no magic
• Each service has a conﬁguration that is
passed into the run method.
• Dropwizard has default conﬁgurations for
clients, logging and Jetty that can be
Same jar ﬁle, conﬁguration is externalized.
java -jar application.jar server test.yml
java -jar application.jar server stage.yml
java -jar application.jar server prod.yml
• Conﬁgurations are vital because they allow
us to make sure we got all the details for
our service right.
• One conﬁg ﬁle instead of merged conﬂict
from many sources eliminates confusion
and makes it easy to automate / swap out.
• Represent a set of service endpoints
• Like Controllers in Grails
• They are just Jersey Resources:
• Tested not as Unit mocks, but as Jersey
components with a real Jersey server.
• Similar to the FakeServer in Grails Rest Client
• Dropwizard comes with a ResourceTest that
works with Mockito / JUnit
• I wrote a Spock equivalent available at http://
• Lets you formally describe the data ﬂowing
in and out of your REST API.
• Data Transfer Objects that can be validated.
• It gives you a way to easily map them into
your database objects either directly or via
• Recommended approach is to share
representations between servers and
• The use of representations ensure the
contract between our REST endpoints and
clients that consume this endpoint.
• You could also just skip this and go straight
to your other endpoints or JSON friendly
• They are ﬁrst class citizens within
• Very ﬂexible.You can deﬁne custom
metrics, set Gauges, etc.
• It’s about communicating the actual state of
your server back to the mothership so it
can be coordinated.
• Dropwizard has a pretty robust default
• We can use the @Slf4j annotation in Groovy
• I am lazy.
• Don’t realize logs are needed until it is too
• Logs are time machines to past
malfunctions, making them easy to set up
allows us to use them.
• Dropwizard has available both the Apache
HttpClient and the Jersey Client.
• Jersey Client can use same deserialization
available to the server
We can now use the client within the
Resource to fetch http data from other sources
• Returns a fully wrapped object that emits
metrics. This allows us to monitor how
they are used and identify bottlenecks or
• Classes that have a start and end phase
attached to the service.
• Often have their own conﬁgurations.
• Easy way to encapsulate integrations into
other services / systems.
• Runtime checks that the service is
• If an exception is thrown, this is shown on
the health monitoring screen
• Also throws a 500 error code on the
health check page for tools
• Quick diagnostics on running instance.
• Better to kill a sick service than to keep it
running and potentially corrupting your
• Also helps when you are deploying and
building out your infrastructure.
• Tasks - Like Grails Scripts
• Commands - Jobs that can be invoked via
an URL. Lots of power since you’re using
the same stack as your runtime service.
• Others - Filters, Bundles, etc.
Make Jars, not Wars
One jar ﬁle from CI to deploy
• Dropwizard Plugin by Burt Beckwith
• Health Control Plugin by Kim Betti
• Validate Conﬁg Plugin by Andy Miller
• Metrics Plugin by Jeff Ellis
• Less verbose objects. Can use map
• Nice annotations for logging.
• Gradle / Spock / Betamax / Lazybones.
• Not sure if @CompileStatic has any changes
that are signiﬁcant - 6%
[ http://kyleboon.org/blog/2013/09/26/doescompile-static-make-your-website-faster/ ]
• A lot faster since there is very little magic
and user interface to test.
• Excellent support in IntelliJ for Gradle
project and tasks.
• Think about the deployed application.
• Grails + Dropwizard. Not Grails or
• This is just mini-scale. What happens when
you have 100 services/servers? 1,000?
1,000,000? ( Come work at Netﬂix! )
• Email : email@example.com
• Twitter : @tomaslin
• Slides will be posted on my blog: