SlideShare a Scribd company logo
1 of 101
作られては消えていく 
泡のように儚いクラスタの運用話 
2014/08/29 YAPC Asia 2014 
Tsuyoshi Torii (@toritori0318) 
Bascule Inc.
自己紹介 
• 鳥居剛司Tsuyoshi Torii 
• @toritori0318 
• 株式会社バスキュール 
• Node.js / Python / Perl / Ruby 
• 二児の父
DEV Ops
主にTVとスマートフォンを 
同期して云々〜 
といった仕事をしています
一部事例紹介
Work
BloodyTube 
血液型対抗レースに視聴者が参加して番組を構成する完全インタラクティブTV 
バスキュールの企画・提供・制作 
視聴者のスマホからの参加状況がテレビに反映される 
優勝チームにはリアル店舗で利用できるPontaポイントが提供される 
B2O2O(Broadcast to Online to Offline)マーケティング施策にもチャレンジ 
http://pieces.bascule.co.jp/2014/bloodytube/en/
https://www.bascule-go.com/product/
About MIES 
• Sonischooter 
– リアルタイム同期/タイムライン/Elastic Socket.ioクラスタ 
• Harvestmoon 
– ユーザアクション(投票/投稿など)を受付/集計 
• Persona 
– MIES/コンシューマユーザ統合 
– SNS連携 
• Kanten(tofuクローン) 
– 画像変換 
• ELF 
– 視聴ログ集計/解析 
• Punisher 
– TV案件用ベンチマーククラスタ
今日話すこと
• TV案件の特徴 
• 性能評価とか監視とか 
• 運用改善の話その1 
• 運用改善の話その2 
• 今後改善していきたいこと
今日話さないこと
• フロントエンドの話 
• アプリケーションレイヤの話 
• 闇 
– キャパシティガ〜 
– クラウドフロントガ〜 
– イーエルビーガ〜 
– ジーエーイーガ〜
TV案件の特徴
運用サイクル
運用例 
• 1週間前にティザーサイト公開 
– ロールごとに最小インスタンス数で構築 
• 放送日前日〜当日 
– インスタンスを数十台〜数百台起動 
– 放送時間に張り付き監視 
– 終了後バックアップ 
• 当日〜数日後 
– 全てのインスタンスを一括削除
TV連動運用 
• 基本は「放送時間」 
– 案件によって異なる 
• ティザーサイトがある場合も 
• 1回きり/2−3回/毎日/毎週 
• 想定ユーザ数バラバラ 
• コストも割とシビア 
• 本番稼働しているサーバ(特に放送時間中) 
に対して変更を行うことはあまりない(*1) 
(*1)サーバに限るかつ条件付き
負債回収
• 特に忙しい時期 
– 期末期初/年末年始 
• 作ったものは本番終了後に削除 
• 0から作り直す/まとまって空いている期間 
があるので技術的負債を返済しやすい環境 
であるといえる 
※あくまで現時点の話
ここまでが 
TV案件の特徴に 
ついて
性能評価/監視の話
性能評価
アクセスパターンについて
• 曜日/時間帯/企画内容からユーザ規模が 
ある程度想定できる 
• アクセスパターンをある程度把握できるので、 
どの部分に負荷が集中しやすいか事前に特 
定できる 
• 本番怖い
本番怖い
一発勝負
Punisher
Punisher 
• NodeJS製ベンチマーククラスタ 
• スクリプトをJavascriptで記述 
• 機能 
– リアルタイムで開始/停止が可能 
– リアルタイム集計(タスク集計のみ) 
– AWS全リージョン対応 
• 1コマンドでAWS全リージョンのインスタンスを起動/ 
分散デプロイ 
– スポットインスタンス(半)自動入札
書いた理由
状況を完璧に再現したい
シナリオ例 
• 30分間に30万人が以下の処理を行う 
1. ログイン 
• 内8割がゲストユーザ/2割がSNS接続ユーザ 
2. APIサーバに情報取得 
3. 非同期で30秒ごとにhogehogeAPI実行 
4. Socketサーバに接続 
• 内8割がwebsocket/2割がxhr-polling 
• 30万接続した状態でブロードキャスト送信 
1. 5-15秒後にAPIサーバに対して投票処理 
2. etc…
(良い)副作用 
シナリオを書くことによって 
事前にあぶない部分が 
判明する
負荷が原因のトラブルは 
ほぼ0に
安心感
監視
監視(放送当日以外) 
• Nagios/Munin 
• インスタンスのタグから自動でコンフィグファ 
イルを作成するような自前ツール 
• メール& IRC > HipChat > Slack 
• もう少しオシャレにしたい 
– Sensu〜♪
監視(放送日当日) 
• 負荷が来る日時が予めわかっている 
– 放送時間に張り付き監視 
• 全体的な監視 
– CloudWatch 
– Proteus-Monitor 
– ソケットクラスタ管理ツール(独自) 
• ロールごとの個別監視 
– top 
– vmstat 
– tail –f error.log 
– App::RedisTop(*1) 
(*1)https://github.com/toritori0318/p5-App-RedisTop
Proteus-Monitor
Proteus-Monitor 
• リアルタイムで各サーバの 
CPU/Load/Mem/Net/etc…が確認できる 
• サーバ一覧で確認できる 
• 設定がお手軽 
• Nodeが動的に追加/削除される 
• 過去の指標は残らない 
• 名前でフィルタできるようにパッチをあててい 
る
ソケットクラスタ管理ツール
ここまでが 
性能評価/監視の話
運用改善の話 
その1
その前にMIESの話 
• 最初から「MIESを作るぞ!」という目的があった 
わけではない 
• 案件をこなしていくうちに「この部分は共通化で 
きそう」「この部分は汎用化しておくと開発楽だよ 
ね」といった感じでエンジニアが自発的にアイデ 
アを出し、一つ一つカタチにしていったら自然に 
出来上がっていた 
• 当初は機能重視で開発 
• 一つ一つのサービスは独立していて疎結合
Server Team 
• 3人 
–TD or 独自アプリケーション(1名) 
–TD or MIESコア開発運用(1名) 
–MIESコア開発運用(1名)
サービス言語デプロイ/スケールPerson 
Sonicshooter 
(リアルタイム同期系) 
Node.js App::Rad(*1) + 
Capistrano 
Harvestmoon 
(アンケート受付) 
Python Fabric 
Persona 
(認証) 
Python App::Rad + Capistrano 
Kanten 
(画像変換) 
Perl Yoga(*2) 
(*1) http://d.hatena.ne.jp/tori243/20120622/1340386116 
(*2) https://github.com/toritori0318/p5-Yogafire
俺が、俺がSPOFだ!
問題 
• サービス毎の秘伝のタレ 
– 開発環境/デプロイ/構築/スケール管理 
• 1サービス毎に運用出来る人が一人 
• 運用コスト 
– スクリプト化してはいるが手順がバラバラ 
– 他の人が手順を知らないor 知るのが大変 
– 工数がかかる 
– お金がかかる
解決したいこと 
• 全てのサービスで仕組みを共通化 
– 開発フロー/デプロイ/クラスタ構築/スケール管理 
• これらを同じインタフェース(コマンド)で統一したい 
• 引き継ぎしやすくなる 
• CIしやすくなる 
• 誰でもミス無く簡単に運用できる 
• コストダウンに繋がる
解決策
• 開発フロー/デプロイ 
– Vagrant + vagrant-aws + chef-deploy 
• プロビジョニングツール 
– Chef+Berkshelf 
• クラスタ管理 
– AWS CloudFormation 
• スケールコントロール 
– AWS AutoScaling
MIES-Provision-Task
MIES-Provision-Task 
• Rakeタスク 
– 基本的にはvagrant/aws-cliのラッパー 
• Vagant + vagrant-aws + vagrant-amiで統一化 
• プロビジョニングはVagrant-chef-solo-provisioner 
• デプロイはchef-deployリソース 
• クラスタ管理はCloudFormation 
• スケール管理はAutoScaling
ざっくり補足
開発フロー
開発フロー 
• VagrantfileにVMのリストを設定(*1) 
• Chefレシピ(nodes)もVMに合わせて作成(*1) 
• vagrantコマンド(Rakeでラップ)でVM起動/プロビジョニング/ssh 
/削除/イメージ保存を行う 
• 複数サーバへのデプロイは行わず、AMIを作るだけの操作を行う 
(CloudFomation用のAMI) 
• CloudFormationテンプレートはロール毎に用意しておき、Rakeタス 
ク内でマージ 
• クラスタへの反映はCloudFormationでAMIを更新することで行う 
(*1) 管理単位は「環境(+ロール)」
VM管理例 
• local 
• aws_hm_dev 
• aws_hm_stg 
• aws_hm_prd_wap 
• aws_hm_prd_redis 
Chefレシピ/AMIもこの単位で管理
イメージ保存
イメージ保存 
• vagrant-ami 
– vagrant-awsの設定を共有できる 
– Packerは不採用 
– fakepackerというRakeタスクを作成(後述) 
% vagrant create-ami --name my-ami  
--desc "My AMI” --tags role=test,environment=dev 
*参考http://d.hatena.ne.jp/toritori0318/20130820/1377018423
スケール管理
スケール管理 
• CloudFormationのパラメータで指定 
• Rakeタスクでも用意しておく(後述)
インフラ共通化
Chef cookbooks 
• 全サービスである程度共通化したbase-cookbookを用意 
– ユーザ周り 
– openssh/ntp/timezone/nrpe/etc… 
– ssh周りの設定 
– Alias or symlink( sv=“supervisorctl” / dstat-full=“dstat –Tclmdrn” ) 
– 最低限のカーネルパラメータ 
– xbuild (node/python/perl/ruby) / fluentd / munin-node / 
supervisord 
– ディレクトリ(アプリケーション/アプリケーションログ/etc…) 
• ベースAMI作成する時にこれらを適用する
Supervisor 
• Python製デーモン管理ツール 
• 一度に複数デーモンを操作/自動リスタートな 
ど対応 
• グループ機能を利用 
– 例 
• supervisorctl restart all # supervisor全管理プロセス 
• Supervisorctl restart wap: # nginx / webapp 
• Supervisorctl restart redis: # redis_6379 / redis_6380 / … 
• Supervisorctl restart worker: # ワーカー全般
補足終わり
Rakeタスク
Local VM Task 
• rake local:up 
• rake local:provision [deploy=1] 
• rake local:spec 
• rake local:destroy 
• rake local:ssh
AWS Task 
• rake aws:create_baseami 
• rake aws:up vm=<vm_name> 
• rake aws:provision vm=<vm_name> [deploy=1] 
• rake aws:spec vm=<vm_name> 
• rake aws:destroy vm=<vm_name> 
• rake aws:ssh vm=<vm_name> 
• rake aws:create_ami vm=<vm_name> 
• rake aws:link_instance vm=<vmname> id=<instance_id> 
• rake aws:unlink_instance vm=<vmname>
AWS Task 
• rake aws:fakepacker vm=<vmname> 
– up > provision > spec > create_ami > destroy
AWS CloudFormation Task 
• rake aws_cf:generate_cf_json env=<env_name> 
• rake aws_cf:create_stack env=<env_name> 
• rake aws_cf:update_stack env=<env_name> [<key>=<value>] 
• rake aws_cf:delete_stack env=<env_name>
タスクTips 
• 任意のクックブックを指定 
– rake aws:provision vm=hoge chef_json=nodes/base.json 
• 差分実行 
– rake aws:up vm=hoge ami=ami-xxxxxxxxx 
• 複数タスク実行 
– rake aws:up aws:provision aws:create_ami vm=hoge 
– rake aws:up aws:ssh vm=hoge
タスクTips 
• rake vms
解決
ここまでが 
運用改善の話 
(その1)
運用改善の話 
その2
問題 
• 同時並行案件が増えてきた… 
– アプリレイヤーでは複数対応しているが、インフラ 
は…?
問題 
• 案件による規模の違い 
– 案件A:ティザー2週間+本番2回:規模10万人 
– 案件B:毎週金曜レギュラー:規模1万人 
– 案件C:本番1回:規模100万人 
• コスト問題 
• 単発番組/レギュラー番組 
– 他の案件用に改修入りそうだけどレギュラー番組 
で動いてるのに影響出たらどうしよう…
解決案 
• AWSアカウントを案件毎に分けて、別クラスタ 
を構築出来るようにする 
– 1クラスタにしない理由 
• 規模によって別構築したい 
• 一度本番稼働している環境をいじるのが怖い 
– 1アカウントで管理しない理由 
• オペレーションまざるのが怖い
手順共通化したし 
行けるのでは…!
現実 
• AMI移動( or BaseAMI作り直し) 
• Keypair設定 
• AWSキー更新(*1) 
• アプリケーションの改修 
– MySQL/Redisサーバ/インスタンスの数 
• 案件/インスタンスタイプに合わせたワーカー数設定 
– アプリケーション(gunicorn/cluster/starman)・SQSワーカー 
など 
• これらの再設定が終わったらchef実行し直す… 
• まーめんどい 
(*1) IAMロールは使わない
さらなる解決案
案件ごとのコンフィグレーションを 
一元管理してしまおう
Omniscient
Omniscient 
• サービス全体のコンフィグレーションを管理 
• 管理軸 
– 案件毎/環境毎(dev/staging/stress/production) 
• アプリケーションコンフィグ(おまけ) 
– サービス毎のエンドポイント 
– サービス毎のオプション設定 
• インフラコンフィグ 
– AWS情報 
– キャッシュ/Redis/RDS/などDBのエンドポイント 
– ワーカープロセスの数 
– 自社製RedisClusterのコンフィグ設定
Omniscient概要図 
クラスタ起動。同時に 
インスタンスの情報を 
Omniscientに登録定期的にOmniscientの 
情報をPullし、更新され 
たらサーバに反映 
クラスタ起動。同時にイ 
ンスタンスの情報を 
Omniscientに登録。 
アプリ側は取得して反映
移行コスト改善〜♪
Serfも検討したが… 
• Serf 
– オーケストレーションツール 
– ゴシッププロトコロルを用い、クラスタ全体に何ら 
かのメッセージを伝搬 
• 検証 
– 複数軸で管理しようとした時、逆に複雑に 
• よい方法があれば〜
ここまでが 
運用改善の話 
(その2)
さらに改善して 
いきたいこと
やりたいこと一覧 
• Docker化 
– 開発環境配布 
– サービス環境配布 
– プロダクション? 
• MIESサービス統合管理 
• Omniscientゲートウェイ計画 
• RakeタスクのGolang化
まとめ
• TV案件では24時間365日稼働サー 
ビスとはがんばるところ/手を抜け 
るところが違う 
• 要件に合った運用改善〜 
• まだまだ改善したい〜 
• 本番怖い
おまけ情報 
• Rakeタスク/サンプルファイルなどブログにお 
いてありますのでご参照下さい(若干古い) 
– http://d.hatena.ne.jp/toritori0318/20130916/1379355060 
– https://github.com/toritori0318/vagrant-aws-sample
ご清聴ありがとう 
ございました

