2016/12/3に開催されたJJUG CCC 2016 Fallで「実録Blue-Green Deployment導入記」というテーマで発表しました。
講演中でもちょっと触れたとおり、案件での事例に特化したセッションですので、皆様の現場で一般的に使えるノウハウではないかもしれません。
ですが、セッションで挙げた三つのテーマである
- サイトの切替にDNSを使う場合の接続元クライアントの挙動の制御
- データベースの取扱い
- Blue Greenの稼働系を切り替える場合の切り替え手順の考慮
については、サービス無停止でリリースを行う上で、どこでも考慮が必要になるポイントだと考えています。
質疑応答で、「Blue-Greenの切替時に処理途中で処理する稼働系が切り替わるようなケースがないのか?」という質問がありましたが、この事についてうまく回答ができなかったので、この場で補足をいたします。
例えばGreenサーバーに新しいバージョンをデプロイしてBlueサーバーからGreenサーバーに稼働するシステムを切り替える場合、Greenサーバーではセッション中で説明した通り、テスト用のグローバルIPアドレスを使って動作確認済み(スライド内で「副系」と読んでいるもの)ですので、Blueサーバーへのリクエストが途中でGreenサーバーに乗りかわるのは問題ありません。問題となるのは、Greenサーバーへのリクエストが途中でBlueサーバーに移行するようなシーケンスが発生すると、機能的に一個前のバージョンとなりますので、例えば呼び出し先のAPIがないなどの問題が発生します。
このことに対応するために、切替元となるBlueサーバーの随時バッチが起動するサーバー(スライド中の「データ連携サーバー」と呼んでいるもの)のプロセスを切替時にいったん停止する手順を入れています。(発表スライド中の以下のページなります。)このことによって、切替時にGreenサーバー(切替先)へのリクエストが途中でBlueサーバー(切替元)に乗り変わることを防いでいます。
スライドの最後で「日本のDevOpsはSIがリードする」なんていう大風呂敷を広げましたが、これについて。各種ソーシャルメディアで現場に対するネガティブな面を振りまくのは言論の自由の範疇ですが、最近、何か事をなし得たというエントリーに対して、揚げ足を取ったり話の腰を折ったりするコメントが多すぎます。ストレスの捌け口というのも必要でしょうし、キャリアの浅さやスキルの至らなさで自分のやりたいことが実現できない現場にいる方もいらっしゃるでしょうが、もうすぐ40代の自分たちの世代は、現場と業界をどうやればよりよくできているかが求められる役割なので、それが後の世代への責任ではないのかと。自分が2年前のJJUG CCCで言った「ミッションを共有するする仲間が集うコミュニティーで、プログラマーが一人一人知恵を持ち寄り、議論し、勇気づけるときに、世界はかわる、そう思う。」を、自分はまだ取り下げるつもりはないです。
JJUG CCCが終わって感想ですが、ここ2年ばかりかかり切りだった案件の成果を世に発表できたので、今は安堵しているところです。
最後になりますが、
- 発表の機会をいただいたJJUGのみなさま
- スライドのレビューをいただいたプロジェクト関係者
- 発表リハサールに立ち会っていただいた弊社同僚
以上のみなさま、ありがとうございました!