plone talk 201308_terada
TRANSCRIPT
©2013 CMScom [email protected]
Ploneを使った大規模環境でのCMSソリューション
CMSコミュニケーションズ代表 / Advisory Board Member of Plone Foundation寺田 学 [email protected] / [email protected]
http://www.cmscom.jp2013年8月7日
at Plone Talk 2013.08
オープンソースCMSを使った大規模サイト構 築のノウハウをお伝えします
自己紹介
©2013 CMScom [email protected]
•寺田 学 @terapyon•Advisory Board Member of Plone Foundation•一般社団法人PyCon JP 代表理事•Ploneコアコミッター、Zopeコアコミッター•(株)CMSコミュニケーションズ代表 http://www.cmscom.jp•一橋大学大学院 社会学研究科 地球社会専攻 元客員准教授•Plone/Zopeの専業Webシステム構築・コンサルティング•大学や政府系サイトなどを手がけています•独自にWeb検索システムの構築もしています•書籍(共著)
2
3 問題提起
©2013 CMScom [email protected]
•大規模って何をさすの?•閲覧数がそれなりに多い•ユーザ人数が多い•データの量が多い•情報の承認フローを持ちたい•すぐにデータを反映
Plone (スタンドアローン)
1台の物理サーバ又はクラウドサーバ
4 システム構成
©2013 CMScom [email protected]
最小構成管理者
管理用アクセスパスワード必要
Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
ZODB(データベースサーバ)
閲覧者
閲覧者
4 システム構成
©2013 CMScom [email protected]
大規模構成 管理者
Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
MySQL/PostgreSQL(スレーブ)
(データベースサーバ)
閲覧者
閲覧者
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Apache (Webサーバ)(ログイン用)
Varnish (キャッシュサーバ)
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Varnish (キャッシュサーバ)
HAProxy (ロードバランサ)
MySQL/PostgreSQL(マスター)
(データベースサーバ)
Memcached(一時保存ファイル)
LDAP(ユーザディレクトリ)
外部SSO認証サーバ
4 システム構成
©2013 CMScom [email protected]
よくある構成管理者管理用アクセスパスワード必要Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
ZODB(データベースサーバ)
閲覧者
閲覧者
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Apache (Webサーバ)(ログイン用)Varnish (キャッシュサーバ)
4 システム構成
©2013 CMScom [email protected]
よくある構成管理者管理用アクセスパスワード必要Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
ZODB(データベースサーバ)
閲覧者
閲覧者
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Apache (Webサーバ)(ログイン用)Varnish (キャッシュサーバ)
Plone (ZEOインスタンス)
1台の物理サーバ又はクラウドサーバ
4 システム構成
©2013 CMScom [email protected]
よくある構成管理者管理用アクセスパスワード必要Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
ZODB(データベースサーバ)
閲覧者
閲覧者
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Apache (Webサーバ)(ログイン用)
1台の物理サーバ又はクラウドサーバ
1台の物理サーバ又はクラウドサーバ
Varnish (キャッシュサーバ)
4 システム構成
©2013 CMScom [email protected]
よくある構成管理者管理用アクセスパスワード必要Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
ZODB(データベースサーバ)
閲覧者
閲覧者
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Apache (Webサーバ)(ログイン用)Varnish (キャッシュサーバ)
4 システム構成
©2013 CMScom [email protected]
大規模構成 管理者
Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
MySQL/PostgreSQL(スレーブ)
(データベースサーバ)
閲覧者
閲覧者
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Apache (Webサーバ)(ログイン用)
Varnish (キャッシュサーバ)
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Varnish (キャッシュサーバ)
HAProxy (ロードバランサ)
MySQL/PostgreSQL(マスター)
(データベースサーバ)
Memcached(一時保存ファイル)
LDAP(ユーザディレクトリ)
外部SSO認証サーバ
4 システム構成
©2013 CMScom [email protected]
•Apache(Webサーバ)•HTTPリクエストを受け取るフロントサーバ
•Varnish(キャッシュサーバ)•コンテンツのページキャッシュ•HAProxy(ロードバランサ)•セッション機能付きロードバランサ
4 システム構成
©2013 CMScom [email protected]
大規模構成 管理者
Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
MySQL/PostgreSQL(スレーブ)
(データベースサーバ)
閲覧者
閲覧者
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Apache (Webサーバ)(ログイン用)
Varnish (キャッシュサーバ)
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Varnish (キャッシュサーバ)
HAProxy (ロードバランサ)
MySQL/PostgreSQL(マスター)
(データベースサーバ)
Memcached(一時保存ファイル)
LDAP(ユーザディレクトリ)
外部SSO認証サーバ
4 システム構成
©2013 CMScom [email protected]
•MySQL/PostgreSQL(データベースサーバ)•FileStorage(Data.fs)の代わりに、RelStorageを使用し、RDBMSにコンテンツを保存
•Memcached•一時的なデータの保存
4 システム構成
©2013 CMScom [email protected]
大規模構成 管理者
Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
MySQL/PostgreSQL(スレーブ)
(データベースサーバ)
閲覧者
閲覧者
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Apache (Webサーバ)(ログイン用)
Varnish (キャッシュサーバ)
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Varnish (キャッシュサーバ)
HAProxy (ロードバランサ)
MySQL/PostgreSQL(マスター)
(データベースサーバ)
Memcached(一時保存ファイル)
LDAP(ユーザディレクトリ)
外部SSO認証サーバ
4 システム構成
©2013 CMScom [email protected]
大規模構成 管理者
Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
MySQL/PostgreSQL(スレーブ)
(データベースサーバ)
閲覧者
閲覧者
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Apache (Webサーバ)(ログイン用)
Varnish (キャッシュサーバ)
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Varnish (キャッシュサーバ)
HAProxy (ロードバランサ)
MySQL/PostgreSQL(マスター)
(データベースサーバ)
Memcached(一時保存ファイル)
LDAP(ユーザディレクトリ)
外部SSO認証サーバ
4 システム構成
©2013 CMScom [email protected]
•部分的に置き換えも可能•Apache → nginx•Varnish → Squid / Apache•HAProxy → ロードバランサ•MySQL → NEO•LDAP → 独自認証システム
4 システム構成
©2013 CMScom [email protected]
•キャッシュサーバ•画像/CSS/JavaScriptなどデータ•動的データ•キャッシュサーバのデータを更新•Purgeしたい
4 システム構成
©2013 CMScom [email protected]
•その他ポイント•zope.conf(buildout.cfg)出来ること•検討項目は?•単純に閲覧が多い?•更新が多い?•CPUコア数・メモリ量に応じた配分
4 システム構成+α
©2013 CMScom [email protected]
•他の対策は?•ESIの活用•CDN(アカマイ/CloudFrontなど)使用•データベースの分割•ハードウエアの増強
4 システム構成
©2013 CMScom [email protected]
•Plone 4以降•以前のバージョンに比べ早い•blob化 / Python2.6 or 2.7の活用•テンプレートの見直し
4 システム構成
©2013 CMScom [email protected]
•ちなみに、SSL対応したければ、フロントに立ててあるApacheで対応するだけ
•アプリケーションサーバには、内部アクセスとして、8080ポートなどで通信を行うので、従来通りとする
4 システム構成
©2013 CMScom [email protected]
大規模構成 管理者
Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
MySQL/PostgreSQL(スレーブ)
(データベースサーバ)
閲覧者
閲覧者
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Apache (Webサーバ)(ログイン用)
Varnish (キャッシュサーバ)
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Varnish (キャッシュサーバ)
HAProxy (ロードバランサ)
MySQL/PostgreSQL(マスター)
(データベースサーバ)
Memcached(一時保存ファイル)
LDAP(ユーザディレクトリ)
外部SSO認証サーバ
4 システム構成(まとめ)
©2013 CMScom [email protected]
•実績のあるオープンソースアプリ活用•Plone自体がコミュニティーで支援•全世界のエンジニアで協力し問題点解決!!
5 ユーザ認証
©2013 CMScom [email protected]
•LDAPなど既存のディレクトリシステムとの連携が可能
•SQL等の外部DB連携によるユーザ認証も可能
•PAS(PluggableAuthService)と呼ばれる、アドオンの仕組みがある
5 ユーザ認証
©2013 CMScom [email protected]
•ユーザ認証は何のために行う?•コンテンツの編集作業•公開承認作業•システムの管理•閲覧管理•その他、何かの動作を許可する前提
5 ユーザ認証
©2013 CMScom [email protected]
•権限関係の関連キーワード•ユーザ•グループ•ロール(役割)•パーミッション(権限)•上記の4つの組み合わせにより操作許可
5 ユーザ認証
©2013 CMScom [email protected]
•権限関係の関連キーワード その2•ローカルロール•オブジェクト単位の共有設定•上位継承•ワークフローの状態(State)による条件•複数のワークフロー•コンテンツタイプごと/フォルダごと
5 ユーザ認証
©2013 CMScom [email protected]
•操作許可までの動き•ユーザはロールを持っている•ロールに応じたパーミッションがマッピングされ、操作の許可がされる•共有設定で指定のオブジェクトにロールが割り当てる• 例えば編集の際のパーミッション(Modify Portal Content)はEditorロールを持つユーザに許可
5 ワークフロー
©2013 CMScom [email protected]
•デフォルトで複数のワークフローがある•自由にカスタマイズが可能•独自のワークフローの記述が出来る•ZMI / XML / CSVなどで•コンテンツタイプごとに使用するワークフローが選択できる
5 ワークフロー
©2013 CMScom [email protected]
2段階承認の例
非表示中
内部承認待ち
最終承認待ち
公開中
内部公開中
提出
内部公開
公開
承認
状態(State): コンテンツの状態を表す
遷移(Transition): ワークフローの遷移を表す
5 ワークフロー
©2013 CMScom [email protected]
•状態(State)は、コンテンツの状態を表す•パーミッション(権限) - ロール(役割)のマッピングを上書きし、閲覧権限や編集権限などを状態によって変化させる
5 ワークフロー
©2013 CMScom [email protected]
2段階承認の例
非表示中
内部承認待ち
最終承認待ち
公開中
内部公開中
提出
内部公開
公開
承認
状態(State): コンテンツの状態を表す
遷移(Transition): ワークフローの遷移を表す
5 ワークフロー
©2013 CMScom [email protected]
•遷移(Transition)は、ワークフローの遷移を表す
•別の状態(State)に遷移させるもの•遷移の条件を以下の方法で決める•パーミッション(権限)•ロール(役割)•スクリプト(条件を記載したPython)
5 ワークフロー
©2013 CMScom [email protected]
2段階承認の例
非表示中
内部承認待ち
最終承認待ち
公開中
内部公開中
提出
内部公開
公開
承認
状態(State): コンテンツの状態を表す
遷移(Transition): ワークフローの遷移を表す
5 ユーザ認証・ワークフロー(まとめ)
©2013 CMScom [email protected]
•状態(State)と遷移(Transition)を理解すれば、ワークフローは作れる
•ユーザに操作を許可させるには、ユーザが持つロールを経由して行う
•認証と操作許可は完全に分離されている
6 改ざんを防ぐ方策
©2013 CMScom [email protected]
大規模構成 管理者
Apache (Webサーバ)
Ploneコアシステム(アプリケーションサーバ)
MySQL/PostgreSQL(スレーブ)
(データベースサーバ)
閲覧者
閲覧者
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Apache (Webサーバ)(ログイン用)
Varnish (キャッシュサーバ)
Ploneコアシステム(アプリケーションサーバ)
Ploneコアシステム(アプリケーションサーバ)
Varnish (キャッシュサーバ)
HAProxy (ロードバランサ)
MySQL/PostgreSQL(マスター)
(データベースサーバ)
Memcached(一時保存ファイル)
LDAP(ユーザディレクトリ)
読み取り専用
ログインURL禁止 IP制限
7 クラウドサーバの活用
©2013 CMScom [email protected]
•IaaSと言われる、ほとんどのクラウドサーバで運用可能
•アプリケーションサーバの増強には、クラウド環境は手軽で簡単
•テスト・ステージングサーバを立ち上げるのがすぐに出来便利
7 クラウドサーバの活用
©2013 CMScom [email protected]
•選定のポイント•柔軟にアプリケーションサーバが増やせるか?•OSイメージでバックアップする方法があるか?•課金体系は、使用するアプリケーションに合っているか?