CAPとBASEとEventually Consistent

Post on 05-Dec-2014

20.412 views 0 download

description

 

Transcript of CAPとBASEとEventually Consistent

CAPとBASEとEventually Consistent

2009-04-17 Yokomaha.pm

山本陽平(id:yohei)

遅刻してすんません

微妙なアウェイ感の中偽TAKESAKO

メソッドでお送りします

自己紹介

氏名: 山本陽平(id:yohei)

職業: RESTエバンジェリスト(bogusne.ws 認定)

今日の話題

1 私とPerl

2 CAPと(ry

私とPerl

出会い

1995年SunOS 4 にて(たぶん) jperl

CGIで訪問者リストとか

初めて買ったオライリーの本

赤ラクダ本

もちろんプログラミングPerl

も買った

言語遍歴

N8x BASIC→C→

Perl → C++ → Java

→XSLT→C++→C/

Perl→Java→Java

ME→Ruby(いまここ)

最近のPerlはよく知りません

場違いでごめんなさい

でもPerlプロダクトにはいつもお世話になってます

とくに MogileFS とPerlbal ありがとう

第一部

第二部

アンケート

複数のサーバ上に分散したデータを扱っている人?

(予想)ほぼ全員

PCは高性能だしディスクは安いし1台のサーバでもある程度までは

運用できる

でも

冗長化を考えると複数サーバが必須

データ量も結局大きくなる

分散重要

でも分散は難しい

データを冗長化させると複製の遅延で性能が落ちるし、かといって全体の可用性は落としたくないけど、データの整合性はある程度守らないとプログラムを作るのが大変だ

このジレンマのことを

CAP 定理といいます

CAP定理

Consistency

Availability

Partition tolerance

みっつ全ては同時に満たせない

Consistency

誰かがデータを更新したら、その後は必ず更新後のデータが返る

Availability

クライアントは必ずデータにアクセスできる

Partition

Tolerance

データを複数サーバに分散して保管できる

みっつ全ては同時に満たせない

(CAP定理)

イマドキのWebサービスなら

AとPは必須

Consistency

で妥協が必要

どう妥協するかが肝要

Consistency

にもいろいろ種類がある

大きく分けると二つ

Strong Consistency

誰かがデータを更新したら、次アクセスする人は必ず新しいデータにアクセスできる

Weak Consistency

誰かがデータを更新したら、次アクセスする人は必ず新しいデータにアクセスできるとは限らない

いつになったら更新されたデータが取得できるのか

Eventual Consistency

誰かがデータを更新しそのデータが複製されるのに十分な時間が過ぎ、その後更新が加えられていなかったら、必ず新しいにアクセスできる

詳細は「結果整合性」

で検索

古典的な例

MySQL のレプリケーション

Client Master Slave

UPDATE

binlog

SELECT

SELECT

古いデータ

新しいデータ

SQL

実行

Inconsistency

Window

最近の話題

構造化オーバレイConsistent Hashing

Key-value-store

遅延最適なアーキテクチャメッセージキューキャッシュ局所的な状態整合などなど

DBMS由来の技術とP2P由来の技術と

分散システム由来の技術

最後に注意

ACIDはダメこれからはBASE

とか

CAP知らなくていいのは小学生まで

とかはFUDなので無視しよう

問題に合わせて最適な整合性モデルを採用するのが重要

私も勉強中

続きはWebで

http://yohei-y.blogspot.com

おしまい