SlideShare a Scribd company logo
ChatWorkの継続的デリバリー
これまでとこれから
2015/05/23
JAWS-UG Osaka 第13回勉強会 「オペレーションじょうず」
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 2
-自己紹介 -
ChatWork株式会社
藤原 吉規 CTO室
サーバーエンジニア
普段は吹田市の事務所にいます
ビジネスチャットツール「チャットワーク」を展開中
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 3
継続的デリバリとは何か?
端的に言えば、Continuous Deliveryは、Iterative
Development(繰り返し型の開発)、Continuous
Integration(継続的インテグレーション)、Continuous
Delivery(継続的デプロイ)を積み重ねていくことで、価
値を創出していく全体の流れである、と言える。
Ryuee.com http://www.ryuzee.com/contents/blog/4241
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 4
アジェンダ
• ChatWorkの運用状況
• 現状の継続的デリバリー構成
• これまでの課題と解決策
• 現在構築中の継続的デリバリー構成
• まとめ
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 5
ChatWorkの運用状況
• 2011年3月のサービス開始から4年以上経過
• 導入社数70,000社、平日は常にピークアクセス
• 機能追加・改善などで、平日はほぼ毎日デプロイ
• Scala化に向けた改善プロジェクトも同時進行
• その上で、安定稼働させることが求められている
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 6
現状の継続的デリバリー構成
タイトル
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 7
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 8
Vagrant
タイトル
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 9
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 10
課題
• 以前はEC2,RDS,S3以外のAWSサービスを使いこなせ
なかった
• スケールアウトするにはこの仕組だけでは不十分
• SQSやDynamoDBを手元で試せる環境がない
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 11
対策と効果
• Vagrantに開発環境を統一、Ansibleでセットアップ
• SQS互換のElasticMQ
• DynamoDB Local
• Vagrantでアプリケーションの動作確認を全て行える
ため、インフラの改善も行いやすくなった
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 12
TravisCI
タイトル
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 13
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 14
課題
• デプロイ時に、UnitTestをオールグリーンに保つ
• UnitTest:約4,000
• 全コードの構文・コーディング規約をチェック
• テスト実行時間の増大
• 複数プロジェクトが同時進行、テストの並行Job増大
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 15
対策と効果
• TravisCI+AnsibleでVagrantと同様の環境を構築
• お金で解決!
• TravisCIに課金して、並行稼動数を増やす
• TravisCIのJobを分割、並行稼動させて時間短縮
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 16
.travis.yml
——
language: php
php:
- 5.5
env:
matrix:
-TEST_MODE: "fixer"
-TEST_MODE:“unittest"
…
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 17
Capistrano,Fabric
タイトル
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 18
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 19
課題
• レガシーなPHPアプリケーションだけど!
• デプロイプロセスを自動化したい
• composer使いたい(AWS SDK for PHP 2)
• AutoScalingしたい
• 問題発生時に簡単にロールバックしたい
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 20
対策と効果
• AutoScalingに対応したデプロイシステムを、
Capistranoで作りこむ
• 対応できないレガシーなPHPコードは自ら修正
• サーバープロビジョニング部分は、扱いやすいFabric
を利用、全インスタンスを手元でコントロールできる
ように
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 21
対策と効果
• Jenkinsからワンクリックで無停止デプロイ
• AutoScaling用のAMI・Launch Configuration・
AutoScalingGroup更新も、Jenkinsで自動化
• 開発担当者だけで、デプロイ作業が実施できるように
なった
• サーバープロビジョニングも自動化
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 22
NewRelic,BigQuery
タイトル
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 23
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 24
課題
• デプロイ後に問題が発生しやすい
• デプロイ後にサービス負荷状況・エラーの内容ごとの
増減をすぐに確認したい
• 障害発生時に、アプリケーションの問題か、インフラ
の問題か、すばやく切り分けたい
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 25
対策と効果
• NewRelic
• AgentとAPIを利用して、サービス負荷状況・デプロ
イタイミングを可視化
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 26
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 27
対策と効果
• BigQuery
• fluent-plugin-bigqueryを利用して、Streaming API
経由でBigQueryにログ送信
• GoogleSpreadSheet+GoogleAppsScriptを組合せ
て、種類ごとにエラーを集計、ChatWorkへ通知
• 開発担当者が手軽に監視を追加できるようになった
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 28
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 29
DB マイグレーション
タイトル
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 30
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 31
課題
• 300GBを超えるマスタDB、ALTER TABLEに数時間
かかってしまう
• 長時間のサービス停止はできない
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 32
対策と効果
• RDSをMySQL5.6に移行
• Readreplicaを一旦切り離してALTER TABLE、完了
後に再replicationして追い付かせる
• あらかじめ設定しておいたメンテナンス時間に、
Readreplicaをマスタ昇格させて短時間で切替
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 33
# readreplica起動
aws rds create-db-instance-read-replica 
...
# read_only=0を指定したdb-parameter-group-nameに変更
aws rds modify-db-instance 
--db-parameter-group-name writable-mysql56 
...
# readreplicaを一旦切り離して時間がかかるALTERTABLEを実行
# 完了後に再replicationして追い付かせる
mysql> CALL mysql.rds_stop_replication;
mysql> ALTERTABLE ...;
mysql> CALL mysql.rds_start_replication;
# アプリケーションをメンテナンスモードへ
bundle exec cap production chatwork:maintenance_enable
# マスタへpromote
aws rds promote-read-replica 
...
# DB接続先を切替
bundle exec cap production deploy
# アプリケーションのメンテナンスモードを解除
bundle exec cap production chatwork:maintenance_disable
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 34
対策と効果
• RDSを最新に保つために、全RDSのインスタンス
Engineバージョンを監視
• RDSのデフォルトEngineバージョンとの差異があれ
ば、メンテナンスウインドウでアップグレード
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 35
# デフォルトEngineバージョン取得
aws rds describe-db-engine-versions --engine mysql --engine-version 5.6 --default-only
{
"DBEngineVersions": [
{
"Engine": "mysql",
"DBEngineVersionDescription": "MySQL 5.6.22",
"DBParameterGroupFamily": "mysql5.6",
"DBEngineDescription": "MySQL Community Edition",
"EngineVersion": "5.6.22"
}
]
}
# インスタンスのEngineバージョン取得
aws rds describe-db-instances --max-items 1 | jq ".DBInstances[] |
{DBInstanceIdentifier:.DBInstanceIdentifier,EngineVersion:.EngineVersion}"
{
"DBInstanceIdentifier":“chatwork-master-db“,
"EngineVersion": "5.6.22"
}
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 36
現在構築中の
継続的デリバリー構成
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved.
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 38
• CloudFormationを利用
• EC2,RDS以外のAWSサービスも全て、継続的デリバ
リーの範囲に含める
• データストレージはDynamoDBへ集約していく
• ElasticBeanstalk+Dockerコンテナ
• Blue-Green Deployment可能な構成へ
• 開発担当者も構成変更可能
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 39
まとめ
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 40
• 常に改善し続ける、停滞しては現状維持も難しい
• 既存の仕組み、外部サービスを積極的に活用する、必
要に応じて作りこむ
• アプリケーションの変更は避けられない、インフラエ
ンジニアもコードを改善すべき
• ビジネススピードを上げる仕組みづくり!
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 41
ChatWorkは
積極採用中です!
インフラエンジニアに興味がある方はぜひ!
http://recruit.chatwork.com/ja/
ChatWorkの継続的デリバリー、これまでとこれから
2015/05/23 © ChatWork All rights reserved. 42
ありがとうございました!

