Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20150523 chatwork continuous delivery

8,771 views

Published on

Published in: Technology

20150523 chatwork continuous delivery

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

×