How lagom helps to build real world microservice systems

37
HOW LAGOM HELPS TO BUILD REAL WORLD MICROSERVICE SYSTEMS

Transcript of How lagom helps to build real world microservice systems

Page 1: How lagom helps to build real world microservice systems

HOW LAGOM HELPSTO BUILD REAL WORLDMICROSERVICE SYSTEMS

Page 2: How lagom helps to build real world microservice systems

MARKUS EISELE@MYFEAR

[email protected]! "

Page 3: How lagom helps to build real world microservice systems

@Path("/orders/")@Interceptors(CallAudit.class)@Stateless public class OrderService {

@EJB BillingService billing; @EJB DeliveryService delivery; @EJB Warehouse warehouse;

@PUT @Produces({"application/xml","application/json"}) @Consumes({"application/xml","application/json"}) public Order order(Order newOrder){ Order order = warehouse.checkout(newOrder); billing.payForOrder(order); delivery.deliver(order); return order; }

@GET @Path("{orderid}/") @Produces({"application/xml","application/json"}) public Order status(@PathParam("orderid") long orderId){ return delivery.status(orderId); }}

Page 4: How lagom helps to build real world microservice systems
Page 5: How lagom helps to build real world microservice systems

@Path("/orders/")@Interceptors(CallAudit.class)@Stateless public class OrderService {

private Client client; private WebTarget tut;

// ...

@GET @Path("{orderid}/") @Produces({"application/xml","application/json"}) public Order status(@PathParam("orderid") long orderId){ // return delivery.status(orderId); this.client = ClientBuilder.newClient(); this.tut = this.client.target("http://..."); Order order = this.client.target(location).request(MediaType.APPLICATION_XML).get(Order.class); return order; }}

Page 6: How lagom helps to build real world microservice systems

BUILDING ONE MICROSERVICE IS GENERALLY EASY.

WHAT IS HARD IS BUILDING A SYSTEM OF MICROSERVICES.

Page 7: How lagom helps to build real world microservice systems

COMPLEX DEPLOYMENT

Page 8: How lagom helps to build real world microservice systems

LARGE TEAMS

Page 9: How lagom helps to build real world microservice systems

BREAKING UP MONOLITHS ADDS COMPLEXITY

Page 10: How lagom helps to build real world microservice systems

WHICH TECHNOLOGY TO CHOOSE?

Page 11: How lagom helps to build real world microservice systems

DATA IN MOTION

Rather than acting on data at rest, modern software increasingly operates on data in near real-time.

Page 12: How lagom helps to build real world microservice systems

Traditional application architectures

and platforms are obsolete.— Gartner

Page 13: How lagom helps to build real world microservice systems

WE USED THE RIGHT TOOLS TO BUILD THE WRONG

THINGS.

Page 14: How lagom helps to build real world microservice systems

AND WE STILL ARE MISSING TOOLS.

> Service Discovery> Service Lookup> API Management

> Security> Protocols and Interfaces

> Data Access> Developer Experience

Page 15: How lagom helps to build real world microservice systems

PROTOCOLS AND INTERFACES

REST tends to be our go-to but…> Don’t just do a 1:1 service/interface replacement

> Instead… Design for an asynchronous architecture

Pro-tip: Watch Ben Christensen’s “Don’t build a distributed Monolith” talk from Microservices Practitioner Summit

2016

Page 16: How lagom helps to build real world microservice systems

Architectureand software design principles

matter even more today.— Eisele

Page 17: How lagom helps to build real world microservice systems

HOW TO DESIGN MICROSERVICES SYSTEMS

> Single Responsible Principle> Service Oriented Architecture

> Encapsulation> Separation of Concern

> Loose Coupling> Hexagonal Architecture

Page 18: How lagom helps to build real world microservice systems

SOFTWARE DESIGN PATTERNS

> Domain-driven Design> Bounded Contexts

> Event Sourcing> CQRS

> Eventual Consistency> Context Maps

Page 19: How lagom helps to build real world microservice systems

WE NEED TO BUILD SYSTEMS FOR FLEXIBILITY

AND RESILIENCY, NOT JUST EFFICIENCY AND

ROBUSTNESS.

Page 20: How lagom helps to build real world microservice systems

CORE TENANTS

> Responsive

> Resilient

> Elastic

> Message driven

Page 21: How lagom helps to build real world microservice systems

HOW LAGOM CAN HELP

> Developer experience first!> No ad-hoc scripts to run your

services> Takes you through to production

deployment

Page 22: How lagom helps to build real world microservice systems

HIGHLY OPINIONATED

> Use context bounds as boundaries for services!(Domain Driven Design)

> The event log is the book of record!(Event Sourcing)

> Separate the read and write sides! (CQRS)

> Microservices, too, need to be elastic and resilient!

Page 23: How lagom helps to build real world microservice systems

LAGOM SERVICE API

> IO and communication> Streaming between services as a first-class concept

> Higher level of resilience and scalability with no blocking

> Service is a Bounded Context in DDD> Service Clients & Endpoints

Page 24: How lagom helps to build real world microservice systems

LAGOM PERSISTENCE API

> Event sourced (deltas) with Cassandra backend by default

> No object/relational impedance mismatch> Can always replay to determine current state> Allows you to learn more from your data later> Persistent entity is an Aggregate Root in DDD

> Can be overridden for CRUD if you want

Page 25: How lagom helps to build real world microservice systems
Page 26: How lagom helps to build real world microservice systems
Page 27: How lagom helps to build real world microservice systems

DEVELOPMENT ENVIRONMENT$ cd my-first-system$ activator... (booting up)> runAll[info] Starting embedded Cassandra server..........[info] Cassandra server running at 127.0.0.1:4000[info] Service locator is running at http://localhost:8000[info] Service gateway is running at http://localhost:9000[info] Service helloworld-impl listening for HTTP on 0:0:0:0:0:0:0:0:24266[info] Service hellostream-impl listening for HTTP on 0:0:0:0:0:0:0:0:26230(Services started, use Ctrl+D to stop and go back to the console...)

Page 28: How lagom helps to build real world microservice systems

WHAT IS TECHNICALLY IN LAGOM?

> sbt build tool> Scala 2.11 and JDK8

> Play 2.5> Akka 2.4

> Cassandra> Jackson

> Google Guice

Page 29: How lagom helps to build real world microservice systems

INTEGRATION WITH LAGOM

Page 30: How lagom helps to build real world microservice systems

NEXT STEPS FOR LAGOM

> Scala API> Swagger integration

> Maven support> Support for more DBs

> Integration with other cluster orchestration tools

> … What is missing?

Page 31: How lagom helps to build real world microservice systems

CARGO TRACKER EXAMPLE

https://github.com/lagom/activator-lagom-cargotracker

Page 32: How lagom helps to build real world microservice systems
Page 34: How lagom helps to build real world microservice systems

REACTIVE MICROSERVICES ARCHITECTURE

BIT.LY/REACTIVEMICROSERVICE

> explore a microservice architecture> based on Reactive principles

> for building an isolated service that’s

> scalable, resilient to failure,> and combines with other services

> to form a cohesive whole

Page 35: How lagom helps to build real world microservice systems

DEVELOPING REACTIVE MICROSERVICES

HTTP://BIT.LY/DEVELOPREACTIVEMICROSERVICE

> create base services, expose endpoints, and then connect them

with a simple, web-based user interface

> deal with persistence, state, and clients

> Use integration technologies to start a successful migration away

from legacy systems

Page 36: How lagom helps to build real world microservice systems

NEXT STEPS

Project Site:http://www.lightbend.com/lagom

GitHub Repo:https://github.com/lagom

Documentation:http://www.lagomframework.com/documentation/1.0.x/

Home.html

Page 37: How lagom helps to build real world microservice systems