Date post: | 14-Jan-2015 |
Category: |
Technology |
Upload: | eberhard-wolff |
View: | 1,215 times |
Download: | 1 times |
Eberhard Wolff
Freelance Consultant / Trainer Head Technology Advisory Board
adesso AG
Eberhard Wolff - @ewolff
HISTORY & ORIGIN
Eberhard Wolff - @ewolff
History & Origin § Originally started as Ruby PaaS
§ Now: Support for Node.js, Clojure, Grails, Scala and Python
§ Acquired by Salesforce.com
Eberhard Wolff - @ewolff
Programming Model § Jetty, Tomcat or Play! web server § Worker for background activities
§ Standard Java Programming Model
Eberhard Wolff - @ewolff
Scaling / High Availability § Servers must be manually started for
scaling
§ Failed servers will be restarted
Eberhard Wolff - @ewolff
TOOLS
Eberhard Wolff - @ewolff
Command Line Tool § heroku § E.g. creates new applications § Other management functions
o addons o logs o etc.
Eberhard Wolff - @ewolff
Deployment § heroku tool creates an empty git repository § Deploy new versions with git § Build (maven) done by Heroku § Build automatically deployed § No specialized tools needed – git is enough § Integration with Atlassian Bamboo or Travis
possible
§ Alternative: WAR deployment
Eberhard Wolff - @ewolff
DEMO
Eberhard Wolff - @ewolff
Code Changes Took the Spring application Converted to PostgreSQL <bean class="java.net.URI" id="dbUrl"> <constructor-arg value="#{systemEnvironment['DATABASE_URL']}" /></bean><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="url" value="#{ 'jdbc:postgresql://' + @dbUrl.getHost() + í ':' + @dbUrl.getPort() + @dbUrl.getPath() }" /> <property name="username" value="#{ @dbUrl.getUserInfo().split(':')[0] }" /> <property name="password" value="#{ @dbUrl.getUserInfo().split(':')[1] }" /></bean>
Eberhard Wolff - @ewolff
Eberhard Wolff - @ewolff
Eberhard Wolff - @ewolff
Eberhard Wolff - @ewolff
Alternative: Eclipse PlugIn or Web
Eberhard Wolff - @ewolff
Full Stack Java EE No Java EE build pack available Would need WAR with Java EE libs Problem: JNDI DataSource
Eberhard Wolff - @ewolff
FLEXIBILITY
Eberhard Wolff - @ewolff
Flexibility § Dynos: processes run on Heroku § Procfile defines command line to start a
“Dyno” § Can be tuned and changed
§ Can create custom “Buildpack” to run entirely different environments
§ Available as Open Source e.g. for Ruby, PHP, Erlang, EmacsLisp…
Eberhard Wolff - @ewolff
Restrictions § Max source and build artifact size:
200MB § No sticky sessions § Dynos may not use more than
512MB RAM § I.e. max JVM heap about 400MB
Eberhard Wolff - @ewolff
PLATFORM AND OTHER SERVICES
Eberhard Wolff - @ewolff
Platform § Amazon Web Services § US East region § EU West beta § Proven foundation § Can use AWS resources as part of the
solution § 750h per month free
Eberhard Wolff - @ewolff
Other Services § Heroku supports Add-ons § Postgresql and memcached by
Heroku § Many 3rd party § E.g. relational databases, NoSQL
databases, logging, caches… § Configuration passed to service via
environment variables
Eberhard Wolff - @ewolff
Heroku: Highlights § Very flexible: Supports many
different environments
§ Broad range of additional services
§ Also covers build § https://github.com/ewolff/news-
application-heroku