SlideShare a Scribd company logo
HOW WE TOOK OUR SERVER-
SIDE JAVA APPLICATION TO THE
CLOUDand liked what we got
WHO’S TALKING?
linkd.in/jbaruch
Developer who?
3
Developer who?
4
WHAT FROG?
WHAT FROG?
WHAT FROG?
WHAT FROG?
WHAT FROG?
WHAT FROG?
One more thing!
bit.ly/1bDaHiD
JUC Israel - July 16, 2014
SO…
First things First.
Poll time!
I use binary repository:
Poll time!
I use binary repository:
 Naturally,Artifactory!
Poll time!
I use binary repository:
 Naturally,Artifactory!
 Shame on me,
but still Nexus…
Poll time!
I use binary repository:
 Naturally,Artifactory!
 Shame on me,
but still Nexus…
 I don’t like features, I use Archiva
Poll time!
I use binary repository:
 Naturally,Artifactory!
 Shame on me,
but still Nexus…
 I don’t like features, I use Archiva
 I am a caveman, binary what?
In the beginning…
In the beginning…
Yet Another Java Server App
Rabbit?!
Checksum storage
Checksum storage
Checksum storage
Checksum storage
Append Only, GC-ed
Artifactory 3 – 10 times faster!
(Not bastards)
Moving Forward
Moving Forward
Moving Forward
Moving Forward
Moving Forward
Artifactory SaaS
etc.
What you like about it:
What you like about it:
– No need to maintain the server
What you like about it:
– No need to maintain the server
– Fanatic tech support
What you like about it:
– No need to maintain the server
– Fanatic tech support
– Always up to date!
What you like about it:
– No need to maintain the server
– Fanatic tech support
– Always up to date!
What you don’t like about it:
What you like about it:
– No need to maintain the server
– Fanatic tech support
– Always up to date!
What you don’t like about it:
– Can’t deploy your own plugins!
What you like about it:
– No need to maintain the server
– Fanatic tech support
– Always up to date!
What you don’t like about it:
– Can’t deploy your own plugins!
What you like about it:
– No need to maintain the server
– Fanatic tech support
– Always up to date!
What you don’t like about it:
– Can’t deploy your own plugins!
Artifactory SaaS
etc.
Sh.t-load of artifacts!
Terabytes.
FEBRUARY
Terabytes.
FEBRUARY
MAY
Terabytes.
FEBRUARY
MAY
AUGUST
Terabytes.
AUGUST
MAY
JANUARY
Bring Them On!
To The Cloud
Bullshit Bingo
Much ado about *aaS
* As A Service
* As A Service
Self-service
* As A Service
Self-service Multi-tenancy
Controversial example ahead!
You might find it inaccurate.
If you are annoyed by that feeling,
try to remember – it’s just an
example.
GaaE: Google as an Example
Product Self
Service
Multi-
tenant
* aaS
GaaE: Google as an Example
Product Self
Service
Multi-
tenant
* aaS
Gmail
  Not *aaS,
web-app
GaaE: Google as an Example
Product Self
Service
Multi-
tenant
* aaS
Gmail
  Not *aaS,
web-app
Google Apps
  SaaS
GaaE: Google as an Example
Product Self
Service
Multi-
tenant
* aaS
Gmail
  Not *aaS,
web-app
Google Apps
  SaaS
Google App
Engine
  PaaS
GaaE: Google as an Example
Product Self
Service
Multi-
tenant
* aaS
Gmail
  Not *aaS,
web-app
Google Apps
  SaaS
Google App
Engine
  PaaS
Google Compute Engine
Engine
  IaaS
AaaE: Amazon as an Example
Product Self
Service
Multi-
tenant
* aaS
AaaE: Amazon as an Example
Product Self
Service
Multi-
tenant
* aaS
Amazon store
  Not *aaS,
web-app
AaaE: Amazon as an Example
Product Self
Service
Multi-
tenant
* aaS
Amazon store
  Not *aaS,
web-app
aStore
  SaaS
AaaE: Amazon as an Example
Product Self
Service
Multi-
tenant
* aaS
Amazon store
  Not *aaS,
web-app
aStore
  SaaS
Amazon Elastic
Beantalk
  PaaS
AaaE: Amazon as an Example
Product Self
Service
Multi-
tenant
* aaS
Amazon store
  Not *aaS,
web-app
aStore
  SaaS
Amazon Elastic
Beantalk
  PaaS
Amazon Elastic Cloud
  IaaS