More Related Content

What's hot

Chef(Server)と AWS OpsWorks(tm)の比較
Chef(Server)と AWS OpsWorks(tm)の比較Chef(Server)と AWS OpsWorks(tm)の比較
Chef(Server)と AWS OpsWorks(tm)の比較Yukihiko SAWANOBORI
 
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.0
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.0Ansible tower 構築方法と使い方 with VMware モジュール Rev2.0
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.0Hiroshi Okano
 
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Yo Takezawa
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
Jaws−横浜ハンズオンーCloudFormation 1/3
Jaws−横浜ハンズオンーCloudFormation 1/3Jaws−横浜ハンズオンーCloudFormation 1/3
Jaws−横浜ハンズオンーCloudFormation 1/3Yasuhiro Araki, Ph.D
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 Hideo Takahashi
 
Xamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみたXamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみたHironov OKUYAMA
 
Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化NIFTY Cloud
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いたAkihiro Kuwano
 
Ansible AWXで一歩進んだプロビジョニング
Ansible AWXで一歩進んだプロビジョニングAnsible AWXで一歩進んだプロビジョニング
Ansible AWXで一歩進んだプロビジョニングsugoto
 
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったRuby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったtakanori suzuki
 
AWS SDK for Go in #jawsmeguro
AWS SDK for Go in #jawsmeguroAWS SDK for Go in #jawsmeguro
AWS SDK for Go in #jawsmeguroKenta Suzuki
 
