20150523 chatwork continuous delivery

42
ChatWorkの継続的デリバリー これまでとこれから 2015/05/23 JAWS-UG Osaka 第13回勉強会 「オペレーションじょうず」

Upload: yoshinori-fujiwara

Post on 06-Aug-2015

4.961 views

Category:

Technology


1 download

TRANSCRIPT

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を一旦切り離して時間がかかるALTER TABLEを実行# 完了後に再replicationして追い付かせるmysql> CALL mysql.rds_stop_replication;mysql> ALTER TABLE ...;mysql> CALL mysql.rds_start_replication;

# アプリケーションをメンテナンスモードへbundle exec cap production chatwork:maintenance_enable# マスタへpromoteaws 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

ありがとうございました!