この記事は、トラストバンク Advent Calendar 2022の16日目です。
トラフィックの増加から年末を感じているSREのbutadoraです。
実は昨年のアドベントカレンダーでほぼ同じタイトルの記事を書きましたが、 今年からテックブログの運用がスタートしたということもあるので、 再掲しつつ、変化したデプロイフローについて書いていこうと思います。
サービス構成図
大分抽象化してますが、ふるさとチョイスのサービスはこのようになっています。
- 主要サービスはさくらのクラウド、さくらの専用サーバで運用しています
- 一部閉域網内向けのサービスでラックサーバをさくらのハウジングサービスで利用
- 一部サービスは今年からCloudflareやAWS上で運用しています
- 入り口はすべてCloudflare経由となっており、CDNとWAFを兼ねている
- WEBサーバやDBサーバだけでなく、LBもLinuxサーバで実装
ふるさとチョイス
- ふるさとチョイスのメインサービスである、ふるさと納税総合サイト
- 寄付することができる自治体や、自治体が提供するお礼の品を横断的に検索できるサービス
- 今年新規開発された社内システム等、一部環境はECSで構築されています。
ふるさとチョイスCMS
OEMサイト
- ふるさとチョイスに掲載されたお礼の品情報をベースにしたふるさとチョイスのOEMサイト
- WEBサイトの形で法人向けサービスとして提供しています
OEM API
- ふるさとチョイスに掲載されたお礼の品情報をベースにしたOEM APIサービス
- 今年リリースされた新しいサービスでECSで構築されています。 www.trustbank.co.jp
読むふるさとチョイス
- 今年の1月にリリースされた地域の魅力を発信するWEBメディアサービス www.trustbank.co.jp
- WordPressで構築されており、以前にSREのTocyukiが記事を書いていますのでこちらもどうぞ tech.trustbank.co.jp
特設サイト
- 例年開催している、「ふるさとチョイス大感謝祭」や「ふるさとチョイスAWARD」の特設サイト daikanshasai.furusato-tax.jp award.furusato-tax.jp
- 今年からCloudflare Pagesを採用して、サーバレスと構成なっています🎉
- Cloudflare Zero Trustで認証機能をつけることができたり、PR毎のプレビュー環境機能があったりとすごく便利です
- 当初はその他社内ツールで使い始めたCloudflare Pagesでしたが、上記特設ページ以外にもいくつかの静的ページでの利用が進んでいます
トラフィック特性
CDN
Cloudflareで受けている、月ごとのトラフィック総量をグラフにしてみました。
一年の上半期とくらべると、12月は5倍ほどのトラフィック量となっており、 やはり年末である12月が1年でトラフィックが最も増えるシーズンとなっています。
WEB
CDNの後ろにいるWEBサーバのアクセス数はこんな感じです。
具体的な数字はお見せできないですが、11月頃から徐々に増えはじめ、 世間的に年末休みとなる頃から大晦日にかけて爆増する様子です。
今年のおもしろ特性
通常の平日深夜帯は下図のとおりアクセス数は指数的に減少していく傾向となっています。
しかし、2022/12/6(火)の深夜帯はこのように3:00頃までアクセス数に波があり、その後線形的に減少していくといった傾向となっていました。
お気づきの方もいるかもしれませんが、この日はサッカーW杯のクロアチア戦が0:00キックオフで皆さん夜ふかししていたようです⚽️
1:00前後でアクセスが急上昇しているのは、ABEMAでW杯配信のアクセス制限がかかったタイミングが影響していたりするのかもしれないです。
マシンスペック
こんなトラフィック特性のトラストバンクの年末をどのようなマシン構成で迎えるか? とあるアプリケーションサーバのスペックは...
\ドン!!/
とあるDBのスペックは... \ドドン!!/
といった具合に各サーバ専有ホストで、 * アプリケーションサーバ: 10core、24GBのマシン数十台 * DBサーバ: 20core、224GB(最大スペック)のマシンを数十台 を並べて12月の大規模トラフィックを待ち受けています💪
デプロイフロー
ここでは、ふるさとチョイス、ふるさとチョイスCMSのデプロイフローを紹介します。 コード管理にはGithub Enterprise Serverを利用しており、デプロイツールにはJenkinsを利用しています。
PR作成をトリガーとした自動デプロイのフローと、JenkinsのWeb UI上から起動する手動デプロイがあります。
下図のようにパラメータ指定で環境、ブランチ、AWS or さくらを指定できる事ができるようになっています。
AWSへのデプロイフローは昨年時点で完成していましたが、さくら環境へののデプロイフローは今年追加したので後述します。
開発・ステージング環境
弊社の開発・ステージング環境はAWSで構築しており、大きくtest/staging環境とfeature環境と呼ぶ2つがあります。
- feature環境
- Jenkinsパイプラインを用いてGithub上でPRが作成されると立ち上がる環境(上図青線)
- 詳しい説明はSREのTocyukiが昨年書いたアドベントカレンダーをどうぞ qiita.com
- test/staging環境
本番・LGWAN環境
各サーバへのデプロイにはlsyncが使われており、親となるmasterサーバにリソースが配置されると各サーバに配布される仕組みとなっています。
仕組みが昨年まではmasterサーバ上でgit pullすることでの更新となっていましたが、 前述の通り、今年はtest/staging環境同様にJenkinsのUI上からデプロイすることができるようにしました🎉
masterサーバをオンプレミスインスタンスとしてCodeDeployへ登録し、 デプロイグループを追加することで同一のアプリケーションでAWS/さくら両環境へのデプロイを可能としています。
工夫点として、appspec.yml
のBefore/AfterInstallで各グループで違う処理をさせたかったため、
以下のようなbashの変数展開を使って条件分岐させています。
if [ ! ${DEPLOYMENT_GROUP_NAME%%*-for-sakura} ]; then # デプロイメントグループ名が-for-sakuraである時に実行 else # デプロイメントグループ名が-for-sakuraでない時に実行 fi
あとがき
思いの外ふるさとチョイスに関連するインフラ環境のアップデートが多く、1年を振り返る良い機会になったと共に、 徐々にインフラ環境が改善されていっていることを改めて実感しました。
昨年の転載で手抜きできるかなと思って書き始めたとは言えない
来年もCloudflareやAWSを活用したアップデートをお届けできるように精進していきます💪
宣伝
AdventCalendar2022開催中!
この記事もですが、
明日は今年JoinしたSREのiwateaがなにか書いてくれる予定ですのでお楽しみに🥳
エンジニア募集
弊社ではSREを絶賛募集中です。 興味がある方はぜひ一度お話しましょう!
- Local Government Wide Area Networの略。参考: J-LIS LGWAN について↩