SaaS pains
Multi-tenancy
Looks good! When to expect?
Extrapolate
This
Given:
Release Java 7 07/2011
Release Java 8 12/2012
Given:
Release Java 7 07/2011
Release Java 8 12/2012
Find:
Release Java 9?
Java 8: 12/2012
Java 8: 12/2012
-
Java 7: 07/2011
Java 8: 12/2012
-
Java 7: 07/2011
=
15 Months cycle
Java 8: 12/2012
-
Java 7: 07/2011
=
15 Months cycle
conclusion: Java 9: 05/2013
Java 8: 12/2012
-
Java 7: 07/2011
=
15 Months cycle
conclusion: Java 9: 05/2013
It’s almost a year ago!
Oh, wait…
Java 8 is not out yet!
Observation: When Mark
writes about trains it
means release delay
Here you go:
Java 7: 07/2011
Java 7: 07/2011
+ 24 Months =
Java 7: 07/2011
+ 24 Months =
Java 8: 07/2013
You wish!
Java 7: 07/2011
+ 24 Months =
Java 8: 07/2013
Java 7: 07/2011
+ 24 Months =
Java 8: 01/2014
Whatever mark says
Java 7: 07/2011
+ 24 Months =
Java 8: 01/2014
+ 24 Months =
Java 9: 01/2016
Whatever mark says
You think this is it?
Java 7: 07/2011
+ 24 Months =
Java 8: 03/2014
Whatever mark says
Java 7: 07/2011
+ 24 Months =
Java 8: 03/2014
+ 24 Months =
Whatever mark says
Java 7: 07/2011
+ 24 Months =
Java 8: 03/2014
+ 24 Months =
Java 9: 03/2016
Whatever mark says
Java 7: 07/2011
+ 24 Months =
Java 8: 03/2014
+ 24 Months =
Java 9: 03/2016
(if no more train blog posts)
Whatever mark says
Java 7: 07/2011
+ 24 месяца =
Java 8: 03/2014
+ 24 месяца =
Java 9: 03/2016
(Если не будет больше
постов про поезд)
Сколько Марк скажет
Multi-tenancy types
Multi-tenancy Type
Multi-tenancy types
Multi-tenancy Type
Data Separation
Multi-tenancy types
Multi-tenancy Type
Data Separation
Application Separation
Multi-tenancy types
Multi-tenancy Type
Data Separation
Application Separation
Process Separation
GaaE for Multi Tenancy types
Product Multi-tenancy Type
GaaE for Multi Tenancy types
Product Multi-tenancy Type
Google Apps Data Separation
GaaE for Multi Tenancy types
Product Multi-tenancy Type
Google Apps Data Separation
Google App Engine Application Separation
GaaE for Multi Tenancy types
Product Multi-tenancy Type
Google Apps Data Separation
Google App Engine Application Separation
Google Compute Engine Process Separation
Strategy Pros Cons
Separating data
Separating
application
Separating processes
Let’s compare!
Strategy Pros Cons
Separating data  Normal Java Application
Separating
application
Separating processes
Let’s compare!
Strategy Pros Cons
Separating data  Normal Java Application  Manual state separation
 Complicated and critical
schema
Separating
application
Separating processes
Let’s compare!
Strategy Pros Cons
Separating data  Normal Java Application  Manual state separation
 Complicated and critical
schema
Separating
application
Separating processes
Let’s compare!

Strategy Pros Cons
Separating data  Normal Java Application  Manual state separation
 Complicated and critical
schema
Separating
application
Separating processes  No shared state
 Simple transition from existing
Let’s compare!

Strategy Pros Cons
Separating data  Normal Java Application  Manual state separation
 Complicated and critical
schema
Separating
application
Separating processes  No shared state
 Simple transition from existing
 JVM per tenant!
Let’s compare!

Strategy Pros Cons
Separating data  Normal Java Application  Manual state separation
 Complicated and critical
schema
Separating
application
Separating processes  No shared state
 Simple transition from existing
 JVM per tenant!
Let’s compare!


Strategy Pros Cons
Separating data  Normal Java Application  Manual state separation
 Complicated and critical
schema
Separating
application
 No shared state
 Simple transition from existing
Separating processes  No shared state
 Simple transition from existing
 JVM per tenant!
Let’s compare!


Strategy Pros Cons
Separating data  Normal Java Application  Manual state separation
 Complicated and critical
schema
Separating
application
 No shared state
 Simple transition from existing
Separating processes  No shared state
 Simple transition from existing
 JVM per tenant!
Let’s compare!



Strategy Pros Cons
Separating data  Normal Java Application  Manual state separation
 Complicated and critical
schema
Separating
application
 No shared state
 Simple transition from existing
 Stay tuned…
Separating processes  No shared state
 Simple transition from existing
 JVM per tenant!
Let’s compare!



