SlideShare ist ein Scribd-Unternehmen logo
1 von 31
EBAY’S

CUBEJS:

NODE.JS ADOPTION JOURNEY

@
Patrick Steele-Idem
Senior Platform Architect @

@psteeleidem
psteeleidem@ebay.com
github.com/patrick-steele-idem
EBAY HAS EMBRACED NODE.JS…
SO HOW DID WE GET HERE?
BEFORE NODE.JS, JAVA WAS KING
BUT THINGS EVOLVED…
XML + XSLT  JAVA
PROPRIETARY  OPEN SOURCE
ONE LANGUAGE  POLYGLOT
ONE IDE  ANY EDITOR/IDE
HEAVY FRONT-END  LIGHTWEIGHT FRONT-END
CLEARCASE  GIT + GITHUB
SLOW DEVELOPMENT  RAPID DEVELOPMENT
JAVA APIS  SERVICE APIS
“A DECLARATIVE, DATA-RETRIEVAL AND
AGGREGATION GATEWAY FOR QUICKLY
CONSUMING HTTP APIS”
…BUILT USING NODE.JS

WHY NODE.JS?
• Non-blocking I/O
• Single-threaded
NODE.JS IS GREAT,
BUT CAN EBAY USE IT TO
BUILD FRONT-ENDS AS WELL?
WHY NODE.JS FOR THE FRONT-END?
DEVELOPER AGILITY, SCALABILITY AND
PERFORMANCE
―My advice: always bet on JavaScript‖
–Brendan Eich
WHAT IS REQUIRED TO SUPPORT
NODE.JS AT EBAY?
Tracking

Monitoring
Security

Encryption/Decryption

I18n Testing

Deployment

Personalization
Resource Optimization
Release Process
Look & Feel
CSRF

Tools

Scalability

SOAP

REST

Logging

Configuration
Authentication

App Metadata
POLYGLOT CHALLENGE:
HUGE INVESTMENT IN JAVA CODE
Possible Solutions

Pros

Cons

Port code to
JavaScript

• Works for Node.js
• Easy to debug

• Tedious
• Error prone
• What about Python, Ruby,
etc.?

Expose as a service • Polyglot friendly

•
•
•
•

Latency
Monitoring
Network Failures
Infrastructure

Port code to C/C++

• Fast
• Bindings available

• Difficult to debug
• Difficult to maintain

JVM ↔ JavaScript
Bridge

• Polyglot friendly

• Difficult to debug
• Slower startup
• Monitoring multiple VMs
1ST CHOICE: EXPOSE AS A SERVICE
MAXIMIZE CODE REUSE
CALLS CAN BE MADE IN PARALLEL

2ND CHOICE: PORT CODE TO JAVASCRIPT
PERFORMANCE CRITICAL
BEST HANDLED LOCALLY
RUNTIME ARCHITECTURE
Application Layer

Infrastructure Layer
Resource
Server
Distributed
Logging

Tracking
cluster2

Client Layer

…

App Service Layer
Search
…
DEVELOPMENT AND DEPLOYMENT
INFRASTRUCTURE

Source Code

an

initiative
powered by:

npm-delegate
Private npm

Public npm
DESIGN GOAL:
MAXIMIZE DEVELOPER PRODUCTIVITY
DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY

Small, bite-sized and easy-to-digest
modules
Keep the documentation with the code.
README files for the win
Encourage contributions
DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY

Avoid “magic”
If developers cannot reason about a system
then they will not be happy or productive.
Do not be a restrictive framework
Developers love options and being able to
use the latest and greatest.
DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY

+ File Watching
+ Hot Reloading
+ Web Sockets
Live Coding
Instant Gratification
Web Development is Fun Again
CHECKOUT:
• hot-reload https://github.com/philidem/node-hot-reload
• socket.io http://socket.io/
DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY

NO BUILD STEP FOR RESOURCE
OPTIMIZATION!

Resource
bundling, minification, compilation, externalization—
all at runtime.
Compile Raptor
Templates, LESS, Dust, CoffeeScript, etc.

MORE INFO:
• RaptorJS Optimizer: http://raptorjs.org/optimizer/
DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY

Command Line Tools
Powered by Rápido
Features
• Module and application lifecycle
• Scaffolding
• IDE/editor independence
• PaaS integration
• Jenkins CI integration
• Command-line auto-completion
• Colorized output

Example:
ecube create app
ecube create page
ecube register
ecube create pool
ecube publish
ecube deploy

CHECKOUT:
Rápido: https://github.com/raptorjs/rapido
DESIGN GOAL:
HIGH PERFORMANCE
DESIGN GOAL: HIGH PERFORMANCE

PERFORMANCE IS GREAT*
• Node.js provides a very low-level programming platform

• V8 is a powerful and fast JavaScript engine
• Node.js can be extended with C/C++ libraries
• Clustering based on OS-level socket sharing
• High performance evented I/O at its core (libuv)

• Single-threaded so no synchronization issues or locks
* The not-so-great:
• Garbage collection is slow
• Memory usage can easily get out of control
DESIGN GOAL: HIGH PERFORMANCE

STREAMING, ASYNCHRONOUS
UI RENDERING
• Why?
•
•
•
•

Start rendering the template immediately
Give the browser a head start
Let the template drive the data
Minimize idle time on the server
DESIGN GOAL: HIGH PERFORMANCE

Traditional

ASYNCHRONOUS UI RENDERING
1. Make service calls
2. Wait for all data to come back
3. Prepare view model

Input

Controller

View Model

Template

HTML

Long Delay

CubeJS

1. Setup data providers
2. Go straight to the
template!

Data Providers

Input

Controller

View Model
No Delay

Template

HTML
DESIGN GOAL: HIGH PERFORMANCE

Raptor Templates
Extensible, high performance, asynchronous template
rendering engine for JavaScript that works on both the
server and the client

MORE

INFO:

Raptor Templates: http://raptorjs.org/raptor-templates/
DESIGN GOAL:
ROBUST
DESIGN GOAL: ROBUST

cluster2
•
•
•
•
•
•
•

Multi-process cluster management
Live production debugging
Monitoring
Idle timeouts
Pause and resume (out-of-traffic GC!)
Process warm-up (coming soon)
Shared cache (coming soon)

MORE INFO:
https://github.com/cubejs/cluster2
DESIGN GOAL: ROBUST

Monitoring Infrastructure

Adapted to eBay Ops
Monitoring Tools
DESIGN GOAL: ROBUST

Automated Testing
• Netmorphic
• Simulate network failures and slowness
• Mocha
• Asynchronous tests
• Code coverage reporting
• JSHint
• Flexible JavaScript static code analysis tool
• Casper + PhantomJS (in-progress)
• Headless browser testing
• Jenkins CI
DESIGN GOAL: ROBUST

Configuration Management
• Per-module configuration
• Real-time configuration updates
• Configuration repository based on MongoDB
ASYNCHRONOUS PROGRAMMING
USING PROMISES
All CubeJS modules have standardized on promises for
asynchronous programming.
Example:
Q()
.then(loadUserPreferences)
.then(performSearch)
.then(renderSearchResults)
.fail(function(error) {
res.end();

console.error("Something went wrong!")
})
ADOPTION:
PULL RATHER

THAN

PUSH

• 10+ customers before CubeJS goes GA
• Several live CubeJS applications running in
production
• Overwhelming attendance of CubeJS Tech Talks
• ―Word of Mouth‖ spreading within eBay
application teams
• No need to push
QUESTIONS?
psteeleidem@ebay.com
@psteeleidem
https://github.com/cubejs
http://raptorjs.org

Weitere ähnliche Inhalte

Was ist angesagt?

Lessons Learned with Unity and WebGL
Lessons Learned with Unity and WebGLLessons Learned with Unity and WebGL
Lessons Learned with Unity and WebGLLior Tal
 
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native Codemotion
 
JavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
JavaScript as a Server side language (NodeJS): JSConf 2011, DhakaJavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
JavaScript as a Server side language (NodeJS): JSConf 2011, DhakaNurul Ferdous
 
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019Fredrik Vraalsen
 
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...Demi Ben-Ari
 
Pragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecturePragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecturePiotr Pelczar
 
Webpack & React Performance in 16+ Steps
Webpack & React Performance in 16+ StepsWebpack & React Performance in 16+ Steps
Webpack & React Performance in 16+ StepsGrgur Grisogono
 
XPages build automation and testing
XPages build automation and testingXPages build automation and testing
XPages build automation and testingmpradny
 
Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Engage 2019: The good, the bad and the ugly: a not so objective view on front...Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Engage 2019: The good, the bad and the ugly: a not so objective view on front...Frank van der Linden
 
Rami Sayar - Node microservices with Docker
Rami Sayar - Node microservices with DockerRami Sayar - Node microservices with Docker
Rami Sayar - Node microservices with DockerWeb à Québec
 
An XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on DominoAn XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on DominoFrank van der Linden
 
QEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It TooQEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It TooRob Tweed
 
REST in Peace. Long live gRPC!
REST in Peace. Long live gRPC!REST in Peace. Long live gRPC!
REST in Peace. Long live gRPC!QAware GmbH
 
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...E. Camden Fisher
 
RubyStack: the easiest way to deploy Ruby on Rails
RubyStack: the easiest way to deploy Ruby on RailsRubyStack: the easiest way to deploy Ruby on Rails
RubyStack: the easiest way to deploy Ruby on Railselliando dias
 
Dockerize the World
Dockerize the WorldDockerize the World
Dockerize the Worlddamovsky
 
Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Arun Gupta
 

Was ist angesagt? (20)

Lessons Learned with Unity and WebGL
Lessons Learned with Unity and WebGLLessons Learned with Unity and WebGL
Lessons Learned with Unity and WebGL
 
Node js
Node jsNode js
Node js
 
Node
NodeNode
Node
 
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
Webinar - Matteo Manchi: Dal web al nativo: Introduzione a React Native
 
JavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
JavaScript as a Server side language (NodeJS): JSConf 2011, DhakaJavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
JavaScript as a Server side language (NodeJS): JSConf 2011, Dhaka
 
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
Building applications with Serverless Framework and AWS Lambda - JavaZone 2019
 
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
 
Pragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecturePragmatic Monolith-First, easy to decompose, clean architecture
Pragmatic Monolith-First, easy to decompose, clean architecture
 
Best node js course
Best node js courseBest node js course
Best node js course
 
Webpack & React Performance in 16+ Steps
Webpack & React Performance in 16+ StepsWebpack & React Performance in 16+ Steps
Webpack & React Performance in 16+ Steps
 
XPages build automation and testing
XPages build automation and testingXPages build automation and testing
XPages build automation and testing
 
Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Engage 2019: The good, the bad and the ugly: a not so objective view on front...Engage 2019: The good, the bad and the ugly: a not so objective view on front...
Engage 2019: The good, the bad and the ugly: a not so objective view on front...
 
Rami Sayar - Node microservices with Docker
Rami Sayar - Node microservices with DockerRami Sayar - Node microservices with Docker
Rami Sayar - Node microservices with Docker
 
An XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on DominoAn XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on Domino
 
QEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It TooQEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It Too
 
REST in Peace. Long live gRPC!
REST in Peace. Long live gRPC!REST in Peace. Long live gRPC!
REST in Peace. Long live gRPC!
 
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
 
RubyStack: the easiest way to deploy Ruby on Rails
RubyStack: the easiest way to deploy Ruby on RailsRubyStack: the easiest way to deploy Ruby on Rails
RubyStack: the easiest way to deploy Ruby on Rails
 
Dockerize the World
Dockerize the WorldDockerize the World
Dockerize the World
 
Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009Dynamic Languages Web Frameworks Indicthreads 2009
Dynamic Languages Web Frameworks Indicthreads 2009
 

Ähnlich wie CubeJS: eBay’s Node.js Adoption Journey

Ship It ! with Ruby/ Rails Ecosystem
Ship It ! with Ruby/ Rails EcosystemShip It ! with Ruby/ Rails Ecosystem
Ship It ! with Ruby/ Rails EcosystemYi-Ting Cheng
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchHoward Greenberg
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGuillaume Laforge
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on RailsAvi Kedar
 
