Blue-Green DeploymentをDJに例えて説明してみる

冬ですね。今年もこの時期がやってきました。  
[Ateam Lifestyle x cyma Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ateam-lifestyle-cyma)の21日目は、 [株式会社エイチームライフスタイル](https://life.a-tm.co.jp/) のシニアエンジニア @dabits が担当します。  
  
趣味でアニソンDJをしていますが、最近仕事をしていてDJとBlue-Green Deploymentって一緒じゃね？と思ったので例えて説明できるかチャレンジしてみました。

## TL;DR

- DJとBlue-Green Deploymentは本質的にはやっていることが一緒
- DJは曲を、Blue-Green Deploymentはサービスを絶え間なく切り替えるための仕組み
- ストイックなDJの現場でキャリアを積むと、エンジニアとしてのキャリアにも良き影響があるかも

## DJは何をしているのか？

![qt_001.png](https://qiita-image-store.s3.amazonaws.com/0/105037/f9dd96f4-e2bc-6adb-c54e-1e21dda9f018.png)

DJについて語りだすと「DJ論警察」みたいな人が一部居て賛否両論議論が発生するのですが、この場で定義するDJとは、「音楽を絶えず再生しながら曲の紹介をする人」のことを指します。 
巷のイメージですとなにやらターンテーブルをチュクチュクやっている感じがありますが、手元ではどんな機材を触っているのでしょうか。 
少し見てみましょう。

### 機材構成と役割

![qt_002.png](https://qiita-image-store.s3.amazonaws.com/0/105037/d8ad40d9-aa0d-f13f-e469-c4abacb5d3a9.png)

- プレイヤーx2台 : 曲を再生する
- ミキサー : 再生するプレイヤーを切り替える
  
ざっくり説明すると上記のとおりです。他色々カッコいいツマミなどがありますが、今回の記事にはあまり関係ないので説明を省きます。 
興味を持ったら近くのDJに聞いてみてください。

### DJの流れ

ではDJは何をしているのか。その流れの概略を見てみましょう。  

<img src="https://qiita-image-store.s3.amazonaws.com/0/105037/90f14a23-fa87-deed-c8e2-59a71b5f1aa4.png" width="20%"/><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/39b58f5b-aeb3-74f1-8acb-4a12e6eb714f.png" width="5%" /><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/3c14ce19-b717-cc13-87df-59521ee70a00.png" width="20%"/><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/39b58f5b-aeb3-74f1-8acb-4a12e6eb714f.png" width="5%" /><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/d16740b5-54e6-7c2d-d031-4dc715dc28e1.png" width="20%"/><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/39b58f5b-aeb3-74f1-8acb-4a12e6eb714f.png" width="5%" /><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/04da5932-8aa6-fbcd-6d2e-2722f6102522.png" width="20%"/>
  
- (すでに片方のプレイヤーで曲が再生されていることを前提として)

1. 片方のプレイヤーで曲を選択する
2. ヘッドホンで選択した曲を視聴し、頭出しをする
3. 準備ができたら曲を再生し、ミキサーを使って曲を切り替える
4. 曲の紹介盛り上がる感じでする
5. 1に戻り、繰り返す
  
各プレイヤーをA,Bと定義するとA->B->A->Bと交互にプレイヤーを使用しつつ、出力している音楽はどちらか片方なのがわかりますね。  

## Blue-Green Deploymentは何をしているのか？

Blue-Green Deploymentは何をしているのでしょうか。 
こちらは「サービス更新しながらを絶えず提供する機能」のことを指します。 
とはいえどんな構成なのかがこのままではよくわからないので図で見てみましょう。

### システム構成と役割

![qt_004.png](https://qiita-image-store.s3.amazonaws.com/0/105037/25b341e9-027e-7a6b-8d2b-8f96c57ece3d.png)

- 本番環境x2 : サービスを提供する
- ロードバランサー : 提供する本番環境を切り替える

ざっくり説明すると上記のとおりです。厳密にいうとロードバランサーは本来の意味合いが違ったりするのですが、今回の記事にはあまり関係ないので説明を省きます。  
興味を持ったら近くのエンジニアに聞いてみてください。

### Blue-Green Deploymentの流れ

ではDJのときと同じようにその流れと概略を見てみましょう。  

<img src="https://qiita-image-store.s3.amazonaws.com/0/105037/11519c38-03d4-52cf-74d9-4f5b3be36661.png" width="20%"/><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/39b58f5b-aeb3-74f1-8acb-4a12e6eb714f.png" width="5%" /><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/fa53a8c5-07e1-3c5b-778f-d18665b2aa42.png" width="20%"/><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/39b58f5b-aeb3-74f1-8acb-4a12e6eb714f.png" width="5%" /><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/2104b3de-2db2-790c-8f68-d87d56b04714.png" width="20%"/><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/39b58f5b-aeb3-74f1-8acb-4a12e6eb714f.png" width="5%" /><img src="https://qiita-image-store.s3.amazonaws.com/0/105037/dcb233be-580a-fd27-0ebb-95279e740003.png" width="20%"/>
  
- (すでに片方の本番環境でサービスがされていることを前提として)

1. 片方の本番環境(Blue環境)で新しい変更を加えたプロダクトをデプロイする
2. Blue環境でデプロイしたサービスを動作確認する
3. 準備ができたらロードバランサーを使って本番環境を切り替える
4. (必要に応じて)リリース情報を告知する
5. 1に戻り、繰り返す

各本番環境をA,Bと定義するとA->B->A->Bと交互に本番環境を使用しつつ、リリースしているサービスはどちらか片方なのがわかりますね。  

## まとめ

ここまでくるとDJとBlue-Green Deploymentの共通点が見えてきたのではないでしょうか。まとめると下記の通りとなります。  
  
| DJ | Blue-Green Deployment |
|-----------|------------|
| プレイヤーx2台 | 本番環境x2 |
| ミキサー | ロードバランサー |
| 片方のプレイヤーで曲を準備 | 片方の本番環境(Blue環境)で新しい変更を加えたプロダクトをデプロイ |
| ヘッドホンで選択した曲を視聴 | Blue環境でデプロイしたサービスを動作確認 |
| ミキサーを使って曲を切り替え | ロードバランサーを使って本番環境を切り替え |

ストーリーベースで例えると以下のようになります。

どちらかの環境(プレイヤー)でお客様に機能(曲)を提供している間、エンジニア(DJ)は次の新機能(曲)を提供するためもう片方のBlue環境(プレイヤー)でデプロイ(選曲)をします。
新機能の動作確認(曲の視聴)を終えた後、準備が完了したタイミングでロードバランサー(ミキサー)を使って本番環境(再生しているプレイヤー)を切り替えます。 
この切り替え前の環境をBlue環境、切り替え後の環境をGreen環境といいます。 
切り替え後、使っていない本番環境(プレイヤー)をBlue環境と定義し、再度次の新機能リリース(曲の再生)に向けて準備を繰り返します。

よって、DJとBlue-Green Deploymentは本質的にやっていることは一緒と言えます。

## おわりに

Blue-Green Deploymentにおいて1人でリリースする頻度は多くても1日数回ですが、DJは1曲数分のため、1時間などの枠の間に数十回のリリースを重ねることになります。
実際にGreen環境にした際、思いもよらぬユーザからのFBもあるのではないでしょうか。その時エンジニアはBlue環境に戻すことが多いですが、DJですと曲の切り戻しはご法度でもあるため、機転を利かせてGreen環境へのリリースサイクルを早め、高速に次の曲をリリースしてあげる必要があります。
このようにDJのストイックな現場で培ったスキルは、あなたのエンジニアキャリアに良き影響を与えるのではないでしょうか。

今回はBlue-Green Deploymentについての解説をDJにたとえてしてみましたが、これ以外にもDJを学ぶとエンジニアリングに生きるスキルや考え方が多く身につきます。
社内でこの手の話題を話し尽くしたので、これからは外部にどんどんアウトプットしていきたいと思います。
もし興味を持たれましたら積極的にDJを学んで、最高のエンジニアリングをしていきましょう。

[Ateam Lifestyle x cyma Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ateam-lifestyle-cyma)の22日目は、@ryo_cyが記事を書きます。
どんなテーマで書くのか楽しみです。

------

エイチームグループでは、一緒に働けるチャレンジ精神旺盛な仲間を募集しています。興味を持たれた方はぜひエイチームグループ採用サイトを御覧ください。
https://www.a-tm.co.jp/recruit/