Why Teams call analytics are critical to your entire business
Oracle application container cloud back end integration using node final
1. OOW 2016: CON 1283
Maarten Smeets
Oracle Application Container Cloud Service
Back-End Integration Using Node.js
2. Introduction
• About AMIS
– Located in the Netherlands
• About me
– Oracle Integration Consultant
– Experience with Oracle SOA Suite since 2007
– Well certified (SOA, BPM, Java, SQL,
PL/SQL among others)
– Author of a lot of blog articles
(http://javaoraclesoa.blogspot.com)
@MaartenSmeetsNL
https://nl.linkedin.com/in/smeetsm
5. Node.js
Using threads is hard
• Concurrency control mechanisms (e.g. locking)
• Coordination over threads (IPC)
• Memory overhead
• Synchronization
• Programming thread safe code is not easy
6. What is Node.js
• Node.js uses a single thread!
• Node.js has been created
To write high-performance servers fast
• Node.js is:
– a set of bindings to V8 for non-browser work: sockets, files, etc.
– only exposes non-blocking, asynchronous interfaces
– only one thread, one call stack (like a browser)
– low level features: half-closed TCP connections, TCP throttling, UDP
– has killer HTTP support
Node.js architecture
node standard library
node bindings
(socket, http, etc)
V8
thread pool
(libeio)
event loop
(libev)
C/C++JavaScript
8. Node.js
What do they use it for?
“On the server side, our entire mobile software stack is completely built in Node”
“We are moving every product & every site within PayPal to Node”
“We’ve been busy building our next-generation Netflix.com web
application using Node”
“MuleSoft's Anypoint platform services are implemented in Node”
10. Node.js
Integration. Overview
Front-end connectivity
• URL handling
• HTTP connection handling
Back-end connectivity
• Connect to other services
• Drivers to access technology
diverse systems
• Connection pooling
Drivers / modules such as
• Oracle Database
• Oracle NoSQL Database
• Mongo Database
• SOAP and JSON services
What
Frameworks such as
• Express
• Hapi
• Koa
• Sails
• xml2js
• node-soap
Message processing
Middleware
• Routing
• Mapping
Flow control • Async
• Promises
How
11. Node.js
Frameworks
• Abstraction
• Generic functionality
• Facilitate development
• Drawbacks
– Performance cost
– Need framework knowledge
– Only specific functionality
https://raygun.com/blog/2016/06/node-performance/
0
2000
4000
6000
8000
10000
12000
14000
raw node koa express restify hapi
Requestspersecond
Framework
12. Node.js
Frameworks: Express.js
• Express is a minimal and flexible Node.js web application framework that provides a robust set of features
for web and mobile applications.
• Express.js is used in many other popular frameworks like Sails, MEAN, LoopBack
• It is maintained by StrongLoop (IBM).
Started in 2009. 191 contributers. 6,823,598 downloads last month *
* Contributers from github.com. Downloads from npmjs.com. Determined 28 aug 2016
13. Node.js
Without framework
var http = require('http');
var server = http.createServer(function (req, res) {
if (req.method === 'GET') {
res.end("Hello World");
}
});
server.listen(3000);
14. Node.js
With express.js
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World');
});
app.listen(3000);
Quick and easy
15. Node.js
Frameworks: Other
• Hapi
A rich framework for building applications and services. Configuration is better
than code. Business logic must be isolated from the transport layer.
Started in 2011 146 contributers 234,103 downloads last month.
• Koa
Expressive, light-weight HTTP framework for Node.js to make web applications
and APIs more enjoyable to write.
Started in 2013 89 contributers 132,790 downloads last month.
• Sails
Sails is the most popular MVC framework for Node.js. It is designed for building
practical, production-ready Node.js apps. Build on top of express.
Started in 2012 210 contributers 59,518 downloads last month.
18. Node.js
Flow control. Executing in series
• Async
Async is a utility module which provides straight-forward, powerful
functions for working with asynchronous JavaScript.
• Promises
A Promise object represents a value that may not be available yet,
but will be resolved at some point in the future. It allows you to
write asynchronous code in a more synchronous fashion.
• Generators
The Generator object is returned by a generator function and it
conforms to both the iterable protocol and the iterator protocol.
19. Node.js modules
Convert XML <> JSON
• xml2js
Ever had the urge to parse XML? And wanted to access the data in some sane, easy way? Don't want to
compile a C parser, for whatever reason? Then xml2js is what you're looking for!
• xml2js uses SAX (Simple API for XML)
– Event driven asynchronous processing of XML
– Memory friendly
Does not require creating a Document Object Model (DOM) of the XML document in memory
</> {}
25. Oracle NoSQL highlights
• Key value pair database
• Dynamic data model
• Transparent load balancing
• Highly scalable
• Options for transactional
mechanisms
• Options for eventual consistency
• Built on BerkelyDB
30. Node.js and the Oracle Database
node-oracledb
• Maintained by Oracle and actively being developed
• Requires Oracle database client software installed
Application Container Cloud already provides this
• Very rich in features and well documented!
https://github.com/oracle/node-oracledb
Node.js
Application
nosqldb-oraclejs
31. Node.js and the Oracle Database
node-oracledb: Features
• Promises, Callbacks and Streams
• SQL and PL/SQL execution
• REF CURSORs
• Large Objects: CLOBs and BLOBs
• Oracle Database 12.1 JSON datatype
• Query results as JavaScript objects or arrays
• Smart mapping between JavaScript and Oracle types
with manual override available
• Data binding using JavaScript objects or arrays
• Transaction Management
• Inbuilt Connection Pool with Queueing
• Database Resident Connection Pooling (DRCP)
• External Authentication
• Row Prefetching
• Statement Caching
• Client Result Caching
• End-to-end Tracing, Mid-tier Authentication, and
Auditing
• Oracle High Availability Features
– Fast Application Notification (FAN)
– Runtime Load Balancing (RLB)
– Transparent Application Failover (TAF)
32. Node.js and the Oracle Database
node-oracledb: Features
• Promises, Callbacks and Streams
• SQL and PL/SQL execution
• REF CURSORs
• Large Objects: CLOBs and BLOBs
• Oracle Database 12.1 JSON datatype
• Query results as JavaScript objects or arrays
• Smart mapping between JavaScript and Oracle types
with manual override available
• Data binding using JavaScript objects or arrays
• Transaction Management
• Inbuilt Connection Pool with Queueing
• Database Resident Connection Pooling (DRCP)
• External Authentication
• Row Prefetching
• Statement Caching
• Client Result Caching
• End-to-end Tracing, Mid-tier Authentication, and
Auditing
• Oracle High Availability Features
– Fast Application Notification (FAN)
– Runtime Load Balancing (RLB)
– Transparent Application Failover (TAF)
33. Node.js and the Oracle Database
node-oracledb: Calling PL/SQL
Define bind variables IN
Define bind variables OUT
Call a PL/SQL function
34. Node.js and the Oracle Database
node-oracledb: Connection pooling
Good sample: http://stackoverflow.com/questions/29846188/node-js-express-oracle-connection-pooling-ora-24418-cannot-open-further-sess
Create a connection pool
Grab a connection from the pool and use it
Close when done. Also in case of errors!
Inbuilt queueing
35. Node.js and the Oracle Database
Using DRCP with node-oracledb
• Database Resident Connection Pooling (DRCP)
http://www.oracle.com/technetwork/articles/oracledrcp11g-1-133381.pdf
36. Node.js and the Oracle Database
Using DRCP with node-oracledb
• On the client:
– Set oracledb.ConnectionClass = ‘poolname’
– Easy Connect syntax like myhost/sales:POOLED, or by using a tnsnames.ora alias for a connection that contains (SERVER=POOLED)
– Set externalAuth to true in getConnection or createPool
• On the database
– execute dbms_connection_pool.start_pool(“poolname”);
https://www.youtube.com/watch?v=3p6rutSLlkg
Simple to use
37. Node.js and the Oracle Database
Performance with node-oracledb
• Make sure you create a connection pool in the
right scope to promote re-use
• Consider increasing the LibUV thread pool size.
The default is 4. Can be set with environment
variable: UV_THREADPOOL_SIZE
• Explicitly release connections to the pool
• Use a resultSet when the number of rows fetched is large
• Consider using DRCP
Read: http://docs.oracle.com/database/121/ADFNS/adfns_perf_scale.htm#ADFNS228
43. Application Container Cloud Service
Enterprise grade features for Node.js
• On demand scale out/in.
Adding/Removing instances
• On demand scale up/down.
Adding/Removing memory per instance
• Automatic load balancer configuration
• One click patching
44. Application Container Cloud Service
Enterprise grade features for Node.js
• Easy web interface for
deployments
• Also possible using the API
and Developer Cloud Service
Easy!
45. Application Container Cloud Service
Enterprise grade features for Node.js
• Easy web interface for managing configuration
• Including service bindings
such as database connections
46. Application Container Cloud Service
Enterprise grade features for Node.js
• Browse log files from the webinterface
47. Application Container Cloud Service
Enterprise grade features for Node.js
https://docs.oracle.com/cloud/latest/apaas_gs/APCSR/
48. Application Container Cloud Service
Integration with Developer Cloud Service
pom.xml
maven-assembly-plugin
assembly.xml
YourApplication.zip
Node.js application
manifest.json
58. Node.js versus SOA Suite
SOA Suite
Node.js architecture
node standard library
node bindings
(socket, http, etc)
V8
thread pool
(libeio)
event loop
(libev)
C/C++JavaScript
Node.js
59. Integration with Node.js or SOA Suite
• Node.js assets
– thin stateless services like microservices
– tying simple things together with minimal effort
– technology focus: JavaScript + REST/JSON
– High performance
• Node.js challenges
– no adapters, workflow, …
– no wizard driven IDE
– requires (a lot of) custom code
– no high availability / management / monitoring options
Consider Application Container Cloud to provide those
Recent awards: Oracle EMEA Middleware Partner of the Year, 3 times Oracle Netherlands Middleware partner of the year. One of the rare moments in the Netherlands when it isn’t raining.
Using threads has a lot of overhead
Node.js single thread. Do not block it! You get help for that
JET, MCS, ACCS
Netflix: http://techblog.netflix.com/2014/11/nodejs-in-flames.html
https://www.quora.com/What-companies-are-using-Node-js-in-production
Usage to host front and backend
Express middleware has been put in separate modules since 4.x. Some examples:body-parser Node.js body parsing middlewaremorgan HTTP request logger middleware for node.js. Morgan was built to do logging in the way that servers like Apache and Nginx log to the error_log or access_log.
Hapy pronounced similar to happy
Callback hell
This is much worse on enterprise level. Node.js is not just pretty but there are challenges
Wat wil ik hiermee zeggen. Om integratie in node te doen…
Memory friendly + ACC
Rode pijl, namespaces
Mostly suitable as client. Less as server
Run the proxy on the same host as the driver. Use one proxy per driver instance
Specify hosts. Split Application and driver
Clustering done with AS mongos
Database Resident Connection Pooling (DRCP) provides a connection pool in the database server for typical Web application usage scenarios where the application acquires a database connection, works on it for a relatively short duration, and then releases it. DRCP pools "dedicated" servers. A pooled server is the equivalent of a server foreground process and a database session combined. Authenticate to the broker.
Driver needs to talk to the connection broker
There are separate open source solutions available for each of these, but…
Do you want to do a product selection for each of them?
Do you want to deal with potentially several suppliers?
Do you want to invest in tying everything together?
How are you going to deal with upgrades / patches?
There are separate open source solutions available for each of these, but…
Do you want to do a product selection for each of them?
Do you want to deal with potentially several suppliers?
Do you want to invest in tying everything together?
How are you going to deal with upgrades / patches?
SOA Suite runs on top of an application server. Node is a platform on which an application can be build.