Philly CocoaHeads 20160414 - Building Your App SDK With Swift
Philly CocoaHeads 20160414 - Building Your App SDK With SwiftPhilly CocoaHeads 20160414 - Building Your App SDK With Swift
Philly CocoaHeads 20160414 - Building Your App SDK With SwiftJordan Yaker
 
Netflix oss season 2 episode 1 - meetup Lightning talks
Netflix oss   season 2 episode 1 - meetup Lightning talksNetflix oss   season 2 episode 1 - meetup Lightning talks
Netflix oss season 2 episode 1 - meetup Lightning talksRuslan Meshenberg
 
Building a REST API Microservice for the DevNet API Scavenger Hunt
Building a REST API Microservice for the DevNet API Scavenger HuntBuilding a REST API Microservice for the DevNet API Scavenger Hunt
Building a REST API Microservice for the DevNet API Scavenger HuntAshley Roach
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
 
Kiss.ts - The Keep It Simple Software Stack for 2017++
Kiss.ts - The Keep It Simple Software Stack for 2017++Kiss.ts - The Keep It Simple Software Stack for 2017++
Kiss.ts - The Keep It Simple Software Stack for 2017++Ethan Ram
 
Best Practices for Building WordPress Applications
Best Practices for Building WordPress ApplicationsBest Practices for Building WordPress Applications
Best Practices for Building WordPress ApplicationsTaylor Lovett
 
Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011Brian Ritchie
 
DevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash courseDevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash courseCisco DevNet
 
Play 2 Java Framework with TDD
Play 2 Java Framework with TDDPlay 2 Java Framework with TDD
Play 2 Java Framework with TDDBasav Nagur
 
Rapid development with Rails
Rapid development with RailsRapid development with Rails
Rapid development with RailsYi-Ting Cheng
 
Benefits of an Open environment with Wakanda
Benefits of an Open environment with WakandaBenefits of an Open environment with Wakanda
Benefits of an Open environment with WakandaAlexandre Morgaut
 
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWERContinuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWERIndrajit Poddar
 
DevOps and AWS - Code PaLOUsa 2017
DevOps and AWS  - Code PaLOUsa 2017DevOps and AWS  - Code PaLOUsa 2017
DevOps and AWS - Code PaLOUsa 2017James Strong
 

Ähnlich wie CubeJS: eBay’s Node.js Adoption Journey (20)

Ship It ! with Ruby/ Rails Ecosystem
Ship It ! with Ruby/ Rails EcosystemShip It ! with Ruby/ Rails Ecosystem
Ship It ! with Ruby/ Rails Ecosystem
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
 
Be faster then rabbits
Be faster then rabbitsBe faster then rabbits
Be faster then rabbits
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
 
Web Development using Ruby on Rails
Web Development using Ruby on RailsWeb Development using Ruby on Rails
Web Development using Ruby on Rails
 
Philly CocoaHeads 20160414 - Building Your App SDK With Swift
Philly CocoaHeads 20160414 - Building Your App SDK With SwiftPhilly CocoaHeads 20160414 - Building Your App SDK With Swift
Philly CocoaHeads 20160414 - Building Your App SDK With Swift
 
Netflix oss season 2 episode 1 - meetup Lightning talks
Netflix oss   season 2 episode 1 - meetup Lightning talksNetflix oss   season 2 episode 1 - meetup Lightning talks
Netflix oss season 2 episode 1 - meetup Lightning talks
 
Building a REST API Microservice for the DevNet API Scavenger Hunt
Building a REST API Microservice for the DevNet API Scavenger HuntBuilding a REST API Microservice for the DevNet API Scavenger Hunt
Building a REST API Microservice for the DevNet API Scavenger Hunt
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Kiss.ts - The Keep It Simple Software Stack for 2017++
Kiss.ts - The Keep It Simple Software Stack for 2017++Kiss.ts - The Keep It Simple Software Stack for 2017++
Kiss.ts - The Keep It Simple Software Stack for 2017++
 