Separate WARs: Tomcat Root
┌── lib
├── webapps
│ ├── customer-name
│ ├── other-customer-name
│ └── many other customers
└── other dirs (bin, conf, log, etc)
Separate WARs
Separate WARs
Separate WARs
That was the
PermGen.
Yup.
We love our toys
We love our toys
Artifactory-3.0.1.warwebappWEB-INFlib$du –m
51 .
To the common ClassLoader!
Will it work?
_________
Will it work?
‹ Object state
_________
Will it work?
‹ Object state
‹ Static state
_________
“Static State Quest I”
(Sierra, who else?)
Spring Framework
The Evil
App. Context Holder Pattern
The Evil
App. Context Holder Pattern
public class AppCtxHolder implements ApplicationContextAware {
private static ApplicationContext ctx;
public AppCtxHolder() { }
public void setApplicationContext(ApplicationContext applicationContext) {
ctx = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return ctx;
}
}
The Evil
App. Context Holder Pattern
public class AppCtxHolder implements ApplicationContextAware {
private static ApplicationContext ctx;
public AppCtxHolder() { }
public void setApplicationContext(ApplicationContext applicationContext) {
ctx = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return ctx;
}
}
The Evil
App. Context Holder Pattern
public class AppCtxHolder implements ApplicationContextAware {
private static ApplicationContext ctx;
public AppCtxHolder() { }
public void setApplicationContext(ApplicationContext applicationContext) {
ctx = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return ctx;
}
}
Apache Wicket
Apache Wicket
We love Wicket,
cause it allows
people who hate
UI development
to develop a UI,
which people
don’t hate
Apache Wicket
Logger
Logger
CATS Software
Jackrabbit
Jackrabbit
Heap-wide Caches
Don’t actually have
to read this
Tomcat Root – Where are the
JARs?┌── lib
├── webapps
│ ├── customer-name
│ │ ├── favicon.ico
│ │ ├── META-INF
│ │ └── WEB-INF
│ │ ├── web.xml
│ │ └── classes
│ │ └── DUMMY.TXT
│ ├── other-customer-name
│ │ ├── favicon.ico
│ │ │ └── META-INF
│ │ └── WEB-INF
│ └── many other customers
└── other dirs (bin, conf, log, etc)
Tomcat Root – Where are the
JARs?┌── lib
├── webapps
│ ├── customer-name
│ │ ├── favicon.ico
│ │ ├── META-INF
│ │ └── WEB-INF
│ │ ├── web.xml
│ │ └── classes
│ │ └── DUMMY.TXT
│ ├── other-customer-name
│ │ ├── favicon.ico
│ │ │ └── META-INF
│ │ └── WEB-INF
│ └── many other customers
└── other dirs (bin, conf, log, etc)
Tomcat Root – Where are the
JARs?┌── lib
├── webapps
│ ├── customer-name
│ │ ├── favicon.ico
│ │ ├── META-INF
│ │ └── WEB-INF
│ │ ├── web.xml
│ │ └── classes
│ │ └── DUMMY.TXT
│ ├── other-customer-name
│ │ ├── favicon.ico
│ │ │ └── META-INF
│ │ └── WEB-INF
│ └── many other customers
└── other dirs (bin, conf, log, etc)
Tomcat Root – Global lib folder
┌── lib
│ ├── artifactory
│ │ ├── artifactory-*.jar
│ │ ├── jackrabbit-core-jfrog-2.2.8c.jar
│ │ ├── spring-core-3.1.1.RELEASE.jar
│ │ ├── wicket-core-1.5.3.jar
│ │ └── other jars
│ ├── catalina.jar
│ ├── servlet-api.jar
│ └── other jars
├── webapps
└── other dirs (bin, conf, log, etc)
Tomcat Root – Global lib folder
┌── lib
│ ├── artifactory
│ │ ├── artifactory-*.jar
│ │ ├── jackrabbit-core-jfrog-2.2.8c.jar
│ │ ├── spring-core-3.1.1.RELEASE.jar
│ │ ├── wicket-core-1.5.3.jar
│ │ └── other jars
│ ├── catalina.jar
│ ├── servlet-api.jar
│ └── other jars
├── webapps
└── other dirs (bin, conf, log, etc)
Tomcat Root – Global lib folder
┌── lib
│ ├── artifactory
│ │ ├── artifactory-*.jar
│ │ ├── jackrabbit-core-jfrog-2.2.8c.jar
│ │ ├── spring-core-3.1.1.RELEASE.jar
│ │ ├── wicket-core-1.5.3.jar
│ │ └── other jars
│ ├── catalina.jar
│ ├── servlet-api.jar
│ └── other jars
├── webapps
└── other dirs (bin, conf, log, etc)
Tomcat Root – Global lib folder
┌── lib
│ ├── artifactory
│ │ ├── artifactory-*.jar
│ │ ├── jackrabbit-core-jfrog-2.2.8c.jar
│ │ ├── spring-core-3.1.1.RELEASE.jar
│ │ ├── wicket-core-1.5.3.jar
│ │ └── other jars
│ ├── catalina.jar
│ ├── servlet-api.jar
│ └── other jars
├── webapps
└── other dirs (bin, conf, log, etc)
Tomcat Root – Global lib folder
┌── lib
│ ├── artifactory
│ │ ├── artifactory-*.jar
│ │ ├── jackrabbit-core-jfrog-2.2.8c.jar
│ │ ├── spring-core-3.1.1.RELEASE.jar
│ │ ├── wicket-core-1.5.3.jar
│ │ └── other jars
│ ├── catalina.jar
│ ├── servlet-api.jar
│ └── other jars
├── webapps
└── other dirs (bin, conf, log, etc)
PaaS or IaaS?
PaaS or IaaS?
Self-Service?
Prevent the Fork!
The process
Artifactory is built with
Artifactory!
The Process
The Process
The Process
The Process
The Process
The Process
The Process
The Process
It’s all about right tools
Also right tools
The Paradigm…
Now we do it the other way around
Actually, now we do it the right way!
And we love what we got!
And we love what we got!
NO, THANK YOU!

More Related Content

What's hot

Is Serverless The New Swiss Cheese?
Is Serverless The New Swiss Cheese?Is Serverless The New Swiss Cheese?
Is Serverless The New Swiss Cheese?
Chase Douglas
 
Event driven infrastructure
Event driven infrastructureEvent driven infrastructure
Event driven infrastructure
Shiva Narayanaswamy
 
IaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explainedIaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explained
Jeroen Niesen
 
NodeJS Interactive 2019: FaaS meets Frameworks
NodeJS Interactive 2019:  FaaS meets FrameworksNodeJS Interactive 2019:  FaaS meets Frameworks
NodeJS Interactive 2019: FaaS meets Frameworks
Chris Bailey
 
Embracing Failure - Fault Injection and Service Resilience at Netflix
Embracing Failure - Fault Injection and Service Resilience at NetflixEmbracing Failure - Fault Injection and Service Resilience at Netflix
Embracing Failure - Fault Injection and Service Resilience at Netflix
Josh Evans
 
CI/CD and Asset Serving for Single Page Apps
CI/CD and Asset Serving for Single Page AppsCI/CD and Asset Serving for Single Page Apps
CI/CD and Asset Serving for Single Page Apps
Mike North
 
Continous integration and delivery for single page applications
Continous integration and delivery for single page applicationsContinous integration and delivery for single page applications
Continous integration and delivery for single page applications
Sunil Dalal
 
Spinnaker Microsrvices
Spinnaker MicrosrvicesSpinnaker Microsrvices
Spinnaker Microsrvices
Ambassador Labs
 
Netflix Webkit-Based UI for TV Devices
Netflix Webkit-Based UI for TV DevicesNetflix Webkit-Based UI for TV Devices
Netflix Webkit-Based UI for TV Devices
Matt McCarthy
 
