Deploy to Lobi

Post on 08-Feb-2017

1209 Views

Category:

Internet

0 Downloads

Preview:

Click to see full reader

Transcript

DEPLOY TO LOBI@handlename

KAYAC Inc.

WHO AM I?

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

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

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

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

ABOUT LOBILobiとはなんぞや

LOBI

https://lobi.co/

LOBIサービスについて

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

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

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

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

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

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

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

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

MEもデプロイしてる

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

HISTORY2010~ git pull2013~ rsync2015~ stretcher

GIT PULL$ git pull origin master

GIT PULLgit repo -> servers

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

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

GIT PULLしかし・・・

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

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

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

RSYNCdeploy server -> servers

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

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

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

しかし・・・

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

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

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

STRETCHERhttps://github.com/fujiwara/stretcher

STRETCHER$ consul watch -type event -name deploy stretcher

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

STRETCHERdaemontools serviceとして

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

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

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

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

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

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

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

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

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

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

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

SLACK BOT

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

SLACK BOT

SLACK BOT

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

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

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

CONSUL KV DASHBOARD

GOOGLE CALENDAR

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

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

GOOGLE CALENDAR

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

一台だけデプロイ

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

etc.

THANK YOU!!

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

top related