Coding CDN in MoneyForward

こんにちは。
インフラエンジニアの鈴木です。

MANABIYA -teratail Developer Days にて
「Coding CDN in MoneyForward」というタイトルでLTをしてきました。

本日はその紹介させていただきます。
 

LTについて

発表スライドはこちら
https://speakerdeck.com/syosuke1024/coding-cdn-in-moneyforward-1

テーマはこちらの2点

  • CDN、LB、リバプロ等、フロント周りの悩みをfastly(CDN)を入れて解決した話
  • fastlyのデプロイをコード化、自動化した話

そして、時間の都合で話しきれなかったことがスライドに詰まっています。
(5分では話し切れないことがいっぱい)

ご興味ある方は、スライドをご覧ください。
 

スライド見てくださった方に補足

内容が多すぎてスライドで書ききれなかった点を補足します。
 

散らかり倒したリバースプロキシのコンフィグ

Nginxでリバースプロキシの機能以外にも、以下のことを実施していました。

  • Basic認証
  • 特定IPからのリクエストブロック
  • バックエンドへのリクエストにヘッダー付与
  • ロードバランシング
  • バックエンドの動的切り替え
    • 具体的には、Sorryページ表示に使ってました
    • ローカルのフラグファイル有無によって、振り分け先を変えてSorry表示

他にも小さい仕様だと色々あるのですが、数十台のサーバそれぞれに上記の設定があり、かなり運用が面倒なことになってました。
上記の設定を全てfastlyで代替しコード化することで、時間をだいぶ削減できました。
 

他人のキャッシュが見えてしまう

弊社のサービスのように、ユーザからセンシティブな情報をお預かりしているサービスの場合、CDNを導入によって「他人のキャッシュが見えてしまう事」は絶対に避けなければいけません。

サービスの選定や設計において意図しないキャッシュを避ける事をまず第一に考えましたが、結果的にfastlyの柔軟なコンフィグレーションのお陰で十分な対策を立てられました。


(公開できる範囲のお話で)マネーフォワードではキャッシュの条件として、以下のような条件を組み合わせています。

  • リクエストドメインが特定のドメインであること
  • リクエストパスが特定のパスであること
  • ファイルの拡張子が特定のものであること
  • バックエンドのリターンコードが200であること
  • バックエンドからのレスポンスに特定のヘッダーが付与されていること

全てがアンド条件ではなく組み合わせて使っていますが、これらの条件を乗り越えたものだけがキャッシュされます。
(これ以外にも無数の条件を設定可能)

こういった細かいコンフィグレーションが可能なのが、fastlyの一番良いところです。


ちなみに、条件が多いと、キャッシュヒット率が低すぎてCDNの効果がないんじゃないのか?と思う方がいるかも知れません。

マネーフォワードのサービスで見ると、キャッシュされるリクエストは5%〜30%(※)。

この数字を見ると少なすぎますが、その5%〜30%のレスポンスのBodyのサイズが大きく、トラフィック量の多くの部分を占めています。

そのため、トラフィック料としては50%〜90%(※)の削減効果があり、十分であると判断しています。
(※サービス毎に違う値です。)

みなさんの環境で最適なバランスをご検討ください。


余談ですが、マネーフォワードでは、社内管理機能の一部においてもfastly経由にしました。
社内なので、リクエスト頻度も少なく、キャッシュもされません。
というより、キャッシュを全くしないようにしました。
全くキャッシュさせないCDNです。
とても新しくないですか?(笑)

なぜこんな事をするのか?

  • IPアドレスによるアクセス制限、ロードバランシング、ヘッダー付与をやりたい
  • Nginxでやっていたけど、fasltyでやった方がサーバ管理なくラク
  • キャッシュしたい要件がなく、キャッシュするリスクがある

という事で、「キャッシュさせないCDN」が完成しました。
元々リクエストが少ないので、社内管理機能をfastly経由にする事でかかるお金は月数百円。
それで上のようなメリットを享受できます。
 

faslyのデプロイについて


プロビジョニングツールどれ使うか、結構迷いました。

特に「fasltyで何が出来て、何をやりたいのか」を整理しながらの選定だったのが大きいと思います。

上記の表のように、fastlyのコンフィグを4つに分類して評価するのは、ツール選定の上で効果的かと思います。
利用する環境においてツール選択の際やfasltyのコンフィグレーションの理解に、ぜひ参考にしてください。

マネーフォワードでは、CustomVCLも状態設定も必須だと思ったのでcodilyを採用しましたが、状態設定が不要ならば、使い慣れていてより広まっているansibleにするという選択肢もあったと思います。

必要な機能を見定め、みなさんの環境で最適なものを選択してください。
 

最後に

マネーフォワードでは、「新しいサービス大好き」、「インフラ全てコード化してやる」、そんなインフラエンジニアを募集しています。
ご応募お待ちしています。

【採用サイト】
マネーフォワード採用サイト
Wantedly | マネーフォワード

【マネーフォワードのプロダクト】
自動家計簿・資産管理サービス『マネーフォワード』
Web
iPhone,iPad
Android

「しら」ずにお金が「たま」る 人生を楽しむ貯金アプリ『しらたま』
Web
iPhone,iPad

ビジネス向けクラウドサービス『MFクラウドシリーズ』
バックオフィス業務を効率化『MFクラウド』
会計ソフト『MFクラウド会計』
確定申告ソフト『MFクラウド確定申告』
請求書管理ソフト『MFクラウド請求書』
給与計算ソフト『MFクラウド給与』
経費精算ソフト『MFクラウド経費』
入金消込ソフト『MFクラウド消込』
マイナンバー管理ソフト『MFクラウドマイナンバー』
資金調達サービス『MFクラウドファイナンス』

メディア
くらしの経済メディア『MONEY PLUS』

Pocket