CON6423: Scalable JavaScript applications with Project Nashorn

Post on 14-Jun-2015

114 views 1 download

Tags:

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.

Transcript of CON6423: Scalable JavaScript applications with Project Nashorn

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