Ratpack - the core for your microservices for JDD 2015

71
01

Transcript of Ratpack - the core for your microservices for JDD 2015

Page 1: Ratpack  - the core for your microservices for JDD 2015

01

Page 2: Ratpack  - the core for your microservices for JDD 2015

About me02

Page 3: Ratpack  - the core for your microservices for JDD 2015

Andrey AdamovichBio:

Developer/Architect

"DevOps" guy

Coach

Speaker

Author

Company: Aestas/IT (http://aestasit.com)

••••••

03

Page 4: Ratpack  - the core for your microservices for JDD 2015

Contact detailsE­mail: [email protected]

Linkedin: http://www.linkedin.com/in/andreyadamovich

Lanyrd: http://lanyrd.com/profile/andrey­adamovich

GitHub: https://github.com/aadamovich

SO: http://stackoverflow.com/users/162792/andrey­adamovich

Twitter: @codingandrey, @aestasit

••••••

04

Page 5: Ratpack  - the core for your microservices for JDD 2015

Let's start!05

Page 6: Ratpack  - the core for your microservices for JDD 2015

MicroservicesIn short, the microservice architectural style is an approach to

developing a single application as a suite of small services, each

running in its own process and communicating with lightweight

mechanisms, often an HTTP resource API.

James Lewis & Martin Fowler

“06

Page 7: Ratpack  - the core for your microservices for JDD 2015

Quick Start!07

Page 8: Ratpack  - the core for your microservices for JDD 2015

0. PrerequisitesInstall Java 8+

Install Groovy 2.4+

(Optionally) install Gradle 2+ (or just use Gradle Wrapper)

•••

08

Page 9: Ratpack  - the core for your microservices for JDD 2015

1. Type in...@Grab("io.ratpack:ratpack‐groovy:1.0.0")

@Grab("com.fasterxml.jackson.core:jackson‐annotations:2.6.2")

import static ratpack.groovy.Groovy.ratpack

01.

02.

03.

09

Page 10: Ratpack  - the core for your microservices for JDD 2015

1. Continue...ratpack {

  handlers {

    get {

      response.send "Time is on JDD " + 

         new Date().toString() 

    }

  }

}

01.

02.

03.

04.

05.

06.

07.

08.

10

Page 11: Ratpack  - the core for your microservices for JDD 2015

2. Save as...ratpack.groovy01.

11

Page 12: Ratpack  - the core for your microservices for JDD 2015

3. Start!groovy ratpack.groovy 01.

12

Page 13: Ratpack  - the core for your microservices for JDD 2015

4. Enable some more loggingJAVA_OPTS=‐Dgroovy.grape.report.downloads=true01.

13

Page 14: Ratpack  - the core for your microservices for JDD 2015

Ratpack facts

14

Page 15: Ratpack  - the core for your microservices for JDD 2015

Ratpack factsRatpack is a toolset that combines several Java libraries that allows

efficiently developing performant and testable HTTP applications.

15

Page 16: Ratpack  - the core for your microservices for JDD 2015

Ratpack factsInspired by Sinatra framework

Requires Java 8

Does not require a EE container

Does not implement Servlet API

Goes under Apache 2.0 License

•••••

16

Page 17: Ratpack  - the core for your microservices for JDD 2015

Ratpack factsCore is very minimal and is only based on few abstractions (Handler

and Registry)

Many additional modules exist and it's easily to develop new ones

Modules are injected through DI (there is no specialized plugin

system)

Out­of­the­box integration with Guice and Spring

••

17

Page 18: Ratpack  - the core for your microservices for JDD 2015

Stack

18

Page 19: Ratpack  - the core for your microservices for JDD 2015

It's alive andvery active!19

Page 20: Ratpack  - the core for your microservices for JDD 2015

Release history0.5.2 ­ Jul 21, 2012

0.6.1 ­ Nov 29, 2012

0.9.0 ­ Jan 02, 2014

0.9.1 ­ Feb 01, 2014

0.9.2 ­ Mar 01, 2014

0.9.3 ­ Apr 01, 2014

0.9.4 ­ May 01, 2014

0.9.5 ­ Jun 01, 2014

0.9.6 ­ Jul 01, 2014

••••••••• 20

Page 21: Ratpack  - the core for your microservices for JDD 2015

Release history0.9.7 ­ Aug 01, 2014

0.9.8 ­ Sep 01, 2014

0.9.9 ­ Oct 01, 2014

0.9.10 ­ Nov 02, 2014

0.9.11 ­ Dec 01, 2014

0.9.12 ­ Jan 01, 2014

0.9.13 ­ Feb 01, 2015

0.9.14 ­ Mar 01, 2015

••••••••

21

Page 22: Ratpack  - the core for your microservices for JDD 2015

Release history0.9.15 ­ Apr 01, 2015

0.9.16 ­ May 02, 2015

0.9.17 ­ June 02, 2015

0.9.18 ­ July 02, 2015

0.9.19 ­ Aug 02, 2015

1.0.0 ­ Sep 15, 2015

••••••

22

Page 23: Ratpack  - the core for your microservices for JDD 2015

Commit history

23

Page 24: Ratpack  - the core for your microservices for JDD 2015

Statistics

24

Page 25: Ratpack  - the core for your microservices for JDD 2015

Team

25

Page 26: Ratpack  - the core for your microservices for JDD 2015

Top contributor

26

Page 27: Ratpack  - the core for your microservices for JDD 2015

Modules ICommon: config, session

Reactive: rx, remote

Authentication: pac4j

Build/Packaging: gradle

Database: h2, hikari

•••••

27

Page 28: Ratpack  - the core for your microservices for JDD 2015

Modules IIDependency Injection: guice, spring­boot

JSON: jackson

Language support: groovy, kotlin

Reliability: hystrix, dropwizard­metrics, newrelic

Templates: handlebars, thymeleaf, groovy

Testing: test, groovy­test

••••••

28

Page 29: Ratpack  - the core for your microservices for JDD 2015

Java + Groovy = ?Has similar performance to Java when using  invokeDynamic

Supports static compilation and compile­time type checking

Useful for defining rich DSLs with type checking via  Closure

parameters and  @DelegatesTo  annotations

•••

29

Page 30: Ratpack  - the core for your microservices for JDD 2015

IDE supportIntelliJ IDEA recommended

Eclipse has poor support for Groovy and @DelegatesTo

NetBeans ­ haven't even tried

•••

30

Page 31: Ratpack  - the core for your microservices for JDD 2015

Diving deeper31

Page 32: Ratpack  - the core for your microservices for JDD 2015

HandlersAll request processing is done via composition of  Handler s.

Each  Handler  in the  Chain  is asked to respond to a  Request  until

one actually does.

••

32

Page 33: Ratpack  - the core for your microservices for JDD 2015

A handler canSend a  Response  based on the  Request .

Delegate to the next  Handler  in the  Chain .

Insert  Handler s into the  Chain  and immediately delegate to them.

Change  Context , which represents the current state of the

Request  processing.

••••

33

Page 34: Ratpack  - the core for your microservices for JDD 2015

Flow

34

Page 35: Ratpack  - the core for your microservices for JDD 2015

Let's writesome code!35

Page 36: Ratpack  - the core for your microservices for JDD 2015

Demo: Dateserver

36

Page 37: Ratpack  - the core for your microservices for JDD 2015

Paths and parametersprefix('api') {

  get('user/:id') {

    render getUser(pathTokens.id)

  }

  get('friends') {

    render getFriendList()

  }

}

01.

02.

03.

04.

05.

06.

07.

08.

37

Page 38: Ratpack  - the core for your microservices for JDD 2015

Verbspath('user') {

  byMethod {

    get { ... }

    post { ... }

    put { ... }

    delete { ... }

  }

}

01.

02.

03.

04.

05.

06.

07.

08.

38

Page 39: Ratpack  - the core for your microservices for JDD 2015

Content typespath('user') {

  byContent {

    json { ... }

    xml { ... }

    type("application/vnd.app.org+json;v=1") {

      ...

    }

  }

}

01.

02.

03.

04.

05.

06.

07.

08.

09. 39

Page 40: Ratpack  - the core for your microservices for JDD 2015

Static contentfiles { 

  dir "public" 

  file "index.html"

}

01.

02.

03.

04.

40

Page 41: Ratpack  - the core for your microservices for JDD 2015

Templates (ala JSP/GSP)Handler code:

get ("admin") {

  render groovyTemplate('admin.html', result: "")

}

01.

02.

03.

41

Page 42: Ratpack  - the core for your microservices for JDD 2015

Templates (ala JSP/GSP)admin.html :

<% if (model?.result) { %>

  <% model.result.each { %>

    <li>${it}</li>

  <% } %>

<% } %>

01.

02.

03.

04.

05.

42

Page 43: Ratpack  - the core for your microservices for JDD 2015

Templates (Groovy­way)Handler code:

render groovyMarkupTemplate(

  "update.gtpl", 

  "title: "Update Book",

  ...

  "price": book.price

)

01.

02.

03.

04.

05.

06.

43

Page 44: Ratpack  - the core for your microservices for JDD 2015

Templates (Groovy­way)update.gtpl :

layout 'layout.gtpl',

title: title,

msg: msg,

bodyContents: contents {

  h1('Update Book')

  includeGroovy '_book_form.gtpl'

}

01.

02.

03.

04.

05.

06.

07.

44

Page 45: Ratpack  - the core for your microservices for JDD 2015

TestingTest handler implementations with  RequestFixture

Functional testing with  ApplicationUnderTest  and

TestHttpClient

Nobody canceled testing with Geb (Selenium)!

••

45

Page 46: Ratpack  - the core for your microservices for JDD 2015

Demo: GebTest

46

Page 47: Ratpack  - the core for your microservices for JDD 2015

Demo:Lazybones +

IDEA47

Page 48: Ratpack  - the core for your microservices for JDD 2015

Let's buildservices!

48

Page 49: Ratpack  - the core for your microservices for JDD 2015

Service setup

49

Page 50: Ratpack  - the core for your microservices for JDD 2015

Quick startlazybones create ratpack <project>

gradlew idea

gradlew run ‐‐continuous

•••

50

Page 51: Ratpack  - the core for your microservices for JDD 2015

Demo:Services

51

Page 52: Ratpack  - the core for your microservices for JDD 2015

Operational aspectsCan't even make WAR! Very peaceful!

Publish JAR/TAR/ZIP in to artifact repository

Or use os­package plugin to create DEB/RPM package

Integrate with provisioning/configuration management tools

Consider monitoring/metrics

•••••

52

Page 53: Ratpack  - the core for your microservices for JDD 2015

Puppet: defined typedefine service::booking(

  $deployment_port,

  $deployment_host,

  $enabled                = true,

  $development_mode       = false,

  $revision               = latest,

) {

  ...

}

01.

02.

03.

04.

05.

06.

07.

08.

09. 53

Page 54: Ratpack  - the core for your microservices for JDD 2015

Puppet: fetchfile { "/services/booking/environments/${name}":

  ensure      => directory

}  

vcsrepo { "/services/booking/environments/${name}":

  ensure      => $revision,

  provider    => git,

  source      => 'https://github.com/jdd/booking.git',

  notify      => Exec["build booking ${name} api"]

}

01.

02.

03.

04.

05.

06.

07.

08.

09. 54

Page 55: Ratpack  - the core for your microservices for JDD 2015

Puppet: auto­buildexec { "build garagetravel ${name} api":

  cwd         => "/services/booking/environments/${name}",

  refreshonly => true,

  command     => 

    "/services/booking/../${name}/gradlew installApp",

  notify      => Service["booking_${name}"]

}

01.

02.

03.

04.

05.

06.

07.

55

Page 56: Ratpack  - the core for your microservices for JDD 2015

Puppet: servicefile { "booking ${name} service":

  path    => "/etc/init/booking_${name}.conf",

  content => template('booking/service.conf.erb'),

  notify  => Service["booking_${name}"]

}  

01.

02.

03.

04.

05.

56

Page 57: Ratpack  - the core for your microservices for JDD 2015

Puppet: serviceservice { "booking_${name}":

  ensure   => $enabled ? 

    { true => "running", 

      default => "stopped" },

  enable   => $enabled,

  provider => upstart,

}

01.

02.

03.

04.

05.

06.

07.

57

Page 58: Ratpack  - the core for your microservices for JDD 2015

Combining optionsChef/Ansible

Etcd/Consul/Eureka

Docker

•••

58

Page 59: Ratpack  - the core for your microservices for JDD 2015

MonitoringHystrix

Dropwizard Metrics••

59

Page 60: Ratpack  - the core for your microservices for JDD 2015

What's next?

60

Page 61: Ratpack  - the core for your microservices for JDD 2015

Going further

61

Page 62: Ratpack  - the core for your microservices for JDD 2015

Demo:ExamplesBooks

62

Page 63: Ratpack  - the core for your microservices for JDD 2015

Summary63

Page 64: Ratpack  - the core for your microservices for JDD 2015

Take­awaysRatpack can be used to quickly prototype web APIs and applications.

Learning curve is really small, you can start in seconds.

It can be used to create high performance web applications due to

non­blocking architecture.

Ratpack does not lock you in the way you implement data access,

session handling, logging, etc.

Ratpack has vibrant community and actively evolving code base.

•••

64

Page 65: Ratpack  - the core for your microservices for JDD 2015

Reading materialhttp://ratpack.io

http://www.slideshare.net/search/slideshow?q=ratpack

https://github.com/ratpack

http://alvarosanchez.github.io/ratpack­101/

••••

65

Page 66: Ratpack  - the core for your microservices for JDD 2015

Book

66

Page 67: Ratpack  - the core for your microservices for JDD 2015

Contribute!67

Page 68: Ratpack  - the core for your microservices for JDD 2015

Questions?68

Page 69: Ratpack  - the core for your microservices for JDD 2015

Demo codehttps://github.com/aestasit/talks2015­jdd­ratpack­the­core­for­your­

microservices­setup•

69

Page 70: Ratpack  - the core for your microservices for JDD 2015

Thank you!70

Page 71: Ratpack  - the core for your microservices for JDD 2015

Happycoding!

71