How and why test Azure Front Door with AWS Lambda & PowerShell? | Osman Sahin...
How and why test Azure Front Door with AWS Lambda & PowerShell? | Osman Sahin...How and why test Azure Front Door with AWS Lambda & PowerShell? | Osman Sahin...
How and why test Azure Front Door with AWS Lambda & PowerShell? | Osman Sahin...
UK DevOps Collective
 
Zero Downtime Deployment
Zero Downtime DeploymentZero Downtime Deployment
Zero Downtime Deployment
Joel Dickson
 
RavenDB 3.0 Keynote
RavenDB 3.0 KeynoteRavenDB 3.0 Keynote
RavenDB 3.0 Keynote
Oren Eini
 
JustEnoughDevOpsForDataScientists
JustEnoughDevOpsForDataScientistsJustEnoughDevOpsForDataScientists
JustEnoughDevOpsForDataScientists
Anya Bida
 
(SPOT302) Availability: The New Kind of Innovator’s Dilemma
(SPOT302) Availability: The New Kind of Innovator’s Dilemma(SPOT302) Availability: The New Kind of Innovator’s Dilemma
(SPOT302) Availability: The New Kind of Innovator’s Dilemma
Amazon Web Services
 
Atlassian Roadshow 2016 - DevOps Session
Atlassian Roadshow 2016 - DevOps SessionAtlassian Roadshow 2016 - DevOps Session
Atlassian Roadshow 2016 - DevOps Session
Sourcesense
 
Dan Cuellar
Dan CuellarDan Cuellar
Dan Cuellar
CodeFest
 
Engineering Netflix Global Operations in the Cloud
Engineering Netflix Global Operations in the CloudEngineering Netflix Global Operations in the Cloud
Engineering Netflix Global Operations in the Cloud
Josh Evans
 
Heroku
HerokuHeroku
Serverless Workflows on AWS - A Journey from SWF to Step Functions
Serverless Workflows on AWS - A Journey from SWF to Step FunctionsServerless Workflows on AWS - A Journey from SWF to Step Functions
Serverless Workflows on AWS - A Journey from SWF to Step Functions
Forrest Brazeal
 
Automate your serverless stack
Automate your serverless stack Automate your serverless stack
Automate your serverless stack
Amazon Web Services
 

What's hot (20)

Is Serverless The New Swiss Cheese?
Is Serverless The New Swiss Cheese?Is Serverless The New Swiss Cheese?
Is Serverless The New Swiss Cheese?
 
Event driven infrastructure
Event driven infrastructureEvent driven infrastructure
Event driven infrastructure
 
IaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explainedIaC? VSTS to the rescue! Abbreviations explained
IaC? VSTS to the rescue! Abbreviations explained
 
NodeJS Interactive 2019: FaaS meets Frameworks
NodeJS Interactive 2019:  FaaS meets FrameworksNodeJS Interactive 2019:  FaaS meets Frameworks
NodeJS Interactive 2019: FaaS meets Frameworks
 
Embracing Failure - Fault Injection and Service Resilience at Netflix
Embracing Failure - Fault Injection and Service Resilience at NetflixEmbracing Failure - Fault Injection and Service Resilience at Netflix
Embracing Failure - Fault Injection and Service Resilience at Netflix
 
CI/CD and Asset Serving for Single Page Apps
CI/CD and Asset Serving for Single Page AppsCI/CD and Asset Serving for Single Page Apps
CI/CD and Asset Serving for Single Page Apps
 
Continous integration and delivery for single page applications
Continous integration and delivery for single page applicationsContinous integration and delivery for single page applications
Continous integration and delivery for single page applications
 
Spinnaker Microsrvices
Spinnaker MicrosrvicesSpinnaker Microsrvices
Spinnaker Microsrvices
 
Netflix Webkit-Based UI for TV Devices
Netflix Webkit-Based UI for TV DevicesNetflix Webkit-Based UI for TV Devices
Netflix Webkit-Based UI for TV Devices
 
How and why test Azure Front Door with AWS Lambda & PowerShell? | Osman Sahin...
How and why test Azure Front Door with AWS Lambda & PowerShell? | Osman Sahin...How and why test Azure Front Door with AWS Lambda & PowerShell? | Osman Sahin...
How and why test Azure Front Door with AWS Lambda & PowerShell? | Osman Sahin...
 
Zero Downtime Deployment
Zero Downtime DeploymentZero Downtime Deployment
Zero Downtime Deployment
 
RavenDB 3.0 Keynote
RavenDB 3.0 KeynoteRavenDB 3.0 Keynote
RavenDB 3.0 Keynote
 
JustEnoughDevOpsForDataScientists
JustEnoughDevOpsForDataScientistsJustEnoughDevOpsForDataScientists
JustEnoughDevOpsForDataScientists
 
(SPOT302) Availability: The New Kind of Innovator’s Dilemma
(SPOT302) Availability: The New Kind of Innovator’s Dilemma(SPOT302) Availability: The New Kind of Innovator’s Dilemma
(SPOT302) Availability: The New Kind of Innovator’s Dilemma
 
Atlassian Roadshow 2016 - DevOps Session
Atlassian Roadshow 2016 - DevOps SessionAtlassian Roadshow 2016 - DevOps Session
Atlassian Roadshow 2016 - DevOps Session
 
Dan Cuellar
Dan CuellarDan Cuellar
Dan Cuellar
 
Engineering Netflix Global Operations in the Cloud
Engineering Netflix Global Operations in the CloudEngineering Netflix Global Operations in the Cloud
Engineering Netflix Global Operations in the Cloud
 
Heroku
HerokuHeroku
Heroku
 
