Advantages and Disadvantages of Application Network Marketing Systems

Similar documents
DevOps Course Content

Assignment # 1 (Cloud Computing Security)

CHEF IN THE CLOUD AND ON THE GROUND

Linstantiation of applications. Docker accelerate

Installing and Administering VMware vsphere Update Manager

BMC Control-M for Cloud. BMC Control-M Workload Automation

Using New Relic to Monitor Your Servers

Project Documentation

DEPLOYING DRUPAL USING CAPISTRANO

Extending Remote Desktop for Large Installations. Distributed Package Installs

IBM WebSphere Application Server Version 7.0

Simple and powerful site deployment with capistrano

Secure Messaging Server Console... 2

CUMULUX WHICH CLOUD PLATFORM IS RIGHT FOR YOU? COMPARING CLOUD PLATFORMS. Review Business and Technology Series

Workflow Templates Library

Git - Working with Remote Repositories

CloudFTP: A free Storage Cloud

70-414: Implementing a Cloud Based Infrastructure. Course Overview

Proposal for Virtual Private Server Provisioning

Last time. Today. IaaS Providers. Amazon Web Services, overview

WINDOWS AZURE EXECUTION MODELS

Configuring High Availability for VMware vcenter in RMS Distributed Setup

Hands on Lab: Building a Virtual Machine and Uploading VM Images to the Cloud using Windows Azure Infrastructure Services

Getting Started with Sitecore Azure

TestOps: Continuous Integration when infrastructure is the product. Barry Jaspan Senior Architect, Acquia Inc.

Cloud Security with Stackato

Making System Administration Easier by Letting the Machines Do the Hard Work, Or, Becoming an Agile Sysadmin

Installing an open source version of MateCat

Rails Application Deployment. July Philly on Rails

Cloud Hosting. QCLUG presentation - Aaron Johnson. Amazon AWS Heroku OpenShift

Amazon Elastic Beanstalk

Skip the But it Works on My Machine Excuse with Vagrant

CSE543 Computer and Network Security Module: Cloud Computing

INASP: Effective Network Management Workshops

Cloud Computing: Making the right choices

Getting Started Guide: Deploying Puppet Enterprise in Microsoft Azure

What is Cloud Computing? Why call it Cloud Computing?

Chapter 9 PUBLIC CLOUD LABORATORY. Sucha Smanchat, PhD. Faculty of Information Technology. King Mongkut s University of Technology North Bangkok

Automating Big Data Benchmarking for Different Architectures with ALOJA

Data Centers and Cloud Computing

ArcGIS for Server: In the Cloud

vsphere Upgrade vsphere 6.0 EN

for Networks Installation Guide for the application on the server July 2014 (GUIDE 2) Lucid Rapid Version 6.05-N and later

Virtualization Management the ovirt way

SQL Server on Azure An e2e Overview. Nosheen Syed Principal Group Program Manager Microsoft

Application Release Automation (ARA) Vs. Continuous Delivery

Puppet Firewall Module and Landb Integration

Networks and Services

Building a Private Cloud Cloud Infrastructure Using Opensource

User's Guide - Beta 1 Draft

QMX ios MDM Pre-Requisites and Installation Guide

Implementing and Managing Windows Server 2008 Hyper-V

Docker : devops, shared registries, HPC and emerging use cases. François Moreews & Olivier Sallou

Why Engine Yard is better than Do it yourself

Managing your Red Hat Enterprise Linux guests with RHN Satellite

Cloud Computing for Control Systems CERN Openlab Summer Student Program 9/9/2011 ARSALAAN AHMED SHAIKH

Putting It All Together. Vagrant Drush Version Control

Capacity planning with Microsoft System Center

Deploy Your First CF App on Azure with Template and Service Broker. Thomas Shao, Rita Zhang, Bin Xia Microsoft Azure Team

Dell SupportAssist Version 2.0 for Dell OpenManage Essentials Quick Start Guide

Course 20533: Implementing Microsoft Azure Infrastructure Solutions

Monitoring Clearswift Gateways with SCOM

SUSE Manager in the Public Cloud. SUSE Manager Server in the Public Cloud

Identity and Access Management for the Cloud What You Need to Know About Managing Access to Your Clouds

Server & Cloud Management

Application Discovery Manager User s Guide vcenter Application Discovery Manager 6.2.1

PLUMgrid Toolbox: Tools to Install, Operate and Monitor Your Virtual Network Infrastructure

DevOps on AWS: Best Practices for Enterprise IT Teams