Best Practices for Building WordPress Applications
Best Practices for Building WordPress ApplicationsBest Practices for Building WordPress Applications
Best Practices for Building WordPress Applications
 
Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011Standardizing and Managing Your Infrastructure - MOSC 2011
Standardizing and Managing Your Infrastructure - MOSC 2011
 
DevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash courseDevNetCreate Workshop - build a react app - React crash course
DevNetCreate Workshop - build a react app - React crash course
 
Play 2 Java Framework with TDD
Play 2 Java Framework with TDDPlay 2 Java Framework with TDD
Play 2 Java Framework with TDD
 
Play2 Java
Play2 JavaPlay2 Java
Play2 Java
 
Rapid development with Rails
Rapid development with RailsRapid development with Rails
Rapid development with Rails
 
Benefits of an Open environment with Wakanda
Benefits of an Open environment with WakandaBenefits of an Open environment with Wakanda
Benefits of an Open environment with Wakanda
 
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWERContinuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
 
Stackato
StackatoStackato
Stackato
 
DevOps and AWS - Code PaLOUsa 2017
DevOps and AWS  - Code PaLOUsa 2017DevOps and AWS  - Code PaLOUsa 2017
DevOps and AWS - Code PaLOUsa 2017
 

Kürzlich hochgeladen

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 

