More Related Content Similar to 実録Blue-Green Deployment導入記 (20) More from Hiroyuki Ohnaka (20) 実録Blue-Green Deployment導入記6. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
「継続的デリバリー」
「本番環境としてまったく同じ環境を2組用意す
るという考え方で、それぞれをブルーおよびグ
リーンと呼ぶ。」
Jez Hunble, David Farley(著) 和智右桂、髙木正広(訳)
「継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化」
7. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
クラウド時代のBlue-Green Deployment
「Deep Dive into Blue/Green Deployments on AWS」
http://www.slideshare.net/AmazonWebServices/dvo401-deep-dive-into-bluegreen-deployments-on-aws
8. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
Blue-Greenを実現する方法
• In Place: インスタンスはそのままに、新し
いリビジョンのアプリのみその場で反映され
る
• Blue/Green: 新しいリビジョンのアプリ用に、
新しいインスタンスを構築して入れ替える
AWS Solutions Architect ブログ: Blue/Greenデプロイとは?
http://aws.typepad.com/sajp/2015/12/what-is-blue-green-deployment.html
15. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
インフラエンジニア爆誕
By Gsmith1of2 at English Wikipedia [Public domain], via Wikimedia Commons
https://commons.wikimedia.org/wiki/File%3ANetworkOperations.jpg
19. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
システムの構成
• ユーザー向け機能およびバックオフィスと、
ユーザーの認証およびシングルサインオンを
行うサーバー(認証サーバー)の二系統
• 認証サーバーはMulti-AZ(Availability Zone)
• 外部へのデータ連携はデータ連携サーバーが、
Spring Batchのジョブを随時起動する
23. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
ということで、Blue-Green
Deploymentに取り組むわけですが...
最初からBlue-Green Deploymentを想定して
開発できるなら、その方が絶対にいいです!
Blue-Green Deploymentの導入のために何回
夜勤をしたことか...(TT)
24. #ccc_g11
Copyright 2016 Hiroyuki Onaka
Blue-Green
導入の障壁
https://pixabay.com/ja/%E8%83%B8%E5%A3%81-%E5%A3%81-%E7%9F%B3%E5%A3%81-castelgrande-
%E3%83%99%E3%83%AA%E3%83%B3%E3%83%84%E3%82%A9%E3%83%BC%E3%83%8A-%E4%B8%AD%E4%B8%96-418950/
34. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
本来なら、独立したサービスがそれぞれ
ルーティングを切り替えればよい
BY Rose and Trev Clough(CC-BY SA 2.0) http://www.geograph.org.uk/photo/1490900
49. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
WebブラウザーによるDNSキャッシュ
Ben Anderson 「Why Web Browser DNS Caching Can Be A Bad Thing」
http://dyn.com/blog/web-browser-dns-caching-bad-thing/
52. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
Javaプログラムから外部サーバーに接続する際、
JVM上のDNSキャッシュを無効にするために起
動オプションを付与する
(例: -Dsun.net.inetaddr.ttl=0
-Dsun.net.inetaddr.negative.ttl=1)
というノウハウがありますが、それだけでは不
十分なケースがあります。
59. #ccc_g11
Copyright 2016 Hiroyuki Onaka
真田丸
(データベース)
By うぃき野郎 (Own work)
[CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0)], via Wikimedia Commons
https://commons.wikimedia.org/wiki/File:Restructured_Model_of_Sanadamaru_Fort1.jpg
61. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
• 動作確認のために新バージョンのアプリケー
ションが作成したデータを旧バージョンのバッ
クオフィス機能で参照した時に、エラーが発生
しないようにする
• エンドユーザー向け機能はマルチテナントのアーキテ
クチャーになっているため新旧のデータが動作時に混
在することは少ないが、バックオフィス機能は全テナ
ントのデータを一括で扱うため
63. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
で、うまくいくと思ったのですが...
• データ構造の変更を伴わないマスターデータ
の更新(仕様変更)を行った際に、切り替え元
(旧バージョン)の動作で支障を来すケースが
発生。
• 具体的にはURLに対するアクセス認可のマス
ター
65. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
「マイクロサービスアーキテクチャ」から
「第2の選択肢は、代わりにこの共有静的データ
をコードとして扱うことです。...データの一貫
性に関する問題は残りますが、経験から、稼働
中のデータベーステーブルを変更するよりも変
更を構成ファイルに展開する方がはるかに簡単
であることがわかります。」
66. #ccc_g11
Copyright 2016 Hiroyuki Onaka
By Snlf1 (Own work)
[CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0)], via Wikimedia Commons
https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Akazonae_Sanada.jpg
夏の陣
(Blue-Green)
68. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
その前に、私達のドメインの用語の確認
をさせてください
• 主系…Blueサーバー/Greenサーバーの内、サービス
インしている系統。本番環境。切替後は副系になる。
• 副系…もう一方の、新しいバージョンをデプロイし
て、動作確認を行っている系統。切替後は主系にな
る。
「Blueが主系、Greenが副系」という言い方をします。
72. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
非同期処理の連携
アクセスが来た後、データ連携を行うまでの、サー
バー間のトランザクションは、主系サーバー、副系
サーバー相互で連動して動くようにする
Blueサーバーが主系の時、主系(Blueサーバー)が登
録したデータは、同じく主系(Blueサーバー)のデー
タ連携サーバーが処理する
74. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
対処法
• BlueサーバーとGreenサーバーどちらが主系でどち
らが副系かをデータベース上に保持し、参照する。
• O/Rマッパー(Hibernate)上の処理にinterceptorを
適用して、データベース上に投入するレコードが、
主系が投入したレコードなのか、副系で投入したレ
コードなのか、区別がつくようにする
86. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
なぜこうなるか
ロードバランサーやサーバーなど、複数の機器
の状態を手順を踏んで変更しているが、その操
作をアトミックにはできないため、両方のサー
バーが一旦主系になるなど、手順を踏む数が多
くなっている。
このこと自体は、どこでも起き得ることです。
87. #ccc_g11
Copyright 2016 Hiroyuki Onaka
http://startupstockphotos.com/post/82514406502/we-create-here-in-the-making-folks-read-the-blog
Blue-Green
Deployment
を支える技術
88. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
自動化
切替時にロードバランサーやアプリケーション
の切替に複雑な手順を踏んでいますが、Blue-
Green Deploymentの導入前からリリースに関
する作業の自動化を地道に進めていたので、CI
サーバーからワンクリックで切り替えられるよ
うになっています。
97. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
「素早くリリースする」のがDevOpsではない
「Opsの役割は、ビジネスを実現することであ
る」
- John Allspaw, 「10+ Deploys Per Day: Dev and
Ops Cooperation at Flickr」から
100. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
富士通がAdvent Calendarに参加することになった理由
富士通がAdvent Calendarに参加することになった理由 – blog
http://tnaoto.hatenablog.com/entry/2016/12/02/114611
103. #ccc_g11
Copyright 2016 Hiroyuki Onaka
#ccc_g1
ありがとうございました!
• 大中浩行(Onaka,Hiroyuki)
• @setoazusa
• グロースエクスパートナーズ株式会社
アーキテクチャソリューション部
テクニカルリード
• http://blog.fieldnotes.jp/