ディープラーニングをAWS LambdaとStep Functionで自動化する
ディープラーニングをAWS LambdaとStep Functionで自動化するディープラーニングをAWS LambdaとStep Functionで自動化する
ディープラーニングをAWS LambdaとStep Functionで自動化するKeita Shimizu
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話Daijiro Abe
 
Vagrant入門以前
Vagrant入門以前Vagrant入門以前
Vagrant入門以前katanyan
 
AWS Elastic Beanstalk のススメ
AWS Elastic Beanstalk のススメAWS Elastic Beanstalk のススメ
AWS Elastic Beanstalk のススメTaiji INOUE
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)Daisuke Ikeda
 
俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがないSeiichiro Ishida
 
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Jenkinsとhadoopを利用した継続的データ解析環境の構築Jenkinsとhadoopを利用した継続的データ解析環境の構築
Jenkinsとhadoopを利用した継続的データ解析環境の構築Kenta Suzuki
 
Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術KinebuchiTomo
 

What's hot (20)

Chef(Server)と AWS OpsWorks(tm)の比較
Chef(Server)と AWS OpsWorks(tm)の比較Chef(Server)と AWS OpsWorks(tm)の比較
Chef(Server)と AWS OpsWorks(tm)の比較
 
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.0
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.0Ansible tower 構築方法と使い方 with VMware モジュール Rev2.0
Ansible tower 構築方法と使い方 with VMware モジュール Rev2.0
 
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
Jaws−横浜ハンズオンーCloudFormation 1/3
Jaws−横浜ハンズオンーCloudFormation 1/3Jaws−横浜ハンズオンーCloudFormation 1/3
Jaws−横浜ハンズオンーCloudFormation 1/3
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
 
Xamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみたXamarin で ReactiveUI を使ってみた
Xamarin で ReactiveUI を使ってみた
 
Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化Nifty cloud automationでクラウド構築・運用の自動化
Nifty cloud automationでクラウド構築・運用の自動化
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
 
Ansible AWXで一歩進んだプロビジョニング
Ansible AWXで一歩進んだプロビジョニングAnsible AWXで一歩進んだプロビジョニング
Ansible AWXで一歩進んだプロビジョニング
 
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作ったRuby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
Ruby で zabbix agent の loadable module を作れる loadable module を C言語 + mruby で作った
 
AWS SDK for Go in #jawsmeguro
AWS SDK for Go in #jawsmeguroAWS SDK for Go in #jawsmeguro
AWS SDK for Go in #jawsmeguro
 
ディープラーニングをAWS LambdaとStep Functionで自動化する
ディープラーニングをAWS LambdaとStep Functionで自動化するディープラーニングをAWS LambdaとStep Functionで自動化する
ディープラーニングをAWS LambdaとStep Functionで自動化する
 
VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話VagrantからDockerに開発環境を移行した時の話
VagrantからDockerに開発環境を移行した時の話
 
Vagrant入門以前
Vagrant入門以前Vagrant入門以前
Vagrant入門以前
 
AWS Elastic Beanstalk のススメ
AWS Elastic Beanstalk のススメAWS Elastic Beanstalk のススメ
AWS Elastic Beanstalk のススメ
 
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
 
俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない俺のZabbixがこんなに可愛いわけがない
俺のZabbixがこんなに可愛いわけがない
 
Jenkinsとhadoopを利用した継続的データ解析環境の構築
Jenkinsとhadoopを利用した継続的データ解析環境の構築Jenkinsとhadoopを利用した継続的データ解析環境の構築
Jenkinsとhadoopを利用した継続的データ解析環境の構築
 
Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術Asakusa バッチの運用を支える技術
Asakusa バッチの運用を支える技術
 

Similar to 作られては消えていく泡のように儚いクラスタの運用話

名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例Shigeru UCHIYAMA
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
#cross2012 クラウドCROSS ニフティの中の人によるニフティクラウド活用
#cross2012 クラウドCROSS ニフティの中の人によるニフティクラウド活用#cross2012 クラウドCROSS ニフティの中の人によるニフティクラウド活用
#cross2012 クラウドCROSS ニフティの中の人によるニフティクラウド活用Abe Junichiro
 
Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術finoue
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システムTomohiro Ohtake
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - SORACOM, INC
 
仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話m ishizaki
 
Draft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and MicroservicesDraft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and MicroservicesTaiki
 
Japan AWS User Group (JAWS-UG) Hokuriku 勉強会 第8回 ハンズオン AWS+オープンソースグループウェアの構築
Japan AWS User Group (JAWS-UG) Hokuriku勉強会 第8回 ハンズオン AWS+オープンソースグループウェアの構築Japan AWS User Group (JAWS-UG) Hokuriku勉強会 第8回 ハンズオン AWS+オープンソースグループウェアの構築
Japan AWS User Group (JAWS-UG) Hokuriku 勉強会 第8回 ハンズオン AWS+オープンソースグループウェアの構築Kenichi Nakamichi
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDockerMasashi Shinbara
 
