現在位置: ホーム ブログ Ploneで高アクセスサイトへの対応
ブログ

Ploneで高アクセスサイトへの対応

動的にコンテンツを配信するPloneの仕組み上、高アクセスサイトを運営するにはノウハウが必要です。

アクセス数による分類

当社では以下のように3つに分類しています。

標準的なアクセス

ページビューとして、一ヶ月で30万PV(1万PV/日)以下を目安にしています。

特別な設定なしでも1GB以上のメモリと2コア程度のCPUで、十分にアクセスに耐えられます。

アクセスの多いサイト

一ヶ月で30万PV(1万PV/日)以上で、300万PV(10万PV/日)以下を対象にしています。

キャッシュサーバの導入やアプリケーションサーバの複数化が必要になってきます。使用するサーバのリソースにもよりますが、nginx(Webサーバ) + Varnish(キャッシュサーバ)の導入で、ある程度はカバーできます。

瞬間的な高アクセスがあるサイト

上記以上のアクセスや、1台のフロントサーバではデータ転送量が間に合わないケースは、複数の対策が必要です。

サイトの特性に合わせて、対応策を複数準備します。

対応策

Ploneの設定

Zopeのスレッド数の設定は変更が必要です。Ploneの標準インストーラでは、「zserver-threads」が2となっています。これを増やすと同時に接続できるセッション数が増えます。

他にも内部キャッシュのメモリ設定なども適時設定を行います。

アプリケーションサーバを複数化

PloneはZEOというアプリケーションサーバを複数にすることがデフォルトでできるようになっています。これを使い、マルチコアに対応したシステム構成やサーバを複数にし冗長化も兼ねた設定が可能です。

バックエンドデータベースを複数化

上記に記載したZEOでは、データベースが1台となりボトルネックになるケースもあります。バックエンドをRDBMSに置き換えるRelStrageや複数のZODBが持てるZRSの採用を検討します。

閲覧が多い場合では、バックエンドデータベースがボトルネックになるケースは少ないので、別の方法をまずは検討したほうが良いと考えています。

データベースのマウントポイントで分割

こちらも、書き込みが多いサイト向けのノウハウです。

PloneのバックエンドデータベースはZODBというオブジェクトデータベースです。これを分割して管理することで、書き込み競合(コンフリクト)を減らしたり、内部キャッシュの効率化が図れます。

キャッシュサーバの導入

ログイン無しの閲覧が多い場合、これが一番効果が高い方法です。ログインして使用される場合もリソースデータのみキャッシュサーバにて返せると効果はあります。

キャッシュサーバはVarnishをおすすめしています。特に最新のVarnish 4.xは、バックエンドへの問い合わせ待ちブロッキングを抑えるためにスレッド分割で動作するようになり、より高速化されております。

当社では、よりVarnishの効果を出すために、nginxとの組合せをしています。nginxはApacheに比べ高速に動作し、安定的に高アクセスをさばけています。

CDNの導入

瞬間的な高アクセスに耐えるためには、CDN(コンテンツデリバリーネットワーク)の活用が不可欠です。

AkamaiAWS CloudFront など、有名なサービスがあります。他にも fastly というVarnishを活用したカスタマイズが可能なCDNも存在します。

画像やリソースファイルなどを、CDN化するだけも効果があります。詳しくは以前のエントリー「Ploneへの急激なアクセスを処理する方策(CDN化)」を参照ください。

その他

ZEO化した際にメモリキャッシュが分散してしまう問題に対処するために、memcachedを用いたり、動的サイトでも部分的にキャッシュをさせるためのESI化を行ったりすることも可能です。さらに、内部の検索に使用するZCatalogの外部化などを行うケースもあります。

まとめ

AWSをはじめとしたクラウドサービス全盛で、サーバ調達時間がほぼゼロになり、各種サービスを利用することで、様々な構成が簡単に構築できるようになりました。

高負荷時の対応は難しいものですが、柔軟な対応がとれるようにシステム設計を心がけると良いと思います。

公開サイトで一般ユーザにはログインさせないサイトということであれば、キャッシュサーバの強化である程度まかなえています。

comments powered by Disqus