More Related Content

PPTX
サーバーレスで ガチ本番運用までやってるお話し
Akira Nagata
 
PDF
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
 
PDF
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
Amazon Web Services Japan
 
PDF
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
 
PPTX
比較サイトの検索改善(SPA から SSR に変換)
gree_tech
 
PDF
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
 
PPTX
CQRS+ESをAkka Persistenceを使って実装してみる。
Matsushita Satoshi
 
PDF
ロードバランスへの長い道
Jun Kato
 
サーバーレスで ガチ本番運用までやってるお話し
Akira Nagata
 
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
 
20210127 今日から始めるイベントドリブンアーキテクチャ AWS Expert Online #13
Amazon Web Services Japan
 
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
 
比較サイトの検索改善(SPA から SSR に変換)
gree_tech
 
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
 
CQRS+ESをAkka Persistenceを使って実装してみる。
Matsushita Satoshi
 
ロードバランスへの長い道
Jun Kato
 

What's hot (20)

PDF
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
都元ダイスケ Miyamoto
 
PDF
SQLアンチパターン - ジェイウォーク
ke-m kamekoopa
 
KEY
やはりお前らのMVCは間違っている
Koichi Tanaka
 
PDF
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
Amazon Web Services Japan
 
PDF
DevOps with Database on AWS
Amazon Web Services Japan
 
