Upload
michel-graciano
View
114
Download
1
Tags:
Embed Size (px)
DESCRIPTION
In the age of cloud computing and highly demanding systems, some new approaches for application architectures such as the event-driven model have been proposed and successfully implemented with Node.js. With the Nashorn JavaScript engine, it is possible to run JavaScript applications directly in the JVM, enabling access to the latest Node.js frameworks while taking advantage of the Java platform’s scalability, manageability, tools, and extensive collection of Java libraries and middleware. This session demonstrates how to use Nashorn to create highly scalable JavaScript applications leveraging the full power of the JVM by using the projects Avatar and Node.js with Avatar.js and Vert.x, highlighting their key benefits, issues, and challenges.
Citation preview
Scalable JavaScript applications with Project Nashorn
SpeakersLeonardo ZanivanSoftware Architect, Trier Sistemasgithub.com/panga@leonardopanga
Michel GracianoSoftware Architect, Betha Sistemasgithub.com/mgraciano@mgraciano
Agenda● Why JS in the server● Why the JVM● Nashorn ecosystem● Vert.x and Avatar/Avatar.js● Q&A
Why JS in the server● Asynchronous by nature● Native JSON support● Language reuse● Easier developer transition
Why the JVM● Multilanguage● APM Tools● Access to the Java ecosystem
○ Domain models already implemented○ Java EE○ Core and third parties Java libraries
Nashorn● JDK 8 Compact 1 Profile with extension● Restrictions (browsers API, DOM)● No native CommonJS implementation● ECMA 5.1 + Rhino compatibility● jjs interactive command line tool
Nashorn● JDK 8u20
○ JDK-8032068: sourceURL directives○ JDK-8021350: Share script classes between
threads/globals● JDK 8u40
○ JEP 196: Nashorn Optimistic Typing○ JEP 202: Nashorn Class Filter○ JEP 203: Initial ES6 implementation (const & let)
● JEP 194: Nashorn Code Persistence (lazy compilation)
But how to scale it?
But how to scale it?Architectures and Technologies
Event-driven architecture● Event-loops● Async non-blocking IO● Reactive system● Event bus
Event-driven architecture
Microservice architecture● Focused on specific business● Well defined & distributed● Loosely coupled● Testable● Scalable
Microservices Architecture
Vert.x● http://vertx.io/● Based on Netty● Sponsored by Red Hat● Winner of JAX Innovation Awards 2014
@timfox: Writing Highly Concurrent Polyglot Applications with Vert.x [CON7902] Thursday, Oct 2, 11:30 AM
Vert.x● Key benefits
○ Polyglot○ Event bus (async & worker verticles)○ Create reactive applications○ Microservices ready○ Strong community involvement
Vert.x Architecture
Vert.x● Key benefits
○ Easy deployment■ CLI, API, mods, runtime deps resolution
○ Good build tools support (fat jar, auto-redeploy)○ Native Cluster & HA with Hazelcast○ Tons of extensions available
Vert.x● Challenges
○ Updated documentation○ Verticle monitoring○ Limited transactions support○ Doesn’t have distributed maps yet (2.x)○ Nashorn debugging support (PR to be merged)
Vert.x● Vert.x 3 highlights
○ JDK 8+ with Nashorn & Lambda○ No more module system*○ Clustered shared data○ Event bus proxies & codecs○ Ext stack (MongoDB, SockJS, Route, Rx)
Demo● Real-time notification service using
websockets over nashorn integrating with a legacy Java EE app
Avatar.js● https://avatar-js.java.net● Oracle sponsored● Focus on bringing the node programming
model, APIs and module ecosystem to the Java platform
Avatar.js
Avatar● https://avatar.java.net● Oracle sponsored● Focus on Thin Server Architecture
○ Supports REST, WebSocket and Server-Sent Events
● Built on Avatar.js
Avatar Architecture
Avatar EE Architecture
● Deploying an application on Glassfish 4○ asadmin deploy ~/projects/<app-folder-name>
● Running the application○ http://localhost:8080/<app-folder-name>
Avatar
Avatar/Avatar.js● Key benefits
○ Avatar Services use an Actor-like concurrency model
○ NPM modules support○ Strong Java EE integration○ Debugging
Avatar/Avatar.js● Challenges
○ Weak community involvement○ Low activity and no stable release○ Glassfish / Weblogic only○ Model Store API supports only Oracle NoSQL for
schemaless database
Benchmark● Some simple and naive scenarios
○ Posting and querying from database○ Returning a simple JSON response○ String concatenation○ Fibonacci calculation
Benchmark● Node.js 0.10.29 (2014-06-16)● Avatar.js 0.10.28-SNAPSHOT (2014-07-20)● Vert.X 2.1.1 (2014-06-18)● Avatar 1.0-ea-SNAPSHOT (2014-07-26)● JDK 8u5
Some Fib(30) results
Some Fib(30) results
Some Fib(30) results
Q&A
Credits● Event-loop & Vert.X architecture
○ Slideshare presentation http://bit.ly/1qz6KUb● Microservice architecture
○ http://martinfowler.com/articles/microservices.html● Avatar.js architecture
○ Project Avatar.js website● Avatar and Avatar EE architectures
○ Project Avatar website
Thank you!@leonardopanga@mgraciano
● Sources○ github.com/mgraciano/javaone-2014○ github.com/panga/javaone2014-benchmarks