Upload
shinichiro-takezaki
View
926
Download
3
Embed Size (px)
Citation preview
Copyright © Virtual Technology, Inc
ぶいてく流 スケーラブルアプリの作り方
2012(前編)
2012/8/18 有限会社バーチャルテクノロジー
1
Copyright © Virtual Technology, Inc
• 竹嵜伸一郎 (たけざき しんいちろう) • 寺田典子(てらだ のりこ)
• (有)バーチャルテクノロジー – 分散KVSのミドルウェア開発(ReflexWorks)
2
Copyright © Virtual Technology, Inc
Agenda 1.なんでスケーラブルにするのか 2.どうすればスケーラブルになるか
2−1.アプリの観点 2−2.システムの観点
3.ReflexWorksの概要 4.スケーラブルアプリの設計 5.データの一貫性 6.アクセス制御とソーシャル化 7.大規模Web帳票システムの事例(LT)
3
Copyright © Virtual Technology, Inc
1. なんでスケーラブルにするのか
4
Copyright © Virtual Technology, Inc
パフォーマンスと全体最適化の問題
• パフォーマンスの問題 – データが増えると遅くなる – アクセスが多くなると遅くなる
• 全体最適化の問題 – VMの全体最適化では不十分
5
Copyright © Virtual Technology, Inc 6
Scale-up vs Scale-Out Scale-Up Scale-Out
性能は、価格に比例 性能の高いサーバは、極端に高くなる 性能の頭打ち(ムーアの法則)
廉価サーバ
Copyright © Virtual Technology, Inc 7
2−1.どうすればスケーラブルにな
るか(アプリの観点)
Copyright © Virtual Technology, Inc
論点 • 集中 vs 分散 • 密結合 vs 疎結合 • 同期 vs 非同期
• ステートフル vs ステートレス
– 分散で疎結合で非同期でステートレスなシステム(つまり、メール)が最強。しかし、それだけでは済まないのが世の中。➡ オンラインWebアプリ
– スケールアウト性を損なわずに、どこをどう妥協していくか
8
Copyright © Virtual Technology, Inc
集中 vs 分散
• 集中化で運用管理は楽になるが・・ – RDBに負荷が集中することでパフォーマンス劣化 – MemcachedではRDBとの整合性確保が困難になる – 障害になるとシステム全体に影響を及ぼす
• 分散化でスケーラブルになるが・・ – 運用管理が複雑になる – 厳密なデータの一貫性の確保が困難
9
一貫性確保などの課題を克服して 分散化でいくことができるか(これが命題)
Copyright © Virtual Technology, Inc
密結合 vs 疎結合
• 密結合で高速な動作が可能になるが・・ – 分散化(スケールアウト)しにくい – 例) JSP(APに負荷)とHTML+JS(Webに負荷)
• 疎結合で分散化しやすくなるが・・ – 高速処理に向かないケースがある。 – 個々のコンポーネントの独立性が高く相互依存性
が低い。また分散化しやすい。
10
可能な限り疎結合とする(異論はないはず) ブラウザ、サービス、DBの間は少なくとも
Copyright © Virtual Technology, Inc
同期 vs 非同期
• 同期だと処理(トランザクションや実行順序)が保証されるが・・ – 他の処理をブロックさせてしまう – 1つのリソースに処理が集中するとスケールしない
• 非同期だとスケールするが・・ – データの一貫性は確保できない – 遅延が発生する
11
一貫性は重要であり、同期処理をやらざるを 得ないケースがある。トランザクション処理など
Copyright © Virtual Technology, Inc
ステートフル vs ステートレス • ステートフルだと高速になるが・・
– メモリ、DBなどを介すためスケールさせにくい – セッションオブジェクトに中間データを保存すること
で処理(再送、再計算など)を省略できる • ステートレスだとスケールするが・・
– 必要な情報を毎回送信する必要があり冗長になる。 – 認証、データチェックなどは都度実行となり、パ
フォーマンスは悪くなる
12
ステートフルにせざるを得ないケースがある Webアプリの認証、WebSocket、・・
Copyright © Virtual Technology, Inc 13
2−2.どうすればスケーラブルになるか(システムの観点)
Copyright © Virtual Technology, Inc
これまでの3階層システム
WEB AP DB
トランザクション はDBMSの機能で実現
14
Copyright © Virtual Technology, Inc
WEB AP DB
AP
AP
DBがボトルネックとなり スケールしない WEB
WEB
単にWEBやAPを増やしてもスケールしない
DBとボトルネック
15
Copyright © Virtual Technology, Inc
WEB AP DB
AP
AP
Cache WEB
WEB
WEB
読込性能は上がるが・・ 整合性はどうする?
分散キャッシュ
16
Copyright © Virtual Technology, Inc 17
H/W
OS OS
AP
H/W
OS OS
DB(KVS)
AP AP
PaaS(パブリッククラウド)の例
AppEngine Datastore AWS Dynamo
DBにKVSを採用、AP,DBともにオートスケール、規模の経済性
Copyright © Virtual Technology, Inc
プライベートクラウドの課題
18
H/W
OS OS
DB DB
AP AP
H/W
OS OS
DB DB
AP AP
VMで全体最適化が図れるもスケーラビリティに課題 かといって、PaaSのような大規模なDB構築は容易ではない
スケールしない
Copyright © Virtual Technology, Inc 19
H/W
OS OS OS
DB DB DB
AP
OS
DB
H/W
(解決案)AP統合、一方でシャーディング
Consistent Hashing シャーディング
APは論理的には1つだが実際はそれぞれの担当ノードに別れる
#1 #2 #3 #4
(困難は分割せよ by デカルト)
Copyright © Virtual Technology, Inc
シャーディングの考え方
• お互いに干渉しないような分割キーを見つける – ユーザIDなど
• SalesForceのマルチテナントアーキテクチャー – テナント別の「組織ID」で物理分割
• http://www.publickey1.jp/blog/09/2id.html
– ユーザー企業が増えた場合でも、データが増えた場合でも、パーティションを増やし、そのパーティションを処理するインスタンスを追加することでスケーラブルな対応をする
20
Copyright © Virtual Technology, Inc
1、2章のまとめ • 集中 vs 分散 • 密結合 vs 疎結合 • 同期 vs 非同期
• ステートフル vs ステートレス
– 分散で疎結合とすべきなのは異論がないところ。 – さらに非同期でステートレスにできればよいがそれ
だけで済まない現実がある。 – APをシャーディングで分割する案
21