SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
THE REAL WORLD 
Plugging The Enterprise Into It.
MOBILE ARCHITECT 
‣Love Distributed Systems 
‣Entropy Reducer 
‣Payment systems 
‣R&D Work 
‣B2E and Commercial Banking Apps 
Experience 
‣ Front Office Trading Systems 
‣ Messaging Middleware Integration 
‣ Big Systems 
‣ C/C++/C#/Java 
MORE 
‣ @akohli https://slideshare.net/akohli 
series 2, episode 22, “Daddy Pig’s Office” http:// 
www.channel5.com/shows/peppa-pig/episodes/daddy-pigs-office
TODAY 
Why Node 
What we want to do 
Node as the underpinning of real world or electronic asset interaction 
Backing our interactions, eventing services 
Not so much about monolith deconstruction 
What we did 
Initial proxy and protocol 
Our performance and scalability testing
NODE IS MAINSTREAM
WHY NODE? 
✔ Node 
• Asynchronous Eventing Model 
• We live in an async nonblocking 
world 
• Ideal for mobile and sensor 
applications 
• Everyone knows Javascript, right? 
• Community 
• Diverse protocol and lots of 
modules 
• Rapid development and 
Expediency
HOMOLOGATED 
or how we can use it in a big 
company 
• Node is approved for 
internal usage 
• Less Yak Shaving than other 
solutions 
• different at least 
• good internal community 
beware of dog, staff only
“Walmart has had good success with HAPI 
and Node” 
- @adam_baldwin 
“Node is good. I’ve heard good things 
- @ eoinbrazil 
about HAPI”
ENTERPRISE MOBILE APPLICATIONS
ENTERPRISE MOBILE APPLICATIONS 
• Plurality of systems, services 
• web resources 
• web sites 
• Connectivity challenges 
• direct 
• mediated 
• Security 
• AuthN 
• AuthZ 
• Data Encryption at rest
Security Pass 
Sensors Employee Devices 
The Physical World 
THE REFLEKTOR 
Security Services 
AuthZ 
AuthN 
… 
Eventing 
Engine 
Bridge 
Payment 
Services 
Access 
Services 
Printing 
Services 
the Reflektor 
Bridge and New Services 
App Services and 
Resources
thePROXY First Release
IT AIN’T EASY 
but we gotta try
PROXYING IS EASY
DETAILS
THE FLOW 
• The Protocol 
• Security - Gateway Access 
• Federated Identity, my foot 
• NTLM, has it’s own approach
PROTOCOL 
Request 
json body 
target 
headers 
body/post-data 
loginfo 
request = { 
URL = "http://www.citigroup.net/", 
method = "GET", 
timeout = 19500, 
clientInfo = { 
identifier = “…E”, 
model = "iPad Simulator", 
systemName = "iPhone OS", 
systemVersion = "7.1", 
}, 
headers = { 
Accept = "text/html,application/xhtml 
+xml,application/xml;q=0.9,*/*;q=0.8", 
Cookie = "CGPLNG=ENG; JSESSIONID_CGNR3=..”, 
"User-Agent" = "Mozilla/5.0 (iPad; CPU OS 7_1 like 
Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/ 
11D167" 
}, 
logEntries = [ 
{ 
URL = “https://cinternal.site/target/fooa”, 
downstreamDuration = 656, 
httpMethod = "GET", 
roundtripDuration = 3461, 
statusCode = 200 
} ] 
}
RESPONSE 
body = “<base64>", 
code = 200, 
duration = 31, 
headers = { 
"Accept-Ranges" = [ 
"bytes" 
], 
"Content-Length" = [ 
225 
], 
"Content-Type" = [ 
"text/html" 
], 
Date = [ 
"Thu, 29 May 2014 15:28:29 GMT" 
], 
Etag = [ 
""e1-4e50c74f"" 
], 
"Last-Modified" = [ 
"Sun, 21 Aug 2011 08:52:31 GMT" 
] 
}, 
message = "OK" 
}
NTLM AUTHENTICATION 
Enterprise 
authentication 
protocol 
(Microsoft). 
! 
NTLM 
requires 
all 
phases 
to 
take 
place 
across 
a 
single 
HTTP 
connection. 
! 
NTLM 
messages 
are 
sent 
and 
received 
as 
request 
headers. 
! 
The 
server’s 
response 
from 
the 
NTLM 
type 
3 
message 
is 
the 
requested 
content. 
! 
This 
authentication 
process 
must 
be 
completed 
for 
every 
requested 
resource, 
unless 
an 
open 
connection 
is 
maintained.
WORKING 
Implementation Challenges 
• Storage of password on mobile device is prohibited, 
but is required in the authentication process. 
• Persistent connection not available. 
• Latency issues – 3 requests for every web resource. 
Solution 
• Ported from Apache Java implementation to Node.js. 
• Hashed username / password pair stored on device, 
transmitted to server for authentication rather than raw 
password. 
• hmac_md5(username, md4(password)) 
• NTLM message calculation split between client app and 
proxy server. 
• Defaults used and optional parameters omitted – 
simplified messages. 
• Observed desktop browsers wait for a 401 before 
beginning the authentication process. Pre-emptively 
sending the username / password hash eliminates the 
initial 401 response. 
Process is reduced from 3 direct requests to a single 
client request, mapped to 2 proxy requests.
SCALABILITY AND PERFORMANCE TESTING
GITHUB.COM/SPUMKO/FLOD 
$ flod -n 2000 -t 1500 -c 100..1000 -v http://target-place 
! 
!
GITHUB.COM/SPUMKO/FLOD 
num req per 
batch 
range of concurrent request per batch - 
$ flod -n 2000 -t 1500 -c 100..1000 -v http://target-place 
! 
! 
timeout 
“rate”
FLOD OUTPUT 
## 6k page results 
ec2-user@ip-10-199-51-233 node-hapi]$ flod -n 2000 -t 1500 -c 100..1000 -v http://localhost/loremipsum-6k-ish.html 
This is Flod, version 0.2.2 
Copyright 2013 Walmart, http://github.com/spumko/flod 
! 
Benchmarking (hold on)... 
! 
Server Requests/sec Latency (ms) 
--------------------------------------- ------------ --------------- 
http://localhost/loremipsum-6k-ish.html 100 96.48 ± 18.54 
http://localhost/loremipsum-6k-ish.html 200 164.24 ± 17.03 
http://localhost/loremipsum-6k-ish.html 300 263.80 ± 62.44 
http://localhost/loremipsum-6k-ish.html 400 359.61 ± 49.20 
http://localhost/loremipsum-6k-ish.html 500 437.66 ± 58.69 
http://localhost/loremipsum-6k-ish.html 600 481.29 ± 120.04 
http://localhost/loremipsum-6k-ish.html 700 606.74 ± 114.45 
http://localhost/loremipsum-6k-ish.html 800 555.08 ± 133.74 
http://localhost/loremipsum-6k-ish.html 900 674.08 ± 190.91 
http://localhost/loremipsum-6k-ish.html 1000 763.27 ± 69.25 
## running with high timeout - doubling responses times vs nginx direct 
[ec2-user@ip-10-199-51-233 node-hapi]$ ../node_modules/flod/bin/flod -n 2000 -t 4500 -c 100..1000 -v http://localhost:8000 
This is Flod, version 0.2.2 
Copyright 2013 Walmart, http://github.com/spumko/flod 
! 
Benchmarking (hold on)... 
! 
Server Requests/sec Latency (ms) 
--------------------- ------------ ---------------- 
http://localhost:8000 100 200.55 ± 39.40 
http://localhost:8000 200 389.54 ± 67.39 
http://localhost:8000 300 558.14 ± 112.57 
http://localhost:8000 400 777.09 ± 160.01 
http://localhost:8000 500 970.61 ± 305.76 
http://localhost:8000 600 1032.37 ± 274.44 
http://localhost:8000 700 1216.49 ± 249.94 
http://localhost:8000 800 1483.31 ± 690.64 
http://localhost:8000 900 1559.54 ± 805.31 
http://localhost:8000 1000 1909.23 ± 845.81
MODIFYING FLOD 
• modified server to pull our decorated response 
timing information 
• modified reporting/logging to include this 
information 
• hope to contribute back to mainline
ENVIRONMENT 
Machine OS Type Processor Cores Memory 
Int Server RHEL 6.4 VM Xeon 
2.6GHz 2 4GB 
Prod Server 
Windows 
Server 
2k8r2 
VM Xeon 1.8 
Ghz 4 6GB 
Dev Mac Mini Full i5 2.5 GHz 2 8 GB 
• HTTP 1.1 no Keep-Alive, request payload is json 
• Client iOS ObjectiveC;Server is Node + Hapijs (with Some Good Monitoring)
SCENARIOS 
• Closed network, direct connection, 
Mac to Mac 
• Client server on a redhat VM, 
loopback. Redhat VM 
• Redhat client to Windows Server via 
network, Redhat to Windows 
• via Mobile network/wifi could only 
support 100 transactions/s because 
of latency 
Req/s Response 
(ms) 
Mac to Mac 1000 2000 
Redhat VM 1000 8500 
RH to 
Windows 1000 30, 000 
External 100 17, 000
RESULTS 
• Consistent proxied service response 
• ~20ms Mac ➔ Mac 
• ~250ms RHEL ➔ Windows Server 
• Gateway service < 50 ms 
• We need better concurrency, request servicing 
• Infrastructure adds significant overhead
RESULTS 
100# 200# 300# 400# 500# 600# 700# 800# 900# 1000# 
70000# 
60000# 
50000# 
40000# 
30000# 
20000# 
10000# 
0# 
Requests'per'second' 
Milliseconds(ms)' 
99th'Percen7les' 
Mac#To#Mac# RedhatVM# Redhat#to#Windows#
OFF NETWORK
ON NETWORK
TABULAR 
Request Mac To Mac RHEL to Windows 
100/s 483 17,235 
200/s 783 21,209 
300/s 1127 17,479 
400/s 1493 22,937 
500/s 1859 28,872 
600/s 2171 34,253 
700/s 2487 39,878 
800/s 2878 46,970 
900/s 3285 51,083 
1000/s 3555 57,189
EXCELLENT
EXPERIENCE 
• Enterprise and Legal approvals hard 
• We are ahead of Ops, so waiting for VMs and infrastructure 
to catch up - software, machines, and network 
• Some bits of node need tightening - especially around 
security and password storage 
• Still learning and it is fun!
SCALABILITY PACKETS 
• Pile of VMs to auto-scale 
• Need elastic environment with a smart load 
balancer and configuration management 
• Great Details on Best practice 
• https://gist.github.com/hueniverse/7686452
THANKS!
QUESTIONS? COMMENTS?
NOUN PROJECTS THANKS 
Smartphone designed by James Fenton from the Noun Project 
! 
Creative Commons – Attribution (CC BY 3.0) 
Identification designed by Mark Shorter from the Noun Project 
Ibeacon designed by Stéphanie Rusch from the 
Nount Project 
! 
Creative Commons – Attribution (CC BY 3.0) 
Arduino designed by uizin from the Noun Project 
!

Contenu connexe

Tendances

Nodejs - Building a RESTful API
Nodejs - Building a RESTful APINodejs - Building a RESTful API
Nodejs - Building a RESTful API
Sang Cù
 

Tendances (20)

Why you should switch to Cypress for modern web testing?
Why you should switch to Cypress for modern web testing?Why you should switch to Cypress for modern web testing?
Why you should switch to Cypress for modern web testing?
 
Node.js in Production
Node.js in ProductionNode.js in Production
Node.js in Production
 
Introduction to node.js by jiban
Introduction to node.js by jibanIntroduction to node.js by jiban
Introduction to node.js by jiban
 
Nodejs - Building a RESTful API
Nodejs - Building a RESTful APINodejs - Building a RESTful API
Nodejs - Building a RESTful API
 
React native in the wild @ Codemotion 2016 in Rome
React native in the wild @ Codemotion 2016 in RomeReact native in the wild @ Codemotion 2016 in Rome
React native in the wild @ Codemotion 2016 in Rome
 
Zepto and the rise of the JavaScript Micro-Frameworks
Zepto and the rise of the JavaScript Micro-FrameworksZepto and the rise of the JavaScript Micro-Frameworks
Zepto and the rise of the JavaScript Micro-Frameworks
 
Server-Side JavaScript with Nashorn
Server-Side JavaScript with NashornServer-Side JavaScript with Nashorn
Server-Side JavaScript with Nashorn
 
LONDON SDET MEETUP - Difference between Selenium and Cypress presentation
LONDON SDET MEETUP - Difference between Selenium and Cypress presentationLONDON SDET MEETUP - Difference between Selenium and Cypress presentation
LONDON SDET MEETUP - Difference between Selenium and Cypress presentation
 
Das kannste schon so machen
Das kannste schon so machenDas kannste schon so machen
Das kannste schon so machen
 
Javaland 2017: "You´ll do microservices now". Now what?
Javaland 2017: "You´ll do microservices now". Now what?Javaland 2017: "You´ll do microservices now". Now what?
Javaland 2017: "You´ll do microservices now". Now what?
 
Come Sail Away With Me (you guys): Node.js MVC Web API's Using Sails.js
Come Sail Away With Me (you guys): Node.js MVC Web API's Using Sails.jsCome Sail Away With Me (you guys): Node.js MVC Web API's Using Sails.js
Come Sail Away With Me (you guys): Node.js MVC Web API's Using Sails.js
 
Von JavaEE auf Microservice in 6 Monaten - The Good, the Bad, and the wtfs...
Von JavaEE auf Microservice in 6 Monaten - The Good, the Bad, and the wtfs...Von JavaEE auf Microservice in 6 Monaten - The Good, the Bad, and the wtfs...
Von JavaEE auf Microservice in 6 Monaten - The Good, the Bad, and the wtfs...
 
Node.js debugging
Node.js debuggingNode.js debugging
Node.js debugging
 
Realtime MVC with Sails.js
Realtime MVC with Sails.jsRealtime MVC with Sails.js
Realtime MVC with Sails.js
 
Node.JS
Node.JSNode.JS
Node.JS
 
Node.JS security
Node.JS securityNode.JS security
Node.JS security
 
Memaksimalkan Non-Blocking IO pada Node.js
Memaksimalkan Non-Blocking IO pada Node.jsMemaksimalkan Non-Blocking IO pada Node.js
Memaksimalkan Non-Blocking IO pada Node.js
 
Queue Everything and Please Everyone
Queue Everything and Please EveryoneQueue Everything and Please Everyone
Queue Everything and Please Everyone
 
Ruby performance - The low hanging fruit
Ruby performance - The low hanging fruitRuby performance - The low hanging fruit
Ruby performance - The low hanging fruit
 
[Js hcm] Deploying node.js with Forever.js and nginx
[Js hcm] Deploying node.js with Forever.js and nginx[Js hcm] Deploying node.js with Forever.js and nginx
[Js hcm] Deploying node.js with Forever.js and nginx
 

Similaire à The Real World - Plugging the Enterprise Into It (nodejs)

SignalR Intro + WPDev
SignalR Intro + WPDevSignalR Intro + WPDev
SignalR Intro + WPDev
Sam Basu
 

Similaire à The Real World - Plugging the Enterprise Into It (nodejs) (20)

Being HAPI! Reverse Proxying on Purpose
Being HAPI! Reverse Proxying on PurposeBeing HAPI! Reverse Proxying on Purpose
Being HAPI! Reverse Proxying on Purpose
 
Best practices of building data streaming API
Best practices of building data streaming APIBest practices of building data streaming API
Best practices of building data streaming API
 
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
DSLing your System For Scalability Testing Using Gatling - Dublin Scala User ...
 
SolarWinds Scalability for the Enterprise
SolarWinds Scalability for the EnterpriseSolarWinds Scalability for the Enterprise
SolarWinds Scalability for the Enterprise
 
Automation in Network Lifecycle Management - Bay Area Juniper Meetup
Automation in Network Lifecycle Management - Bay Area Juniper MeetupAutomation in Network Lifecycle Management - Bay Area Juniper Meetup
Automation in Network Lifecycle Management - Bay Area Juniper Meetup
 
Scaling asp.net websites to millions of users
Scaling asp.net websites to millions of usersScaling asp.net websites to millions of users
Scaling asp.net websites to millions of users
 
Spring and Pivotal Application Service - SpringOne Tour - Boston
Spring and Pivotal Application Service - SpringOne Tour - BostonSpring and Pivotal Application Service - SpringOne Tour - Boston
Spring and Pivotal Application Service - SpringOne Tour - Boston
 
E g innovations overview
E g innovations overviewE g innovations overview
E g innovations overview
 
IBM Think Session 8598 Domino and JavaScript Development MasterClass
IBM Think Session 8598 Domino and JavaScript Development MasterClassIBM Think Session 8598 Domino and JavaScript Development MasterClass
IBM Think Session 8598 Domino and JavaScript Development MasterClass
 
Network Automation with Salt and NAPALM: Introuction
Network Automation with Salt and NAPALM: IntrouctionNetwork Automation with Salt and NAPALM: Introuction
Network Automation with Salt and NAPALM: Introuction
 
Zero Downtime JEE Architectures
Zero Downtime JEE ArchitecturesZero Downtime JEE Architectures
Zero Downtime JEE Architectures
 
How to best setup SharePoint 2013, Web Apps, Workflow Manager with Powershell
How to best setup SharePoint 2013, Web Apps, Workflow Manager with PowershellHow to best setup SharePoint 2013, Web Apps, Workflow Manager with Powershell
How to best setup SharePoint 2013, Web Apps, Workflow Manager with Powershell
 
SignalR Intro + WPDev
SignalR Intro + WPDevSignalR Intro + WPDev
SignalR Intro + WPDev
 
Introduction to Industrial Control Systems : Pentesting PLCs 101 (BlackHat Eu...
Introduction to Industrial Control Systems : Pentesting PLCs 101 (BlackHat Eu...Introduction to Industrial Control Systems : Pentesting PLCs 101 (BlackHat Eu...
Introduction to Industrial Control Systems : Pentesting PLCs 101 (BlackHat Eu...
 
Otimizando servidores web
Otimizando servidores webOtimizando servidores web
Otimizando servidores web
 
Making the Switch to Bare Metal and Open Networking
Making the Switch to Bare Metal and Open NetworkingMaking the Switch to Bare Metal and Open Networking
Making the Switch to Bare Metal and Open Networking
 
Cloud APIs Overview Tucker
Cloud APIs Overview   TuckerCloud APIs Overview   Tucker
Cloud APIs Overview Tucker
 
Service Mesh @Lara Camp Myanmar - 02 Sep,2023
Service Mesh @Lara Camp Myanmar - 02 Sep,2023Service Mesh @Lara Camp Myanmar - 02 Sep,2023
Service Mesh @Lara Camp Myanmar - 02 Sep,2023
 
Mini-Track: Lessons from Public Cloud
Mini-Track: Lessons from Public CloudMini-Track: Lessons from Public Cloud
Mini-Track: Lessons from Public Cloud
 
FreeSWITCH as a Microservice
FreeSWITCH as a MicroserviceFreeSWITCH as a Microservice
FreeSWITCH as a Microservice
 

Plus de Aman Kohli

Plus de Aman Kohli (6)

New Payments Architectures and Infrastructures
New Payments Architectures and Infrastructures New Payments Architectures and Infrastructures
New Payments Architectures and Infrastructures
 
Decentralisation - DISTRIBUTED COMPUTING ON A MASSIVE SCALE
Decentralisation - DISTRIBUTED COMPUTING ON A MASSIVE SCALEDecentralisation - DISTRIBUTED COMPUTING ON A MASSIVE SCALE
Decentralisation - DISTRIBUTED COMPUTING ON A MASSIVE SCALE
 
Mobile trends 2013
Mobile trends 2013Mobile trends 2013
Mobile trends 2013
 
What's Next: Talk to ITT Tallaght Final Year Computing Graduates
What's Next: Talk to ITT Tallaght Final Year Computing GraduatesWhat's Next: Talk to ITT Tallaght Final Year Computing Graduates
What's Next: Talk to ITT Tallaght Final Year Computing Graduates
 
Greasing The Wheels
Greasing The WheelsGreasing The Wheels
Greasing The Wheels
 
Frayed Edges - Architecture In Practice
Frayed Edges - Architecture In PracticeFrayed Edges - Architecture In Practice
Frayed Edges - Architecture In Practice
 

Dernier

💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
nirzagarg
 
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
@Chandigarh #call #Girls 9053900678 @Call #Girls in @Punjab 9053900678
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
imonikaupta
 
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
nilamkumrai
 
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
nilamkumrai
 
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
 
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
dharasingh5698
 

Dernier (20)

💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
 
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
 
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...
Pirangut | Call Girls Pune Phone No 8005736733 Elite Escort Service Available...
 
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
 
Russian Call Girls in %(+971524965298 )# Call Girls in Dubai
Russian Call Girls in %(+971524965298  )#  Call Girls in DubaiRussian Call Girls in %(+971524965298  )#  Call Girls in Dubai
Russian Call Girls in %(+971524965298 )# Call Girls in Dubai
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
 
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
 
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
 
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
( Pune ) VIP Pimpri Chinchwad Call Girls 🎗️ 9352988975 Sizzling | Escorts | G...
 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
 
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
 
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
 
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
 
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
 
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
 
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
 
Real Escorts in Al Nahda +971524965298 Dubai Escorts Service
Real Escorts in Al Nahda +971524965298 Dubai Escorts ServiceReal Escorts in Al Nahda +971524965298 Dubai Escorts Service
Real Escorts in Al Nahda +971524965298 Dubai Escorts Service
 
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
 
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
 

The Real World - Plugging the Enterprise Into It (nodejs)

  • 1. THE REAL WORLD Plugging The Enterprise Into It.
  • 2. MOBILE ARCHITECT ‣Love Distributed Systems ‣Entropy Reducer ‣Payment systems ‣R&D Work ‣B2E and Commercial Banking Apps Experience ‣ Front Office Trading Systems ‣ Messaging Middleware Integration ‣ Big Systems ‣ C/C++/C#/Java MORE ‣ @akohli https://slideshare.net/akohli series 2, episode 22, “Daddy Pig’s Office” http:// www.channel5.com/shows/peppa-pig/episodes/daddy-pigs-office
  • 3. TODAY Why Node What we want to do Node as the underpinning of real world or electronic asset interaction Backing our interactions, eventing services Not so much about monolith deconstruction What we did Initial proxy and protocol Our performance and scalability testing
  • 4.
  • 6.
  • 7. WHY NODE? ✔ Node • Asynchronous Eventing Model • We live in an async nonblocking world • Ideal for mobile and sensor applications • Everyone knows Javascript, right? • Community • Diverse protocol and lots of modules • Rapid development and Expediency
  • 8. HOMOLOGATED or how we can use it in a big company • Node is approved for internal usage • Less Yak Shaving than other solutions • different at least • good internal community beware of dog, staff only
  • 9. “Walmart has had good success with HAPI and Node” - @adam_baldwin “Node is good. I’ve heard good things - @ eoinbrazil about HAPI”
  • 11. ENTERPRISE MOBILE APPLICATIONS • Plurality of systems, services • web resources • web sites • Connectivity challenges • direct • mediated • Security • AuthN • AuthZ • Data Encryption at rest
  • 12. Security Pass Sensors Employee Devices The Physical World THE REFLEKTOR Security Services AuthZ AuthN … Eventing Engine Bridge Payment Services Access Services Printing Services the Reflektor Bridge and New Services App Services and Resources
  • 14. IT AIN’T EASY but we gotta try
  • 17. THE FLOW • The Protocol • Security - Gateway Access • Federated Identity, my foot • NTLM, has it’s own approach
  • 18. PROTOCOL Request json body target headers body/post-data loginfo request = { URL = "http://www.citigroup.net/", method = "GET", timeout = 19500, clientInfo = { identifier = “…E”, model = "iPad Simulator", systemName = "iPhone OS", systemVersion = "7.1", }, headers = { Accept = "text/html,application/xhtml +xml,application/xml;q=0.9,*/*;q=0.8", Cookie = "CGPLNG=ENG; JSESSIONID_CGNR3=..”, "User-Agent" = "Mozilla/5.0 (iPad; CPU OS 7_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/ 11D167" }, logEntries = [ { URL = “https://cinternal.site/target/fooa”, downstreamDuration = 656, httpMethod = "GET", roundtripDuration = 3461, statusCode = 200 } ] }
  • 19. RESPONSE body = “<base64>", code = 200, duration = 31, headers = { "Accept-Ranges" = [ "bytes" ], "Content-Length" = [ 225 ], "Content-Type" = [ "text/html" ], Date = [ "Thu, 29 May 2014 15:28:29 GMT" ], Etag = [ ""e1-4e50c74f"" ], "Last-Modified" = [ "Sun, 21 Aug 2011 08:52:31 GMT" ] }, message = "OK" }
  • 20. NTLM AUTHENTICATION Enterprise authentication protocol (Microsoft). ! NTLM requires all phases to take place across a single HTTP connection. ! NTLM messages are sent and received as request headers. ! The server’s response from the NTLM type 3 message is the requested content. ! This authentication process must be completed for every requested resource, unless an open connection is maintained.
  • 21. WORKING Implementation Challenges • Storage of password on mobile device is prohibited, but is required in the authentication process. • Persistent connection not available. • Latency issues – 3 requests for every web resource. Solution • Ported from Apache Java implementation to Node.js. • Hashed username / password pair stored on device, transmitted to server for authentication rather than raw password. • hmac_md5(username, md4(password)) • NTLM message calculation split between client app and proxy server. • Defaults used and optional parameters omitted – simplified messages. • Observed desktop browsers wait for a 401 before beginning the authentication process. Pre-emptively sending the username / password hash eliminates the initial 401 response. Process is reduced from 3 direct requests to a single client request, mapped to 2 proxy requests.
  • 23. GITHUB.COM/SPUMKO/FLOD $ flod -n 2000 -t 1500 -c 100..1000 -v http://target-place ! !
  • 24. GITHUB.COM/SPUMKO/FLOD num req per batch range of concurrent request per batch - $ flod -n 2000 -t 1500 -c 100..1000 -v http://target-place ! ! timeout “rate”
  • 25. FLOD OUTPUT ## 6k page results ec2-user@ip-10-199-51-233 node-hapi]$ flod -n 2000 -t 1500 -c 100..1000 -v http://localhost/loremipsum-6k-ish.html This is Flod, version 0.2.2 Copyright 2013 Walmart, http://github.com/spumko/flod ! Benchmarking (hold on)... ! Server Requests/sec Latency (ms) --------------------------------------- ------------ --------------- http://localhost/loremipsum-6k-ish.html 100 96.48 ± 18.54 http://localhost/loremipsum-6k-ish.html 200 164.24 ± 17.03 http://localhost/loremipsum-6k-ish.html 300 263.80 ± 62.44 http://localhost/loremipsum-6k-ish.html 400 359.61 ± 49.20 http://localhost/loremipsum-6k-ish.html 500 437.66 ± 58.69 http://localhost/loremipsum-6k-ish.html 600 481.29 ± 120.04 http://localhost/loremipsum-6k-ish.html 700 606.74 ± 114.45 http://localhost/loremipsum-6k-ish.html 800 555.08 ± 133.74 http://localhost/loremipsum-6k-ish.html 900 674.08 ± 190.91 http://localhost/loremipsum-6k-ish.html 1000 763.27 ± 69.25 ## running with high timeout - doubling responses times vs nginx direct [ec2-user@ip-10-199-51-233 node-hapi]$ ../node_modules/flod/bin/flod -n 2000 -t 4500 -c 100..1000 -v http://localhost:8000 This is Flod, version 0.2.2 Copyright 2013 Walmart, http://github.com/spumko/flod ! Benchmarking (hold on)... ! Server Requests/sec Latency (ms) --------------------- ------------ ---------------- http://localhost:8000 100 200.55 ± 39.40 http://localhost:8000 200 389.54 ± 67.39 http://localhost:8000 300 558.14 ± 112.57 http://localhost:8000 400 777.09 ± 160.01 http://localhost:8000 500 970.61 ± 305.76 http://localhost:8000 600 1032.37 ± 274.44 http://localhost:8000 700 1216.49 ± 249.94 http://localhost:8000 800 1483.31 ± 690.64 http://localhost:8000 900 1559.54 ± 805.31 http://localhost:8000 1000 1909.23 ± 845.81
  • 26. MODIFYING FLOD • modified server to pull our decorated response timing information • modified reporting/logging to include this information • hope to contribute back to mainline
  • 27. ENVIRONMENT Machine OS Type Processor Cores Memory Int Server RHEL 6.4 VM Xeon 2.6GHz 2 4GB Prod Server Windows Server 2k8r2 VM Xeon 1.8 Ghz 4 6GB Dev Mac Mini Full i5 2.5 GHz 2 8 GB • HTTP 1.1 no Keep-Alive, request payload is json • Client iOS ObjectiveC;Server is Node + Hapijs (with Some Good Monitoring)
  • 28. SCENARIOS • Closed network, direct connection, Mac to Mac • Client server on a redhat VM, loopback. Redhat VM • Redhat client to Windows Server via network, Redhat to Windows • via Mobile network/wifi could only support 100 transactions/s because of latency Req/s Response (ms) Mac to Mac 1000 2000 Redhat VM 1000 8500 RH to Windows 1000 30, 000 External 100 17, 000
  • 29. RESULTS • Consistent proxied service response • ~20ms Mac ➔ Mac • ~250ms RHEL ➔ Windows Server • Gateway service < 50 ms • We need better concurrency, request servicing • Infrastructure adds significant overhead
  • 30. RESULTS 100# 200# 300# 400# 500# 600# 700# 800# 900# 1000# 70000# 60000# 50000# 40000# 30000# 20000# 10000# 0# Requests'per'second' Milliseconds(ms)' 99th'Percen7les' Mac#To#Mac# RedhatVM# Redhat#to#Windows#
  • 33. TABULAR Request Mac To Mac RHEL to Windows 100/s 483 17,235 200/s 783 21,209 300/s 1127 17,479 400/s 1493 22,937 500/s 1859 28,872 600/s 2171 34,253 700/s 2487 39,878 800/s 2878 46,970 900/s 3285 51,083 1000/s 3555 57,189
  • 35. EXPERIENCE • Enterprise and Legal approvals hard • We are ahead of Ops, so waiting for VMs and infrastructure to catch up - software, machines, and network • Some bits of node need tightening - especially around security and password storage • Still learning and it is fun!
  • 36. SCALABILITY PACKETS • Pile of VMs to auto-scale • Need elastic environment with a smart load balancer and configuration management • Great Details on Best practice • https://gist.github.com/hueniverse/7686452
  • 39. NOUN PROJECTS THANKS Smartphone designed by James Fenton from the Noun Project ! Creative Commons – Attribution (CC BY 3.0) Identification designed by Mark Shorter from the Noun Project Ibeacon designed by Stéphanie Rusch from the Nount Project ! Creative Commons – Attribution (CC BY 3.0) Arduino designed by uizin from the Noun Project !