White Paper Server. SUSE Linux Enterprise Server 12 Modules

Version control tracks multiple versions. Configuration Management. Version Control. V Software Engineering Lecture 12, Spring 2008

VMTurbo Operations Manager 4.5 Installing and Updating Operations Manager

System Administration Training Guide. S100 Installation and Site Management

Installation Manual v2.0.0

DeployStudio Server Quick Install

System Center 2012 Suite SYSTEM CENTER 2012 SUITE. BSD BİLGİSAYAR Adana

for Networks Installation Guide for the application on the server August 2014 (GUIDE 2) Lucid Exact Version 1.7-N and later

Automated Configuration of Open Stack Instances at Boot Time

White Paper Take Control of Datacenter Infrastructure

Introduction to Cloud Computing

Setting up Radmind For an OSX Public Lab

Big data variety, 179 velocity, 179 volume, 179 Blob storage containers

DevOps with Containers. for Microservices

Source Code Management for Continuous Integration and Deployment. Version 1.0 DO NOT DISTRIBUTE

Implementing Microsoft Azure Infrastructure Solutions

McAfee Public Cloud Server Security Suite

VMware vcenter Update Manager Administration Guide

Cloudera Distributed Hadoop (CDH) Installation and Configuration on Virtual Box

Healthstone Monitoring System

Backing Up the CTERA Portal Using Veeam Backup & Replication. CTERA Portal Datacenter Edition. May 2014 Version 4.0

RES ONE Automation 2015 Task Overview

CLOUDFORMS Open Hybrid Cloud

Mac OS X Security Checklist:

ALERT installation setup

Google

Partek Flow Installation Guide

TU04. Best practices for implementing a BI strategy with SAS Mike Vanderlinden, COMSYS IT Partners, Portage, MI

CloudCenter Full Lifecycle Management. An application-defined approach to deploying and managing applications in any datacenter or cloud environment

Transcription:

Application Deployment Softwaretechnik II 2014/15 Thomas Kowark

Outline Options for Application Hosting Automating Environment Setup Deployment Scripting Application Monitoring Continuous Deployment and Scrum

Hosting Options Choice of hosting options is driven by a variety of parameters Initial setup effort, cost, and required expertise Operational costs and effort Targeted service level agreements (SLAs) Legal considerations (data privacy, liability, etc.) Low Effort Little Control High Effort High Control PaaS IaaS Dedicated Hosting Your own datacenter

Platform as a Service (Paas) Providers deliver Operating System, Execution environment, Database, Web Server, Monitoring, etc. Advantages Minimal effort and knowledge required for setup (see Heroku Doku, for example) Possibility to scale-up easily Disadvantages Usually fixed environment with little variation points Provider SLA targets might differ from yours (Downtime, Response Times, etc.) Limited Technical support Examples: Heroku, Force.com, Azure Compute, Google App Engine, (EngineYard)

Infrastructure as a Service Providers deliver virtual private servers with requested configuration Setup of execution environment, database servers, etc. is up to customers Advantages Flexibility w.r.t. execution environment Control over VM parameters Disadvantages Administration know-how and efforts required It s still a VM: Potential performance drops, Disk I/O, etc. Examples: Amazon EC2, Google Compute Engine, Rackspace Cloud, (EngineYard)

Dedicated Hosting Providers allocate dedicated hardware Setup similar to IaaS Advantages No virtualization-related performance issues More control over network configuration (e.g. racking machines up as needed) Dedicated SLAs Disadvantages High upfront cost Administration efforts Examples: Hetzner, GoDaddy, Rackspace, Host Europe

Setting up the Production Environment Scenario: Mixture of IaaS and Dedicated Hosting For Heroku Deployment, please refer to the Heroku documentation Own infrastructure is out of scope Step 1: Preparing the infrastructure Main Challenges: How to minimize the efforts required to repeatedly setup identical execution environments for your application? Without relying on administration gurus? Solutions: DevOps, i.e., a strong collaboration between the development and the operations team A strong bias towards automations

