how lagom helps to build real world microservice systems

37
HOW LAGOM HELPS TO BUILD REAL WORLD MICROSERVICE SYSTEMS

Upload: markus-eisele

Post on 12-Jan-2017

1.118 views

Category:

Technology


3 download

TRANSCRIPT

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