OpenStack on OpenStack with CI
OpenStack on OpenStack with CIOpenStack on OpenStack with CI
OpenStack on OpenStack with CIkanabuchi
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれMasataka MIZUNO
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境Masashi Shinbara
 
テスト環境まるごとAwsにのっけてみた
テスト環境まるごとAwsにのっけてみたテスト環境まるごとAwsにのっけてみた
テスト環境まるごとAwsにのっけてみたKazuaki Fujikura
 
Azure 高速サイトソリューション
Azure 高速サイトソリューションAzure 高速サイトソリューション
Azure 高速サイトソリューションHiromasa Oka
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpMasahito Zembutsu
 

Similar to 作られては消えていく泡のように儚いクラスタの運用話 (20)

Eight meets AWS
Eight meets AWSEight meets AWS
Eight meets AWS
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
#cross2012 クラウドCROSS ニフティの中の人によるニフティクラウド活用
#cross2012 クラウドCROSS ニフティの中の人によるニフティクラウド活用#cross2012 クラウドCROSS ニフティの中の人によるニフティクラウド活用
#cross2012 クラウドCROSS ニフティの中の人によるニフティクラウド活用
 
Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術Awsで実現するseleniumテスト高速術
Awsで実現するseleniumテスト高速術
 
Fcp
FcpFcp
Fcp
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 - AWSクラウドデザインパターン(CDP) - 概要編 -
AWSクラウドデザインパターン(CDP) - 概要編 -
 
仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話仮想環境に MAUI 環境を構築する話
仮想環境に MAUI 環境を構築する話
 
Draft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and MicroservicesDraft: Observability, Service Mesh and Microservices
Draft: Observability, Service Mesh and Microservices
 
Japan AWS User Group (JAWS-UG) Hokuriku 勉強会 第8回 ハンズオン AWS+オープンソースグループウェアの構築
Japan AWS User Group (JAWS-UG) Hokuriku勉強会 第8回 ハンズオン AWS+オープンソースグループウェアの構築Japan AWS User Group (JAWS-UG) Hokuriku勉強会 第8回 ハンズオン AWS+オープンソースグループウェアの構築
Japan AWS User Group (JAWS-UG) Hokuriku 勉強会 第8回 ハンズオン AWS+オープンソースグループウェアの構築
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
OpenStack入門 2016/06/10
OpenStack入門 2016/06/10OpenStack入門 2016/06/10
OpenStack入門 2016/06/10
 
OpenStack on OpenStack with CI
OpenStack on OpenStack with CIOpenStack on OpenStack with CI
OpenStack on OpenStack with CI
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
テスト環境まるごとAwsにのっけてみた
テスト環境まるごとAwsにのっけてみたテスト環境まるごとAwsにのっけてみた
テスト環境まるごとAwsにのっけてみた
 
Azure 高速サイトソリューション
Azure 高速サイトソリューションAzure 高速サイトソリューション
Azure 高速サイトソリューション
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
 

Recently uploaded

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Recently uploaded (8)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

作られては消えていく泡のように儚いクラスタの運用話

