Building Services with WSO2 Microservices Framework for Java and WSO2 Application Server Kasun Gajasinghe & Kishanthan ThangarajahWSO2
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
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.
Microservices
http://martinfowler.com/articles/microservices.html
Inner & Outer Architecture
http://blogs.gartner.com/gary-olliffe/2015/01/30/microservices-guts-on-the-outside/
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
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
MSF4J Performance Comparison
MSF4J Memory Consumption Comparison
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
MSF4J Flow & Thread Model
Developer Experience & Programming Model
Development Model
• Maven Archetype• IDE/Build Classpath (msf4j-all.jar)• Tooling (Swagger -> Code)
Maven pom.xml
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
Example - StockQuote Microservice
Application - Main Class
Build and Run !!!
mvn clean install
java -jar stockquote-1.0.0.jar
Tooling - WSO2 Developer Studio
Types of Deployment
• Standalone, Self contained jar files• OS / Container images
Analytics & Monitoring
Supports annotations• Timed – measures execution • Metered – measures rate of events • Counted – counts the total invocations • HTTPMonitored – monitors HTTP requests
Analytics & Monitoring
Service Metrics - Console Output
Security
• Security is done via a central server issuing JWT or OAuth tokens.
• The OAuth2SecurityInterceptor verifies the token before accessing the resources.
MSF4J Hands-on Sessions
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
Generate a sample with Maven archetypemvn archetype:generate -DarchetypeGroupId=org.wso2.msf4j -DarchetypeArtifactId=msf4j-microservice -DarchetypeVersion=1.0.0
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
Service class annotations
• JAX-RS HTTP resource methods - @GET @POST @PUT @DELETE
• Content-negotiation - @Produces @Consumes• Service lifecycle - @PreDestroy @PostDestroy
HTTP Monitoring with Data Analytics Server1. Refer the sample - wso2msf4j-1.0.0/samples/metrics-httpmon/metrics-httpmon-fatjar
Production Deployment with Kubernetes and Docker
Virtual Machines vs Containers
What is Docker
• Container Virtualization• Build, pack, ship and run applications as containers• Build once, run in many places• Isolated
Docker Filesystem
StockQuote Service Dockerfile
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.”
Kubernetes in a Nutshell
Kubernetes UI
PetStore sample
Petstore sample
Petstore sample
Petstore sample - deployment view
Demo - Petstore
Building Services with WSO2 Application Server
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
Future plan for Application Server
• Upcoming release - AS 6.0• NOT based on WSO2 Carbon or OSGi!• Built on top of Apache Tomcat
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!)
Hands-on Session
Questions?
Thank You