66
Dropwizard A RESTful Love Story Ryan Kennedy (@rckenned) Core Services @ Yammer

Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Dropwizard  

A  RESTful  Love  Story    

Ryan  Kennedy  (@rckenned)  Core  Services  @  Yammer  

Page 2: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Dropwizard  

A  RESTful  Love  Story    

Ryan  Kennedy  (@rckenned)  Core  Services  @  Yammer  +  MicrosoE  

Page 3: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

What  on  earth  is  Dropwizard?  

Page 4: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*
Page 5: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Some  bearded  jerk  in    a  pointy  hat…  

Page 6: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

or…  

Page 7: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*
Page 8: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Started  at  Yammer  as  three  services  with  largely  copy/pasted  code  

Page 9: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

By  service  number  three  we  idenOfied  and  disOlled  the  paQern  

Page 10: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

What  was  the  paQern?  

Page 11: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

“Dropwizard  has  out-­‐of-­‐the-­‐box  support  for  sophisOcated  

configuraOon,  applicaOon  metrics,  logging,  operaOonal  tools,  and  much  more,  allowing  you  and  your  team  to  ship  a  producOon-­‐quality  HTTP

+JSON  web  service  …”  

Page 12: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

“Dropwizard  has  out-­‐of-­‐the-­‐box  support  for  sophisOcated  

configuraOon,  applicaOon  metrics,  logging,  operaOonal  tools,  and  much  more,  allowing  you  and  your  team  to  ship  a  producOon-­‐quality  HTTP

+JSON  web  service  …”  

Page 13: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

YAML  configuraOon  file  

Page 14: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

hQp:      port:  8080      adminPort:  8081    #  a  string  foo:  foo  value    #  a  duraOon  bar:  60  seconds    #  a  number  baz:  10101  

Page 15: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

ConfiguraOon  validaOon  

Page 16: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

public  class  MyAppConfiguraOon        extends  ConfiguraOon  {  

   @NotBlank      private  String  foo;        @NotNull      private  DuraOon  bar  =  DuraOon.minutes(10);        @Min(1)      @Max(1024)      private  long  baz  =  1;  }  

Page 17: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

“Dropwizard  has  out-­‐of-­‐the-­‐box  support  for  sophisOcated  

configuraOon,  applicaOon  metrics,  logging,  operaOonal  tools,  and  much  more,  allowing  you  and  your  team  to  ship  a  producOon-­‐quality  HTTP

+JSON  web  service  …”  

Page 18: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*
Page 19: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Gauges  

Metrics.newGauge(My.class,  “jobs",      new  Gauge<Integer>()  {            @Override            public  Integer  value()  {                    return  queue.size();            }    }  

);  