Editor's Notes

  1. 二児の父です。 途中、素材として子供がちょいちょい出演します。
  2. セカンドスクリーンと言われる事例
  3. こちらは実際に担当した案件の一部。 投票を受け付けて、リアルタイムに反映したり 診断を行ってユーザ同士の相性を表示したり リアルタイムにTVとスマホが同期してゲームのようなことを行ったり コインを消費してブックメークのような事を行ったり このような案件を担当してきました. 自分のチームはこちらを中心に仕事しています。
  4. コードネーム「MIES」と呼ばれているセカンドスクリーン用のプラットフォーム。 ユーザ管理/リアルタイムメッセージ/アンケート/ログ を TVに加工して表示 みたいなところをひと通り網羅したプラットフォーム。こちらの開発運用を担当しています。
  5. ★4分
  6. ※補足 本番稼働サーバの変更について  理由1 本番稼働している期間が短いのが多い  理由2 元々、BAASとして汎用的な機能を提供しているので、機能変更が少ない(案件特有のアプリケーションサーバはたまにあったりするけど)       変更あるとしても大抵結合テスト時に完了しているし、ティザー期間であればその期間中でデプロイなど行うことができる。
  7. ★8分
  8. 本番に起こりえるクライアントと全く同じ挙動を模倣したかった。 そのためNode.JSを採用していたり、大量のサーバを手軽に起動して大量ユーザを模倣したりしたかった
  9. こういうことが事前にわかるように。 これが出来る前は本番時に「あー、ここで予想以上の負荷が来てしまった!!!!」というトラブルにも襲われたが、 これが出来てからは負荷でトラブル発生することがほぼ0に。
  10. だいぶ安心感して本番を迎えられるようになった
  11. ★15分
  12. Vagrant  当初の目的としてはVagrantでローカル開発環境の配布とAWS操作を共通化するのに適しているのでは、ということで採用 プロビジョニングツール  Chef(全盛の頃だった、というのが一番の理由) クラスタ管理  ElasticBeanstalkやOpsWorksもあるが、複数のロールを「一度に構築」「更新」「一括削除」が出来るのと、汎用性が高いのと、  JSONなのでいざという時にだれでも触れるというのと、ポータビリティが高い、というので採用 スケールコントロール  自動スケールはおまけ程度で、スケールコントロールを手軽に行えるところで採用。  CloudFormationと組み合わせると割と簡単にスケールアウト/イン/アップ/ダウンがお手軽に出来る。  つまりAWSの管理画面からでも行えるので共通化という面では良いと思った
  13. つまるところ、「環境+ロール」のイメージを作ることだけ行い、 あとはAMIを反映するだけ
  14. packerも検討していたが細かい制御がしずらかったのと、vagrant-amiを使うとvagrant-awsの設定をそのまま使えるので楽だった
  15. プロビジョン時、ロール毎のミドルウェアをインストール ロール毎に変更したい部分があればnodesのattributesやsite-cookbooksで上書きする
  16. ※補足 この運用ができるのは「稼働し続けるサーバに対してデプロイする」という行為がほとんど無いため。
  17. CloudFormationを管理するためのタスク群
  18. 運用手順の共通化に成功〜
  19. ★30分
  20. 全ての規模を案件Cによせると金額が膨大になる お金かかる!!!!
  21. まーめんどい。 最初はスクリプト化でお茶を濁そうかなと思っていたが、 サービスが複数あるので結局手作業が増えてしまう。 ※補足 AWSキー更新  IAMロールで行う予定だったが、キーが一定期間でリフレッシュされてしまう。本番中にリフレッシュされることを恐れた  HTTPリクエストを受け取ってAWSにアクセスするようなのはコネクションキャッシュしているが、そういうの。 ※補足 ワーカープロセスの設定  プロビジョニングで設定?   プロビジョニングする時と実際に運用するときでワーカー数設定するのがウザかったのもある  CPUコア数から自動設定?   案件が利用する機能によってワーカー数を微調整することもあり全部に対応するのは難しかった   (この案件はSNS OAuth使うからワーカー数多め/フレンド更新多いからこのSQSワーカーを多めにする/etc)
  22. アプリケーションコンフィグ  サービス毎のエンドポイント  サービス毎のオプション設定(Kantenのリサイズコマンドなど) インフラ  動的に変わるようなロールを管理   AWS情報    RedisClusterの設定/Redisサーバ・インスタンス管理    キャッシュサーバ    webappのワーカープロセス数    sqsのワーカープロセス数  CloudFormationで起動した時にエンドポイント/RedisClusterの規模を自動登録   アプリケーションのプロセスは、起動時にOmniscientの設定を元に起動する    AWS情報    ワーカー数    RedisCluster
  23. 移行コストだけではなく、普段の運用コストについても改善
  24. Omniscient、絶賛開発中なので他に良い方法やソリューションがあれば教えて下さい〜
  25. ★38分
  26. 配布に関してはVMでやろうとしていたけど重いし断念。Docker化を目論んでいる
  27. TV案件では一気にインスタンスを起動し、終わったら捨てるという運用が多いので、 それに合わせた運用改善を行いました。という話をしました。 24時間365日運用と違って、定期的に空いた期間を用いて運用改善を行いました。 今回行った改善も、実は要件によっては合わないこともあると思いますが 我々の運用フローにはハマっているし、いまのところ成功している。 まだまだ改善したいこともあったり〜 なにか良い方法があればお話きかせて下さい〜
  28. ★0分