Top Banner
DEPLOY TO LOBI @handlename KAYAC Inc.
41

Deploy to Lobi

Feb 08, 2017

Download

Internet

Hiroaki Nagata
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: Deploy to Lobi

DEPLOY TO LOBI@handlename

KAYAC Inc.

Page 2: Deploy to Lobi

WHO AM I?

長田洸明(ながた ひろあき)@handlename2010年新卒入社Lobiのサーバーサイドエンジニア

Page 3: Deploy to Lobi

INDEXこんなことをはなします

Lobiとはなんぞやデプロイの仕組みいまむかし

デプロイするときにやっていること

Page 4: Deploy to Lobi

ABOUT LOBILobiとはなんぞや

Page 5: Deploy to Lobi

LOBI

https://lobi.co/

Page 6: Deploy to Lobi

LOBIサービスについて

チャットをメインコンテンツとしたSNS2010年からサービス提供しているiOS/Android/Web版DAU等は非公開/サーバー数十~百台規模Amazon Web Service上で稼働

Page 7: Deploy to Lobi

公開グループ数は50万弱連携アプリは・・・

Page 8: Deploy to Lobi

LOBI運用・開発チームについて

チームメンバーは40名弱サーバーサイドエンジニアは10名ほど全てのサーバーサイドエンジニアにデプロイ権がある

毎日十数回のデプロイが発生

Page 9: Deploy to Lobi

入社から日が浅いメンバー・外部パートナーは除く

細かくデプロイして確認範囲を小さくする方針

デプロイ作業を日常化する→仕組み化される

MEもデプロイしてる

Page 10: Deploy to Lobi

HISTORY OF DEPLOY SYSTEMデプロイの仕組みいまむかし

Page 11: Deploy to Lobi

HISTORY2010~ git pull2013~ rsync2015~ stretcher

Page 12: Deploy to Lobi

GIT PULL$ git pull origin master

Page 13: Deploy to Lobi

GIT PULLgit repo -> servers

2010年~小規模では便利だった

本番サーバーでgit pullするだけいま何がデプロイされているのかが分かる

Page 14: Deploy to Lobi

GIT PULLしかし・・・

規模が大きくなるとつらい

巨大な.gitディレクトリ新規ホストでcloneが終わらない

Page 15: Deploy to Lobi

RSYNC$ rsync -avn src server:/path/to/dst

Page 16: Deploy to Lobi

RSYNCdeploy server -> servers

2013年~git pullに耐えられなくなった頃に乗り換え本番環境に必要なファイルだけrsync余計なファイルがないのでディスクに余裕

新規ホストのセットアップもつらくない

Page 17: Deploy to Lobi

のちにgnu parallelを使用Archer使ってた

Page 18: Deploy to Lobi

しかし・・・

更に規模が大きくなるとつらい

デプロイサーバーの帯域が埋まる

デプロイサーバーが死ぬと新規ホストが上がらない

Page 19: Deploy to Lobi

STRETCHERhttps://github.com/fujiwara/stretcher

Page 20: Deploy to Lobi

STRETCHER$ consul watch -type event -name deploy stretcher

2015年~rsyncに耐えられなくなった頃に乗り換えconsul/serfのイベントを利用したデプロイツールrefs AWS CodeDeploy, mamiya

Page 21: Deploy to Lobi

STRETCHERdaemontools serviceとして

exec setuidgid app \ consul watch \ # consulで -type event \ # eventの発火を待つ -name deploy \ # 対象は"deploy"という名前のevent stretcher # eventが発火したらstretcherを起動

Page 22: Deploy to Lobi

STRETCHERconsul eventでmanifest.ymlのURIが送られるstretcherはmanifest.ymlを見てデプロイ処理を実行

Page 23: Deploy to Lobi

MANIFEST.YMLデプロイするべきtarballの場所デプロイ先のパス

デプロイの前処理・後処理

デプロイ成功・失敗時の処理

Page 24: Deploy to Lobi

MANIFEST.YMLsrc: s3://path/to/tarball checksum: deea122cf66dd796ee46efb3cacd1e86d6a348af0a5cf5d61b88068f532917f6dest: /path/to/dest commands: pre: - ...(デプロイの前処理:クリーンアップとか) post: - ...(デプロイの後処理:アプリの再起動とか) success: - ...(成功時の処理) failure: - ...(失敗時の処理)

Page 25: Deploy to Lobi

STRETCHER IN LOBImanifest.ymlのテンプレートから生成tarballはS3に保存アプリの更新もプロビジョニングもstretcherで前処理でデプロイ操作の通知

後処理でアプリケーションの再起動、など

Page 26: Deploy to Lobi

プロビジョニングにはchefを使用stretcherにする前はchef serverを使っていたいまはstretcherでchef-soloを実行ホスト一台で処理が完結する

Page 27: Deploy to Lobi

AROUND DEPLOYデプロイするときにやっていること

Page 28: Deploy to Lobi

AROUND DEPLOYSlack botでデプロイ前チェック・周知Consul KV Dashboardに状態を記録Google Calendarにデプロイ履歴を記録etc.

Page 29: Deploy to Lobi

SLACK BOT

Page 30: Deploy to Lobi

SLACK BOTnukoというbotがいるCI通過していないと教えてくれる花金デプロイしようとするとめっちゃ怒る

Page 31: Deploy to Lobi

SLACK BOT

Page 32: Deploy to Lobi

SLACK BOT

Page 33: Deploy to Lobi

CONSUL KV DASHBOARDhttps://github.com/fujiwara/consul-kv-dashboard

Page 34: Deploy to Lobi

CONSUL KV DASHBOARD各ホストのデプロイ状況を一覧

デプロイ処理に失敗したらアラート

Page 35: Deploy to Lobi

CONSUL KV DASHBOARD

Page 36: Deploy to Lobi

GOOGLE CALENDAR

Page 37: Deploy to Lobi

GOOGLE CALENDARデプロイ作業時間を予定として記録

いつ誰が何をデプロイしたのかが分かる

Page 38: Deploy to Lobi

GOOGLE CALENDAR

Page 39: Deploy to Lobi

MORERundeckからデプロイ実行デプロイロック

一台だけデプロイ

Lambda functionのデプロイDBスキーマ変更適用ユニコーンが出たら

etc.

Page 40: Deploy to Lobi

THANK YOU!!

Page 41: Deploy to Lobi

APPENDIXファイル更新もchef実行もstretcherで!Lobiをデプロイするときにやっていること - KAYAC engineers' blogRedashとRundeckで安全・安心なサービス運用 - KAYACengineers' blog#10 Consulと連携するpull型デプロイツール stretcher -KAYAC engineers' blogLobiにおけるConsul活用事例 - KAYAC engineers' blog