Serverless Workflows on AWS - A Journey from SWF to Step Functions
Serverless Workflows on AWS - A Journey from SWF to Step FunctionsServerless Workflows on AWS - A Journey from SWF to Step Functions
Serverless Workflows on AWS - A Journey from SWF to Step Functions
 
Automate your serverless stack
Automate your serverless stack Automate your serverless stack
Automate your serverless stack
 

Similar to How we took our server side application to the cloud and liked what we got

Just enough app server
Just enough app serverJust enough app server
Just enough app server
Antonio Goncalves
 
Follow these reasons to know java’s importance
Follow these reasons to know java’s importanceFollow these reasons to know java’s importance
Follow these reasons to know java’s importance
nishajj
 
Migrating Beyond Java 8
Migrating Beyond Java 8Migrating Beyond Java 8
Migrating Beyond Java 8
DaliaAboSheasha
 
Django on Jython, PyCon 2009
Django on Jython, PyCon 2009Django on Jython, PyCon 2009
Django on Jython, PyCon 2009
Leonardo Soto
 
Advanced iOS Engineering - The Junction Talk
Advanced iOS Engineering - The Junction TalkAdvanced iOS Engineering - The Junction Talk
Advanced iOS Engineering - The Junction Talk
Onavo
 
Si fa presto a dire serverless
Si fa presto a dire serverlessSi fa presto a dire serverless
Si fa presto a dire serverless
Alessio Coser
 
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
MarcinStachniuk
 
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
MarcinStachniuk
 
Offline of web applications
Offline of web applicationsOffline of web applications
Offline of web applications
FDConf
 
Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014
Jan Jongboom
 
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
Ryo RKTM
 
2015 - Introduction to building enterprise web applications using Angular.js
2015 - Introduction to building enterprise web applications using Angular.js2015 - Introduction to building enterprise web applications using Angular.js
2015 - Introduction to building enterprise web applications using Angular.js
WebF
 
Get the Top 6 new features in Java 2019
Get the Top 6 new features in Java 2019Get the Top 6 new features in Java 2019
Get the Top 6 new features in Java 2019
Aegis Softtech
 
Declaring Server App Components in Pure Java
Declaring Server App Components in Pure JavaDeclaring Server App Components in Pure Java
Declaring Server App Components in Pure Java
Atlassian
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
Sandeep Chawla
 
Building JBoss AS 7 for Fedora
Building JBoss AS 7 for FedoraBuilding JBoss AS 7 for Fedora
Building JBoss AS 7 for Fedora
wolfc71
 
GWT Reloaded
GWT ReloadedGWT Reloaded
GWT Reloaded
Marcin Szałomski
 
Coding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever ChangedCoding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever Changed
Elizabeth Quinn-Woods
 
Coding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever ChangedCoding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever Changed
Madeline Gauthier
 
Coding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever ChangedCoding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever Changed
K. Dachos
 

Similar to How we took our server side application to the cloud and liked what we got (20)

Just enough app server
Just enough app serverJust enough app server
Just enough app server
 
Follow these reasons to know java’s importance
Follow these reasons to know java’s importanceFollow these reasons to know java’s importance
Follow these reasons to know java’s importance
 
Migrating Beyond Java 8
Migrating Beyond Java 8Migrating Beyond Java 8
Migrating Beyond Java 8
 
Django on Jython, PyCon 2009
Django on Jython, PyCon 2009Django on Jython, PyCon 2009
Django on Jython, PyCon 2009
 
Advanced iOS Engineering - The Junction Talk
Advanced iOS Engineering - The Junction TalkAdvanced iOS Engineering - The Junction Talk
Advanced iOS Engineering - The Junction Talk
 
Si fa presto a dire serverless
Si fa presto a dire serverlessSi fa presto a dire serverless
Si fa presto a dire serverless
 
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w...
 
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
Java Web Start czyli jak żyć z tą dziwną technologią & Continuous Delivery w ...
 
Offline of web applications
Offline of web applicationsOffline of web applications
Offline of web applications
 
Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014Offline for web - Frontend Dev Conf Minsk 2014
Offline for web - Frontend Dev Conf Minsk 2014
 
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
20091226 名古屋SGGAE/J勉強会発表資料『Lift on GAE/J』
 
2015 - Introduction to building enterprise web applications using Angular.js
2015 - Introduction to building enterprise web applications using Angular.js2015 - Introduction to building enterprise web applications using Angular.js
2015 - Introduction to building enterprise web applications using Angular.js
 
Get the Top 6 new features in Java 2019
Get the Top 6 new features in Java 2019Get the Top 6 new features in Java 2019
Get the Top 6 new features in Java 2019
 
Declaring Server App Components in Pure Java
Declaring Server App Components in Pure JavaDeclaring Server App Components in Pure Java
Declaring Server App Components in Pure Java
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
 
Building JBoss AS 7 for Fedora
Building JBoss AS 7 for FedoraBuilding JBoss AS 7 for Fedora
Building JBoss AS 7 for Fedora
 
GWT Reloaded
GWT ReloadedGWT Reloaded
GWT Reloaded
 
Coding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever ChangedCoding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever Changed
 
Coding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever ChangedCoding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever Changed
 
Coding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever ChangedCoding With JRebel - Java Forever Changed
Coding With JRebel - Java Forever Changed
 

More from Baruch Sadogursky

DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
Baruch Sadogursky
 
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
Baruch Sadogursky
 
Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018
Baruch Sadogursky
 
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
Baruch Sadogursky
 
Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018
Baruch Sadogursky
 
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes MeetupsWhere the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
Baruch Sadogursky
 
Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018
Baruch Sadogursky
 
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
Baruch Sadogursky
 
Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017
Baruch Sadogursky
 
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
Baruch Sadogursky
 
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
Baruch Sadogursky
 
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
Baruch Sadogursky
 
