トラストバンクの高橋と申します。 ふるさとチョイスのサービスが立ち上がってからもうすぐ10年。 最初は小さかったサービスが現在に至るまでのサーバー構成の変遷についてまとめてみます。 それほど革新的な内容のないごくごく平凡な構成ではありますが、 これからサービスを立ち上げる方、成長途中のサービスを運用している方の参考に少しでもなれば幸いです!
なお、セキュリティ関連については、勿論、IDS/IPS、WAF、DBFWなど色々導入しておりますが、ここでは具体的な内容は伏せさせていただきます。
- 2012~2013年 サービス立ち上げ期
- 2013~2014年 寄付受付開始、絞り込み検索導入
- 2015~2017年 円熟期
- 2018年 ふるさとチョイス全面リニューアル
- 2022年~ インフラ改革
- おわりに
2012~2013年 サービス立ち上げ期
サービス立ち上げから間もない時期のトップページです。当初は以下の様なシンプルな構成でした。
サーバーは格安のレンタルサーバー1台で、Cloudflare
のフリープランのCDNを通していました。
当初はふるさとチョイス上で寄付を受け付けるという発想は無く、自治体様の寄付金の使い道やお礼の品を紹介するだけのサイトでしたので動的な要素はほぼ無く、WordPress
で十分成り立っていました。
2013~2014年 寄付受付開始、絞り込み検索導入
サービス立ち上げ2年後のトップページです。このときには既に多くの自治体様の寄付を受け付ける仕組みができあがっていました。 他、カテゴリーなどでの絞り込み機能が追加され、ログイン・マイページ機能もできあがりました。 GCF (ガバメントクラウドファンディング)も2013年から始まり、2014年末には長野県白馬村様で最初の災害支援受付が開始されました。
このときは以下のようなサーバー構成でした。
さすがにレンタルサーバーは厳しくなり、クラウド利用に移行しました。
WebサーバーとDBサーバーは分離されておらずに相乗りしており、各Webサーバーは読み込み時はローカルのDBを参照し、書き込み時はマスターサーバーのDBを参照していました。
ロードバランサーなどは特に用意せず、CloudflareのDNS機能を使って各サーバーに振り分け、Webサーバー間のファイルは lsyncd
で同期していました。
大変シンプルな構成ではありますが、それ故にスケールアウト対応も単純。ひたすらWebサーバーをコピーして増やし、Cloudflareで紐付けるだけでした。 今でこそふるさと納税は一般に浸透していますが、当時はまだ知る人ぞ知る仕組み、という感があり、ふるさとチョイスがテレビなどで取り上げられるとアクセスが急増し、その際は何名かで手分けしてひたすらサーバーをコピーする作業をしていました。(オートスケーリングなどの仕組みはありませんでした)
とあるテレビ番組で取り上げられた際は約100台を一時的に並列に並べました。本来、100台も必要になるようなアクセス数ではありませんでしたが、当時はまだ WordPress
上でサービスを開発しており、これが大変重かったため1台で捌けるアクセス数がかなり少なかったです。このときに1台で捌ける量を増やすため、外部のエンジニア様のご支援により Apache
から nginx
に移行し、nginxのページキャッシュ機能を使うことで、捌ける量が大幅にアップしました。
当時はソース管理には Subversion
を使っておりました。(後に 自前Git
→ GitHub
と変遷)
2015~2017年 円熟期
2015年2月に累計寄付件数が100万件を突破してから一気にふるさと納税の利用が拡大し、競合他社様のサービスも次々に立ち上がっていきました。2015年12月には月間1億ページビュー数を超え、 翌2016年6月には、契約自治体数が1,000自治体を超えました (全国1,788自治体中)。
そんな最中でのサーバー構成です。
より堅牢性を高めるため、データベースサーバー用にクラウドとは別に専用サーバーを購入してリモートハウジングし、クラウドサーバー用のネットワークとブリッジ接続する構成を取りました。
また、2015年まではお礼の品のフリーワード検索ができませんでしたが、 Apache Solr
を使って検索サーバーを立て、検索ができる仕組みを整えました。
お礼の品の数が大幅に増加し、画像の容量が逼迫してきたので、画像専用のサーバーを別途立てました。画像のアクセスはほとんどCDNが捌いてくれるので、月間1億ページビュー数の最中でも、Core数6のサーバー2台で余裕で捌くことができました。(それでもスカスカでした)
2015年の中頃より、Cloudflareのフリープランから一気にエンタープライズプランに切り替えました。恐らく、日本の企業の中ではかなり早いプラン導入事例だったと思われます。(当時は日本語の窓口も無くお打ち合わせも英語のみでした…)
そして相変わらず WordPress
を導入していましたが、これが原因でパフォーマンス上のネックがあったり、開発効率にも大きな支障があったため、徐々に FuelPHP
のフレームワークを使った実装に置き換えていきました。
当時は PHP界隈において、ここまで Laravel
一強時代になることを予期することができず、今思うと選択を誤ったな…、と感じております。(ただ、フレームワークの根本の考え方はそれほど変わらないです)
また、当時は NoSQL
の有用性を理解しきれておらず、Key-Valueストア
の代わりとして、もっぱらPHPの APC
を用いていました。
( memcached
など色々試してみたものの、満足するレベルではなく、たとえサーバーごとに個別にキャッシュを持つことになったとしてもAPCの方が圧倒的に速く感じた)
ふるさと納税サイトは年末に駆け込み需要があり、大幅にアクセス・寄付が伸びますが、クラウドサーバー上で相乗りによるスティールが発生しないように、1台あたりメモリー224GB確保するという荒業をとることもありました。(当時は224GB確保すると相乗りされることがなかった)
2018年 ふるさとチョイス全面リニューアル
2018年3月にふるさとチョイスを全面的にリニューアルしました。 WordPress
を完全にやめ、全て FuelPHP
で書き直しました。
そして、サーバーインフラ専門の会社様と相談しながらサーバー構成も大幅に見直しております。
今まで、Webサーバー上にDBなど色々なものが相乗りしていましたが、 Webサーバー (nginx)
→ APサーバー (PHP)
→ DBサーバー (MySQL)
の3層に分け、各層間はソフトウェアロードバランサーで繋ぎました。
これにより細かいスペック調整が可能になったのと、CPUやメモリーを効率良く使えるようになり、異常発生時の切り分けもしやすくなりました。反面サーバー構成が複雑になったために、異常発生時の緊急対応が知見のある者でないと行えなくなってしまいました。
3層に分けてみて分かったこととしては、Webサーバーはほとんどスペックや台数は必要ありませんでした。APサーバーやDBサーバーはボトルネックになることがかなり多いようです。
また、自治体様が LGWAN
ネットワーク上からふるさとチョイスの管理が行えるよう、 J-LIS
に申請して LGWANネットワークに参加しました。
DBはインターネットとLGWANの真ん中に配置し、LGWANネットワークからは LGWAN Webサーバー
→ Firewall
→ LGWAN APサーバー
→ Firewall
と、2つのFirewallを挟んでつながるようにしております。
2022年~ インフラ改革
今までトラストバンクはインフラ専任エンジニアがおらず、開発と兼務していましたが、ようやく念願のインフラに特化したエンジニアが合流し、色々な改革に着手しています。 AWSを利用した動的なスケーリング、マイクロサービス化、デプロイの仕組みの見直し、Laravelへの切り替え、その他大小様々な対応の検討が進んでおります。
おわりに
トラストバンクにご興味をお持ちいただけましたら、是非以下の募集ページをご覧ください。様々な職種で絶賛募集中です。