データベースとストレージのレプリケーション入門 / Intro-of-database-and-storage-replication
by
Kohei Ota
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
データベースとストレージの レプリケーション入門 年 月 日
Slide 2
Slide 2 text
公開に向けた この資料は新卒 年目、 年目の若手に向け作られた 初心者向けのものです 作者自身も とストレージは得意ではない領域の ため、間違っている箇所があったらこっそり優しく 教えていただけると幸いです
Slide 3
Slide 3 text
アジェンダ ステートレスとステートフル ステートフルの管理はなぜ大変? アプリケーションとデータベース 特性と 定理 データベースとストレージ ストレージの種類と読み書きの特性 のスケーリング・可用性への基本的な考慮
Slide 4
Slide 4 text
ステートレスとステートフル ステートレス 状態 が 無い ステートフル 状態 が 有る
Slide 5
Slide 5 text
ステートレスとステートフル ステートレス 状態 が 無い ステートフル 状態 が 有る たとえば・・・ 静的コンテンツ だけを返す サイト → 何回アクセスしても結果が同じ ステートレス 日々アクセスするサイトに応じて内容が変わる ような システム 広告とか → 各ユーザーの傾向に応じてレスポンスが違う ステートフル データベース → 入力 データの追加・変更・削除 によっては 出力も変化する ステートフル
Slide 6
Slide 6 text
ステートフルの管理はなぜ大変? ステートがあるとその時点でのデータが壊れたときに それを保証するのが大変 ステートがあるとスケールも大変 ステートがあると読み出しと書き込みのタイミングに よって結果が変わるので大変 → 株価の変動や銀行口座など、ミッションクリティカル性 の高いワークロードもある
Slide 7
Slide 7 text
ステートフルの管理はなぜ大変? ステートフルなアプリ 複数ユーザーからの リクエスト ダウンタイムなしに スケールアップしたい 🤔🤔
Slide 8
Slide 8 text
ステートフルの管理はなぜ大変? 垂直スケールにすると ステートフルなアプリ 複数ユーザーからの リクエスト ダウンタイムなしに スケールアップしたい 🤔🤔 単にマシンスペックを上げると ダウンタイムが発生
Slide 9
Slide 9 text
ステートフルの管理はなぜ大変? 水平にスケールすると ステートフルなアプリ 複数ユーザーからの リクエスト 各ユーザーの入力に対する 同期をアプリケーション間 でどうやってとる? ステートフルなアプリ ステートフルなアプリ
Slide 10
Slide 10 text
アプリケーションとデータベースを分離してみる 層構造にしたがって、アプリケーションと データベースを分離してみましょう
Slide 11
Slide 11 text
ステートフルの管理はなぜ大変? を分離してみると アプリ 複数ユーザーからの リクエスト アプリ アプリ データベース
Slide 12
Slide 12 text
ステートフルの管理はなぜ大変? を分離してみると アプリ 複数ユーザーからの リクエスト アプリ アプリ データベース こっちはなんとか スケールできそう 横に並べればダウンタイム も発生しにくくなる こっちは結局 どうすんの? 🤔🤔
Slide 13
Slide 13 text
結局データベースが大変なことに データベースのスケーリングを理解するには データベースの特性を理解する必要があります
Slide 14
Slide 14 text
データベースの重要な性質 データはアプリケーションよりも寿命が長い データベースはアプリケーションよりも止めるのが 難しい データベースはアプリケーションよりも構造を変える のが難しい
Slide 15
Slide 15 text
データベースの重要な性質 データはアプリケーションよりも寿命が長い データベースはアプリケーションよりも止めるのが 難しい データベースはアプリケーションよりも構造を変える のが難しい データベースはサービスが終了しても 活用される場合がある アプリケーションは壊れても一時的な ダウンで済むが、データは壊れたら サービスが死ぬ データベースは色んな所から参照され ている場合がある データ分析や機械 学習のバッチ処理など
Slide 16
Slide 16 text
大事なことなのでもう一度 データベースのスケーリングを理解するには データベースの特性を理解する必要があります
Slide 17
Slide 17 text
データベースに関する便利な資料 データベースのスケーリングを理解するには データベースの構造を理解する必要があります
Slide 18
Slide 18 text
データベースに関する便利な資料 データベースのスケーリングを理解するには データベースの構造を理解する必要があります
Slide 19
Slide 19 text
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する つの重要な性質
Slide 20
Slide 20 text
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する つの重要な性質 💡トランザクションとは?💡 データの処理における一連のやり取りのこと 書き込みや読み込みを完了するまでの一連の流れ
Slide 21
Slide 21 text
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する つの重要な性質 トランザクションは完全に実行が完了するか 全く実行されないかのどちらかでないといけない → 処理の一部だけが行われている状態は 銀行の処理とか考えるとわかりやすい
Slide 22
Slide 22 text
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する つの重要な性質 トランザクションの状態に関わらず データベースの整合性は維持しないといけない → 実行結果が矛盾してはいけない
Slide 23
Slide 23 text
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する つの重要な性質 トランザクションを同時に行った場合でも 各トランザクションは他の処理結果の影響を 受けてはならない → 実行結果が矛盾してはいけない
Slide 24
Slide 24 text
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する つの重要な性質 トランザクションの結果は障害の有無に関わらず 失われてはいけない → ハードウェア障害後もデータの永続性を保証
Slide 25
Slide 25 text
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する つの重要な性質 トランザクションの結果は障害の有無に関わらず 失われてはいけない → ハードウェア障害後もデータの永続性を保証 ちなみにこれはデータベース スペシャリストなどの試験でも 登場する非常に基本的な の特性です
Slide 26
Slide 26 text
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理
Slide 27
Slide 27 text
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理 誰かがデータを更新したら 必ず更新後のデータが参照できる → データの同一性を保証
Slide 28
Slide 28 text
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理 クライアントが常にデータにアクセスできること → 読み込みも書き込みもできる
Slide 29
Slide 29 text
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理 ノードがネットワーク的に分断されても 結果が正しく保たれること → 分散システムの が発生しないこと
Slide 30
Slide 30 text
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理 定理はこれら つを同時に保証 することはできないという理論
Slide 31
Slide 31 text
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理 定理はこれら つを同時に保証 することはできないという理論 ただし、最近は の台頭により これを限りなく解決できるような仕組みが できてきた
Slide 32
Slide 32 text
重視型の 一貫性と可用性を重視した構成 一貫性 可用性 分断耐性 一般的な 、 、 等 とにかく単体の性能を上げて殴るやつ
Slide 33
Slide 33 text
重視型の 可用性と分断耐性を重視した構成 一貫性 可用性 分断耐性 や など とにかく分散させて書き込み性能を上げる 一時的一貫性を犠牲に結果整合性で帳尻合せ
Slide 34
Slide 34 text
重視型の 一貫性と分断耐性を重視した構成 一貫性 可用性 分断耐性 や など サーバが増えるとロック待ちにより 可用性が損なわれるが、一貫性を持つ分散
Slide 35
Slide 35 text
重視型の 一貫性と分断耐性を重視した構成 一貫性 可用性 分断耐性 や など サーバが増えるとロック待ちにより 可用性が損なわれるが、一貫性を持つ分散 他にも 特性があるが 分散 まで踏み込むと内容が 難しいので割愛・・・
Slide 36
Slide 36 text
データベースとストレージ データベースはデータを管理するミドルウェア データはストレージに保存するもの → ストレージの種類と特性を知るのは大事!
Slide 37
Slide 37 text
ストレージの種類 ブロックストレージ • やベアメタルにボリュームとしてマウント • 単一ホストからしか見られない • 、 など 経由のものや のようなネイティブ デバイスもある • マウントしたボリュームには が対応した好きなファイ ルシステム 、 、 、 等 を使える • 性能が高く や のデータ保管に適している
Slide 38
Slide 38 text
ストレージの種類 ファイルストレージ • やベアメタルにファイルシステムとしてマウント • 複数ホストからの読み書きを受け付ける • や のようなネットワークドライブ • ファイルシステムをマウントするので 側では選択不可 • 性能はそこそこ、ファイル単位のロック機構があり、 触るファイルが別であれば 書き込みを複数ホストから 同時にできる
Slide 39
Slide 39 text
ストレージの種類 オブジェクトストレージ • フォルダやデバイスとしてマウントしない、 でアクセスするタイプのストレージ • プログラマブルで大量のファイルを書き込める • 構造化されたメタデータやファイル オブジェクト 単位 での世代管理の仕組みがあり、アプリケーションとの親 和性が高い • 性能は つの中では一番低い • 画像や動画などの保存に使う
Slide 40
Slide 40 text
ストレージの種類 オブジェクトストレージ • フォルダやデバイスとしてマウントしない、 でアクセスするタイプのストレージ • プログラマブルで大量のファイルを書き込める • 構造化されたメタデータやファイル オブジェクト 単位 での世代管理の仕組みがあり、アプリケーションとの親 和性が高い • 性能は つの中では一番低い • 画像や動画などの保存に使う
Slide 41
Slide 41 text
のスケーリングにおける基本的な方針 定理でも示されている通り、 の特性に よって取るべき構成は違う ここでは一般的な以下 つの を考える 分散 複数台で構成する場合 ・性能面での可用性 ・耐障害性としての可用性 を分けて考えるとわかりやすい
Slide 42
Slide 42 text
のスケーリングで大事な用語 レプリケーション データの複製 耐障害性を上げるための仕組み シャーディング データを複数台に分散して書き込む仕組み 書き込み分散するので性能向上が見込める
Slide 43
Slide 43 text
のスケーリングで大事な用語 レプリケーション データの複製 耐障害性を上げるための仕組み シャーディング データを複数台に分散して書き込む仕組み 書き込み分散するので性能向上が見込める
Slide 44
Slide 44 text
のスケーリング は分断耐性が低い 書き込みのエンドポイントを複数作るのは 難しい シャーディングもやれなくはないが今回は 難しい+複雑になるので割愛 でも 台だけで本番構えると可用性が・・・
Slide 45
Slide 45 text
のスケーリング は分断耐性が低い 書き込みのエンドポイントを複数作るのは 難しい シャーディングもやれなくはないが今回は 難しい+複雑になるので割愛 でも 台だけで本番構えると可用性が・・・ → レプリケーションを置いてアクティブスタンバイ 構成にし、障害発生時に切り替える構成 なんかはつおいので こういうことがいい感じにできる らしい よくわかってない
Slide 46
Slide 46 text
のレプリケーション レプリカ プライマリ データベース データを同期 プロキシ 障害発生時には フェイルオーバー 状態監視 ※ただし、 や 単体で クラスタリングとフェイルオーバーまでは 面倒を見ないので ソリューションを別途自前で入れる必要がある
Slide 47
Slide 47 text
のレプリケーション レプリカ プライマリ データベース データを同期 プロキシ 障害発生時には フェイルオーバー 状態監視 最もシンプルな冗長構成 障害発生時若干のダウンタイムはある サイトを分ければ 構成にも応用可 ※ただし、 や 単体で クラスタリングとフェイルオーバーまでは 面倒を見ないので ソリューションを別途自前で入れる必要がある
Slide 48
Slide 48 text
のレプリケーション レプリカ プライマリ データベース データを同期 プロキシ 障害発生時には フェイルオーバー 状態監視 データベースのストレージのスナップ ショットを取得するアプローチもある 愚直な反面即時性には欠ける 定常時にこちらを読み取り専用で 使って負荷を下げるというやり方もある いわゆる リードレプリカ
Slide 49
Slide 49 text
のスケーリング は可用性が弱点 書き込みしすぎるとロックの原因になる シンプルで書き込みが特定箇所に集中 しないデータを保管するのに向いている オンメモリなので高速 裏を返すとメモリなのでコストは高い → で取得するまでもないデータや、 一時的なキャッシュを保存するのに使いやすい
Slide 50
Slide 50 text
のレプリケーション レプリケーション マスター スレーブ スレーブ スレーブ データの同期
Slide 51
Slide 51 text
のレプリケーション レプリケーション マスター スレーブ スレーブ スレーブ 読み込みはスレーブ からできる マスターで 障害発生 マスターが書き込みの 単一障害点 データの同期
Slide 52
Slide 52 text
のレプリケーション 構成 マスター スレーブ スレーブ スレーブ データの同期
Slide 53
Slide 53 text
のレプリケーション 構成 マスター スレーブ スレーブ スレーブ マスターに昇格 データの同期 マスターで 障害発生 フェイルオーバー
Slide 54
Slide 54 text
のレプリケーション クラスター マスター スレーブ スレーブ スレーブ マスター マスター
Slide 55
Slide 55 text
のレプリケーション クラスター マスター スレーブ スレーブ スレーブ マスター マスター レプリケーションによる耐障害性 シャードによる書き込み性能の向上 マスターのフェイルオーバーなど全部盛り盛り
Slide 56
Slide 56 text
の構成比較 構成 シンプルさ フェイルオーバー 書き込み分散 レプリケーション ◯ ✕ ✕ △ ◯ ✕ クラスター ✕ ◯ ◯
Slide 57
Slide 57 text
まとめ ストレージも も、特性を理解すると活用法が 見えてくる データベースの仕組みだけでも知っておくと、 インフラ屋さんとして役立つかも!! ストレージは製品もあるので勉強しましょう 可用性には性能維持と耐障害性の観点がある レプリケーションとシャードは抑える と の特性に合わせ構成を考えると◎
Slide 58
Slide 58 text
No content