Let’s Wing It: A Study in DevRel Strategy
 Let’s Wing It: A Study in DevRel Strategy Let’s Wing It: A Study in DevRel Strategy
Let’s Wing It: A Study in DevRel Strategy
Baruch Sadogursky
 
Log Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at ScaleLog Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at Scale
Baruch Sadogursky
 
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
Baruch Sadogursky
 
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Baruch Sadogursky
 

More from Baruch Sadogursky (20)

DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
 
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
 
Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018
 
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
 
Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018
 
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes MeetupsWhere the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
 
Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018
 
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
 
Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017
 
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
 
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
 
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
 
Let’s Wing It: A Study in DevRel Strategy
 Let’s Wing It: A Study in DevRel Strategy Let’s Wing It: A Study in DevRel Strategy
Let’s Wing It: A Study in DevRel Strategy
 
Log Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at ScaleLog Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at Scale
 
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
 
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
 

How we took our server side application to the cloud and liked what we got

  • 1. HOW WE TOOK OUR SERVER- SIDE JAVA APPLICATION TO THE CLOUDand liked what we got
  • 11. One more thing! bit.ly/1bDaHiD JUC Israel - July 16, 2014
  • 12. SO…
  • 14.
  • 15. Poll time! I use binary repository:
  • 16. Poll time! I use binary repository:  Naturally,Artifactory!
  • 17. Poll time! I use binary repository:  Naturally,Artifactory!  Shame on me, but still Nexus…
  • 18. Poll time! I use binary repository:  Naturally,Artifactory!  Shame on me, but still Nexus…  I don’t like features, I use Archiva
  • 19. Poll time! I use binary repository:  Naturally,Artifactory!  Shame on me, but still Nexus…  I don’t like features, I use Archiva  I am a caveman, binary what?
  • 22. Yet Another Java Server App
  • 24.
  • 30.
  • 31. Artifactory 3 – 10 times faster! (Not bastards)
  • 32.
  • 39.
  • 40. What you like about it:
  • 41. What you like about it: – No need to maintain the server
  • 42. What you like about it: – No need to maintain the server – Fanatic tech support
  • 43. What you like about it: – No need to maintain the server – Fanatic tech support – Always up to date!
  • 44. What you like about it: – No need to maintain the server – Fanatic tech support – Always up to date! What you don’t like about it:
  • 45. What you like about it: – No need to maintain the server – Fanatic tech support – Always up to date! What you don’t like about it: – Can’t deploy your own plugins!
  • 46. What you like about it: – No need to maintain the server – Fanatic tech support – Always up to date! What you don’t like about it: – Can’t deploy your own plugins!
  • 47. What you like about it: – No need to maintain the server – Fanatic tech support – Always up to date! What you don’t like about it: – Can’t deploy your own plugins!
  • 58. * As A Service
  • 59. * As A Service Self-service
  • 60. * As A Service Self-service Multi-tenancy
  • 61. Controversial example ahead! You might find it inaccurate. If you are annoyed by that feeling, try to remember – it’s just an example.
  • 62. GaaE: Google as an Example Product Self Service Multi- tenant * aaS
  • 63. GaaE: Google as an Example Product Self Service Multi- tenant * aaS Gmail   Not *aaS, web-app
  • 64. GaaE: Google as an Example Product Self Service Multi- tenant * aaS Gmail   Not *aaS, web-app Google Apps   SaaS
  • 65. GaaE: Google as an Example Product Self Service Multi- tenant * aaS Gmail   Not *aaS, web-app Google Apps   SaaS Google App Engine   PaaS
  • 66. GaaE: Google as an Example Product Self Service Multi- tenant * aaS Gmail   Not *aaS, web-app Google Apps   SaaS Google App Engine   PaaS Google Compute Engine Engine   IaaS
  • 67. AaaE: Amazon as an Example Product Self Service Multi- tenant * aaS
  • 68. AaaE: Amazon as an Example Product Self Service Multi- tenant * aaS Amazon store   Not *aaS, web-app
  • 69. AaaE: Amazon as an Example Product Self Service Multi- tenant * aaS Amazon store   Not *aaS, web-app aStore   SaaS
  • 70. AaaE: Amazon as an Example Product Self Service Multi- tenant * aaS Amazon store   Not *aaS, web-app aStore   SaaS Amazon Elastic Beantalk   PaaS
  • 71. AaaE: Amazon as an Example Product Self Service Multi- tenant * aaS Amazon store   Not *aaS, web-app aStore   SaaS Amazon Elastic Beantalk   PaaS Amazon Elastic Cloud   IaaS
  • 74.
  • 75. Looks good! When to expect?
  • 77. Given: Release Java 7 07/2011 Release Java 8 12/2012
  • 78. Given: Release Java 7 07/2011 Release Java 8 12/2012 Find: Release Java 9?
  • 79.
  • 82. Java 8: 12/2012 - Java 7: 07/2011 = 15 Months cycle
  • 83. Java 8: 12/2012 - Java 7: 07/2011 = 15 Months cycle conclusion: Java 9: 05/2013
  • 84. Java 8: 12/2012 - Java 7: 07/2011 = 15 Months cycle conclusion: Java 9: 05/2013 It’s almost a year ago! Oh, wait… Java 8 is not out yet!
  • 85. Observation: When Mark writes about trains it means release delay
  • 88. Java 7: 07/2011 + 24 Months =
  • 89. Java 7: 07/2011 + 24 Months = Java 8: 07/2013
  • 91. Java 7: 07/2011 + 24 Months = Java 8: 07/2013
  • 92. Java 7: 07/2011 + 24 Months = Java 8: 01/2014 Whatever mark says
  • 93. Java 7: 07/2011 + 24 Months = Java 8: 01/2014 + 24 Months = Java 9: 01/2016 Whatever mark says
  • 94. You think this is it?
  • 95. Java 7: 07/2011 + 24 Months = Java 8: 03/2014 Whatever mark says
  • 96. Java 7: 07/2011 + 24 Months = Java 8: 03/2014 + 24 Months = Whatever mark says
  • 97. Java 7: 07/2011 + 24 Months = Java 8: 03/2014 + 24 Months = Java 9: 03/2016 Whatever mark says
  • 98. Java 7: 07/2011 + 24 Months = Java 8: 03/2014 + 24 Months = Java 9: 03/2016 (if no more train blog posts) Whatever mark says
  • 99. Java 7: 07/2011 + 24 месяца = Java 8: 03/2014 + 24 месяца = Java 9: 03/2016 (Если не будет больше постов про поезд) Сколько Марк скажет
  • 100.
  • 103. Multi-tenancy types Multi-tenancy Type Data Separation Application Separation
  • 104. Multi-tenancy types Multi-tenancy Type Data Separation Application Separation Process Separation
  • 105. GaaE for Multi Tenancy types Product Multi-tenancy Type
  • 106. GaaE for Multi Tenancy types Product Multi-tenancy Type Google Apps Data Separation
  • 107. GaaE for Multi Tenancy types Product Multi-tenancy Type Google Apps Data Separation Google App Engine Application Separation
  • 108. GaaE for Multi Tenancy types Product Multi-tenancy Type Google Apps Data Separation Google App Engine Application Separation Google Compute Engine Process Separation
  • 109. Strategy Pros Cons Separating data Separating application Separating processes Let’s compare!
  • 110. Strategy Pros Cons Separating data  Normal Java Application Separating application Separating processes Let’s compare!
  • 111. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application Separating processes Let’s compare!
  • 112. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application Separating processes Let’s compare! 
  • 113. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application Separating processes  No shared state  Simple transition from existing Let’s compare! 
  • 114. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application Separating processes  No shared state  Simple transition from existing  JVM per tenant! Let’s compare! 
  • 115. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application Separating processes  No shared state  Simple transition from existing  JVM per tenant! Let’s compare!  
  • 116. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application  No shared state  Simple transition from existing Separating processes  No shared state  Simple transition from existing  JVM per tenant! Let’s compare!  
  • 117. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application  No shared state  Simple transition from existing Separating processes  No shared state  Simple transition from existing  JVM per tenant! Let’s compare!   
  • 118. Strategy Pros Cons Separating data  Normal Java Application  Manual state separation  Complicated and critical schema Separating application  No shared state  Simple transition from existing  Stay tuned… Separating processes  No shared state  Simple transition from existing  JVM per tenant! Let’s compare!   
  • 119. Separate WARs: Tomcat Root ┌── lib ├── webapps │ ├── customer-name │ ├── other-customer-name │ └── many other customers └── other dirs (bin, conf, log, etc)
  • 122. Separate WARs That was the PermGen. Yup.
  • 123. We love our toys
  • 124. We love our toys Artifactory-3.0.1.warwebappWEB-INFlib$du –m 51 .
  • 125.
  • 126. To the common ClassLoader!
  • 128. Will it work? ‹ Object state _________
  • 129. Will it work? ‹ Object state ‹ Static state _________
  • 130. “Static State Quest I” (Sierra, who else?)
  • 132. The Evil App. Context Holder Pattern
  • 133. The Evil App. Context Holder Pattern public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx; public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } }
  • 134. The Evil App. Context Holder Pattern public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx; public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } }
  • 135. The Evil App. Context Holder Pattern public class AppCtxHolder implements ApplicationContextAware { private static ApplicationContext ctx; public AppCtxHolder() { } public void setApplicationContext(ApplicationContext applicationContext) { ctx = applicationContext; } public static ApplicationContext getApplicationContext() { return ctx; } }
  • 137. Apache Wicket We love Wicket, cause it allows people who hate UI development to develop a UI, which people don’t hate
  • 139. Logger
  • 140. Logger
  • 146. Tomcat Root – Where are the JARs?┌── lib ├── webapps │ ├── customer-name │ │ ├── favicon.ico │ │ ├── META-INF │ │ └── WEB-INF │ │ ├── web.xml │ │ └── classes │ │ └── DUMMY.TXT │ ├── other-customer-name │ │ ├── favicon.ico │ │ │ └── META-INF │ │ └── WEB-INF │ └── many other customers └── other dirs (bin, conf, log, etc)
  • 147. Tomcat Root – Where are the JARs?┌── lib ├── webapps │ ├── customer-name │ │ ├── favicon.ico │ │ ├── META-INF │ │ └── WEB-INF │ │ ├── web.xml │ │ └── classes │ │ └── DUMMY.TXT │ ├── other-customer-name │ │ ├── favicon.ico │ │ │ └── META-INF │ │ └── WEB-INF │ └── many other customers └── other dirs (bin, conf, log, etc)
  • 148. Tomcat Root – Where are the JARs?┌── lib ├── webapps │ ├── customer-name │ │ ├── favicon.ico │ │ ├── META-INF │ │ └── WEB-INF │ │ ├── web.xml │ │ └── classes │ │ └── DUMMY.TXT │ ├── other-customer-name │ │ ├── favicon.ico │ │ │ └── META-INF │ │ └── WEB-INF │ └── many other customers └── other dirs (bin, conf, log, etc)
  • 149. Tomcat Root – Global lib folder ┌── lib │ ├── artifactory │ │ ├── artifactory-*.jar │ │ ├── jackrabbit-core-jfrog-2.2.8c.jar │ │ ├── spring-core-3.1.1.RELEASE.jar │ │ ├── wicket-core-1.5.3.jar │ │ └── other jars │ ├── catalina.jar │ ├── servlet-api.jar │ └── other jars ├── webapps └── other dirs (bin, conf, log, etc)
  • 150. Tomcat Root – Global lib folder ┌── lib │ ├── artifactory │ │ ├── artifactory-*.jar │ │ ├── jackrabbit-core-jfrog-2.2.8c.jar │ │ ├── spring-core-3.1.1.RELEASE.jar │ │ ├── wicket-core-1.5.3.jar │ │ └── other jars │ ├── catalina.jar │ ├── servlet-api.jar │ └── other jars ├── webapps └── other dirs (bin, conf, log, etc)
  • 151. Tomcat Root – Global lib folder ┌── lib │ ├── artifactory │ │ ├── artifactory-*.jar │ │ ├── jackrabbit-core-jfrog-2.2.8c.jar │ │ ├── spring-core-3.1.1.RELEASE.jar │ │ ├── wicket-core-1.5.3.jar │ │ └── other jars │ ├── catalina.jar │ ├── servlet-api.jar │ └── other jars ├── webapps └── other dirs (bin, conf, log, etc)
  • 152. Tomcat Root – Global lib folder ┌── lib │ ├── artifactory │ │ ├── artifactory-*.jar │ │ ├── jackrabbit-core-jfrog-2.2.8c.jar │ │ ├── spring-core-3.1.1.RELEASE.jar │ │ ├── wicket-core-1.5.3.jar │ │ └── other jars │ ├── catalina.jar │ ├── servlet-api.jar │ └── other jars ├── webapps └── other dirs (bin, conf, log, etc)
  • 153. Tomcat Root – Global lib folder ┌── lib │ ├── artifactory │ │ ├── artifactory-*.jar │ │ ├── jackrabbit-core-jfrog-2.2.8c.jar │ │ ├── spring-core-3.1.1.RELEASE.jar │ │ ├── wicket-core-1.5.3.jar │ │ └── other jars │ ├── catalina.jar │ ├── servlet-api.jar │ └── other jars ├── webapps └── other dirs (bin, conf, log, etc)
  • 158.
  • 159.
  • 161.
  • 162.
  • 163.
  • 164. Artifactory is built with Artifactory!
  • 173. It’s all about right tools
  • 176. Now we do it the other way around
  • 177. Actually, now we do it the right way!
  • 178. And we love what we got!
  • 179. And we love what we got!

