µServices Architecture using Groovy

http://bit.ly/microservices-groovy

Agenda

  • What? Why? How? ROI?
  • Getting Groovy
  • Ratpack Framework
  • Peek a Boot & Grails 3
  • Case Study
  • Q/A
  • Ale

What?

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.

                                - Martin Fowler

Why?

Because monolithic apps lack:

- Scalability

- Flexibility

- Modularity

- Portability

- Decentralization

Monolithic Apps

  • Non Modular
  • Unscalable
  • Inter-dependent components are dumb when worked alone
  • Huge turn around time for changes
  • Becoming less productive when "Cloud" is in context
  • "Build - Test - Ship" cycle is time consuming
  • Fragile when complexity increases

µServices

  • Scalable
  • Integration By Functioning Parts
  • Decentralized
  • Domain Specific Boundaries
  • Distributed Governance/Ownership
  • Suits Continuous Delivery
  • Two Pizza Team
  • Fine Grained Failsafe Mechanism
  • Modular

Pros

  • Smaller services that are independent & easy to understand
  • Relatively simple and adheres to Single Responsibility Principle
  • Embedded Containers per service (remember Grails? on steroids)
  • Separation Of Concern
  • Multiple services developed and deployed independently communicate RESTfully
  • Independent of technology stacks

Cons

  • Number of services to mentain
  • Deciding on inter-service communication mechanism
  • Implementing ATOMICITY (distributed transactions) among services
  • Synchronization between teams owning services (Thanks to pull requests)
  • Divergence in Organizational Standards

Getting Groovy

MetaProgramming

DSL

Dynamic

Optional Type

Frameworks

  • Ratpack
  • Spring Boot
  • Dropwizard
  • Vert.x
  • Grails

Ratpack

@GrabResolver("https://oss.jfrog.org/artifactory/repo")
@Grab("io.ratpack:ratpack-groovy:0.9.4")
import static ratpack.groovy.Groovy.*

ratpack {
    handlers {
        get {
            render "Hello World"
        }
    }
}

http://localhost:5050

v0.9.11 (released 12/01)

Add-ons

  • Stand-alone Spring applications
  • Embedded Tomcat or Jetty directly.
  • Convention over Configuration
  • Deployable Fat JARs
  • Opinionated
  • Metrics, health checks and externalized configuration
  • no code generation and no requirement for XML configuration

Gradle Dependency

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.1.9.RELEASE")
}

Spring Boot App

package hello;

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
}

Great.. but not so Groovy!!!

Grrrrooooovyyy

//App.groovy
@RestController
class SampleController {
    @RequestMapping("/")
    String home() {
        return "Hello World!"
    }
}

Prerequisites:

spring-boot-gradle-plugin (if gradle project)

spring boot CLI

$ spring run App.groovy
$ curl localhost:8080
Hello World!

Grails 3.0 Sneak Peek

by Graeme Rocher in S2GX - 2014

µServices Followers?

A single missing semicolon brought down the entire (monolithic) Netflix website for several hours in 2008. #reInvent — Chris Eng (@chriseng)



NetFlix

( NetFlix OSS)

Revisit

Q/A

References & Resources:

& more...

Thank You

MicroServices using Groovy

By Dhiraj Mahapatro

MicroServices using Groovy

  • 5,718