• Save
絵で見てわかる 某分散データストア
Upcoming SlideShare
Loading in...5
×
 

絵で見てわかる 某分散データストア

on

  • 4,617 views

Python Developers Festa 2012.03 での発表スライドです。

Python Developers Festa 2012.03 での発表スライドです。

Statistics

Views

Total Views
4,617
Views on SlideShare
4,272
Embed Views
345

Actions

Likes
12
Downloads
0
Comments
0

5 Embeds 345

http://blog.livedoor.jp 294
https://twitter.com 47
http://cache.yahoofs.jp 2
http://us-w1.rockmelt.com 1
http://webcache.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

絵で見てわかる 某分散データストア 絵で見てわかる 某分散データストア Presentation Transcript

  • 分散キャッシュ むにゃむにゃPython Developers Festa 2012.03 絵で見てわかる 某分散データストアキャッシュ 2012/03/17 Takahiko Sato 1
  • じこしょうかいおまえだれよ• 本名 – 佐藤 貴彦(さとう たかひこ)• 日本オラクルで働いてます。 – 主担当はデータベースやらミドルウェア製品です。 – その他よろず屋やってます。 – データベース、ネットワーク、OSとかインフラ系• Oracle の社内ポリシーに、 「匿名でオラクルのことについて語んじゃねーよ!」 という項目あります。という訳で、今回だけは実名で発 表します。 2
  • 最初にお約束今日は仕事ではなく個人としての発表です本スライドにおいて示されている見解は、私自身の見解であって、オラクルの見解を必ずしも反映したものではありません。 3
  • Agenda• 「某」分散データストアについて – アーキテクチャ – DEMO – 通信を高速化するために – ネットワーク障害に打ち勝つために 4
  • 「某」分散データストア 5
  • 「某」分散データストア• 今回のお話のメインは「分散キャッシュ」です。• どんな仕組みなのか、「某」製品のアーキテクチャを紹 介しながらお話をします。 本当はキャッシュだけじゃなく分散DB も含めて広く話したくて曖昧に「分散 データーストア」というタイトルをつ けてたのですが、発表時間が20分に収 まるはずもなく諦めました。 6
  • 「某」製品分散とかクラスターとかいう製品多いですね・・・• 今回メインで話す「某」製品 – Oracle Coherence• 今回話したかったけど時間が足りなかった「某」製品 – Oracle Real Application Clusters• 今回話す予定が全くなかった「某」製品 – Oracle TimesTen In-Memory Database – Oracle NoSQL Database – Oracle Cluster File System – MySQL Cluster 7
  • 製品メッセージとしては分散データ・グリッド• オラクル的には、データ・グリッドと呼んでいます。• 定義(マニュアルより抜粋) – A Data Grid is a system composed of multiple servers that work to manage information and related operations - such as computations - in a distributed environment. – データ・グリッドは複数のサーバーで構成されるシステムで、 分散環境において情報とそれに関連付けられた操作(計算など)の 管理を連携して実行します。 8
  • Oracle Coherence 9
  • Oracle Coherenceとは• 分散キャッシュ、分散データグリッド製品• 100% Javaで書かれている。• 本体は1つの jar ファイル。• サーバーアプリとCoherence API群からなる – Coherence Server(データを格納するキャッシュサーバー) • 中に入ってる DefaultCacheServer.class を実行するだけ – Coherence Client(Serverにアクセスするアプリ) • coherence.jar のAPIを叩くJavaアプリを書くだけ• データは key-value pairの ObjectをMap に格納。 あれ?単なるKVSじ ゃ・・・・ 10
  • Coherenceで組むクラスターはこんな感じクライアントもクラスターの一部なんだね Coherence Client Coherence API JVM Coherence Cluster Coherence Coherence Coherence Server Server Server JVM JVM JVM 11
  • Coherenceの内部構造概略 Coherence 実際のデータは、backing Client map と呼ばれるマップに Coherence API 格納される。Coherenceの内部は複数のサ ービス(スレッド)で構 成される。cache service Cache Cache Cache Service Thread Service Thread Service Thread storage storage storage backing map backing map backing mapcluster service Cluster Cluster Cluster Service Thread Service Thread Service Thread Coherence Coherence Coherence Server Server Server 12
  • Cache Serviceの種類 Distributed Cache Service • Distributed Cache Service (分散キャッシュ) – データはハッシュ計算により、どのパーティションに格納される か決まる。パーティションはノード全体に分散。 どのデータにも1hop Coherence でアクセス可能 Client Coherence APIDistributed Distributed Cache Distributed Cache Distributed CacheCache Service Service Thread Service Thread Service Thread storage storage storage backing map backing map backing map P1 P4 P2 P5 P3 P6 Coherence Coherence Coherence Server Server Server 13
  • Cache Serviceの種類 Distributed Cache Service • Distributed Cache Service (分散キャッシュ) – バックアップを保持する設定も可能。 – バックアップは自動的に”異なるサーバー”に配置される。 これでSPOFがなくな ったね!Distributed service thread service thread service threadCache Service storage storage storage backing map backing map backing map P1 P4 P2 P5 P3 P6 backup map backup map backup map P3 P6 P1 P4 P2 P5 Coherence Coherence Coherence Server Server Server 14
  • Cache Serviceの種類 Replicated Cache Service • Replicated Cache Service (レプリケーションキャッシュ) – 全ノードに完全に同じデータを持つ。Replicated service thread service thread service threadCache Service storage storage storage backing map backing map backing map 同じデータ 同じデータ 同じデータ Coherence Coherence Coherence Server Server Server 15
  • Backing map の種類• 実際のデータが格納されるbacking mapにも様々ある – Local Cache heapを使うLocal Cacheを • ローカルJVMのヒープにデータを格納 ベースに、他と組み合 わせることが多いね – Read Write • 参照更新に連動して、DBなどの永続化層と連携する – Overflow • frontに入りきらなくなった分を、backに移動させる – 他にもたくさんあって、いろいろ組み合わせられる! backing map backing map backing map (Local Cache) (Read Write) (Overflow ) front (Local Cache) front (Local Cache) Local Cache Cache Store back(nio) RDBMS file 16
  • 組み合わせ例 Distribute Cache Service + Read Write Backing map • Distributed Cache Service にてキャッシュを分散。 Read Write Backing map を使い、キャッシュとDBの連 携をする例Distributed service thread service thread service threadCache Service storage storage storage backing map backing map backing map (Read Write) (Read Write) (Read Write) front (Local) front (Local) front (Local) Cache Store Cache Store Cache Store backup map backup map backup map Coherence Coherence Coherence Server Server Server databaseへ接続 17
  • ようは何なの?便利でカスタマイズしまくれる分散KVS。分散処理や可用性担保などを行うめんどい部分は、 全てCoherence Serverがよしなにやってくれる。開発者は、Coherence APIを使って処理を書くだけ。 デフォルトの挙動が気に入らなければ、多くの機能 で独自にカスタマイズ可能。 Distributed Cache Serviceならば、1つのデータは 1つのノード(Partition)に格納するため、ノー ド全体での一貫性は崩れない。言い換えると、一 貫性を保って更新が必要なデータは、同一ノード (Partition)に割り当てることで、アトミックな操 作が可能。 18
  • DEMO 19
  • 通信を高速化するために 20
  • ネットワーク転送は速いけれど・・・• ネットワーク通信がどんどん高速化している – Ethernetでも10Gbps – 単純なブロック転送であれば、ディスクI/Oよりはるかに高速• 速いがされどI/O、つまるときはつまる – ボトルネックはI/Oに始まることが多い。 – 速いI/Oも積もれば山となる 基本は2つ 転送量を減らす 転送数を減らす 21
  • Coherence が使う通信プロトコル TCMP - Tangosol Cluster Management Protocol • Coherence独自のアプリケーションプロトコル – 用途に応じてUDPユニキャスト/UDPマルチキャスト/TCPなど使う TCMP over TCPCoherence Client マルチキャスト範囲 外からの外接 Coherence TCMP over UDP ユニキャスト Client データの転送 Proxy Server Coherence Coherence Server Server Coherence Server TCMP over UDP マルチキャスト クラスター管理 22
  • 転送オーバーヘッドの削減UDPベースの独自プロトコル• データのやり取りは基本的にTCMP over UDPを使う。 – TCMPレイヤーで独自のACK機能やフロー制御を行う。 – どんな感じかというと、高品質なネットワークを前提にUDPの乱 れ打ち。 基本的に高品質なスイッチとネットワーク インフラ期待してるんで、パケロスなんて するわけ無いでしょってこと。 10GEtherかInfiniBandがほしいなぁ・・・ 23
  • 転送量の削減&転送オーバーヘッドの削減POF : Coherence独自のシリアライザ―• ネットワーク経由のデータ転送にはシリアライズ処理 が必要。• Java標準のシリアライザーが正直いけてない MessagePack 試してみたいなぁ• POF(Portable Format Object)という独自の シリアライザ―を提供。 – また、シリアライザ―は自分で指定もできるので、自作(?)の シリアライザ―を指定することも可能。 Coherence Coherence Client Server POF Object Object Object 24
  • 転送量の削減&転送オーバーヘッドの削減POFによる部分更新• POFはオブジェクトの部分的なデシリアライズが可能 Object全体を転送する のは無駄 Coherence put Coherence Client Server POF Object Object Object 変更点(フィールド単位)だ け送ること可能 Coherence Coherence Client pof update Server Object Object 25
  • 転送量&転送回数の削減 Query • データアクアスに put/get ばかりじゃ、毎回クライア ントにデータが飛んでくるのでI/O無駄。 • 処理手順を投げてサーバー側に処理させるデータのある所で処理 Coherence Client させれば良いじゃん Coherence APIDistributed Service Thread Service Thread Service ThreadCache Service backing map backing map backing map P1 P4 P2 P5 P3 P6 Coherence Coherence Coherence Server Server Server 26
  • ネットワーク障害に打ち勝つために 27
  • ネットワーク関連の障害• CAPで言うところの「一貫性」+「可用性」を優先する – そのためネットワークの分断耐性が低い• ネットワーク通信ができなくなったノードを、速やかに クラスターから離脱させる仕組みが必要。• クラスター全体でNetwork Heartbeat もうつが、それだ けでは即時性に欠ける。 ネットワーク障害には正面からぶち 当たっても勝てないので、諦めて データを守るのを優先します。 28
  • プロセスダウンの検知をするには TCP Ring • プロセス同士は互いにTCPコネクションをリング上に張 っている。 • プロセスがダウンした場合、OSがTCPコネクション(ソ ケット)を閉じてくれるので、ノードダウンに気がつく 事ができる。 OSん?隣のノードが落ち Coherence たっぽいぞ。 Client OS OS Coherence Coherence Server OS Server Coherence Server 29
  • サーバー(OS)のダウンを検知するには IP Monitor • ハードウェア障害や、OSのカーネルパニックなど、OSが 突然死した場合、TCPコネクションは適切に処理されな いため、通信相手はそれに気がつくことができない。 • ランダムにpingを送ることで、OSダウンを検知。ん?向かいのノードの OS ping応答が無いな Coherence Client OS OS ICMP Echo Coherence Coherence Server OS Server Coherence Server 30
  • 一番避けたいクラスターの分断 Split Brain正常時 network network switch switch Server Server Server Server Server Server cluster1障害発生時 network network switch switch Server Server Server Server Server Server cluster1 cluster2 ネットワークが切れたのか、本当 お互い、相手がダウンしたと思い に相手のノード3台がダウンしたの 込んでいるので、各々クラスター か区別つかない。 を再構成する。 31
  • Split Brainの何が問題? • 分断したクラスターが各々処理を始めてしまうため、全 体での一貫性が崩れてしまう。 – データ破損 – 結果不正 • 発生の検知には、少なくとももう1系統の情報共有手段 が必要 network network switch switch Server Server Server Server Server Server cluster1 cluster2何かしらの情報共有手段。 32
  • Coherence以外のクラスター製品はどうしてる? Oracle RACの例 • Network Heartbeatの他に、Disk Heartbeatを使ってい るものもある。 network network switch switch Server Server Server Server Server Server cluster1 cluster2 投票の結果、cluster2は再起動 することにします。共有ディスクを使ってDisk Heartbeatを行なっているので、ネットワーク分断が起こっても検知可能。 storage server 33
  • Coherenceではどうしてる? • 標準では特にSprit Brainを検知する機能を持っていな い – デフォルトのままで使うと Split Brain 状態になる。 – カスタムで色々拡張できるので、ネットワークを2系統使い(例 えば運用LAN)独自の検知機能を付与することはできる。 3台でクラスター3台でクラスター 再構成しよーっ network network再構成しよーっと switch switch と Server Server Server Server Server Server cluster1 cluster2 例えば運用LANがあるなら、そちらから ノードの数数えて、不一致なら強制停止 とかスクリプト書けるよね。 34
  • そもそもSplit Brainを起こさせたら負け • 通常はネットワークは「冗長」構成にするもの。 • ネットワーク分断が起こるのは一時的なものがほとんど – スイッチの H/A切り替え SPOFとかまじありえ – スパニングツリーの再計算 ないよねー – etc... • 数秒の通信断だけ耐えられればよいはず 切り替えるから ちょっと待ってあれ?繋が ね。らないぞ? network network network switch network switch switch switch Server Server Server Server Server Server cluster1 cluster2 35
  • Quorumによる制御 Cluster Quorum Policy • 例えば、HA切り替えに伴う1分程度の通信断でもクラス ターを維持させたい。 • Quorum という考え方。 – クラスターの稼働に必要なノード数を指定(以下の図では4) 切り替えるから ちょっと待って動けない・・・ ね。 network network network switch network switch switch switch Server Server Server Server Server Server cluster1 cluster2 4台ないと離脱やノード排除も含むク ラスター活動を行えないので、一時的 な通信断でsplit brainが発生することを 防ぐことができる。 36
  • 実際の構成例など 37
  • CoherenceとRACを組み合わせた構成例 「某」製品の組み合わせ Service LAN switch AP Server AP Server AP Server AP Server AP Layer (Coherence) (Coherence) (Coherence) (Coherence) Coherence Cluster switch Cache Server Cache Server Cache Server Cache ServerCache Layer (Coherence) (Coherence) (Coherence) (Coherence) switch DB Server DB Server DB Server DB Server DB Layer (RAC) (RAC) (RAC) (RAC) DB Cluster switch Storage Server 38
  • 多すぎたのでここまで 39
  • おしまい 40