Kürzlich hochgeladen (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 

CubeJS: eBay’s Node.js Adoption Journey

  • 2. Patrick Steele-Idem Senior Platform Architect @ @psteeleidem psteeleidem@ebay.com github.com/patrick-steele-idem
  • 3. EBAY HAS EMBRACED NODE.JS… SO HOW DID WE GET HERE?
  • 4. BEFORE NODE.JS, JAVA WAS KING BUT THINGS EVOLVED… XML + XSLT  JAVA PROPRIETARY  OPEN SOURCE ONE LANGUAGE  POLYGLOT ONE IDE  ANY EDITOR/IDE HEAVY FRONT-END  LIGHTWEIGHT FRONT-END CLEARCASE  GIT + GITHUB SLOW DEVELOPMENT  RAPID DEVELOPMENT JAVA APIS  SERVICE APIS
  • 5. “A DECLARATIVE, DATA-RETRIEVAL AND AGGREGATION GATEWAY FOR QUICKLY CONSUMING HTTP APIS” …BUILT USING NODE.JS WHY NODE.JS? • Non-blocking I/O • Single-threaded
  • 6. NODE.JS IS GREAT, BUT CAN EBAY USE IT TO BUILD FRONT-ENDS AS WELL?
  • 7. WHY NODE.JS FOR THE FRONT-END? DEVELOPER AGILITY, SCALABILITY AND PERFORMANCE ―My advice: always bet on JavaScript‖ –Brendan Eich
  • 8. WHAT IS REQUIRED TO SUPPORT NODE.JS AT EBAY? Tracking Monitoring Security Encryption/Decryption I18n Testing Deployment Personalization Resource Optimization Release Process Look & Feel CSRF Tools Scalability SOAP REST Logging Configuration Authentication App Metadata
  • 9. POLYGLOT CHALLENGE: HUGE INVESTMENT IN JAVA CODE Possible Solutions Pros Cons Port code to JavaScript • Works for Node.js • Easy to debug • Tedious • Error prone • What about Python, Ruby, etc.? Expose as a service • Polyglot friendly • • • • Latency Monitoring Network Failures Infrastructure Port code to C/C++ • Fast • Bindings available • Difficult to debug • Difficult to maintain JVM ↔ JavaScript Bridge • Polyglot friendly • Difficult to debug • Slower startup • Monitoring multiple VMs
  • 10. 1ST CHOICE: EXPOSE AS A SERVICE MAXIMIZE CODE REUSE CALLS CAN BE MADE IN PARALLEL 2ND CHOICE: PORT CODE TO JAVASCRIPT PERFORMANCE CRITICAL BEST HANDLED LOCALLY
  • 11. RUNTIME ARCHITECTURE Application Layer Infrastructure Layer Resource Server Distributed Logging Tracking cluster2 Client Layer … App Service Layer Search …
  • 12. DEVELOPMENT AND DEPLOYMENT INFRASTRUCTURE Source Code an initiative powered by: npm-delegate Private npm Public npm
  • 14. DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY Small, bite-sized and easy-to-digest modules Keep the documentation with the code. README files for the win Encourage contributions
  • 15. DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY Avoid “magic” If developers cannot reason about a system then they will not be happy or productive. Do not be a restrictive framework Developers love options and being able to use the latest and greatest.
  • 16. DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY + File Watching + Hot Reloading + Web Sockets Live Coding Instant Gratification Web Development is Fun Again CHECKOUT: • hot-reload https://github.com/philidem/node-hot-reload • socket.io http://socket.io/
  • 17. DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY NO BUILD STEP FOR RESOURCE OPTIMIZATION! Resource bundling, minification, compilation, externalization— all at runtime. Compile Raptor Templates, LESS, Dust, CoffeeScript, etc. MORE INFO: • RaptorJS Optimizer: http://raptorjs.org/optimizer/
  • 18. DESIGN GOAL: MAXIMIZE DEVELOPER PRODUCTIVITY Command Line Tools Powered by Rápido Features • Module and application lifecycle • Scaffolding • IDE/editor independence • PaaS integration • Jenkins CI integration • Command-line auto-completion • Colorized output Example: ecube create app ecube create page ecube register ecube create pool ecube publish ecube deploy CHECKOUT: Rápido: https://github.com/raptorjs/rapido
  • 20. DESIGN GOAL: HIGH PERFORMANCE PERFORMANCE IS GREAT* • Node.js provides a very low-level programming platform • V8 is a powerful and fast JavaScript engine • Node.js can be extended with C/C++ libraries • Clustering based on OS-level socket sharing • High performance evented I/O at its core (libuv) • Single-threaded so no synchronization issues or locks * The not-so-great: • Garbage collection is slow • Memory usage can easily get out of control
  • 21. DESIGN GOAL: HIGH PERFORMANCE STREAMING, ASYNCHRONOUS UI RENDERING • Why? • • • • Start rendering the template immediately Give the browser a head start Let the template drive the data Minimize idle time on the server
  • 22. DESIGN GOAL: HIGH PERFORMANCE Traditional ASYNCHRONOUS UI RENDERING 1. Make service calls 2. Wait for all data to come back 3. Prepare view model Input Controller View Model Template HTML Long Delay CubeJS 1. Setup data providers 2. Go straight to the template! Data Providers Input Controller View Model No Delay Template HTML
  • 23. DESIGN GOAL: HIGH PERFORMANCE Raptor Templates Extensible, high performance, asynchronous template rendering engine for JavaScript that works on both the server and the client MORE INFO: Raptor Templates: http://raptorjs.org/raptor-templates/
  • 25. DESIGN GOAL: ROBUST cluster2 • • • • • • • Multi-process cluster management Live production debugging Monitoring Idle timeouts Pause and resume (out-of-traffic GC!) Process warm-up (coming soon) Shared cache (coming soon) MORE INFO: https://github.com/cubejs/cluster2
  • 26. DESIGN GOAL: ROBUST Monitoring Infrastructure Adapted to eBay Ops Monitoring Tools
  • 27. DESIGN GOAL: ROBUST Automated Testing • Netmorphic • Simulate network failures and slowness • Mocha • Asynchronous tests • Code coverage reporting • JSHint • Flexible JavaScript static code analysis tool • Casper + PhantomJS (in-progress) • Headless browser testing • Jenkins CI
  • 28. DESIGN GOAL: ROBUST Configuration Management • Per-module configuration • Real-time configuration updates • Configuration repository based on MongoDB
  • 29. ASYNCHRONOUS PROGRAMMING USING PROMISES All CubeJS modules have standardized on promises for asynchronous programming. Example: Q() .then(loadUserPreferences) .then(performSearch) .then(renderSearchResults) .fail(function(error) { res.end(); console.error("Something went wrong!") })
  • 30. ADOPTION: PULL RATHER THAN PUSH • 10+ customers before CubeJS goes GA • Several live CubeJS applications running in production • Overwhelming attendance of CubeJS Tech Talks • ―Word of Mouth‖ spreading within eBay application teams • No need to push