Editor's Notes

  1. Files are never changed!
  2. Community success JFrog established in 2008 JavaOne 2009 Pro version Software as a Service (SaaS version) Heavily used by OSS community
  3. Community success JFrog established in 2008 JavaOne 2009 Pro version Software as a Service (SaaS version) Heavily used by OSS community
  4. Community success JFrog established in 2008 JavaOne 2009 Pro version Software as a Service (SaaS version) Heavily used by OSS community
  5. Community success JFrog established in 2008 JavaOne 2009 Pro version Software as a Service (SaaS version) Heavily used by OSS community
  6. Last slide by Baruch
  7. Last slide by Baruch
  8. 30 million requests/week Mostly in the Pacific Time Monday mornings 4 TB of artifacts
  9. Multi-tenancy Platform selection PaaS or IaaS DB schema updates
  10. Using standard Java WAR classloader isolation Creating standard WAR with dependencies in ‘lib’, classes in ‘classes’ Creating per-user database Done!
  11. Using standard Java WAR classloader isolation Creating standard WAR with dependencies in ‘lib’, classes in ‘classes’ Creating per-user database Done!
  12. Using standard Java WAR classloader isolation Creating standard WAR with dependencies in ‘lib’, classes in ‘classes’ Creating per-user database Done!
  13. Perfect Make sure the context is bounded to thread/war
  14. Was good New versions added static map of applications Lesson learned: Recheck on each version upgrade
  15. Was good New versions added static map of applications Lesson learned: Recheck on each version upgrade
  16. Was good New versions added static map of applications Lesson learned: Recheck on each version upgrade
  17. They are not shared – good! Need global management to adjust the size to match all the tenants Without global thread pool
  18. Logger fields are (almost) always static Can’t fight it
  19. We MITM-ed the LoggerFactory Keeps Loggers per application instead of static
  20. Examples Transaction ID Tomcat ClassLoader Solving race condition generates synchronous initialization
  21. Heap-wide temp file cleaner thread A static thread destroying the temp files of the other tenants Not as funny as it sounds
  22. Heap-wide temp file cleaner thread A static thread destroying the temp files of the other tenants Not as funny as it sounds
  23. Lucene and other cache solutions are adjusted for the whole heap size Use SoftReference based caches
  24. Custom Tomcat (our own jars in Tomcat’s lib) Custom Machine Image with our customized software and configuration
  25. Infrastructure as a Service
  26. Self Service Platform Registration Instance generation DB Backup Virtual Host WAR Customer account management
  27. 3 Versions 3 Deployment formats WAR ZIP RPM Lots of dependencies
  28. Рекурсивный слайд с мимимишным ребенком!!!
  29. Рекурсивный слайд с мимимишным ребенком!!!
  30. We eat our own dog food Artifactory is built with Artifactory
  31. Snapshots are built, tested & deployed on your build server of choice With Artifactory plugin Artifactory “snapshot promotion” to sandbox
  32. Deploying to production using Chef Other options: Puppet Build Server plugins ZT LiveRebel Scripts
  33. Continuously release to the cloud Once in a while “freezing” it to downloadable version
  34. Rapid feedback Host server access Developers must think big Standalone updates well tested by SaaS Standalone application is kind of LTS version
  35. Rapid feedback Host server access Developers must think big Standalone updates well tested by SaaS Standalone application is kind of LTS version