読者です 読者をやめる 読者になる 読者になる

オールアバウトTech Blog

株式会社オールアバウトのエンジニアブログです。

オールアバウトのインフラ構成

インフラ varnish Chef

こんにちは、オールアバウトの@jp_taku2です。

今回のエントリーでは、All Aboutのインフラ構成について説明をしていきたいと思います。
オールアバウトの代表的なメディアである「All About」は、月間1億5020万PV、記事本数は17万本程あります。
まずは、そんなオールアバウトのメディアを支えるネットワーク構成から説明します。

All Aboutのネットワーク構成

All Aboutでは、言語はPHP、cacheサーバーにVarnishを使用し、WebサーバーにはApache、KVSにはredisとmemcachedを使用しています。
現在はオンプレミス環境で動いていますが、徐々にクラウドへ移行している最中です。
ネットワーク構成図は以下の図の様になっています。

f:id:allabout-techblog:20160531192418j:plain

  1. まず、全てのトラフィックロードバランサーで受け、バランシングしてVarnishへ流します。
  2. 次にVarnishに流れてきたトラフィックを、Varnishのvclロジックに合わせ遷移先のWebサーバーにバランシングします。
  3. その後、Webサーバーでは必要に応じてredisやmemcachedMySQLのDBに接続してリクエストを返しています。

Varnishの役割

弊社でのVarnishの役割は、キャッシュサーバー兼プロキシサーバーです。
弊社のサービスは同じコンテンツ内でも使用しているフレームワークPHPのバージョンが異なるため、フレームワーク毎にWebサーバーを分けています。
Varnishにより、URL単位のcache設定はもちろん、遷移先のWebサーバーを指定しているため、ほぼ全てのトラフィックはVarnishを通ります。
f:id:allabout-techblog:20160602113524j:plain

インフラ構成管理

オールアバウトでは、インフラ構成管理ツールとしてChef-Serverを利用しています。
サーバーへのミドルウェアインストールはもちろん、設定変更や脆弱性対応・ミドルウェアのアップデートにもChefを利用しています。
ChefのレシピはBitbucketで管理をしており、設定変更や構築方法・スクリプトもプルリクエストを投げ、マージされて初めて本番に適用されるようになっています。
また、Varnish等の設定をChefで行なうフローに変更した事により、1つの設定ファイルを確認環境と本番環境で共有できるようになりました。
これにより、リリース前の確認環境と本番環境の設定の剥離が無くなり正確な動作確認を行えるようになっています。
下の図は、設定ファイルの変更フローです。
f:id:allabout-techblog:20160601171707j:plain

負荷分散

WebメディアであるAll Aboutでは、HTMLと同時に画像や広告配信に関するリクエストも行われています。
これらのトラフィックを全て受けてしまうと、オンプレミス環境のためスケール出来ずにサーバーを複数台用意する必要が出てきます。
そのため、CDNを利用してJS/CSS/画像をキャッシュして、オンプレミスへの負荷をおさえています。
2015年10月まではCDNとしてAWSのCloudFrontを利用していましたが、現在はアカマイへを利用しています。

まとめ

今回は、All Aboutを支えているインフラについて簡単に書かせて頂きました。
現在のインフラ構成を書かせて頂きましたが、今後はクラウド移行が始まります。
そのため、それによって必要になったことや知見も今後は書いて行きたいと思います。