Top Banner
Scalable JavaScript applications with Project Nashorn
45

CON6423: Scalable JavaScript applications with Project Nashorn

Jun 14, 2015

Download

Technology

Michel Graciano

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.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: CON6423: Scalable JavaScript applications with Project Nashorn

Scalable JavaScript applications with Project Nashorn

Page 2: CON6423: Scalable JavaScript applications with Project Nashorn

SpeakersLeonardo ZanivanSoftware Architect, Trier Sistemasgithub.com/panga@leonardopanga

Michel GracianoSoftware Architect, Betha Sistemasgithub.com/mgraciano@mgraciano

Page 3: CON6423: Scalable JavaScript applications with Project Nashorn

Agenda● Why JS in the server● Why the JVM● Nashorn ecosystem● Vert.x and Avatar/Avatar.js● Q&A

Page 4: CON6423: Scalable JavaScript applications with Project Nashorn

Why JS in the server● Asynchronous by nature● Native JSON support● Language reuse● Easier developer transition

Page 5: CON6423: Scalable JavaScript applications with Project Nashorn

Why the JVM● Multilanguage● APM Tools● Access to the Java ecosystem

○ Domain models already implemented○ Java EE○ Core and third parties Java libraries

Page 6: CON6423: Scalable JavaScript applications with Project Nashorn

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

Page 7: CON6423: Scalable JavaScript applications with Project Nashorn
Page 8: CON6423: Scalable JavaScript applications with Project Nashorn
Page 9: CON6423: Scalable JavaScript applications with Project Nashorn
Page 10: CON6423: Scalable JavaScript applications with Project Nashorn
Page 11: CON6423: Scalable JavaScript applications with Project Nashorn
Page 12: CON6423: Scalable JavaScript applications with Project Nashorn
Page 13: CON6423: Scalable JavaScript applications with Project Nashorn
Page 14: CON6423: Scalable JavaScript applications with Project Nashorn

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)

Page 15: CON6423: Scalable JavaScript applications with Project Nashorn

But how to scale it?

Page 16: CON6423: Scalable JavaScript applications with Project Nashorn

But how to scale it?Architectures and Technologies

Page 17: CON6423: Scalable JavaScript applications with Project Nashorn

Event-driven architecture● Event-loops● Async non-blocking IO● Reactive system● Event bus

Page 18: CON6423: Scalable JavaScript applications with Project Nashorn

Event-driven architecture

Page 19: CON6423: Scalable JavaScript applications with Project Nashorn

Microservice architecture● Focused on specific business● Well defined & distributed● Loosely coupled● Testable● Scalable

Page 20: CON6423: Scalable JavaScript applications with Project Nashorn

Microservices Architecture

Page 21: CON6423: Scalable JavaScript applications with Project Nashorn

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

Page 22: CON6423: Scalable JavaScript applications with Project Nashorn

Vert.x● Key benefits

○ Polyglot○ Event bus (async & worker verticles)○ Create reactive applications○ Microservices ready○ Strong community involvement

Page 23: CON6423: Scalable JavaScript applications with Project Nashorn

Vert.x Architecture

Page 24: CON6423: Scalable JavaScript applications with Project Nashorn

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

Page 25: CON6423: Scalable JavaScript applications with Project Nashorn

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)

Page 26: CON6423: Scalable JavaScript applications with Project Nashorn

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)

Page 27: CON6423: Scalable JavaScript applications with Project Nashorn

Demo● Real-time notification service using

websockets over nashorn integrating with a legacy Java EE app

Page 28: CON6423: Scalable JavaScript applications with Project Nashorn

Avatar.js● https://avatar-js.java.net● Oracle sponsored● Focus on bringing the node programming

model, APIs and module ecosystem to the Java platform

Page 29: CON6423: Scalable JavaScript applications with Project Nashorn

Avatar.js

Page 30: CON6423: Scalable JavaScript applications with Project Nashorn

Avatar● https://avatar.java.net● Oracle sponsored● Focus on Thin Server Architecture

○ Supports REST, WebSocket and Server-Sent Events

● Built on Avatar.js

Page 31: CON6423: Scalable JavaScript applications with Project Nashorn

Avatar Architecture

Page 32: CON6423: Scalable JavaScript applications with Project Nashorn

Avatar EE Architecture

Page 33: CON6423: Scalable JavaScript applications with Project Nashorn
Page 34: CON6423: Scalable JavaScript applications with Project Nashorn
Page 35: CON6423: Scalable JavaScript applications with Project Nashorn

● Deploying an application on Glassfish 4○ asadmin deploy ~/projects/<app-folder-name>

● Running the application○ http://localhost:8080/<app-folder-name>

Avatar

Page 36: CON6423: Scalable JavaScript applications with Project Nashorn

Avatar/Avatar.js● Key benefits

○ Avatar Services use an Actor-like concurrency model

○ NPM modules support○ Strong Java EE integration○ Debugging

Page 37: CON6423: Scalable JavaScript applications with Project Nashorn

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

Page 38: CON6423: Scalable JavaScript applications with Project Nashorn

Benchmark● Some simple and naive scenarios

○ Posting and querying from database○ Returning a simple JSON response○ String concatenation○ Fibonacci calculation

Page 39: CON6423: Scalable JavaScript applications with Project Nashorn

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

Page 40: CON6423: Scalable JavaScript applications with Project Nashorn

Some Fib(30) results

Page 41: CON6423: Scalable JavaScript applications with Project Nashorn

Some Fib(30) results

Page 42: CON6423: Scalable JavaScript applications with Project Nashorn

Some Fib(30) results

Page 43: CON6423: Scalable JavaScript applications with Project Nashorn

Q&A

Page 44: CON6423: Scalable JavaScript applications with Project Nashorn

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

Page 45: CON6423: Scalable JavaScript applications with Project Nashorn

Thank you!@leonardopanga@mgraciano

● Sources○ github.com/mgraciano/javaone-2014○ github.com/panga/javaone2014-benchmarks