Building Services with WSO2 Microservices framework for Java and WSO2 AS

51
Building Services with WSO2 Microservices Framework for Java and WSO2 Application Server Kasun Gajasinghe & Kishanthan Thangarajah WSO2

Transcript of Building Services with WSO2 Microservices framework for Java and WSO2 AS

Page 1: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Building Services with WSO2 Microservices Framework for Java and WSO2 Application Server Kasun Gajasinghe & Kishanthan ThangarajahWSO2

Page 2: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Agenda

• Introduction to Microservices Architecture• Introduction to WSO2 MSF4J

– Hands-on Sessions• Introduction to Kubernetes/Docker• Demonstrating MSF4J deployment with Kubernetes

• Introduction to WSO2 Application Server– Hands-on Session

Page 3: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Microservices Architecture

A method of developing software applications as a suite of independently deployable, small, modular services in which each service runs a unique process and communicates through a well-defined, lightweight mechanism to serve a business goal.

Page 4: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Microservices

http://martinfowler.com/articles/microservices.html

Page 5: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Inner & Outer Architecture

http://blogs.gartner.com/gary-olliffe/2015/01/30/microservices-guts-on-the-outside/

Page 6: Building Services with WSO2 Microservices framework for Java and WSO2 AS

WSO2 Microservices Framework for Java (MSF4J)

• Lightweight & fast runtime• Use Java annotations as a way of defining microservices APIs as well

as metrics• Support well known & widely used methods such as JAX-RS

annotations• Provide simple ways to develop & deploy microservices• Built-in Metrics & Analytics APIs with out-of-the-box integration with

WSO2 Data Analytics Server (DAS)• To be used in the WSO2 platform as a way of replacing all admin

services as well as defining other microservices for inter-component interactions

Page 7: Building Services with WSO2 Microservices framework for Java and WSO2 AS

MSF4J Implementation

• Based on the new WSO2 Carbon 5.0 kernel • Transport is based on Netty 4.0• Supports streaming• High performance• 5MB pack size• Starts within 300ms• ~25MB memory consumption for the framework

Page 8: Building Services with WSO2 Microservices framework for Java and WSO2 AS

MSF4J Performance Comparison

Page 9: Building Services with WSO2 Microservices framework for Java and WSO2 AS

MSF4J Memory Consumption Comparison

Page 10: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Core Features of MSF4J

• Quick & simple development model using simple annotations• Lightweight & high performance• Custom interceptors• OAuth based security• Metrics gathering & publishing• Streaming input & streaming output support• WSO2 DevStudio based tooling for generating microservices projects

starting from a Swagger API definition• Comprehensive samples demonstrating how to develop microservices

application

Page 11: Building Services with WSO2 Microservices framework for Java and WSO2 AS

MSF4J Flow & Thread Model

Page 12: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Developer Experience & Programming Model

Page 13: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Development Model

• Maven Archetype• IDE/Build Classpath (msf4j-all.jar)• Tooling (Swagger -> Code)

Page 14: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Maven pom.xml

Page 15: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Maven Archetype

mvn archetype:generate-DarchetypeGroupId=org.wso2.msf4j-DarchetypeArtifactId=msf4j-microservice-DarchetypeVersion=1.0.0-DgroupId=org.example -DartifactId=myservice-Dversion=1.0.0-SNAPSHOT-Dpackage=org.example.service

Page 16: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Example - StockQuote Microservice

Page 17: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Application - Main Class

Page 18: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Build and Run !!!

mvn clean install

java -jar stockquote-1.0.0.jar

Page 19: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Tooling - WSO2 Developer Studio

Page 20: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Types of Deployment

• Standalone, Self contained jar files• OS / Container images

Page 21: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Analytics & Monitoring

Supports annotations• Timed – measures execution • Metered – measures rate of events • Counted – counts the total invocations • HTTPMonitored – monitors HTTP requests

Page 22: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Analytics & Monitoring

Page 23: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Service Metrics - Console Output

Page 24: Building Services with WSO2 Microservices framework for Java and WSO2 AS
Page 25: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Security

• Security is done via a central server issuing JWT or OAuth tokens.

• The OAuth2SecurityInterceptor verifies the token before accessing the resources.

Page 26: Building Services with WSO2 Microservices framework for Java and WSO2 AS

MSF4J Hands-on Sessions

Page 27: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Hello World!

1. Build the sample - wso2msf4j-dist-1.0.0/samples/helloworldmvn clean install

2. Run the samplejava -jar helloworld-*.jar

3. Test the samplecurl http://localhost:8080/hello/wso2

Page 28: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Generate a sample with Maven archetypemvn archetype:generate -DarchetypeGroupId=org.wso2.msf4j -DarchetypeArtifactId=msf4j-microservice -DarchetypeVersion=1.0.0

Page 29: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Hands-on - Write a StudentService

• API -– GET /student/getAll - get all students– GET /student/get/{id} - get student with {id}– POST /add - add a student

• Intercept requests• Monitoring

Page 30: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Service class annotations

• JAX-RS HTTP resource methods - @GET @POST @PUT @DELETE

• Content-negotiation - @Produces @Consumes• Service lifecycle - @PreDestroy @PostDestroy

Page 31: Building Services with WSO2 Microservices framework for Java and WSO2 AS

HTTP Monitoring with Data Analytics Server1. Refer the sample - wso2msf4j-1.0.0/samples/metrics-httpmon/metrics-httpmon-fatjar

Page 32: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Production Deployment with Kubernetes and Docker

Page 33: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Virtual Machines vs Containers

Page 34: Building Services with WSO2 Microservices framework for Java and WSO2 AS

What is Docker

• Container Virtualization• Build, pack, ship and run applications as containers• Build once, run in many places• Isolated

Page 35: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Docker Filesystem

Page 36: Building Services with WSO2 Microservices framework for Java and WSO2 AS

StockQuote Service Dockerfile

Page 37: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Kubernetes

• Kubernetes is an open source orchestration system for Docker containers

• Docker -> Container lifecycle management• Kubernetes -> Orchestration and container cluster

management

“Kubernetes, I need 5 Tomcat and one MySQL server running at all times.”

Page 38: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Kubernetes in a Nutshell

Page 39: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Kubernetes UI

Page 40: Building Services with WSO2 Microservices framework for Java and WSO2 AS

PetStore sample

Page 41: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Petstore sample

Page 42: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Petstore sample

Page 43: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Petstore sample - deployment view

Page 44: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Demo - Petstore

Page 45: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Building Services with WSO2 Application Server

Page 46: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Current status of Application Server

• Latest release - AS 5.3.0• Built on top of WSO2 Carbon• Embedded Apache Tomcat 7 and Apache TomEE 7• First class support for

– JAX-WS and JAX-RS services– JavaEE 6 Web Profile applications

Page 47: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Future plan for Application Server

• Upcoming release - AS 6.0• NOT based on WSO2 Carbon or OSGi!• Built on top of Apache Tomcat

Page 48: Building Services with WSO2 Microservices framework for Java and WSO2 AS

AS 6.0

• HTTP Request Monitoring for Tomcat• Seamless integration with WSO2 Identity Server for

SAML SSO Authentication • Classloading improvements

Upcoming- Integration with WSO2 API Manager for exposing

APIs. (API Everywhere!)

Page 49: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Hands-on Session

Page 50: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Questions?

Page 51: Building Services with WSO2 Microservices framework for Java and WSO2 AS

Thank You