footer: © Object Computing Inc., 2018 slidenumbers: false
[.hide-footer]
Ultra-Lightweight Microservices for the JVM -- by Graeme Rocher
[.hide-footer]
- Creator of Grails (http://grails.org)
- Creator of Micronaut (http://micronaut.io)
- Author "The Definitive Guide to Grails"
- Former SpringSource -> VMware -> Pivotal
- Software Engineer at Object Computing (http://objectcomputing.com)
- 2018 Oracle Groundbreaker Award Winner
[.hide-footer]
- How we got here
- Microservice Challenges
- Microservice Framework Lanscape
- Micronaut Demos
[.hide-footer]
- Since 2008, a lot has changed
- 10 Years is a long time in technology
- Everybody was building Monoliths
- No Angular, No React, No Docker, No Microservices
[.hide-footer]
- Let's try adapt existing legacy technologies for Microservices
- Technologies like Spring, Jakarta EE etc were never optimized for low memory footprint Microservices
Shall we:
- Try and convince people that something never designed for Microservices is still ok?
- Go back to the drawing board
[.hide-footer]
- Create a New Framework designed from the ground-up for Microservices and Serverless Computing
- Blazing fast startup time
- Low Memory Footprint
- As Small As Possible JAR Sizes
- Zero Dependency
- 12 Factor - https://12factor.net
To meet this goal we performed an analysis of Spring and Grails and the challenges to using them to develop Microservice applications
[.hide-footer]
Spring is an amazing technical achievement and does so many things, but does them at Runtime.
- Reads the byte code of every bean it finds
- Synthesizes new annotations for each annotation on each bean method, constructor, field etc. to support Annotation metadata
- Builds Reflective Metadata for each bean for every method, constructor, field etc.
[.hide-footer]
[.hide-footer]
[.hide-footer]
- Frameworks based on reflection and annotations become fat
- But we love the programming model and productivity so we live with it
- So ... why should we be more efficient?
- The Android Community already solved the problem
- Ahead of Time Compilation used extensively
- Google Dagger 2.x
- Compile Time Dependency Injector
- Reflection Free
- Limited in Scope to just DI
[.hide-footer]
[.hide-footer]
- Designed from the ground up with Microservices in mind
- Ultra-light weight and Reactive - Based on Netty
- Uses Ahead of Time Compilation
- HTTP Client & Server
- Support for Java, Kotlin and Groovy
[.hide-footer]
- Micronaut AOT
[.hide-footer]
@Controller
class HelloController {
@Get("/hello/{name}")
String hello(String name) { return "Hello " + name; }
}
@Client("/") // Client Generated at Compile Time
interface HelloClient {
@Get("/hello/{name}")
String hello(String name);
}
[.hide-footer]
- Smallest Micronaut Hello World JAR is 12MB when written Java or 14MB in Groovy
- Can be run with as little as 12mb Max Heap with Kotlin or Java (22mb for Groovy)
- Startup time around a second for Kotlin or Java (a little more for Groovy)
- All Dependency Injection, AOP and Proxy generation happens at compile time
[.hide-footer]
- All Dependency & Configuration Injection
- Annotation Metadata (Meta annotations)
- AOP Proxies
- Essentially all framework infrastructure
- ie. What Spring/CDI do at runtime
- Essentially, Micronaut is a AOT framework
[.hide-footer]
- New Little HTTP Frameworks appearing all the time
- If all we had achieved was another HTTP server Micronaut wouldn't be very interesting
- What else does it do?
[.hide-footer]
- Service Discovery - Consul, Eureka, Route 53 and Kubernetes
- Configuration Sharing - Consul Supported and Amazon ParameterStore
- Client Side Load Balancing - Integrated or Netflix Ribbon Supported
- Support for Serverless Computing; AWS Lambda, OpenFaas, Fn Supported; Azure coming
[.hide-footer]
- Micronaut Pet Store
[.hide-footer]
- Write Functions and Run them locally or as regular server applications
- Deploy Functions to AWS Lambda - after warm-up functions execute in milliseconds
@Field @Inject Twitter twitter
@CompileStatic
URL updateStatus(Message status) {
Status s = twitter.updateStatus(status.text)
String url = "https://twitter.com/$s.user.screenName/status/${s.id}"
return new URL(url)
}
- New Polyglot VM from Oracle
- Runs JS, Java, Ruby, R etc.
- Ability to turn Java code native
- https://www.graalvm.org
- Works well when:
- Little or no runtime reflection is used
- Limited or no dynamic classloading
- You plan ahead
- You use third party libraries selectively
- Like Graal itself at the Experimental Phase
- Mirconaut AOT compilation and refection free model makes it easier
- A lot of Micronaut already working:
- HTTP Server, Client & Serverless
- Service Discovery
- DI and AOP
[.hide-footer]
- Compile a Spring Boot into a Micronaut application
- Uses AOT - no runtime overhead
- IDE support improves
- Build applications that support Spring, Micronaut and Grails
- https://github.com/micronaut-projects/micronaut-spring
[.hide-footer]
- Micronaut for Spring + GraalVM
[.hide-footer]
- Take the Spring programming model to new places!
- GraalVM
- Android
- AOT
- Serverless
[.hide-footer]
- Compile Time DI & AOP
- HTTP Client & Server
- Service Discovery
- Distributed Tracing
- Serverless Functions
- Data Access: SQL, MongoDB, Redis, Cassandra etc.
[.hide-footer]
- The Micronaut CLI now available via SDKman!
$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
$ sdk install micronaut
$ mn create-app hello-world
- ~2 years of development by several OCI engineers.
- 70 contributors (19 from OCI).
- ~1300 stars on GitHub.
- Micronaut for Spring 1.0 GA
- AOT Improvements
- OpenID Connect Support
- RabbitMQ Support
- Improved Google Cloud Support
- GRPC Support
- https://github.com/micronaut-projects/micronaut-core/projects/5
- Gitter Community: https://gitter.im/micronautfw
- User Guide: http://micronaut.io/documentation.html
- Micronaut Guides: http://guides.micronaut.io
- FAQ: http://micronaut.io/faq.html
- Github: https://github.com/micronaut-projects/micronaut-core
- Examples: https://github.com/micronaut-projects/micronaut-examples
- Loads of upcoming Events
- Checkout - http://micronaut.io/events.html
- Webinar
- Micronaut aims to provide the same wow factor for Microservices that Grails did for Monoliths
- Built by the people that made Grails, leveraging over 10 years experience in framework development
- Uses Ahead of Time Compilation to support low-memory footprint
- Micronaut 1.0 is available now
[.hide-footer]