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

20150523 chatwork continuous delivery

Aug 06, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリーこれまでとこれから

2015/05/23 JAWS-UG Osaka 第13回勉強会 「オペレーションじょうず」

Page 2: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 2

-自己紹介 -ChatWork株式会社 藤原 吉規 CTO室 サーバーエンジニア 普段は吹田市の事務所にいます

ビジネスチャットツール「チャットワーク」を展開中

Page 3: 20150523 chatwork continuous delivery

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

Page 4: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 4

アジェンダ• ChatWorkの運用状況

• 現状の継続的デリバリー構成

• これまでの課題と解決策

• 現在構築中の継続的デリバリー構成

• まとめ

Page 5: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 5

ChatWorkの運用状況• 2011年3月のサービス開始から4年以上経過

• 導入社数70,000社、平日は常にピークアクセス

• 機能追加・改善などで、平日はほぼ毎日デプロイ

• Scala化に向けた改善プロジェクトも同時進行

• その上で、安定稼働させることが求められている

Page 6: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 6

現状の継続的デリバリー構成

Page 7: 20150523 chatwork continuous delivery

タイトル

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 7

Page 8: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 8

Vagrant

Page 9: 20150523 chatwork continuous delivery

タイトル

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 9

Page 10: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 10

課題

• 以前はEC2,RDS,S3以外のAWSサービスを使いこなせなかった

• スケールアウトするにはこの仕組だけでは不十分

• SQSやDynamoDBを手元で試せる環境がない

Page 11: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 11

対策と効果• Vagrantに開発環境を統一、Ansibleでセットアップ

• SQS互換のElasticMQ

• DynamoDB Local

• Vagrantでアプリケーションの動作確認を全て行えるため、インフラの改善も行いやすくなった

Page 12: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 12

TravisCI

Page 13: 20150523 chatwork continuous delivery

タイトル

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 13

Page 14: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 14

課題• デプロイ時に、UnitTestをオールグリーンに保つ

• UnitTest:約4,000

• 全コードの構文・コーディング規約をチェック

• テスト実行時間の増大

• 複数プロジェクトが同時進行、テストの並行Job増大

Page 15: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 15

対策と効果

• TravisCI+AnsibleでVagrantと同様の環境を構築

• お金で解決!

• TravisCIに課金して、並行稼動数を増やす

• TravisCIのJobを分割、並行稼動させて時間短縮

Page 16: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 16

.travis.yml——language: php

php: - 5.5

env: matrix: - TEST_MODE: "fixer" - TEST_MODE: “unittest"…

Page 17: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 17

Capistrano,Fabric

Page 18: 20150523 chatwork continuous delivery

タイトル

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 18

Page 19: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 19

課題• レガシーなPHPアプリケーションだけど!

• デプロイプロセスを自動化したい

• composer使いたい(AWS SDK for PHP 2)

• AutoScalingしたい

• 問題発生時に簡単にロールバックしたい

Page 20: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 20

対策と効果• AutoScalingに対応したデプロイシステムを、Capistranoで作りこむ

• 対応できないレガシーなPHPコードは自ら修正

• サーバープロビジョニング部分は、扱いやすいFabricを利用、全インスタンスを手元でコントロールできるように

Page 21: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 21

対策と効果• Jenkinsからワンクリックで無停止デプロイ

• AutoScaling用のAMI・Launch Configuration・AutoScalingGroup更新も、Jenkinsで自動化

• 開発担当者だけで、デプロイ作業が実施できるようになった

• サーバープロビジョニングも自動化

Page 22: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 22

NewRelic,BigQuery

Page 23: 20150523 chatwork continuous delivery

タイトル

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 23

Page 24: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 24

課題

• デプロイ後に問題が発生しやすい

• デプロイ後にサービス負荷状況・エラーの内容ごとの増減をすぐに確認したい

• 障害発生時に、アプリケーションの問題か、インフラの問題か、すばやく切り分けたい

Page 25: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 25

対策と効果

• NewRelic

• AgentとAPIを利用して、サービス負荷状況・デプロイタイミングを可視化

Page 26: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 26

Page 27: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 27

対策と効果• BigQuery

• fluent-plugin-bigqueryを利用して、Streaming API経由でBigQueryにログ送信

• GoogleSpreadSheet+GoogleAppsScriptを組合せて、種類ごとにエラーを集計、ChatWorkへ通知

• 開発担当者が手軽に監視を追加できるようになった

Page 28: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 28

Page 29: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 29

DB マイグレーション

Page 30: 20150523 chatwork continuous delivery

タイトル

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 30

Page 31: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 31

課題

• 300GBを超えるマスタDB、ALTER TABLEに数時間かかってしまう

• 長時間のサービス停止はできない

Page 32: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 32

対策と効果

• RDSをMySQL5.6に移行

• Readreplicaを一旦切り離してALTER TABLE、完了後に再replicationして追い付かせる

• あらかじめ設定しておいたメンテナンス時間に、Readreplicaをマスタ昇格させて短時間で切替

Page 33: 20150523 chatwork continuous delivery

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

Page 34: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 34

対策と効果

• RDSを最新に保つために、全RDSのインスタンスEngineバージョンを監視

• RDSのデフォルトEngineバージョンとの差異があれば、メンテナンスウインドウでアップグレード

Page 35: 20150523 chatwork continuous delivery

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"}

Page 36: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 36

現在構築中の 継続的デリバリー構成

Page 37: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved.

Page 38: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 38

• CloudFormationを利用

• EC2,RDS以外のAWSサービスも全て、継続的デリバリーの範囲に含める

• データストレージはDynamoDBへ集約していく

• ElasticBeanstalk+Dockerコンテナ

• Blue-Green Deployment可能な構成へ

• 開発担当者も構成変更可能

Page 39: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 39

まとめ

Page 40: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 40

• 常に改善し続ける、停滞しては現状維持も難しい

• 既存の仕組み、外部サービスを積極的に活用する、必要に応じて作りこむ

• アプリケーションの変更は避けられない、インフラエンジニアもコードを改善すべき

• ビジネススピードを上げる仕組みづくり!

Page 41: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 41

ChatWorkは 積極採用中です!

インフラエンジニアに興味がある方はぜひ!

http://recruit.chatwork.com/ja/

Page 42: 20150523 chatwork continuous delivery

ChatWorkの継続的デリバリー、これまでとこれから

2015/05/23 © ChatWork All rights reserved. 42

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