Where to start? Dedicated Servers and VPS not always feasible for initial experiments Possible solution: Virtual Box + Vagrant Vagrant (http://www.vagrantup.com) DSL for describing the basic parameters of a virtual machine Allows for simple recovery in case of VM errors Predefined and custom packaged boxes Possibility to create a multi-server setup Advantages: File size reduced in compared to sharing suspended VMs Same packages loaded with custom VM configurations

Creating a VM To create a new VM using Vagrant, simply run the following commands: $ mkdir newdir && cd newdir $ vagrant init lucid64 && vagrant up Vagrant in a nutshell Creating a Custom Base Box To cut down on initial box setup, create a customized base box. $ mkdir newdir && cd newdir $ vagrant init lucid64 && vagrant up # Now 'vagrant ssh' and make your changes, then log out of the VM vagrant init lucid64 && vagrant up $ vagrant package ssh + your desired changes $ vagrant box add your_new_base_box_name package.box vagrant package A Complete Vagrantfile vagrant box add your_new_base_box_name package.box Here s a Vagrantfile that uses a custom base box, shares a folder, forwards an additional port, and uses a private host-only network: Sample Vagrant File: vagrant/with_options/vagrantfile Vagrant::Config.run do config config.vm.customize ["modifyvm", :id, "--name", "app", "--memory", "512"] config.vm.box = "lucid64_with_ruby193" config.vm.host_name = "app" config.vm.forward_port 22, 2222, :auto => true config.vm.forward_port 80, 4567 config.vm.network :hostonly, "33.33.13.37" config.vm.share_folder "hosttmp", "/hosttmp", "/tmp" end repared exclusively for Jürgen Müller report erratum discuss

Next Step: Automate VM Configuration VM is up and running -> How to configure it automatically? Why not manually? Error prone, repetitive tasks Documentation has to be kept up-to-date Explicit knowledge transfer required if Admin changes One sample solution: Puppet (http://puppetlabs.com) Formalize server configuration into manifests Ensure that files, packages, and services are in the prescribed state Requires administration knowledge, i.e., services that are not specified will not start automagically Alternative: Chef (http://wiki.opscode.com/display/chef/home)

Or, to do a test run with more output, use --noop with --verbose. $ sudo puppet apply --noop --verbose manifests/site.pp Example: Install, Configure, and run Sample Apache Manifest Apache2 with Puppet Here s a sample Apache manifest that ensures Apache is installed, has a custom configuration file in place, and starts on boot: 3.11 For Future Reference puppetrails/apache_package_file_service/modules/apache2/manifests/init.pp class apache2 { package { Puppet Organization "apache2": ensure => present, Puppet before repositories => File["/etc/apache2/apache2.conf"] are organized by creating a collection o } module can be included in a node with an include directive file { apache2. "/etc/apache2/apache2.conf": Each module contains at least one manifest in th owner => root, optionally, group => some root, files in the files directory. Manifests contain c mode => 644, which source contain => "puppet:///modules/apache2/apache2.conf" resource declarations that are composed of typ } ters. service { "apache2": ensure => true, Running enable Puppet => true, } You can apply Puppet manifest to a system using the follow } subscribe => File["/etc/apache2/apache2.conf"] $ sudo puppet apply --verbose manifests/site.pp For

Tying the pieces together Describe your virtual machine with Vagrant With Puppet, you can Define the required packages for all required servers Install and configure necessary services Create the directory structure for your application Create configuration files (e.g., database.yml) Not touched here but also possible Use templates to create different files based on variables Control flow features (if-else and switch) Environments (staging vs. production) PuppetMaster (Central management of manifests that are automatically transferred to connected PuppetClients) PuppetDashboard

Environment is set How to deploy? Necessary steps: Checkout code changes Update your bundle Database migrations Restart application servers Optional: Restart index servers, setup new Cron Jobs, etc. Remember: Automation! Simple version: see.travis.yml Capistrano (https://github.com/capistrano/capistrano) Prepares the server for deployment Deploy the application as updates are made

declarations. This series of tasks starts with a namespace() declaration. This allows us to group the Passenger-related tasks logically, and it lets us declare other start Capistrano and stop tasks to manage other services without those declarations clashing with the Passenger task names. The stop and start tasks are empty since Passenger will serve up MassiveApp as soon as the code is in place, but the restart task contains a single command that signals Passenger to restart MassiveApp Capistrano executes tasks in a Unix shell via ssh so our new code will be loaded. And we need a task to copy our database.yml Once again: DSL to describe what needs to be done file into place, so we ll put that here as well as a before directive that will force that Setup: task to $ be cap called install as part of a deployment. capistrano/config/deploy.rb namespace :deploy do task :start do ; end task :stop do ; end desc "Restart the application" task :restart, :roles => :app, :except => { :no_release => true } do run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" end desc "Copy the database.yml file into the latest release" task :copy_in_database_yml do run "cp #{shared_path}/config/database.yml #{latest_release}/config/" end end before "deploy:assets:precompile", "deploy:copy_in_database_yml" We ll look at more tasks later, but that wraps up our initial tour of a minimal

Workflow with Vagrant, Puppet, and Capistrano Create the Virtual Machine from the predefined box -> correct operating system, Ruby installed, Puppet installed Apply the puppet manifests -> all required packages loaded, services running, directory structure for the app created (e.g. /var/my_app/) Run cap deploy:setup Directory structure for deployment /releases /shared /log /system /pids

Deploying with Capistrano 70 Chapter 4. Basic Capistrano $ cap deploy(:cold) deploy:cold deploy:update deploy:migrate deploy:start deploy:update_code deploy:symlink deploy:finalize_update Figure 2 The deploy:code task flow

get "#{current_path}/log/", "tmp/", :recursive => true For a small project, we usually have to deploy to only one environment, end namely, production. For larger projects, though, we ll have a quality assurance get will environment, connect to only and one sometimes server, but we ll for connecting have a performance to multiple testing servers, environment we can use and download. maybe However, a sales if demonstration we download files environment, with the same and, name generally, from we ll be multiple deploying servers, to they ll multiple just environments. overwrite each other. Fortunately, Capistrano supports a simple macro; it replaces $CAPISTRANO:HOST$ with the name of the host to We which like to Capistrano solve this is problem connecting. with So, a technique we can write called our Capistrano download task multistage. with Hooks this Multistage macro in lets the us destination specify a different filename, Capistrano and we ll get configuration a series of files for all each environment Up/Download with the we re appropriate deploying (e.g., retrieve host to name. while log continuing files) to share the common prefixed File settings Extended Capistrano Features (1/2) in config/deploy.rb. capistrano2/download.rb desc "Download the production log file" Older versions of Capistrano required that capistrano-ext be installed via a separate "#{current_path}/log/production.log",\ gem, but multistage was built into Capistrano as of version 2.10.0. task :download_log do download "$CAPISTRANO:HOST$.production.log" Since we re using a newer version than that, we ll jump right into configuring end multistage by modifying config/deploy.rb. Let s set two variables and require multistage s also deployment code. gives The us first an upload variable, command stages, for is transferring Array of all files the environments to remote that Capistrano Multistage servers. we ll Larger The be $CAPISTRANO:HOST$ projects deploying might to. The string have second multiple works with variable, environments, upload, default_stage, so we can e.g., give is for the each stage that server Capistrano quality a specific assurance, maintenance will deploy performance to page if we by run placing cap testing, deploy a few without etc. files in specifying a local directory. a stage. Lastly, we require the multistage extension. Here s how that looks at the top of $ ls tmp/maintenance_pages/ By setting multiple stages, we can reuse general commands maintenance.html.server1.com config/deploy.rb with two maintenance.html.server2.com stages, beta and production: and only alter what s needed in particular environments maintenance.html.server3.com set :stages, %w(beta production) set :default_stage, "beta" require 'capistrano/ext/multistage' Then we ll reference that file in a task that uses upload, and each server will receive the appropriate file. capistrano2/upload.rb desc "Upload the host-specific maintenance pages to each server" We ve told Capistrano that we have several stages, so now we need to define them. Let s create a new directory to hold our stage configuration; multistage

Extended Capistrano Features (2/2) Capture output from remote servers (e.g., free -m grep Mem) Capture streams from remote servers (e.g., tail on production.log) Using $ cap shell to run commands simultaneously on multiple servers (e.g., df -h) Should we really do these manually?

Monitoring your servers and application Keep an eye on server health and applications: Get alerts when infrastructure components fail or exceed predefined thresholds Examples: Nagios (http://nagios.org) newrelic (http://newrelic.com) Monitor application errors and performance bottlenecks Breakdowns for long-running requests Notifications upon application errors Good idea: Protocols for error fixing! Examples: airbrake (http://airbrake.io, open-source, selfhosted alternative: https://github.com/errbit/errbit), newrelic

Deploying 50 times a day? Continuous Deployment Advantages: Users get a sense of soemthing happening frequently Features are available on the spot Error isolation -> reduced downtime for error detection Prerequisites/Disadvantages Only feasible with extensive set of GOOD tests (see Chapter 3) Testing needs to be fast and continuous Deployment effort should be minimal (Capistrano, anybody?) and take reasonable amounts of time Not feasible for applications with high availability requirements

Continuous Deployment vs. Scrum How do 50 deployments a day fit into Scrums notion of Sprints? Some ideas (let s discuss): Intermediate Reviews for individual features by the PO Deploying to staging or testing systems becomes part of the definition of done Acceptance of features not only based on PO approval but user approval?