Page 20: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Counters  Counter  pendingJobs  =  Metrics.newCounter(My.class,  “jobs");    public  void  addJob(Job  job)  {          pendingJobs.inc();          queue.offer(job);  }    public  Job  takeJob()  {          pendingJobs.dec();          return  queue.take();  }  

Page 21: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Meters  Meter  requests  =  Metrics.newMeter(  

   My.class,  "requests",        "requests",  TimeUnit.SECONDS);  

 public  void  handleRequest(Request  request,    

                     Response  response)  {          requests.mark();          //  etc  }  

Page 22: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Histograms  Histogram  responseSizes  =  Metrics.newHistogram(  

   My.class,  "response-­‐sizes");    public  void  handleRequest(Request  request,    

                     Response  response)  {          //  etc          int  length  =  response.getContent().length;          responseSizes.update(length);  }  

Page 23: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Timers  Timer  responses  =  Metrics.newTimer(My.class,  "responses",    

   TimeUnit.MILLISECONDS,  TimeUnit.SECONDS);    public  String  handleRequest(Request  request,  Response  response)  {          final  TimerContext  context  =  responses.Ome();          try  {                  //  etc;                  return  "OK";          }  finally  {                  context.stop();          }  }  

Page 24: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Health  Checks  public  class  DatabaseHealthCheck  extends  HealthCheck  {          @Override          public  Result  check()  throws  ExcepOon  {                  if  (database.isConnected())  {                          return  Result.healthy();                  }  else  {                          return  Result.unhealthy("Cannot  connect  to  db”);                  }          }  }  

Page 25: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

“Dropwizard  has  out-­‐of-­‐the-­‐box  support  for  sophisOcated  

configuraOon,  applicaOon  metrics,  logging,  operaOonal  tools,  and  much  more,  allowing  you  and  your  team  to  ship  a  producOon-­‐quality  HTTP

+JSON  web  service  …”  

Page 26: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

JMX  ReporOng  

Page 27: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

HTTP  ReporOng  

Page 28: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Metrics  

hQp://host:adminPort/metrics  

Page 29: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*
Page 30: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*
Page 31: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Metrics  reporters  can  be  added  to  adapt  dropwizard  metrics  to  your  

collecOon  system  of  choice  

Page 32: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Health  Checks  

hQp://host:adminPort/healthcheck  

Page 33: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*
Page 34: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Thread  Dumps  

hQp://hostname:adminPort/threads  

Page 35: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*
Page 36: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Ping  

hQp://hostname:adminPort/ping  

Page 37: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*
Page 38: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

“Dropwizard  has  out-­‐of-­‐the-­‐box  support  for  sophisOcated  

configuraOon,  applicaOon  metrics,  logging,  operaOonal  tools,  and  much  more,  allowing  you  and  your  team  to  ship  a  producOon-­‐quality  HTTP

+JSON  web  service  …”  

Page 39: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Dropwizard  provides  its  own  applicaOon  logging  abstracOon  

Page 40: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

HTTP  request  logging  is  supported  as  well  

Page 41: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Dropwizard  provides  log  file  rotaOon  and  compression  

Page 42: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

“Dropwizard  has  out-­‐of-­‐the-­‐box  support  for  sophisOcated  

configuraOon,  applicaOon  metrics,  logging,  operaOonal  tools,  and  much  more,  allowing  you  and  your  team  to  ship  a  producOon-­‐quality  HTTP

+JSON  web  service  …”  

Page 43: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

The  unbeatable  Jackson  

Page 44: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

“Dropwizard  has  out-­‐of-­‐the-­‐box  support  for  sophisOcated  

configuraOon,  applicaOon  metrics,  logging,  operaOonal  tools,  and  much  more,  allowing  you  and  your  team  to  ship  a  producOon-­‐quality  HTTP

+JSON  web  service  …”  

Page 45: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Dropwizard  embeds  JeQy  for  all  your  HTTP  serving  needs  

Page 46: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

JAX-­‐RS  (JSR-­‐311)  for  all  your  RESTful  needs  

Page 47: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

@Path(“/users/{id}”)  public  class  UserResource  {          @GET          public  User  get(@PathParam(“id”)  long  id)  {                  return  db.findUserById(id);          }            @PUT          public  User  update(@PathParam(“id”)  long  id,  

                     User  user)  {                  return  db.updateUser(id,  user);          }  }  

Page 48: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

How  Yammer  uses  Dropwizard  

Page 49: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Lots  of  small  services…16  and  counOng  

Page 50: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Maven  is  our  friend  

Page 51: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

SOck  the  code  in  GitHub  

Page 52: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Shade  your  JARs  

Page 53: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Get  yourself  some  conOnuous  integraOon  

Page 54: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Write  yourself  a  startup  script  

Page 55: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Have  a  good  deploy  story  

Page 56: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Over  Ome,  Dropwizard  has  grown  a  few  appendages  

Page 57: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Dropwizard  Client  

HQpClient  or  JerseyClient  flavors  

Page 58: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Dropwizard  DB  

JDBI  as  a  service  

Page 59: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Dropwizard  AuthenOcaOon  

Abstracted  authenOcaOon…providers  for  OAuth  2  and  Basic  Auth  

Page 60: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

An  example…  @Path("/my")  public  class  MyResource  {          @GET          public  MyResponse  get(  

   @Auth(required  =  false)  Token  token)  {                  if  (token  !=  null)  {                          return  new  MyResponse(getUser(token));                  }  else  {                          return  new  MyResponse(getGuestUser());                  }          }  }  

Page 61: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Dropwizard  Views  

Full  blown  applicaOon  UIs  or  just  a  nice  admin  interface  

Page 62: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Dropwizard  Scala  

The  original  Dropwizard…for  those  who  don’t  know  any  beQer  

Page 63: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

Dropwizard  TesOng  

Test  JSON  representaOons  and  resources  

Page 64: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

I  blew  through  that  preQy  quickly,  fortunately  you  have…  

hQp://dropwizard.codahale.com/  

Page 65: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

And  the  sample  applicaOon  

hQps://github.com/codahale/dropwizard  

Page 66: Dropwizard* - nimret › seajug › past › 2012 › sep › slides.pdf · “Dropwizard*has*outofStheSbox* supportfor*sophisOcated* configuraon,*applicaon*metrics,* logging,*operaonal*tools,*and*much*

And  (hopefully)  Ome  for  quesOons!  

Also…WE’RE  HIRING!