デプロイって、なにしてるの?

こんにちは!
サーバーサイドエンジニアをやっております。

 

(ほとんど)毎日行っているデプロイ作業の裏側が、一体どうなっているのかを探ってみます〜!! 😎
普段は諸先輩方が組んでくれたシェルスクリプトをほぼ叩くだけになっているのです(._.)
いい機会なのでどんな工夫が凝らされているのか、見ていこうと思います!

サービスの規模

僕の担当しているゲームアプリではGvG(合戦と呼ばれています)をメインとしており、その時間帯になると多大なリクエストが押し寄せます。だいたい、1日のリクエストのうち、約半分がその間に集中するということです。なかなか多そうですね。。 😯
ということで、それらのイパーイなリクエストを捌くために、私たちは大量のwebサーバーを運用しています。

 

これら大量のwebサーバーに、どのような感じでデプロイしているのでしょう…?というのが今回のテーマで御座います。

デプロイ

デプロイ、ってみなさんどのようにされているのでしょう。人生で初めてwebサービスに関わっているので、他がわからないのです。

 

「デプロイ方法」でググったところ、本番環境にrsyncで配る、git pullする、ftpでファイル転送する….等あるらしいですね。。
我々は、以前はそれぞれのwebサーバーに直列(*1)でrsyncしていたそうです。
が!この方法にはこんな問題があります。

 

普段このようにLB(ロードバランサ)がリクエストをそれぞれのwebサーバーに振り分けているのですが、

 

blog_deploy_01

 

 

これを、普通に(順番に)デプロイ = rsyncしてしまうと、webサーバーの台数が多いので、デプロイ開始からデプロイ完了までに時間差があって、

 

blog_02

 

あれれ〜!リクエストによってソースが違って困っちゃうよ〜!助けてドラえもん〜〜! 😥

 

・・・ということになるのです。確かにこれでは困ってしまいます。

そこで!登場するのがCapistranoです !!

 

blog_3

これを使うと、なにができるのでしょう??

 

「順番にrsyncするけど、まだ本番には出さないでね。みんなにデプロイし終わったら、いっせーのーせ でデプロイしたソースに切り替わってね」なんてことができるわけです。

 

Capistranoを使った場合のデプロイでは、デプロイ中に一台のwebサーバーには二種類のソースが共存します。このとき、すべて古い方にリクエストが送られるようにします

 

blog_03

 

全てのwebサーバーにrsyncしてソースを配り終わります。

 

blog_04

ここで、いっせーのせー で、新しいソースに切り替えます!クルリ!(*2)

 

blog_05

 

リクエスト先が、新ソースに向きました!と、こんな感じに複数のwebサーバーで同時に新ソースに切り替えることをCapistranoはお手伝いしてくれるのです。
おー。。これでデプロイ中に送られ続けるリクエストを、うまいことwebサーバーのバラつきなく捌くことができるそうです。

 

なるほど!!

 

…とまあ、デプロイはおおまかにこんな感じらしいッス。

 

いつもの作業は、

というコマンドを叩いてるだけなのですが……

 

 

よし!!次回はこのシェルスクリプトの中身を深堀りしていくぞ〜!

 


 

(*1)”並列” の反対を意味したいのです….つまり、同時ではなく、前のサーバーのrsyncが終わってから、次のwebサーバーに移るということです。

 

(*2)クルリ、と、この書き方だとリクエスト自体が変わってしまったように見えてしまいますが(すみません!!)、実際はwebサーバーの中でシンボリックリンクを張り替えています。詳細はまたの機会に !!

 

blog_06

 

株式会社Sumzap 採用情報

  • このエントリーをはてなブックマークに追加