PDF
組み込みLinuxでのGolangのススメ
Tetsuyuki Kobayashi
 
PPTX
Jenkins使ってみた~Windows編~
Yuta Matsumura
 
PDF
react-scriptsはwebpackで何をしているのか
暁 三宅
 
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
 
PDF
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
 
PDF
これからはじめるインフラエンジニア
外道 父
 
PDF
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
PDF
IaC事始め Infrastructure as Code やってみる?
大使 梶原
 
PDF
イミュータブルデータモデルの極意
Yoshitaka Kawashima
 
PPTX
初心者向け負荷軽減のはなし
Oonishi Takaaki
 
PPTX
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
 
PDF
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
NTT DATA Technology & Innovation
 
PDF
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Kohei Tokunaga
 
PDF
nginx入門
Takashi Takizawa
 
PPTX
プロが解説!Hinemosによる運用管理テクニック
hinemos_atomitech
 
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
都元ダイスケ Miyamoto
 
SQLアンチパターン - ジェイウォーク
ke-m kamekoopa
 
やはりお前らのMVCは間違っている
Koichi Tanaka
 
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
Amazon Web Services Japan
 
DevOps with Database on AWS
Amazon Web Services Japan
 
組み込みLinuxでのGolangのススメ
Tetsuyuki Kobayashi
 
Jenkins使ってみた~Windows編~
Yuta Matsumura
 
react-scriptsはwebpackで何をしているのか
暁 三宅
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
 
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
 
これからはじめるインフラエンジニア
外道 父
 
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
 
IaC事始め Infrastructure as Code やってみる?
大使 梶原
 
イミュータブルデータモデルの極意
Yoshitaka Kawashima
 
初心者向け負荷軽減のはなし
Oonishi Takaaki
 
関数型・オブジェクト指向 宗教戦争に疲れたなたに送るGo言語入門
Tadahiro Ishisaka
 
Dapr × Kubernetes ではじめるポータブルなマイクロサービス(CloudNative Days Tokyo 2020講演資料)
NTT DATA Technology & Innovation
 
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
Kohei Tokunaga
 
nginx入門
Takashi Takizawa
 
プロが解説!Hinemosによる運用管理テクニック
hinemos_atomitech
 
Ad

Viewers also liked (20)

PDF
DDDハンズオン
Soudai Sone
 
PDF
Slerがawsで運用してきた話
Sato Shun
 
PPTX
ニイヨンサンロクゴ
Yutaka Hiroyama
 
PDF
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
Operation Lab, LLC.
 
