• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Deploying Java Applicationson Ec2
 

Deploying Java Applicationson Ec2

on

  • 9,794 views

Traditionally, computer hardware was a scarce, expensive resource. Running performance tests often meant scavenging for machines around the office. Today, however, things are different. With ...

Traditionally, computer hardware was a scarce, expensive resource. Running performance tests often meant scavenging for machines around the office. Today, however, things are different. With Amazon’s EC2, a cluster of servers is now just a web service call away.

In this presentation you will learn about design and implementation of Cloud Tools, which are a Groovy-based framework for deploying and testing Java EE applications on EC2. This framework provides a simple (internal) DSL for configuring a cluster (database + web container + apache), deploying a web application, and running performance tests using JMeter. You will learn about capabilities of EC2 and how to use it for development and deployment. We describe how we use Amazon S3 to work around EC2's lack of a persistent file system and avoid time-consuming uploads of WAR files. You will also learn how Groovy helped and hindered with the development of the Cloud Tools.

Statistics

Views

Total Views
9,794
Views on SlideShare
9,749
Embed Views
45

Actions

Likes
3
Downloads
219
Comments
1

6 Embeds 45

http://www.slideshare.net 33
http://www.techgig.com 6
http://www.brijj.com 3
http://localhost 1
http://www.linkedin.com 1
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Here is a step by step tutorial on how to deploy a java application on an ec2 instance - http://aws-musings.com/how-to-deploy-a-java-web-application-on-ec2-instance
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Deploying Java Applicationson Ec2 Deploying Java Applicationson Ec2 Presentation Transcript

    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Running Java applications on the Amazon Elastic Compute Cloud Chris Richardson Author of POJOs in Action Founder of Cloud Tools www.chrisrichardson.net Chris Richardson – Running Java applications on Amazon EC2 Slide 1
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Overall presentation goal Show how to use Amazon Elastic Compute Cloud for developing and deploying Java applications Chris Richardson — Running Java applications on Amazon EC2 Slide 2
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson About Chris Grew up in England and live in Oakland, CA p g , Over twenty years of software development experience Building object-oriented software since 1986 Using Java since 1996 Using J2EE since 1999 Author of POJOs in Action Speaker at JavaOne, SpringOne, NFJS, JavaPolis, Spring Experience, etc. Chair of the eBIG Java SIG in Oakland (www.ebig.org) (www ebig org) Run a consulting and training company that helps organizations build better software faster and deploy it on Amazon EC2 Founder of Cloud Tools, an open-source project for d l i f deploying J Java applications on Amazon EC2: li ti A EC2 http://code.google.com/p/cloudtools Chris Richardson — Running Java applications on Amazon EC2 Slide 3
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Agenda Cloud computing with Amazon EC2 Using Amazon EC2 Overview of Cloud Tools Developing on Amazon EC2 Deploying on Amazon EC2 A few thoughts about Groovy Chris Richardson — Running Java applications on Amazon EC2 Slide 4
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Computing Comp ting has come a long way a Present Past www.computermuseum.org.uk www.dell.com Yet we rarely have enough Chris Richardson — Running Java applications on Amazon EC2 Slide 5
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Cloud computing A pool of highly scalable, abstracted infrastructure that hosts your application, and is billed by consumption p By James Staten of Forrester Research Chris Richardson — Running Java applications on Amazon EC2 Slide 6
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Power generation Past Present Chris Richardson — Running Java applications on Amazon EC2 Slide 7
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Amazon-Style Cloud Computing Ama on St le Clo d Comp ting Elastic Compute Cloud (EC2) On-demand computing Elastic Block Storage (EBS) quot;SAN on demandquot; SAN demand Simple Storage Service (S3) Stores blobs of data Si Simple Queue S l Q Service (SQS) i Hosted queue-based messaging system SimpleDB Store data sets Pay per use Execute queries services managed by Amazon Chris Richardson — Running Java applications on Amazon EC2 Slide 8
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson What is Amazon EC2? Virtualized computing environment S i d h Server instances managed through a web service API h b i IP addresses and host names assigned dynamically Pay by the hour ($0.10-0.80/hour) + external bandwidth ($0 10-0 18/Gbyte) ($0.10 0.18/Gbyte) https://ec2.amazonaws.com/?Action=RunInstances <RunInstancesResponse> &ImageId=ami-398438493 … &MaxCount=3 </RunInstancesResponse> &MinCount=3 cer@arrakis ~ k $ ssh … root@ec2-67-202-41-150.compute-1.amazonaws.com Last login: Sun Dec 30 18:54:43 2007 from 71.131.29.181 [root@domU-12-31-36-00-38-23:~] Chris Richardson — Running Java applications on Amazon EC2 Slide 9
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Instance types Virtual Compute p 32// Memory y Storage $/hr g $/ Cores Units 64 /core* Bit Small 1 1 32 bit 1.7G 160G 0.10 High- 2 2.5 32 bit 1.7G 350G 0.20 CPU Medium Large 2 2 64 bit 7.5G 850G 0.40 Extra 4 2 64 bit 15G 1690G 0.80 Large High- 8 2.5 64 bit 7G 1690G 0.80 CPU XL * EC2 Compute Unit = 1.0-1.2 GHz 2007 Opteron or 2007 Xeon processor Chris Richardson — Running Java applications on Amazon EC2 Slide 10
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Operating systems Use Amazon provided Machine Image (AMI) 32-bit 32 bit Fedora Core 4 64-bit Fedora Core 6 Many 3rd parties have public AMIs Various Linux distributions E.g. Redhat, RightScale Sun provides OpenSolaris Windows is in beta: Windows Server 2003 ($0.125-$2/hour) Optional SQL Server Standard ($1.10-3.20/hour) Build your own Linux: Install applications starting with someone else's AMI and save it Create an AMI from scratch Chris Richardson — Running Java applications on Amazon EC2 Slide 11
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson One minor thing thing… Terminate your i t T i t instance ⇒ y your local data is lost. Either very good or very bad Chris Richardson — Running Java applications on Amazon EC2 Slide 12
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Elastic Block Storage Mountable storage volumes quot;On-demand SANquot; Size: 1 GB to 1 TB Mount on a single instance Create snapshots Stored in S3 Create new volumes from the snapshot Cost: $0.10/GByte/month $0.10 per 1 million I/O requests Chris Richardson — Running Java applications on Amazon EC2 Slide 13
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Elastic IP addresses Instance IP addresses are dynamically allocated on start up start-up Does not work well for publicly accessible services, e.g. a website Elastic IP addresses: Statically allocated addresses Associated with your account (max. 5) Att h d t an i t Attached to instance ( (e.g. public f i bli facing web b server) You configure DNS to resolve to the elastic IP address Pricing: P i i Non-attached Elastic IP address - $0.01/hour $0.10 per remap (if > 100 in a month) Chris Richardson — Running Java applications on Amazon EC2 Slide 14
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Regions and a ailabilit zones availability ones By default, your database master and slave could run on the same physical host! Regions: Geographically dispersed locations Currently only one Availability zone: Part of a region Engineered to be insulated from failure in other zones Specify availability zone when launching instances: Same zone as other instances for free data transfer Different zone for higher-availability g y SLA with 99.95% region availability Instances have external connectivity You can launch new instances Chris Richardson — Running Java applications on Amazon EC2 Slide 15
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson What is the Amazon Simple Storage Se ice Sto age Service (S3)? Flat storage model consisting of buckets and objects Bucket – has a name and contains objects Objects – has a key, stores 1 byte - 5G Object key can look like a path ☺ Cost: $0.15/GB-Month $0.10-0.18/GB of data transferred $0.00001 $0.000001/Web $0.00001-$0.000001/Web Service call Data transfers between EC2 and S3 are free of bandwidth charges Buckets and objects can be: Public – accessible by anyone Private – accessible to owner, acl member Chris Richardson — Running Java applications on Amazon EC2 Slide 16
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson S3 REST API PUT / HTTP/1.1 Create a bucket Host: <BucketName>.s3.amazonaws.com Authorization: AWS AWSAccessKeyId:Signature … PUT /<ObjectName> HTTP/1.1 Host: <BucketName>.s3.amazonaws.com Authorization: AWS AWSAccessKeyId:Signature Create an item in a bucket … …Bytes… GET /<ObjectName> HTTP/1.1 Host: <BucketName>.s3.amazonaws.com Download an item Authorization: AWS AWSAccessKeyId:Signature … DELETE /<ObjectName> HTTP/1.1 Host: <BucketName>.s3.amazonaws.com Authorization: AWS AWSAccessKeyId:Signature Delete an item … Chris Richardson — Running Java applications on Amazon EC2 Slide 17
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Using EC2 and S3 together AMIs are stored in S3 EC2 instances use S3: Use REST API Store database snapshots in S3 Use 3rd party Linux file system that stores data in S3 Store EBS volume snapshots in S3 Chris Richardson — Running Java applications on Amazon EC2 Slide 18
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson So what does this mean? For developers Immediate access to many servers Simplified setup Great for testing For deployment Eliminates capital expenses Reduces risk of success catastrophe R d i k f t t h Chris Richardson — Running Java applications on Amazon EC2 Slide 19
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Agenda Cloud computing with Amazon EC2 Using Amazon EC2 Overview of Cloud Tools Developing on Amazon EC2 Deploying on Amazon EC2 A few thoughts about Groovy Chris Richardson — Running Java applications on Amazon EC2 Slide 20
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Signing up for Amazon Web Services Se ices AWS access identifiers: Account Id Access Id Secret key Private key and certificate Only takes a few minutes Chris Richardson — Running Java applications on Amazon EC2 Slide 21
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson EC2 API and Tools SOAP and Query APIs Launch and manage instances etc Amazon provided CLI tools CLI equivalents of APIs AMI creation tools AWS CLI tools from Tim Kay CLI for S3 and EC2 f d Alternatives to Amazon CLI tools ElasticFox a o Awesome Firefox plugin Launch and manage instances Chris Richardson — Running Java applications on Amazon EC2 Slide 22
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Using the Query API https://ec2.amazonaws.com/?queryparameters... Mandatory parameters: M d Action – what to do AWSAccessKeyId – your access id Version – API version Timestamp – when request was made Expires – when it expires Signature – digest of parameters and secret key SignatureVersion – set to 1 Other parameters depend on Action Returns an XML document Chris Richardson — Running Java applications on Amazon EC2 Slide 23
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Example EC2 requests Action Parameters RunInstances MinCount, MaxCount, ImageId, InstanceType, … TerminateInstances InstanceId.n InstanceId n DescribeInstances InstanceId.n CreateSecurityGroup GroupName, GroupDescription AuthorizeSecurityGroupIngress GroupName, SourceSecurityGroupName, IpProtocol DeauthorizeSecurityGroupIngress h S G … … Chris Richardson — Running Java applications on Amazon EC2 Slide 24
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson aws - simple access to EC2 and S3 http://timkay.com/aws/ Easy to use CLI for EC2 and S3 Implemented in Perl Authenticates using access id and secret key stored in ~/.awssecret Chris Richardson — Running Java applications on Amazon EC2 Slide 25
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson ElasticFox– ElasticFox Firefox plugin Chris Richardson — Running Java applications on Amazon EC2 Slide 26
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Launching instances TIP: launch with a key y pair or else you won't have access Chris Richardson — Running Java applications on Amazon EC2 Slide 27
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Creating your own image Easier: Modify an existing AMI y g Launch AMI Configure: e.g. yum install … Harder: Build one from scratch Launch AMI Create a f l to contain OS installation C file ll Mount as a loopback file Install OS: yum –-installroot installroot Use AMI tools to bundle and upload to S3 Chris Richardson — Running Java applications on Amazon EC2 Slide 28
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Agenda Cloud computing with Amazon EC2 Using Amazon EC2 Overview of Cloud Tools Developing on Amazon EC2 Deploying on Amazon EC2 A few thoughts about Groovy Chris Richardson — Running Java applications on Amazon EC2 Slide 29
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Deploying a web application on EC2 Not rocket science but there are many servers to configure and multiple files to upload Chris Richardson — Running Java applications on Amazon EC2 Slide 30
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson What s What's Cloud Tools? Open source project 32 and 64 bit AMIs CentOS 5.10 Apache/Tomcat/MySQL/JMeter/JetS3t installed p y Q EC2Deploy framework Launches instances Configures Tomcat MySQL Apache Tomcat, MySQL, Deploys web applications Runs Jmeter tests Written in Groovy Maven and Grails plugins Quick and easy deployment to EC2 Chris Richardson — Running Java applications on Amazon EC2 Slide 31
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson EC2Deploy framework Provides a DSL for describing a cluster: Number of Tomcats, MySQL slaves Database scripts Location of web applications o a o o b app a o Launches EC2 instances Configures MySQL Configures T C fi Tomcat and deploys web dd l b applications Configures Apache to proxy the Tomcat servers Runs JMeter tests Chris Richardson — Running Java applications on Amazon EC2 Slide 32
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Example EC2Deploy Script def ec2 = new EC2(…) ClusterSpec clusterSpec = new ClusterSpec() .tomcats(1) .instanceType(EC2InstanceType.SMALL) .slaves(1) .webApp('/home/cer/…/ptrack', quot;ptrackquot;) ebApp('/home/cer/ /ptrack' .catalinaOptsBuilder({optsBuilder, databaseHost, slaves -> optsBuilder.arg(quot;-Xmx500mquot;) optsBuilder.prop(quot;jdbc.db.serverquot;, databaseHost)}) .schema(quot;ptrackquot;, [quot;ptrackquot;: quot;ptrackquot;], [ s c/test/ esou ces/testd [quot;src/test/resources/testdml1.sqlquot;, .sq , quot;src/test/resources/testdml2.sqlquot;]) SimpleCluster cluster = new SimpleCluster(ec2, clusterSpec) cluster.start() cluster.loadTest(quot;/home/cer/…/jmeter/SimpleTest.jmxquot;, [5, 10, 15]) cluster.stop() Chris Richardson — Running Java applications on Amazon EC2 Slide 33
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Domain model ClusterSpec <<façade>> SimpleCluster name stop() numberOfTomcats start() numberOfMySqlSlaves loadTest() ... WebApp context Jmeter TomcatServer MySqlServer ApacheServer explodedWar Application uploadToS3() updateTomcat() <<abstract>> Application EC2 EC2Server EC2InstanceState startPolling() waitUntilRunning() instanceId stopPolling() stop() state newServers(n) ssh(command) publicDnsName ... ... privateDnsName Uses Query API to run, terminate Executes ssh and and describe EC2Request scp commands instances Ssh Executor ssh(dns, command, …) executeRequest(params) Chris Richardson — Running Java applications on Amazon EC2 Slide 34
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Configuration DSL class ApacheServer extends Application { def configure() { writeFile fileName: quot;$apacheConfDir/cluster.confquot;, templateName: quot;/templates/cluster.confquot;, templateArgs: [tomcats: tomcats] exec quot;$apacheBinDir/apachectl restartquot; waitForHttp port:80, path: tomcats[0].contexts[0] } … class MySqlServer extends Application { } def d f configureAsMaster() { fi A M t () writeFile fileName: quot;/etc/my.cnfquot;, templateName: quot;/templates/master.my.cnfquot; restartService quot;mysqldquot; exec command: quot;mysql -u rootquot;, templateName: quot;/templates/createSchema.sqlquot;, templateArgs: [schemaSpec: schemaSpec] executeSchemaScripts() } } Chris Richardson — Running Java applications on Amazon EC2 Slide 35
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Efficiently uploading web applications, etc. applications etc Non-durable disks = upload the entire web application 20+ MBs of jars, etc. Takes a long time (over a DSL connection) Web W b application consists of: li i i f 90% 3rd party libraries – rarely changing 10% application code and content – only some of it changes h Use JetS3t to accelerate uploads Incremental upload of exploded web application to S3 bucket b k Incremental download to Tomcat webapps/ directory First upload is slow but subsequent uploads are fast Chris Richardson — Running Java applications on Amazon EC2 Slide 36
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Maven Plugin Goals: • deploy <plugin> • redeploy • stop <groupId>net.chrisrichardson</groupId> <groupId>net chrisrichardson</groupId> • dbsave • dbrestore <artifactId>cloudtools-maven-plugin</artifactId> • jmeter <configuration> <schemaName>ptrack</schemaName> <schemaUsers> <param>ptrack:ptrack</param> </schemaUsers> <catalinaOptsBuilder> { {builder, databasePrivateDnsName -> , builder.arg(quot;-Xmx1000mquot;) builder.prop(quot;jdbc.db.serverquot;, databasePrivateDnsName)} </catalinaOptsBuilder> </configuration> </plugin> mvn cloudtools:deploy Chris Richardson — Running Java applications on Amazon EC2 Slide 37
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Grails Plugin Packages E2Deploy as a Grails framework plugin Deploys a Grails application to EC2 $ grails install-plugin <path to plugin> $ grails cloud-tools-deploy g p y Chris Richardson — Running Java applications on Amazon EC2 Slide 38
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Agenda Cloud computing with Amazon EC2 Using Amazon EC2 Overview of Cloud Tools Developing on Amazon EC2 Deploying on Amazon EC2 A few thoughts about Groovy Chris Richardson — Running Java applications on Amazon EC2 Slide 39
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Collecting pe fo mance metrics performance met ics 70 7000 60 6000 50 5000 40 4000 TPS 30 3000 ART 20 2000 10 1000 0 1 2 4 8 16 32 64 0 R i Requires hardware Time consuming Measure transactions/second (TPS), average response time (ART), utilization, etc. Multiple test runs with different loads, number of servers, etc. Chris Richardson — Running Java applications on Amazon EC2 Slide 40
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Load testing with Cloud Tools Runs JMeter with <performanceReport> <cpus>1</cpus> <threads>10</threads> specified number <host> <name>database</name> <cpuUtil>3.2757014224403784</cpuUtil> of threads </host> <host> <name>tomcat0</name> Collects machine <cpuUtil>94.32473318917411</cpuUtil> </host> utilization stats <host> <name>apache</name> <cpuUtil>0.12280614752518504</cpuUtil> p / p </host> Generates reports <host> <name>jmeter</name> <cpuUtil>7.033683910704496</cpuUtil> Executes multiple </host> … <duration>557.943</duration> test runs <tps>10.753786677133686</tps> <art>916.6578333333</art> simultaneously </performanceReport> mvn cloudtools:jmeter -Dcloudtools.thread.count=1,4,8 Chris Richardson — Running Java applications on Amazon EC2 Slide 41
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Other kinds of testing Testing failover g Launch cluster Take down servers Test recovery scripts, e.g. MySQL slave- >master Testing database upgrades Launch cluster Install snapshot of production data Apply database migration script Verify that it works y Chris Richardson — Running Java applications on Amazon EC2 Slide 42
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Functional testing Tests can be slow, e.g. Web tests Database intensive tests Run tests in parallel on EC2 Multiple test drivers, app servers, DBs Relatively cheap: >$75/hour developer vs. $0.10/hour $0 10/hour machine Selenium Grid from Thoughtworks Open Source framework Runs Selenium web tests in parallel on EC2 Stay tuned for more general solutions Chris Richardson — Running Java applications on Amazon EC2 Slide 43
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Building on a fresh machine Debug builds that fail because of a missing dependency Maven dependency Manually installed 3rd party library Build on a fresh EC2 instance Great for open-source projects Chris Richardson — Running Java applications on Amazon EC2 Slide 44
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Agenda Cloud computing with Amazon EC2 Using Amazon EC2 Overview of Cloud Tools Developing on Amazon EC2 Deploying on Amazon EC2 A few thoughts about Groovy Chris Richardson — Running Java applications on Amazon EC2 Slide 45
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Deploying applications on Amazon Ama on EC2 Great for startups (especially those without a business model) Get up and running ready quickly No upfront hardware costs Scale S l up/down with load /d ith l d Reduces the risk of a success catastrophe Great f enterprises G t for t i No need to wait for corporate IT Use for short-term projects Cloud Computing Survey: IT Leaders See Big Promise, Have Big Security Questions www.cio.com/article/455832/Cloud_Computing_Survey_IT_Leaders_See_Big_Promise_Have_Big_Security_Questi ons Chris Richardson — Running Java applications on Amazon EC2 Slide 46
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Issues with AWS Security: Lack of PCI compliance Discomfort with sending customer data to a 3rd party Technology: Not yet suitable for extremely large relational databases Lack of very large machines, e.g. 64G memory Lack of multicast Financials: Cost of bandwidth Steady state costs > your own hardware Chris Richardson — Running Java applications on Amazon EC2 Slide 47
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Starter website - $ www.acme.com Elastic IP A EC2 Instance Apache Tomcat MySQL EBS Volume Chris Richardson — Running Java applications on Amazon EC2 Slide 48
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Highly available - $$ www.acme.com Elastic IP A Elastic IP B Availability Zone A Availability Zone B Apache Apache Tomcat Tomcat Tomcat Tomcat MySQL MySQL (slave) (Master) EBS Volume Chris Richardson — Running Java applications on Amazon EC2 Slide 49
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Batch processing architecture e.g. e g media transcoding Chris Richardson — Running Java applications on Amazon EC2 Slide 50
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Easy upgrades Clone production environment Apply upgrades Terminate old instances once you are sure that everything works Chris Richardson — Running Java applications on Amazon EC2 Slide 51
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Cloud bursting Host application on your own hardware Use AWS for short-term spikes e g use EC2 instances with slave DBs to e.g. handle read-only requests Periodic batch jobs E.g. content rendering/transformation Chris Richardson — Running Java applications on Amazon EC2 Slide 52
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Using AWS in your application o Simple Storage Service (S3) Stores blobs of data St bl b f d t Eg. Photo sharing website Store media Hand out URLs to S3 objects Simple Queue Service (SQS) Hosted queue-based messaging system q g g y Alternative to JMS Loosely coupling between systems SimpleDB Store data sets Execute queries Chris Richardson — Running Java applications on Amazon EC2 Slide 53
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Java libraries for AWS JetS3t Rich API for accessing S3 jets3t.dev.java.net/ Typica T i API for SQS, EC2, p SimpleDB code.google.com/p/typica SimpleJPA Subset of JPA on Simple DB code.google.com/p/simplej pa Chris Richardson — Running Java applications on Amazon EC2 Slide 54
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Agenda Cloud computing with Amazon EC2 Using Amazon EC2 Overview of Cloud Tools Developing on Amazon EC2 Deploying on Amazon EC2 A few thoughts about Groovy Chris Richardson — Running Java applications on Amazon EC2 Slide 55
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson About Groovy Object-oriented, dynamic language Object oriented, Java compatible Runs on the JVM Chris Richardson — Running Java applications on Amazon EC2 Slide 56
    • Getting Groovy code to work Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson can be frustrating Dynamic language = less information for IDE: Limited compile-time checking compile time Limited refactorings Limited completion Chris Richardson — Running Java applications on Amazon EC2 Slide 57
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Groovy fans say quot;write unit tests“ BUT BUT… Groovy When you have typos versus Java Chris Richardson — Running Java applications on Amazon EC2 Slide 58
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Unit tests don't always catch errors e o s void testPollStatus_discoveringNewServer() { mockEC2RequestExecutor.demand.executeRequst {params -> …. } def mockEC2Server = new MockFor(EC2Server.class) …. mockEC2Server.use { mockEC2RequestExecutor.use { ec2 = new EC2(awsProperties) ec2.pollStatus() public class EC2 { assertEquals 1, ec2.servers.size() } public pollStatus() { } def params = ['Action': } 'DescribeInstances'] def p = requestor.executeRequst(params) requestor executeRequst(params) class EC2RequestExecutor { …. } public Node executeRequest(Map … parameters) { } … } Same typo in test and in code Chris Richardson — Running Java applications on Amazon EC2 Slide 59
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Things I like: Java compatible like Ja a import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; class EC2RequestExecutor { Java-like syntax Use Java libraries Log logger = LogFactory.getLog(getClass()) public String calculateRFC2104HMAC(String data, String key) { try { SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(quot;UTF8quot;), HMAC SHA1 ALGORITHM) HMAC_SHA1_ALGORITHM) Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM) mac.init(signingKey) byte[] rawHmac = mac.doFinal(data.getBytes()) return new String(Base64.encodeBase64(rawHmac)) g( ( )) } catch (Exception e) { throw new RuntimeException(quot;Failed to generate HMAC : quot;, e) } } Chris Richardson — Running Java applications on Amazon EC2 Slide 60
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Groovy is concise and expressive e p essi e def configureAsMaster() { writeFile fileName: quot;/etc/my.cnfquot;, templateName: quot;/templates/master.my.cnfquot; restartService quot;mysqldquot; exec command: quot;mysql -u rootquot;, templateName: quot;/templates/createSchema.sqlquot;, /templates/createSchema.sql , No parens templateArgs: [schemaSpec: schemaSpec] Keyword parameters executeSchemaScripts() } class TomcatServer { tomcatServer.contexts No N get…() t () def getContexts() { webApps.context } } Chris Richardson — Running Java applications on Amazon EC2 Slide 61
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Closures def sortServers(servers) { servers.sort {a, b -> a.instanceId <=> b.instanceId} } public EC2Server findInstance(String instanceId) { def server = servers.find {instanceId == it.instanceId} { } if (server) return server else throw new RuntimeException(….) } Chris Richardson — Running Java applications on Amazon EC2 Slide 62
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson XML and GPath expressions <RunInstancesResponse> … <instancesSet> <item> <instanceId>i-4ef21327</instanceId> <imageId>ami-3795705e</imageId> <instanceState> <code>0</code> def client = new HttpClient() <name>pending</name> … </instanceState> def responseStream = <dnsName/> getMethod.getResponseBodyAsStream() getMethod getResponseBodyAsStream() … </RunInstancesResponse> def parser = new XmlParser(false, false) def response = parser.parseText(responseStream) def newServers = response instancesSet item collect { response.instancesSet.item.collect new EC2Server(this, awsProperties, ssh, it.instanceId[0].text(), it.instanceState[0].children()[1].value()[0]) } Chris Richardson — Running Java applications on Amazon EC2 Slide 63
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson GStrings and templates def schemaScript = quot;quot;quot; DROP SCHEMA IF EXISTS ${schemaSpec.name}; CREATE SCHEMA ${schemaSpec.name}; quot;quot;quot; String process(String templateName, Map params) { InputStream stream = getClass().getResourceAsStream(templateName) def engine = new groovy.text.SimpleTemplateEngine() engine.createTemplate(new InputStreamReader(stream)).make(params).toString() } … <% contexts.each {%>ProxyPass /$it balancer://mycluster/$it stickysession=jsessionid <%}%> <Proxy balancer://mycluster> <% tomcats.each {%>BalancerMember ajp://${it.hostPrivateDnsName}:8009 route=${it.jvmRoute} min=1 keepalive=On retry=5 <% } %> … Chris Richardson — Running Java applications on Amazon EC2 Slide 64
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Builders def report(String path, hosts, cpuCount, threadCount) { def builder = new groovy.xml.MarkupBuilder(new OutputStreamWriter(new FileOutputStream(path))) builder.performanceReport { cpus cpuCount threads threadCount hosts.entrySet().each { hostEntry -> host { name hostEntry.key <performanceReport> cpuUtil hostEntry value getAverageBusy() hostEntry.value.getAverageBusy() <cpus>1</cpus> } <threads>10</threads> } <host> requests { <name>database</name> timings.entrySet().sort{ a, b-> a.key <=> b.key}.each{ pair -> request { <cpuUtil>3.27</cpuUtil> name pair key pair.key </host> art pair.value.average() <host> errors pair.value.errorPercentage() <name>tomcat0</name> } <cpuUtil>94.32</cpuUtil> } } </host> d fd ti V l t tTi ))/1000 0 ((float)(endTime - startTime))/1000.0 def durationValue = ((fl t)( dTi … duration durationValue <duration>557.943</duration> def tpsValue = transactionCount/ durationValue <tps>10.753786677133686</tps> tps tpsValue <art>916.6578333333</art> art averageResponseTime() } </performanceReport> } Chris Richardson — Running Java applications on Amazon EC2 Slide 65
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Summary Cloud Computing Immediate access to many servers Pay as you go – no upfront investment/commitment required Easily scale up/down Cloud Tools Easy deployment and testing from Maven and Grails Configure multiple clusters g p Run JMeter tests in parallel Using Groovy Has some nice features Dynamic language features are double-edged sword We need better statically typed languages Chris Richardson — Running Java applications on Amazon EC2 Slide 66
    • Colorado Software Summit: October 19 – 24, 2008 © Copyright 2008, Chris Richardson Final thoughts Download Cloud Tools today: http://code.google.com/p/cloudtools Buy my book ☺ Send email: chris@chrisrichardson.net Visit my website: http://www.chrisrichardson.net Talk to me about consulting and training t i i Chris Richardson — Running Java applications on Amazon EC2 Slide 67