SlideShare ist ein Scribd-Unternehmen logo
1 von 89
Downloaden Sie, um offline zu lesen
Large-scaled Deploy
Over 100 Servers in 3 Minutes
Deployment strategy for next generation
你好朋友!
self.introduce
=>
{
name: “SHIBATA Hiroshi”,
nickname: “hsbt”,
title: “Chief engineer at GMO Pepabo, Inc.”,
commit_bits: [“ruby”, “rake”, “rubygems”, “rdoc”, “psych”,
“ruby-build”, “railsgirls”, “railsgirls-jp”],
sites: [“www.ruby-lang.org”, “bugs.ruby-lang.org”,
“rubyci.com”, “railsgirls.com”, “railsgirls.jp”],
}
I’m from Asakusa.rb
Asakusa.rb is one of the most active meet-ups in Tokyo, Japan.
@a_matsuda (Ruby/Rails committer, RubyKaigi chief organizer)
@kakutani (RubyKaigi organizer)
@ko1 (Ruby committer)
@takkanm (Ruby/Rails programmer)
@hsbt (Me!)
and many Rubyists in Japan.
Call for Speakers
Deployment
Strategy for
Next Generation
2014/11/xx
CEO and CTO said…
CEO: “We are going to promote our service on TV CM! at
Feb, 2015”
CTO: “Do make out service to scalable, redundant, high-
performance architecture! in 3 months”
Me: “Yes, I do it!!1”
Our service status at 2014/11
It’s simply Rails Application with IaaS (not Heroku)
• 6 application servers
• To use capistrano 2 for deployment
• Mixed background job, application processes and
batch tasks
😨
Our service issue
Do scale-out
Do scale-out with automation!
Do scale-out with rapid automation!!
Do scale-out with extremely rapid automation!!!
Do scale-out
with automation
Concerns of bootstrap instructions
Typical scenario of server set-up for scale out.
• OS boot
• OS Configuration
• Provisioning with puppet/chef
• Setting up to capistrano
• Deploy rails application
• QA Testing
• Added load balancer (= Service in)
Web operation is manual instructions
• We have been created OS Image called “Golden Image”
from running server
• Web operations such as os configuration and
instances launch are manual instruction.
• Working time is about 4-6 hours
• It’s blocker for scale-out largely.
No ssh
We added “No SSH” into our rule of Web operation
Background of “No SSH”
In large scale service, 1 instance is like a “1 process” in Unix
environments.
We didn’t attach process using gdb usually.
• We don’t access instance via ssh
We didn’t modify program variables in memory usually.
• We don’t modify configuration on instance
We can handle instance/process status using api/signal only.
puppet
Provision with puppet
We have puppet manifests for provision. but It’s sandbox status.
• It based on old Scientific Linux
• Some manifest is broken…
• Service developers didn’t use puppet for production
At first, We fixed all of manifests and enabled to deploy to
production environments.
% ls **/*.pp | xargs wc -l | tail -1
5546 total
To use puppetmasterd
• We choice master/agent model
• It’s large scaled architecture because we didn’t need to deploy
puppet manifests each servers.
• We already have puppetmasterd manifests written by puppet
using passenger named rails application server.
https://docs.puppetlabs.com/guides/passenger.html
cloud-init
What’s cloud-init
“Cloud-init is the defacto multi-distribution package that handles
early initialization of a cloud instance.”
https://cloudinit.readthedocs.org/en/latest/
• We(and you) already used cloud-init for customizing to
configuration of OS at initialization process on IaaS
• It has few documents for our use-case…
Basic usage of cloud-init
We only use OS configuration. Do not use “run_cmd” section.
#cloud-config
repo_update: true
repo_upgrade: none
packages:
- git
- curl
- unzip
users:
- default
locale: ja_JP.UTF-8
timezone: Asia/Tokyo
Image creation with itself
We use IaaS API for image creation with cloud-init userdata.
We can create OS Image using cloud-init and provisioned puppet
when boot time of instance.
puppet agent -t
rm -rf /var/lib/cloud/sem /var/lib/cloud/instances/*
aws ec2 create-image --instance-id `cat /var/lib/cloud/data/instance-id` --name
www_base_`date +%Y%m%d%H%M`
Do scale-out
with rapid
automation
Upgrade
Rails app
Upgrading Rails 4
• I am very good at “Rails Upgrading”
• Deploying in Production was performed with my colleague
named @amacou
% g show c1d698e
commit c1d698ec444df1c137a301e01f59e659593ecf76
Author: amacou <amacou.abf@gmail.com>
Date: Mon Dec 15 18:22:34 2014 +0900
Revert "Revert "Revert "Revert "[WIP] Rails 4.1.X へのアップグレード""""
What’s new for capistrano3
“A remote server automation and deployment tool written in
Ruby.”
http://capistranorb.com/
Example of Capfile:
We rewrite own capstrano2 tasks to capistrano3 convention
require 'capistrano/bundler'
require 'capistrano/rails/assets'
require 'capistrano3/unicorn'
require 'capistrano/banner'
require 'capistrano/npm'
require 'slackistrano'
Do not use hostname/ip dependency
We discarded dependencies of hostname and ip address.
Use API of IaaS for our use-case.
config.ru:
10: defaults = `hostname`.start_with?('job') ?
config/database.yml:
37: if `hostname`.start_with?(‘search')
config/unicorn.conf:
6: if `hostname`.start_with?('job')
Rails bundle
Bundled package of Rails application
Prepared to standalone Rails application with rubygems and
precompiled assets
Part of capistrano tasks:
$ bundle exec cap production archive_project ROLES=build
desc "Create a tarball that is set up for deploy"
task :archive_project =>
[:ensure_directories, :checkout_local, :bundle, :npm_install, :bower_install,
:asset_precompile, :create_tarball, :upload_tarball, :cleanup_dirs]
Distributed rails package
build server
rails bundle
object
storage
(s3)
application
server
application
server
application
server
application
server
capistrano
# Fetch latest application package
RELEASE=`date +%Y%m%d%H%M`
ARCHIVE_ROOT=‘s3://rails-application-bundle/production/'
ARCHIVE_FILE=$(
aws s3 ls $ARCHIVE_ROOT | grep -E 'application-.*.tgz' | awk '{print $4}' | sort -r | head -n1
)
aws s3 cp "${ARCHIVE_ROOT}${ARCHIVE_FILE}" /tmp/rails-application.tar.gz
# Create Directories of capistrano convention
(snip)
# Invoke to chown
(snip)
We extracted rails bundle when instance creates self image with
clout-init.
Integration of image creation
How to test instance behavior
We need to guarantee http
status from instance response.
We removed package version
control from our concerns.
thor
What’s thor
“Thor is a toolkit for building powerful command-line interfaces.
It is used in Bundler, Vagrant, Rails and others.”
http://whatisthor.com/
module AwesomeTool
class Cli < Thor
class_option :verbose, type: :boolean, default: false
desc 'instances [COMMAND]', ‘Desc’
subcommand('instances', Instances)
end
end
module AwesomeTool
class Instances < Thor
desc 'launch', ‘Desc'
method_option :count, type: :numeric, aliases: "-c", default: 1
def launch
(snip)
end
end
end
We can scale out with one command via our cli tool
All of web operations should be implement by command line tools
Scale out with cli command
$ some_cli_tool instances launch -c …
$ some_cli_tool mackerel fixrole
$ some_cli_tool scale up
$ some_cli_tool deploy blue-green
How to automate instructions
•Write real-world instructions
•Pick instruction for automation
•DO automation
Do scale-out
with extremely
rapid automation
Concerns of bootstrap time
Typical scenario of server set-up for scale out.
• OS boot
• OS Configuration
• Provisioning with puppet/chef
• Setting up to capistrano
• Deploy rails application
• Added load balancer (= Service in)
We need to enhance to bootstrap time extremely.
Concerns of bootstrap time
Slow operation
• OS boot
• Provisioning with puppet/chef
• Deploy rails application
Fast operation
• OS Configuration
• Setting up to capistrano
• Added load balancer (=
Service in)
Check point of Image creation
Slow operation
• OS boot
• Provisioning with puppet/chef
• Deploy rails application
Fast operation
• OS Configuration
• Setting up to capistrano
• Added load balancer (=
Service in)
Step1
Step2
2 phase strategy
• Official OS image
• Provided from platform like AWS, Azure, GCP, OpenStack…
• Minimal image(phase 1)
• Network, User, Package configuration
• Installed puppet/chef and platform cli-tools.
• Role specified(phase 2)
• Only boot OS and Rails application
Packer
Use-case of Packer
I couldn’t understand use-case of packer. Is it Provision tool?
Deployment tool?
inside image creation with Packer
• Packer configuration
• JSON format
• select instance size, block volume
• cloud-init
• Basic configuration of OS
• only default module of cloud-init
• provisioner
• shell script :)
• Image creation
• via IaaS API
minimal image
cloud-init provisioner
#cloud-config
repo_update: true
repo_upgrade: none
packages:
- git
- curl
- unzip
users:
- default
locale: ja_JP.UTF-8
timezone: Asia/Tokyo
rpm -ivh http://yum.puppetlabs.com/
puppetlabs-release-el-7.noarch.rpm
yum -y update
yum -y install puppet
yum -y install python-pip
pip install awscli
sed -i 's/name: centos/name: cloud-user/' /etc/
cloud/cloud.cfg
echo 'preserve_hostname: true' >> /etc/cloud/
cloud.cfg
web application image
cloud-init provisioner
#cloud-config
preserve_hostname: false
puppet agent -t
# Fetch latest rails application
(snip)
# enabled cloud-init again
rm -rf /var/lib/cloud/sem /var/lib/cloud/instances/*
Integration tests with Packer
We can tests results of Packer running. (Impl by @udzura)
"provisioners": [
(snip)
{
"type": "shell",
"script": "{{user `project_root`}}packer/minimal/provisioners/run-serverspec.sh",
"execute_command": "{{ .Vars }} sudo -E sh '{{ .Path }}'"
}
]
yum -y -q install rubygem-bundler
cd /tmp/serverspec
bundle install --path vendor/bundle
bundle exec rake spec
packer configuration
run-serverspec.sh
We created cli tool with thor
We can run packer over thor code with advanced options.
$ some_cli_tool ami build-minimal
$ some_cli_tool ami build-www
$ some_cli_tool ami build-www —init
$ some_cli_tool ami build-www -a ami-id
module SomeCliTool
class Ami < Thor
method_option :ami_id, type: :string, aliases: "-a"
method_option :init, type: :boolean
desc 'build-www', 'wwwの最新イメージをビルドします'
def build_www
…
end
end
end
Scale-out
Everything
What’s blocker for scale-out
• Depends on manual instruction of human
• Depends on hostname or ip address architecture and
tool
• Depends on persistent server or workflow like
periodical jobs
• Depends on persistent storage
consul
Nagios
We used nagios for monitoring to service and instance status.
But we have following issue:
• nagios don’t support dynamic scaled architecture
• Complex syntax and configuration
We decided to remove nagios for service monitoring.
consul + consul-alert
We use consul and consul-alerts for
process monitoring.
https://github.com/hashicorp/consul
https://github.com/AcalephStorage/
consul-alerts
It provided to discover to new
instances automatically and alert
mechanism with slack integration.
mackerel
munin
We used munin for resource monitoring
But munin doesn’t support dynamic scaled architecture. We
decided to use mackerel.io instead of munin.
Mackerel
“A Revolutionary New Kind ofApplication Performance
Management. Realize the potential in Cloud Computingby
managing cloud servers through “roles””
https://mackerel.io
Configuration of mackrel
You can added instance to role(server group) on mackerel with
mackerel-agent.conf
And You can made your specific plugin for mackerel. It’s simple
convention and compatible for munin and nagios.
Many of Japanese developer made useful mackerel plugin written
by Go/mruby.
[user@www ~]$ cat /etc/mackerel-agent/mackerel-agent.conf
apikey = “your_api_key”
role = [ "service:web" ]
fluentd
access_log aggregator with td-agent
We need to collect
access-log of all
servers with scale-out.
https://github.com/
fluent/fluentd/
We used fluentd to
collect and aggregate.
<match nginx.**>
type forward
send_timeout 60s
recover_wait 10s
heartbeat_interval 1s
phi_threshold 16
hard_timeout 60s
<server>
name aggregate.server
host aggregate.server
weight 100
</server>
<server>
name aggregate2.server
host aggregate2.server
weight 100
standby
</server>
</match>
<match nginx.access.*>
type copy
<store>
type file
(snip)
</store>
<store>
type tdlog
apikey api_key
auto_create_table true
database database
table access
use_ssl true
flush_interval 120
buffer_path /data/tmp/td-agent-td/access
</store>
</match>
Scheduler
with sidekiq
Remove to batch scheduler
We need to use `batch` role for scheduled rake task. We have to
create some payments transaction, send promotion mail, indexing
search items and more.
We use `whenever` and cron on persistent state server. but It
could not scale-out largely and It’s SPOF.
I use sidekiq-scheduler and consul cluster instead of cron for
above problems.
scheduler architecture
sidekiq-scheduler (https://github.com/moove-it/sidekiq-
scheduler) allows periodical job mechanism to sidekiq server.
We need to specify a enqueue server in sidekiq workers. I elected
enqueue server used consul cluster.
sidekiq
worker
sidekiq
worker
sidekiq
worker
sidekiq
worker
sidekiq
worker
sidekiq
worker
sidekiq
worker
sidekiq
worker
sidekiq
worker
sidekiq
worker
&
scheduler
redis
redis
Test Everything
Container CI
Drone CI
“CONTINUOUS INTEGRATION FOR GITHUB AND BITBUCKET THAT
MONITORS YOUR CODE FOR BUGS”
https://drone.io/
We use Drone CI on our Openstack platform named “nyah”
Container based CI with Rails
We use Drone CI(based docker) with Rails Application. We need to
separate Rails stack to following containers.
• rails(ruby and nodejs)
• redis
• mysql
• elasticsearch
And We invoke concurrent test processes used by test-queue and
teaspoon.
Infra CI
What's Infra CI
We test server status such as lists of installed packages, running
processes and configuration details continuously.
Puppet + Drone CI(with Docker) + Serverspec = WIN
We can refactoring puppet manifests aggressively.
Serverspec
“RSpec tests for your servers configured
by CFEngine, Puppet, Ansible, Itamae or anything else.”
http://serverspec.org/
% rake -T
rake mtest # Run mruby-mtest
rake spec # Run serverspec code for all
rake spec:base # Run serverspec code for base.minne.pbdev
rake spec:batch # Run serverspec code for batch.minne.pbdev
rake spec:db:master # Run serverspec code for master db
rake spec:db:slave # Run serverspec code for slave db
rake spec:gateway # Run serverspec code for gateway.minne.pbdev
(snip)
Refactoring puppet manifets
We replaced “puppetserver”
written by Clojure.
We enabled future-parser. We
fixed all of warnings and
syntax error.
We added and removed
manifests everyday.
Switch Scientific Linux 6 to CentOS 7
We can refactoring to puppet manifests with infra CI.
We added case-condition for SL6 and Centos7
if $::operatingsystemmajrelease >= 6 {
$curl_devel = 'libcurl-devel'
} else {
$curl_devel = 'curl-devel'
}
All of processes under the systemd
We have been used daemontools or supervisord to run
background processes.
These tools are friendly for programmer. but we need to wait to
invoke their process before invoking our application processes
like unicorn, sidekiq and other processes.
We use systemd for invoke to our application processes directly.
It’s simple syntax and fast.
Pull strategy
Deployment
stretcher
“A deployment tool with Consul / Serf event.”
https://github.com/fujiwara/stretcher
object
storage
(s3)
application
server
application
server
application
server
application
server
consul
consul consul
consul
capistrano-strecher
It provides following tasks for pull strategy deployment.
• Create archive file contained Rails bundle
• Put archive file to blob storage like s3
• Invoke consul event each stages and roles
You can use pull strategy deployment easily by capistrano-
stretcher.
https://github.com/pepabo/capistrano-stretcher
Architecture of pull strategy deployments
object
storage
(s3)
application
server
application
server
application
server
application
server
consul
consul consul
consul
build
server
consul
capistrano
OpenStack
Why we choose OpenStack?
OpenStack is widely used big company like Yahoo!Japan, DeNA
and NTT Group in Japan.
We need to reduce running cost of IaaS. We tried to build
OpenStack environment on our bare-metal servers.
(snip)
Finally, We’ve done to cut running cost by 50%
yaocloud and tool integration
We made Ruby client for OpenStack named Yao.
https://github.com/yaocloud/yao
It likes aws-sdk on AWS. We can manipulate compute resource
using ruby with Yao.
$ Yao::Tenant.list
$ Yao::SecurityGroup.list
$ Yao::User.create(name: name, email: email, password: password)
$ Yao::Role.grant(role_name, to: user_hash["name"], on: tenant_name)
Multi DC deployments in 3 minutes
object
storage
(s3)
application
server
application
server
application
server
consul consul
consul
build
server
consul
capistrano
application
server
application
server
consul
consul
build
server
consul
DC-a

(AWS)
DC-b

(OpenStack)
Blue-Green
Deployment
Instructions of Blue-Green deployment
Basic concept is following instructions.
1. Launch instances using OS imaged created from Packer
2. Wait to change “InService” status
3. Terminate old instances
That’s all!!1
http://martinfowler.com/bliki/BlueGreenDeployment.html
Dynamic upstream with load balancer
ELB
• Provided by AWS, It’s best choice for B-G deployment
• Can handle only AWS instances
nginx + consul-template
• Change upstream directive used consul and consul-template
ngx_mruby
• Change upstream directive used mruby
Slack integration of consul-template
Example code of thor
old_instances = running_instances(load_balancer_name)
invoke Instances, [:launch], options.merge(:count => old_instances.count)
catch(:in_service) do
sleep_time = 60
loop do
instances = running_instances(load_balancer_name)
throw(:in_service) if (instances.count == old_instances.count * 2) &&
instances.all?{|i| i.status == 'InService'}
sleep sleep_time
sleep_time = [sleep_time - 10, 10].max
end
end
old_instances.each do |oi|
oi.delete
end
Summary
• We can handle TV CM and TV Show used by scale-out servers.
• We can enhance infrastructure every day.
• We can deploy rails application over the 100 servers every day.
• We can upgrade OS or Ruby or middleware every day
Yes, We can!

Weitere ähnliche Inhalte

Was ist angesagt?

The details of CI/CD environment for Ruby
The details of CI/CD environment for RubyThe details of CI/CD environment for Ruby
The details of CI/CD environment for RubyHiroshi SHIBATA
 
20141210 rakuten techtalk
20141210 rakuten techtalk20141210 rakuten techtalk
20141210 rakuten techtalkHiroshi SHIBATA
 
How to develop Jenkins plugin using to ruby and Jenkins.rb
How to develop Jenkins plugin using to ruby and Jenkins.rbHow to develop Jenkins plugin using to ruby and Jenkins.rb
How to develop Jenkins plugin using to ruby and Jenkins.rbHiroshi SHIBATA
 
Dependency Resolution with Standard Libraries
Dependency Resolution with Standard LibrariesDependency Resolution with Standard Libraries
Dependency Resolution with Standard LibrariesHiroshi SHIBATA
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the worldHiroshi SHIBATA
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Hiroshi SHIBATA
 
How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?Hiroshi SHIBATA
 
OSS Security the hard way
OSS Security the hard wayOSS Security the hard way
OSS Security the hard wayHiroshi SHIBATA
 
Gate of Agile Web Development
Gate of Agile Web DevelopmentGate of Agile Web Development
Gate of Agile Web DevelopmentKoichi ITO
 
20140419 oedo rubykaigi04
20140419 oedo rubykaigi0420140419 oedo rubykaigi04
20140419 oedo rubykaigi04Hiroshi SHIBATA
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Hiroshi SHIBATA
 
The Future of library dependency management of Ruby
 The Future of library dependency management of Ruby The Future of library dependency management of Ruby
The Future of library dependency management of RubyHiroshi SHIBATA
 
20140425 ruby conftaiwan2014
20140425 ruby conftaiwan201420140425 ruby conftaiwan2014
20140425 ruby conftaiwan2014Hiroshi SHIBATA
 
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)ngotogenome
 

Was ist angesagt? (20)

The details of CI/CD environment for Ruby
The details of CI/CD environment for RubyThe details of CI/CD environment for Ruby
The details of CI/CD environment for Ruby
 
Practical ngx_mruby
Practical ngx_mrubyPractical ngx_mruby
Practical ngx_mruby
 
How DSL works on Ruby
How DSL works on RubyHow DSL works on Ruby
How DSL works on Ruby
 
20141210 rakuten techtalk
20141210 rakuten techtalk20141210 rakuten techtalk
20141210 rakuten techtalk
 
How to develop Jenkins plugin using to ruby and Jenkins.rb
How to develop Jenkins plugin using to ruby and Jenkins.rbHow to develop Jenkins plugin using to ruby and Jenkins.rb
How to develop Jenkins plugin using to ruby and Jenkins.rb
 
Dependency Resolution with Standard Libraries
Dependency Resolution with Standard LibrariesDependency Resolution with Standard Libraries
Dependency Resolution with Standard Libraries
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the world
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0
 
How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?How to develop the Standard Libraries of Ruby?
How to develop the Standard Libraries of Ruby?
 
RubyGems 3 & 4
RubyGems 3 & 4RubyGems 3 & 4
RubyGems 3 & 4
 
OSS Security the hard way
OSS Security the hard wayOSS Security the hard way
OSS Security the hard way
 
Gate of Agile Web Development
Gate of Agile Web DevelopmentGate of Agile Web Development
Gate of Agile Web Development
 
20140419 oedo rubykaigi04
20140419 oedo rubykaigi0420140419 oedo rubykaigi04
20140419 oedo rubykaigi04
 
20140918 ruby kaigi2014
20140918 ruby kaigi201420140918 ruby kaigi2014
20140918 ruby kaigi2014
 
Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0Gemification for Ruby 2.5/3.0
Gemification for Ruby 2.5/3.0
 
The Future of library dependency management of Ruby
 The Future of library dependency management of Ruby The Future of library dependency management of Ruby
The Future of library dependency management of Ruby
 
20140425 ruby conftaiwan2014
20140425 ruby conftaiwan201420140425 ruby conftaiwan2014
20140425 ruby conftaiwan2014
 
What's new in RubyGems3
What's new in RubyGems3What's new in RubyGems3
What's new in RubyGems3
 
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
Running Ruby on Solaris (RubyKaigi 2015, 12/Dec/2015)
 
Gems on Ruby
Gems on RubyGems on Ruby
Gems on Ruby
 

Andere mochten auch

成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
GitHub Enterprise with GMO Pepabo
GitHub Enterprise with GMO PepaboGitHub Enterprise with GMO Pepabo
GitHub Enterprise with GMO PepaboHiroshi SHIBATA
 
Practical Testing of Ruby Core
Practical Testing of Ruby CorePractical Testing of Ruby Core
Practical Testing of Ruby CoreHiroshi SHIBATA
 
The story of language development
The story of language developmentThe story of language development
The story of language developmentHiroshi SHIBATA
 
Advanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutesAdvanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutesHiroshi SHIBATA
 
師弟登壇2015 GMOペパボ @hfm
師弟登壇2015 GMOペパボ @hfm師弟登壇2015 GMOペパボ @hfm
師弟登壇2015 GMOペパボ @hfmTakahiro Okumura
 
Usecase examples of Packer
Usecase examples of Packer Usecase examples of Packer
Usecase examples of Packer Hiroshi SHIBATA
 
技術的負債との付き合い方
技術的負債との付き合い方技術的負債との付き合い方
技術的負債との付き合い方Hiroshi SHIBATA
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみたKazuto Kusama
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 

Andere mochten auch (12)

成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
High Performance tDiary
High Performance tDiaryHigh Performance tDiary
High Performance tDiary
 
GitHub Enterprise with GMO Pepabo
GitHub Enterprise with GMO PepaboGitHub Enterprise with GMO Pepabo
GitHub Enterprise with GMO Pepabo
 
Practical Testing of Ruby Core
Practical Testing of Ruby CorePractical Testing of Ruby Core
Practical Testing of Ruby Core
 
The story of language development
The story of language developmentThe story of language development
The story of language development
 
Advanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutesAdvanced technic for OS upgrading in 3 minutes
Advanced technic for OS upgrading in 3 minutes
 
師弟登壇2015 GMOペパボ @hfm
師弟登壇2015 GMOペパボ @hfm師弟登壇2015 GMOペパボ @hfm
師弟登壇2015 GMOペパボ @hfm
 
Usecase examples of Packer
Usecase examples of Packer Usecase examples of Packer
Usecase examples of Packer
 
技術的負債との付き合い方
技術的負債との付き合い方技術的負債との付き合い方
技術的負債との付き合い方
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみた
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
Api gatewayの話
Api gatewayの話Api gatewayの話
Api gatewayの話
 

Ähnlich wie Large-scaled Deploy Over 100 Servers in 3 Minutes

Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby TeamArto Artnik
 
Docker presentasjon java bin
Docker presentasjon java binDocker presentasjon java bin
Docker presentasjon java binOlve Hansen
 
Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)DECK36
 
Docker Swarm secrets for creating great FIWARE platforms
Docker Swarm secrets for creating great FIWARE platformsDocker Swarm secrets for creating great FIWARE platforms
Docker Swarm secrets for creating great FIWARE platformsFederico Michele Facca
 
A Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy SystemA Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy Systemadrian_nye
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.jsorkaplan
 
Omaha (Google Update) server
Omaha (Google Update) serverOmaha (Google Update) server
Omaha (Google Update) serverDmitry Lyfar
 
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE PlatformsFIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE PlatformsFIWARE
 
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsI Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsMichael Lange
 
Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !Anthony Dahanne
 
What's New in Docker - February 2017
What's New in Docker - February 2017What's New in Docker - February 2017
What's New in Docker - February 2017Patrick Chanezon
 
Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)DECK36
 
Новый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныНовый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныTimur Safin
 
Easy Cloud Native Transformation using HashiCorp Nomad
Easy Cloud Native Transformation using HashiCorp NomadEasy Cloud Native Transformation using HashiCorp Nomad
Easy Cloud Native Transformation using HashiCorp NomadBram Vogelaar
 
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...Amazon Web Services
 
TIAD - DYI: A simple orchestrator built step by step
TIAD - DYI: A simple orchestrator built step by stepTIAD - DYI: A simple orchestrator built step by step
TIAD - DYI: A simple orchestrator built step by stepThe Incredible Automation Day
 
Cannibalising The Google App Engine
Cannibalising The  Google  App  EngineCannibalising The  Google  App  Engine
Cannibalising The Google App Enginecatherinewall
 
The State of the Veil Framework
The State of the Veil FrameworkThe State of the Veil Framework
The State of the Veil FrameworkVeilFramework
 
Docker module 1
Docker module 1Docker module 1
Docker module 1Liang Bo
 
Intro To Node.js
Intro To Node.jsIntro To Node.js
Intro To Node.jsChris Cowan
 

Ähnlich wie Large-scaled Deploy Over 100 Servers in 3 Minutes (20)

Toolbox of a Ruby Team
Toolbox of a Ruby TeamToolbox of a Ruby Team
Toolbox of a Ruby Team
 
Docker presentasjon java bin
Docker presentasjon java binDocker presentasjon java bin
Docker presentasjon java bin
 
Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)Our Puppet Story (GUUG FFG 2015)
Our Puppet Story (GUUG FFG 2015)
 
Docker Swarm secrets for creating great FIWARE platforms
Docker Swarm secrets for creating great FIWARE platformsDocker Swarm secrets for creating great FIWARE platforms
Docker Swarm secrets for creating great FIWARE platforms
 
A Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy SystemA Fabric/Puppet Build/Deploy System
A Fabric/Puppet Build/Deploy System
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
 
Omaha (Google Update) server
Omaha (Google Update) serverOmaha (Google Update) server
Omaha (Google Update) server
 
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE PlatformsFIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
FIWARE Tech Summit - Docker Swarm Secrets for Creating Great FIWARE Platforms
 
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other ThingsI Just Want to Run My Code: Waypoint, Nomad, and Other Things
I Just Want to Run My Code: Waypoint, Nomad, and Other Things
 
Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !Get you Java application ready for Kubernetes !
Get you Java application ready for Kubernetes !
 
What's New in Docker - February 2017
What's New in Docker - February 2017What's New in Docker - February 2017
What's New in Docker - February 2017
 
Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)
 
Новый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныНовый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоны
 
Easy Cloud Native Transformation using HashiCorp Nomad
Easy Cloud Native Transformation using HashiCorp NomadEasy Cloud Native Transformation using HashiCorp Nomad
Easy Cloud Native Transformation using HashiCorp Nomad
 
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
(ARC402) Deployment Automation: From Developers' Keyboards to End Users' Scre...
 
TIAD - DYI: A simple orchestrator built step by step
TIAD - DYI: A simple orchestrator built step by stepTIAD - DYI: A simple orchestrator built step by step
TIAD - DYI: A simple orchestrator built step by step
 
Cannibalising The Google App Engine
Cannibalising The  Google  App  EngineCannibalising The  Google  App  Engine
Cannibalising The Google App Engine
 
The State of the Veil Framework
The State of the Veil FrameworkThe State of the Veil Framework
The State of the Veil Framework
 
Docker module 1
Docker module 1Docker module 1
Docker module 1
 
Intro To Node.js
Intro To Node.jsIntro To Node.js
Intro To Node.js
 

Mehr von Hiroshi SHIBATA

Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Deep dive into Ruby's require - RubyConf Taiwan 2023
Deep dive into Ruby's require - RubyConf Taiwan 2023Deep dive into Ruby's require - RubyConf Taiwan 2023
Deep dive into Ruby's require - RubyConf Taiwan 2023Hiroshi SHIBATA
 
How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?Hiroshi SHIBATA
 
How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?Hiroshi SHIBATA
 
Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発Hiroshi SHIBATA
 
Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?Hiroshi SHIBATA
 
RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩Hiroshi SHIBATA
 
Roadmap for RubyGems 4 and Bundler 3
Roadmap for RubyGems 4 and Bundler 3Roadmap for RubyGems 4 and Bundler 3
Roadmap for RubyGems 4 and Bundler 3Hiroshi SHIBATA
 
Ruby Security the Hard Way
Ruby Security the Hard WayRuby Security the Hard Way
Ruby Security the Hard WayHiroshi SHIBATA
 
The Future of library dependency manageement of Ruby
The Future of library dependency manageement of RubyThe Future of library dependency manageement of Ruby
The Future of library dependency manageement of RubyHiroshi SHIBATA
 
The Future of Dependency Management for Ruby
The Future of Dependency Management for RubyThe Future of Dependency Management for Ruby
The Future of Dependency Management for RubyHiroshi SHIBATA
 
The Future of Bundled Bundler
The Future of Bundled BundlerThe Future of Bundled Bundler
The Future of Bundled BundlerHiroshi SHIBATA
 
Productive Organization with Ruby
Productive Organization with RubyProductive Organization with Ruby
Productive Organization with RubyHiroshi SHIBATA
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the worldHiroshi SHIBATA
 

Mehr von Hiroshi SHIBATA (16)

Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Deep dive into Ruby's require - RubyConf Taiwan 2023
Deep dive into Ruby's require - RubyConf Taiwan 2023Deep dive into Ruby's require - RubyConf Taiwan 2023
Deep dive into Ruby's require - RubyConf Taiwan 2023
 
How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?
 
How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?How resolve Gem dependencies in your code?
How resolve Gem dependencies in your code?
 
Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発Ruby コミッターと歩む Ruby を用いたプロダクト開発
Ruby コミッターと歩む Ruby を用いたプロダクト開発
 
Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?Why ANDPAD commit Ruby and RubyKaigi?
Why ANDPAD commit Ruby and RubyKaigi?
 
RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩RailsGirls から始める エンジニアリングはじめの一歩
RailsGirls から始める エンジニアリングはじめの一歩
 
Roadmap for RubyGems 4 and Bundler 3
Roadmap for RubyGems 4 and Bundler 3Roadmap for RubyGems 4 and Bundler 3
Roadmap for RubyGems 4 and Bundler 3
 
Ruby Security the Hard Way
Ruby Security the Hard WayRuby Security the Hard Way
Ruby Security the Hard Way
 
The Future of library dependency manageement of Ruby
The Future of library dependency manageement of RubyThe Future of library dependency manageement of Ruby
The Future of library dependency manageement of Ruby
 
The Future of Dependency Management for Ruby
The Future of Dependency Management for RubyThe Future of Dependency Management for Ruby
The Future of Dependency Management for Ruby
 
The Future of Bundled Bundler
The Future of Bundled BundlerThe Future of Bundled Bundler
The Future of Bundled Bundler
 
Productive Organization with Ruby
Productive Organization with RubyProductive Organization with Ruby
Productive Organization with Ruby
 
Gems on Ruby
Gems on RubyGems on Ruby
Gems on Ruby
 
RubyGems 3 & 4
RubyGems 3 & 4RubyGems 3 & 4
RubyGems 3 & 4
 
How to distribute Ruby to the world
How to distribute Ruby to the worldHow to distribute Ruby to the world
How to distribute Ruby to the world
 

Kürzlich hochgeladen

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 

Kürzlich hochgeladen (20)

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 

Large-scaled Deploy Over 100 Servers in 3 Minutes

  • 1. Large-scaled Deploy Over 100 Servers in 3 Minutes Deployment strategy for next generation
  • 3. self.introduce => { name: “SHIBATA Hiroshi”, nickname: “hsbt”, title: “Chief engineer at GMO Pepabo, Inc.”, commit_bits: [“ruby”, “rake”, “rubygems”, “rdoc”, “psych”, “ruby-build”, “railsgirls”, “railsgirls-jp”], sites: [“www.ruby-lang.org”, “bugs.ruby-lang.org”, “rubyci.com”, “railsgirls.com”, “railsgirls.jp”], }
  • 4. I’m from Asakusa.rb Asakusa.rb is one of the most active meet-ups in Tokyo, Japan. @a_matsuda (Ruby/Rails committer, RubyKaigi chief organizer) @kakutani (RubyKaigi organizer) @ko1 (Ruby committer) @takkanm (Ruby/Rails programmer) @hsbt (Me!) and many Rubyists in Japan.
  • 5.
  • 6.
  • 10. CEO and CTO said… CEO: “We are going to promote our service on TV CM! at Feb, 2015” CTO: “Do make out service to scalable, redundant, high- performance architecture! in 3 months” Me: “Yes, I do it!!1”
  • 11. Our service status at 2014/11 It’s simply Rails Application with IaaS (not Heroku) • 6 application servers • To use capistrano 2 for deployment • Mixed background job, application processes and batch tasks
  • 12. 😨
  • 13. Our service issue Do scale-out Do scale-out with automation! Do scale-out with rapid automation!! Do scale-out with extremely rapid automation!!!
  • 15. Concerns of bootstrap instructions Typical scenario of server set-up for scale out. • OS boot • OS Configuration • Provisioning with puppet/chef • Setting up to capistrano • Deploy rails application • QA Testing • Added load balancer (= Service in)
  • 16. Web operation is manual instructions • We have been created OS Image called “Golden Image” from running server • Web operations such as os configuration and instances launch are manual instruction. • Working time is about 4-6 hours • It’s blocker for scale-out largely.
  • 17. No ssh We added “No SSH” into our rule of Web operation
  • 18. Background of “No SSH” In large scale service, 1 instance is like a “1 process” in Unix environments. We didn’t attach process using gdb usually. • We don’t access instance via ssh We didn’t modify program variables in memory usually. • We don’t modify configuration on instance We can handle instance/process status using api/signal only.
  • 20. Provision with puppet We have puppet manifests for provision. but It’s sandbox status. • It based on old Scientific Linux • Some manifest is broken… • Service developers didn’t use puppet for production At first, We fixed all of manifests and enabled to deploy to production environments. % ls **/*.pp | xargs wc -l | tail -1 5546 total
  • 21. To use puppetmasterd • We choice master/agent model • It’s large scaled architecture because we didn’t need to deploy puppet manifests each servers. • We already have puppetmasterd manifests written by puppet using passenger named rails application server. https://docs.puppetlabs.com/guides/passenger.html
  • 23. What’s cloud-init “Cloud-init is the defacto multi-distribution package that handles early initialization of a cloud instance.” https://cloudinit.readthedocs.org/en/latest/ • We(and you) already used cloud-init for customizing to configuration of OS at initialization process on IaaS • It has few documents for our use-case…
  • 24. Basic usage of cloud-init We only use OS configuration. Do not use “run_cmd” section. #cloud-config repo_update: true repo_upgrade: none packages: - git - curl - unzip users: - default locale: ja_JP.UTF-8 timezone: Asia/Tokyo
  • 25. Image creation with itself We use IaaS API for image creation with cloud-init userdata. We can create OS Image using cloud-init and provisioned puppet when boot time of instance. puppet agent -t rm -rf /var/lib/cloud/sem /var/lib/cloud/instances/* aws ec2 create-image --instance-id `cat /var/lib/cloud/data/instance-id` --name www_base_`date +%Y%m%d%H%M`
  • 28. Upgrading Rails 4 • I am very good at “Rails Upgrading” • Deploying in Production was performed with my colleague named @amacou % g show c1d698e commit c1d698ec444df1c137a301e01f59e659593ecf76 Author: amacou <amacou.abf@gmail.com> Date: Mon Dec 15 18:22:34 2014 +0900 Revert "Revert "Revert "Revert "[WIP] Rails 4.1.X へのアップグレード""""
  • 29. What’s new for capistrano3 “A remote server automation and deployment tool written in Ruby.” http://capistranorb.com/ Example of Capfile: We rewrite own capstrano2 tasks to capistrano3 convention require 'capistrano/bundler' require 'capistrano/rails/assets' require 'capistrano3/unicorn' require 'capistrano/banner' require 'capistrano/npm' require 'slackistrano'
  • 30. Do not use hostname/ip dependency We discarded dependencies of hostname and ip address. Use API of IaaS for our use-case. config.ru: 10: defaults = `hostname`.start_with?('job') ? config/database.yml: 37: if `hostname`.start_with?(‘search') config/unicorn.conf: 6: if `hostname`.start_with?('job')
  • 32. Bundled package of Rails application Prepared to standalone Rails application with rubygems and precompiled assets Part of capistrano tasks: $ bundle exec cap production archive_project ROLES=build desc "Create a tarball that is set up for deploy" task :archive_project => [:ensure_directories, :checkout_local, :bundle, :npm_install, :bower_install, :asset_precompile, :create_tarball, :upload_tarball, :cleanup_dirs]
  • 33. Distributed rails package build server rails bundle object storage (s3) application server application server application server application server capistrano
  • 34. # Fetch latest application package RELEASE=`date +%Y%m%d%H%M` ARCHIVE_ROOT=‘s3://rails-application-bundle/production/' ARCHIVE_FILE=$( aws s3 ls $ARCHIVE_ROOT | grep -E 'application-.*.tgz' | awk '{print $4}' | sort -r | head -n1 ) aws s3 cp "${ARCHIVE_ROOT}${ARCHIVE_FILE}" /tmp/rails-application.tar.gz # Create Directories of capistrano convention (snip) # Invoke to chown (snip) We extracted rails bundle when instance creates self image with clout-init. Integration of image creation
  • 35. How to test instance behavior We need to guarantee http status from instance response. We removed package version control from our concerns.
  • 36. thor
  • 37. What’s thor “Thor is a toolkit for building powerful command-line interfaces. It is used in Bundler, Vagrant, Rails and others.” http://whatisthor.com/ module AwesomeTool class Cli < Thor class_option :verbose, type: :boolean, default: false desc 'instances [COMMAND]', ‘Desc’ subcommand('instances', Instances) end end module AwesomeTool class Instances < Thor desc 'launch', ‘Desc' method_option :count, type: :numeric, aliases: "-c", default: 1 def launch (snip) end end end
  • 38. We can scale out with one command via our cli tool All of web operations should be implement by command line tools Scale out with cli command $ some_cli_tool instances launch -c … $ some_cli_tool mackerel fixrole $ some_cli_tool scale up $ some_cli_tool deploy blue-green
  • 39. How to automate instructions •Write real-world instructions •Pick instruction for automation •DO automation
  • 41. Concerns of bootstrap time Typical scenario of server set-up for scale out. • OS boot • OS Configuration • Provisioning with puppet/chef • Setting up to capistrano • Deploy rails application • Added load balancer (= Service in) We need to enhance to bootstrap time extremely.
  • 42. Concerns of bootstrap time Slow operation • OS boot • Provisioning with puppet/chef • Deploy rails application Fast operation • OS Configuration • Setting up to capistrano • Added load balancer (= Service in)
  • 43. Check point of Image creation Slow operation • OS boot • Provisioning with puppet/chef • Deploy rails application Fast operation • OS Configuration • Setting up to capistrano • Added load balancer (= Service in) Step1 Step2
  • 44. 2 phase strategy • Official OS image • Provided from platform like AWS, Azure, GCP, OpenStack… • Minimal image(phase 1) • Network, User, Package configuration • Installed puppet/chef and platform cli-tools. • Role specified(phase 2) • Only boot OS and Rails application
  • 46. Use-case of Packer I couldn’t understand use-case of packer. Is it Provision tool? Deployment tool?
  • 47. inside image creation with Packer • Packer configuration • JSON format • select instance size, block volume • cloud-init • Basic configuration of OS • only default module of cloud-init • provisioner • shell script :) • Image creation • via IaaS API
  • 48. minimal image cloud-init provisioner #cloud-config repo_update: true repo_upgrade: none packages: - git - curl - unzip users: - default locale: ja_JP.UTF-8 timezone: Asia/Tokyo rpm -ivh http://yum.puppetlabs.com/ puppetlabs-release-el-7.noarch.rpm yum -y update yum -y install puppet yum -y install python-pip pip install awscli sed -i 's/name: centos/name: cloud-user/' /etc/ cloud/cloud.cfg echo 'preserve_hostname: true' >> /etc/cloud/ cloud.cfg
  • 49. web application image cloud-init provisioner #cloud-config preserve_hostname: false puppet agent -t # Fetch latest rails application (snip) # enabled cloud-init again rm -rf /var/lib/cloud/sem /var/lib/cloud/instances/*
  • 50. Integration tests with Packer We can tests results of Packer running. (Impl by @udzura) "provisioners": [ (snip) { "type": "shell", "script": "{{user `project_root`}}packer/minimal/provisioners/run-serverspec.sh", "execute_command": "{{ .Vars }} sudo -E sh '{{ .Path }}'" } ] yum -y -q install rubygem-bundler cd /tmp/serverspec bundle install --path vendor/bundle bundle exec rake spec packer configuration run-serverspec.sh
  • 51. We created cli tool with thor We can run packer over thor code with advanced options. $ some_cli_tool ami build-minimal $ some_cli_tool ami build-www $ some_cli_tool ami build-www —init $ some_cli_tool ami build-www -a ami-id module SomeCliTool class Ami < Thor method_option :ami_id, type: :string, aliases: "-a" method_option :init, type: :boolean desc 'build-www', 'wwwの最新イメージをビルドします' def build_www … end end end
  • 53. What’s blocker for scale-out • Depends on manual instruction of human • Depends on hostname or ip address architecture and tool • Depends on persistent server or workflow like periodical jobs • Depends on persistent storage
  • 55. Nagios We used nagios for monitoring to service and instance status. But we have following issue: • nagios don’t support dynamic scaled architecture • Complex syntax and configuration We decided to remove nagios for service monitoring.
  • 56. consul + consul-alert We use consul and consul-alerts for process monitoring. https://github.com/hashicorp/consul https://github.com/AcalephStorage/ consul-alerts It provided to discover to new instances automatically and alert mechanism with slack integration.
  • 58. munin We used munin for resource monitoring But munin doesn’t support dynamic scaled architecture. We decided to use mackerel.io instead of munin.
  • 59. Mackerel “A Revolutionary New Kind ofApplication Performance Management. Realize the potential in Cloud Computingby managing cloud servers through “roles”” https://mackerel.io
  • 60. Configuration of mackrel You can added instance to role(server group) on mackerel with mackerel-agent.conf And You can made your specific plugin for mackerel. It’s simple convention and compatible for munin and nagios. Many of Japanese developer made useful mackerel plugin written by Go/mruby. [user@www ~]$ cat /etc/mackerel-agent/mackerel-agent.conf apikey = “your_api_key” role = [ "service:web" ]
  • 62. access_log aggregator with td-agent We need to collect access-log of all servers with scale-out. https://github.com/ fluent/fluentd/ We used fluentd to collect and aggregate. <match nginx.**> type forward send_timeout 60s recover_wait 10s heartbeat_interval 1s phi_threshold 16 hard_timeout 60s <server> name aggregate.server host aggregate.server weight 100 </server> <server> name aggregate2.server host aggregate2.server weight 100 standby </server> </match> <match nginx.access.*> type copy <store> type file (snip) </store> <store> type tdlog apikey api_key auto_create_table true database database table access use_ssl true flush_interval 120 buffer_path /data/tmp/td-agent-td/access </store> </match>
  • 64. Remove to batch scheduler We need to use `batch` role for scheduled rake task. We have to create some payments transaction, send promotion mail, indexing search items and more. We use `whenever` and cron on persistent state server. but It could not scale-out largely and It’s SPOF. I use sidekiq-scheduler and consul cluster instead of cron for above problems.
  • 65. scheduler architecture sidekiq-scheduler (https://github.com/moove-it/sidekiq- scheduler) allows periodical job mechanism to sidekiq server. We need to specify a enqueue server in sidekiq workers. I elected enqueue server used consul cluster. sidekiq worker sidekiq worker sidekiq worker sidekiq worker sidekiq worker sidekiq worker sidekiq worker sidekiq worker sidekiq worker sidekiq worker & scheduler redis redis
  • 68. Drone CI “CONTINUOUS INTEGRATION FOR GITHUB AND BITBUCKET THAT MONITORS YOUR CODE FOR BUGS” https://drone.io/ We use Drone CI on our Openstack platform named “nyah”
  • 69. Container based CI with Rails We use Drone CI(based docker) with Rails Application. We need to separate Rails stack to following containers. • rails(ruby and nodejs) • redis • mysql • elasticsearch And We invoke concurrent test processes used by test-queue and teaspoon.
  • 71. What's Infra CI We test server status such as lists of installed packages, running processes and configuration details continuously. Puppet + Drone CI(with Docker) + Serverspec = WIN We can refactoring puppet manifests aggressively.
  • 72. Serverspec “RSpec tests for your servers configured by CFEngine, Puppet, Ansible, Itamae or anything else.” http://serverspec.org/ % rake -T rake mtest # Run mruby-mtest rake spec # Run serverspec code for all rake spec:base # Run serverspec code for base.minne.pbdev rake spec:batch # Run serverspec code for batch.minne.pbdev rake spec:db:master # Run serverspec code for master db rake spec:db:slave # Run serverspec code for slave db rake spec:gateway # Run serverspec code for gateway.minne.pbdev (snip)
  • 73. Refactoring puppet manifets We replaced “puppetserver” written by Clojure. We enabled future-parser. We fixed all of warnings and syntax error. We added and removed manifests everyday.
  • 74. Switch Scientific Linux 6 to CentOS 7 We can refactoring to puppet manifests with infra CI. We added case-condition for SL6 and Centos7 if $::operatingsystemmajrelease >= 6 { $curl_devel = 'libcurl-devel' } else { $curl_devel = 'curl-devel' }
  • 75. All of processes under the systemd We have been used daemontools or supervisord to run background processes. These tools are friendly for programmer. but we need to wait to invoke their process before invoking our application processes like unicorn, sidekiq and other processes. We use systemd for invoke to our application processes directly. It’s simple syntax and fast.
  • 77. stretcher “A deployment tool with Consul / Serf event.” https://github.com/fujiwara/stretcher object storage (s3) application server application server application server application server consul consul consul consul
  • 78. capistrano-strecher It provides following tasks for pull strategy deployment. • Create archive file contained Rails bundle • Put archive file to blob storage like s3 • Invoke consul event each stages and roles You can use pull strategy deployment easily by capistrano- stretcher. https://github.com/pepabo/capistrano-stretcher
  • 79. Architecture of pull strategy deployments object storage (s3) application server application server application server application server consul consul consul consul build server consul capistrano
  • 81. Why we choose OpenStack? OpenStack is widely used big company like Yahoo!Japan, DeNA and NTT Group in Japan. We need to reduce running cost of IaaS. We tried to build OpenStack environment on our bare-metal servers. (snip) Finally, We’ve done to cut running cost by 50%
  • 82. yaocloud and tool integration We made Ruby client for OpenStack named Yao. https://github.com/yaocloud/yao It likes aws-sdk on AWS. We can manipulate compute resource using ruby with Yao. $ Yao::Tenant.list $ Yao::SecurityGroup.list $ Yao::User.create(name: name, email: email, password: password) $ Yao::Role.grant(role_name, to: user_hash["name"], on: tenant_name)
  • 83. Multi DC deployments in 3 minutes object storage (s3) application server application server application server consul consul consul build server consul capistrano application server application server consul consul build server consul DC-a (AWS) DC-b (OpenStack)
  • 85. Instructions of Blue-Green deployment Basic concept is following instructions. 1. Launch instances using OS imaged created from Packer 2. Wait to change “InService” status 3. Terminate old instances That’s all!!1 http://martinfowler.com/bliki/BlueGreenDeployment.html
  • 86. Dynamic upstream with load balancer ELB • Provided by AWS, It’s best choice for B-G deployment • Can handle only AWS instances nginx + consul-template • Change upstream directive used consul and consul-template ngx_mruby • Change upstream directive used mruby
  • 87. Slack integration of consul-template
  • 88. Example code of thor old_instances = running_instances(load_balancer_name) invoke Instances, [:launch], options.merge(:count => old_instances.count) catch(:in_service) do sleep_time = 60 loop do instances = running_instances(load_balancer_name) throw(:in_service) if (instances.count == old_instances.count * 2) && instances.all?{|i| i.status == 'InService'} sleep sleep_time sleep_time = [sleep_time - 10, 10].max end end old_instances.each do |oi| oi.delete end
  • 89. Summary • We can handle TV CM and TV Show used by scale-out servers. • We can enhance infrastructure every day. • We can deploy rails application over the 100 servers every day. • We can upgrade OS or Ruby or middleware every day Yes, We can!