PDF
20150523 operation jaws(JAWS-UG OSAKA #13)
Daiki Mori
 
PDF
40まで開発のリーダーだった男がインフラの運用のリーダー(見習い)になってみて
Hiroyuki Hiki
 
PDF
DeepSecurityでシステムを守る運用を幾つか
Hirokazu Yoshida
 
PPTX
【オペレーションカンファレンス 2015 Spring】 LT 僕が考えるSIerにとってのMSP
cloudconductor
 
PDF
I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -
Yoshinori Fujiwara
 
PDF
OpenStack Summit November 2014 Paris出張報告
Mitsuhiro SHIGEMATSU
 
PDF
EdisonでMQTT
shirou wakayama
 
PDF
カスタマージャーニーマップをHRで活用しよう!
玲 井上
 
PDF
Webで役立つRDBの使い方
Soudai Sone
 
PDF
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
Yuko Mori
 
PDF
Chugokudb study-20150131
Toshi Harada
 
PDF
Jenkins Workflow Webinar - Dec 10, 2014
CloudBees
 
PDF
すぐ始めれるクラウド
Soudai Sone
 
PPTX
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
sakaik
 
PPTX
Viewを使って開発を楽にする話
Isamu Watanabe
 
PDF
中国地方Db勉強会
Daisuke Kasuya
 
DDDハンズオン
Soudai Sone
 
Slerがawsで運用してきた話
Sato Shun
 
ニイヨンサンロクゴ
Yutaka Hiroyama
 
2015-05-23 クラウドの運用になって インフラエンジニアは何が変わるのか?
Operation Lab, LLC.
 
20150523 operation jaws(JAWS-UG OSAKA #13)
Daiki Mori
 
40まで開発のリーダーだった男がインフラの運用のリーダー(見習い)になってみて
Hiroyuki Hiki
 
DeepSecurityでシステムを守る運用を幾つか
Hirokazu Yoshida
 
【オペレーションカンファレンス 2015 Spring】 LT 僕が考えるSIerにとってのMSP
cloudconductor
 
I/Oを極めろ! for PHPer - NewRelicを利用したパフォーマンス改善 -
Yoshinori Fujiwara
 
OpenStack Summit November 2014 Paris出張報告
Mitsuhiro SHIGEMATSU
 
EdisonでMQTT
shirou wakayama
 
カスタマージャーニーマップをHRで活用しよう!
玲 井上
 
Webで役立つRDBの使い方
Soudai Sone
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
Yuko Mori
 
Chugokudb study-20150131
Toshi Harada
 
Jenkins Workflow Webinar - Dec 10, 2014
CloudBees
 
すぐ始めれるクラウド
Soudai Sone
 
最近始めたあなたも今日から語れるようになるMySQLの{概要と最新情報}入門@
sakaik
 
Viewを使って開発を楽にする話
Isamu Watanabe
 
中国地方Db勉強会
Daisuke Kasuya
 
Ad

Similar to 20150523 chatwork continuous delivery (6)

PDF
継続的デリバリーを支える開発環境
智治 長沢
 
PDF
[LT] Continuous Delivery
Joongjin Bae
 
PDF
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
Takashi Watanabe
 
PDF
クラウドの活用で大阪から世界へ。チャットワークの挑戦
Masaki Yamamoto
 
PDF
継続的デリバリーと読み解く Web 開発あるあるとその対策
Tetsuo Yamabe
 
PDF
継続的にデリバリーって何?
ke-m kamekoopa
 
継続的デリバリーを支える開発環境
智治 長沢
 
[LT] Continuous Delivery
Joongjin Bae
 
継続的デリバリーとサービス仮想化で変わる、エンタープライズアジャイル開発
Takashi Watanabe
 
クラウドの活用で大阪から世界へ。チャットワークの挑戦
Masaki Yamamoto
 
継続的デリバリーと読み解く Web 開発あるあるとその対策
Tetsuo Yamabe
 
継続的にデリバリーって何?
ke-m kamekoopa
 

Recently uploaded (7)

PPTX
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
PDF
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
PDF
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
PDF
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
PDF
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
PDF
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
PDF
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 
baserCMS『カスタムコンテンツ』徹底活用術〜あなただけの管理画面を自由自在に〜
Ryuji Egashira
 
20250729_Devin-for-Enterprise
Masaki Yamakawa
 
MahiroYoshida_セリフに着目したキャラクタロール推定に関する基礎検討_sigcc12th2025
Matsushita Laboratory
 
20250726_Devinで変えるエンプラシステム開発の未来
Masaki Yamakawa
 
【学会聴講報告】CVPR2025からみるVision最先端トレンド / CVPR2025 report
Sony - Neural Network Libraries
 
20250730_QiitaBash_LT登壇資料_PDC_Kurashina.pdf
pdckurashina
 
TaketoFujikawa_ComicComputing12th_inKumamoto
Matsushita Laboratory
 

20150523 chatwork continuous delivery