Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
データベースとストレージのレプリケーション入門 / Intro-of-database-and...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kohei Ota
January 27, 2022
Technology
6.6k
28
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
データベースとストレージのレプリケーション入門 / Intro-of-database-and-storage-replication
社内で若者向けに作ったデータベースとストレージの入門資料です
Kohei Ota
January 27, 2022
More Decks by Kohei Ota
See All by Kohei Ota
CloudNative Meets WebAssembly: Exploring Wasm's Potential to Replace Containers
inductor
4
3.5k
The Cloud Native Chronicles: 10 Years of Community Growth Inside and Outside Japan
inductor
0
180
Cracking the KubeCon CfP
inductor
2
880
KubeCon Recap -Platform migration at Scale-
inductor
1
1.1k
コンテナビルド最新事情 2022年度版 / Container Build 2022
inductor
3
600
KubeConのケーススタディから振り返る、Platform for Platforms のあり方と その実践 / Lessons from KubeCon case studies: Platform for Platforms and its practice
inductor
3
980
オンラインの技術カンファレンスを安定稼働させるための取り組み / SRE activity for online conference platform
inductor
1
1.4k
Kubernetesネットワーキング初級者脱出ガイド / Kubernetes networking beginner's guide
inductor
22
7.6k
コンテナネイティブロードバランシングの話 / A story about container native load balancing
inductor
2
2.4k
Other Decks in Technology
See All in Technology
いまさら聞けない人のためのAIコーディング入門
devops_vtj
0
120
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
200
速さだけじゃない! VoidZero ツールが移行先に選ばれる理由
mizdra
PRO
6
770
個人最適 から 全体最適 へ AI情報共有会・AIギルド・AI-DLC で進める カンリーの組織展開
rfdnxbro
0
1.8k
React、まだ楽しくて草
uhyo
7
4.2k
ブロックチェーン / Blockchain
ks91
PRO
0
110
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
700
サイバーセキュリティ概論 / Introduction to Cybersecurity
ks91
PRO
0
170
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
50k
Agentic ERPをどう設計するか ー 受発注エージェントを動かす、現場の知見と設計思想ー
recerqainc
1
1.8k
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
asumikam
0
550
データ基盤をDataformで整えた話 〜 開発環境を添えて 〜
takapy
0
120
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Navigating Weather and Climate Data
rabernat
0
210
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
We Have a Design System, Now What?
morganepeng
55
8.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
BBQ
matthewcrist
89
10k
Transcript
データベースとストレージの レプリケーション入門 年 月 日
公開に向けた この資料は新卒 年目、 年目の若手に向け作られた 初心者向けのものです 作者自身も とストレージは得意ではない領域の ため、間違っている箇所があったらこっそり優しく 教えていただけると幸いです
アジェンダ ステートレスとステートフル ステートフルの管理はなぜ大変? アプリケーションとデータベース 特性と 定理 データベースとストレージ ストレージの種類と読み書きの特性 のスケーリング・可用性への基本的な考慮
ステートレスとステートフル ステートレス 状態 が 無い ステートフル 状態 が 有る
ステートレスとステートフル ステートレス 状態 が 無い ステートフル 状態 が 有る たとえば・・・
静的コンテンツ だけを返す サイト → 何回アクセスしても結果が同じ ステートレス 日々アクセスするサイトに応じて内容が変わる ような システム 広告とか → 各ユーザーの傾向に応じてレスポンスが違う ステートフル データベース → 入力 データの追加・変更・削除 によっては 出力も変化する ステートフル
ステートフルの管理はなぜ大変? ステートがあるとその時点でのデータが壊れたときに それを保証するのが大変 ステートがあるとスケールも大変 ステートがあると読み出しと書き込みのタイミングに よって結果が変わるので大変 → 株価の変動や銀行口座など、ミッションクリティカル性 の高いワークロードもある
ステートフルの管理はなぜ大変? ステートフルなアプリ 複数ユーザーからの リクエスト ダウンタイムなしに スケールアップしたい 🤔🤔
ステートフルの管理はなぜ大変? 垂直スケールにすると ステートフルなアプリ 複数ユーザーからの リクエスト ダウンタイムなしに スケールアップしたい 🤔🤔 単にマシンスペックを上げると ダウンタイムが発生
ステートフルの管理はなぜ大変? 水平にスケールすると ステートフルなアプリ 複数ユーザーからの リクエスト 各ユーザーの入力に対する 同期をアプリケーション間 でどうやってとる? ステートフルなアプリ ステートフルなアプリ
アプリケーションとデータベースを分離してみる 層構造にしたがって、アプリケーションと データベースを分離してみましょう
ステートフルの管理はなぜ大変? を分離してみると アプリ 複数ユーザーからの リクエスト アプリ アプリ データベース
ステートフルの管理はなぜ大変? を分離してみると アプリ 複数ユーザーからの リクエスト アプリ アプリ データベース こっちはなんとか スケールできそう
横に並べればダウンタイム も発生しにくくなる こっちは結局 どうすんの? 🤔🤔
結局データベースが大変なことに データベースのスケーリングを理解するには データベースの特性を理解する必要があります
データベースの重要な性質 データはアプリケーションよりも寿命が長い データベースはアプリケーションよりも止めるのが 難しい データベースはアプリケーションよりも構造を変える のが難しい
データベースの重要な性質 データはアプリケーションよりも寿命が長い データベースはアプリケーションよりも止めるのが 難しい データベースはアプリケーションよりも構造を変える のが難しい データベースはサービスが終了しても 活用される場合がある アプリケーションは壊れても一時的な ダウンで済むが、データは壊れたら
サービスが死ぬ データベースは色んな所から参照され ている場合がある データ分析や機械 学習のバッチ処理など
大事なことなのでもう一度 データベースのスケーリングを理解するには データベースの特性を理解する必要があります
データベースに関する便利な資料 データベースのスケーリングを理解するには データベースの構造を理解する必要があります
データベースに関する便利な資料 データベースのスケーリングを理解するには データベースの構造を理解する必要があります
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する
つの重要な性質
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する
つの重要な性質 💡トランザクションとは?💡 データの処理における一連のやり取りのこと 書き込みや読み込みを完了するまでの一連の流れ
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する
つの重要な性質 トランザクションは完全に実行が完了するか 全く実行されないかのどちらかでないといけない → 処理の一部だけが行われている状態は 銀行の処理とか考えるとわかりやすい
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する
つの重要な性質 トランザクションの状態に関わらず データベースの整合性は維持しないといけない → 実行結果が矛盾してはいけない
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する
つの重要な性質 トランザクションを同時に行った場合でも 各トランザクションは他の処理結果の影響を 受けてはならない → 実行結果が矛盾してはいけない
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する
つの重要な性質 トランザクションの結果は障害の有無に関わらず 失われてはいけない → ハードウェア障害後もデータの永続性を保証
特性と 定理 は以下 つの言葉の頭文字 原子性 一貫性 独立性 永続性 データベースのトランザクション処理に 関する
つの重要な性質 トランザクションの結果は障害の有無に関わらず 失われてはいけない → ハードウェア障害後もデータの永続性を保証 ちなみにこれはデータベース スペシャリストなどの試験でも 登場する非常に基本的な の特性です
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理 誰かがデータを更新したら
必ず更新後のデータが参照できる → データの同一性を保証
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理 クライアントが常にデータにアクセスできること
→ 読み込みも書き込みもできる
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理 ノードがネットワーク的に分断されても
結果が正しく保たれること → 分散システムの が発生しないこと
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理 定理はこれら
つを同時に保証 することはできないという理論
特性と 定理 は以下 つの言葉の頭文字 一貫性 可用性 分断耐性 分散システムにおけるノード間のやり取り に関する定理 定理はこれら
つを同時に保証 することはできないという理論 ただし、最近は の台頭により これを限りなく解決できるような仕組みが できてきた
重視型の 一貫性と可用性を重視した構成 一貫性 可用性 分断耐性 一般的な 、 、 等 とにかく単体の性能を上げて殴るやつ
重視型の 可用性と分断耐性を重視した構成 一貫性 可用性 分断耐性 や など とにかく分散させて書き込み性能を上げる 一時的一貫性を犠牲に結果整合性で帳尻合せ
重視型の 一貫性と分断耐性を重視した構成 一貫性 可用性 分断耐性 や など サーバが増えるとロック待ちにより 可用性が損なわれるが、一貫性を持つ分散
重視型の 一貫性と分断耐性を重視した構成 一貫性 可用性 分断耐性 や など サーバが増えるとロック待ちにより 可用性が損なわれるが、一貫性を持つ分散 他にも
特性があるが 分散 まで踏み込むと内容が 難しいので割愛・・・
データベースとストレージ データベースはデータを管理するミドルウェア データはストレージに保存するもの → ストレージの種類と特性を知るのは大事!
ストレージの種類 ブロックストレージ • やベアメタルにボリュームとしてマウント • 単一ホストからしか見られない • 、 など 経由のものや
のようなネイティブ デバイスもある • マウントしたボリュームには が対応した好きなファイ ルシステム 、 、 、 等 を使える • 性能が高く や のデータ保管に適している
ストレージの種類 ファイルストレージ • やベアメタルにファイルシステムとしてマウント • 複数ホストからの読み書きを受け付ける • や のようなネットワークドライブ •
ファイルシステムをマウントするので 側では選択不可 • 性能はそこそこ、ファイル単位のロック機構があり、 触るファイルが別であれば 書き込みを複数ホストから 同時にできる
ストレージの種類 オブジェクトストレージ • フォルダやデバイスとしてマウントしない、 でアクセスするタイプのストレージ • プログラマブルで大量のファイルを書き込める • 構造化されたメタデータやファイル オブジェクト
単位 での世代管理の仕組みがあり、アプリケーションとの親 和性が高い • 性能は つの中では一番低い • 画像や動画などの保存に使う
ストレージの種類 オブジェクトストレージ • フォルダやデバイスとしてマウントしない、 でアクセスするタイプのストレージ • プログラマブルで大量のファイルを書き込める • 構造化されたメタデータやファイル オブジェクト
単位 での世代管理の仕組みがあり、アプリケーションとの親 和性が高い • 性能は つの中では一番低い • 画像や動画などの保存に使う
のスケーリングにおける基本的な方針 定理でも示されている通り、 の特性に よって取るべき構成は違う ここでは一般的な以下 つの を考える 分散 複数台で構成する場合 ・性能面での可用性
・耐障害性としての可用性 を分けて考えるとわかりやすい
のスケーリングで大事な用語 レプリケーション データの複製 耐障害性を上げるための仕組み シャーディング データを複数台に分散して書き込む仕組み 書き込み分散するので性能向上が見込める
のスケーリングで大事な用語 レプリケーション データの複製 耐障害性を上げるための仕組み シャーディング データを複数台に分散して書き込む仕組み 書き込み分散するので性能向上が見込める
のスケーリング は分断耐性が低い 書き込みのエンドポイントを複数作るのは 難しい シャーディングもやれなくはないが今回は 難しい+複雑になるので割愛 でも 台だけで本番構えると可用性が・・・
のスケーリング は分断耐性が低い 書き込みのエンドポイントを複数作るのは 難しい シャーディングもやれなくはないが今回は 難しい+複雑になるので割愛 でも 台だけで本番構えると可用性が・・・ → レプリケーションを置いてアクティブスタンバイ
構成にし、障害発生時に切り替える構成 なんかはつおいので こういうことがいい感じにできる らしい よくわかってない
のレプリケーション レプリカ プライマリ データベース データを同期 プロキシ 障害発生時には フェイルオーバー 状態監視 ※ただし、
や 単体で クラスタリングとフェイルオーバーまでは 面倒を見ないので ソリューションを別途自前で入れる必要がある
のレプリケーション レプリカ プライマリ データベース データを同期 プロキシ 障害発生時には フェイルオーバー 状態監視 最もシンプルな冗長構成
障害発生時若干のダウンタイムはある サイトを分ければ 構成にも応用可 ※ただし、 や 単体で クラスタリングとフェイルオーバーまでは 面倒を見ないので ソリューションを別途自前で入れる必要がある
のレプリケーション レプリカ プライマリ データベース データを同期 プロキシ 障害発生時には フェイルオーバー 状態監視 データベースのストレージのスナップ
ショットを取得するアプローチもある 愚直な反面即時性には欠ける 定常時にこちらを読み取り専用で 使って負荷を下げるというやり方もある いわゆる リードレプリカ
のスケーリング は可用性が弱点 書き込みしすぎるとロックの原因になる シンプルで書き込みが特定箇所に集中 しないデータを保管するのに向いている オンメモリなので高速 裏を返すとメモリなのでコストは高い → で取得するまでもないデータや、 一時的なキャッシュを保存するのに使いやすい
のレプリケーション レプリケーション マスター スレーブ スレーブ スレーブ データの同期
のレプリケーション レプリケーション マスター スレーブ スレーブ スレーブ 読み込みはスレーブ からできる マスターで 障害発生
マスターが書き込みの 単一障害点 データの同期
のレプリケーション 構成 マスター スレーブ スレーブ スレーブ データの同期
のレプリケーション 構成 マスター スレーブ スレーブ スレーブ マスターに昇格 データの同期 マスターで 障害発生
フェイルオーバー
のレプリケーション クラスター マスター スレーブ スレーブ スレーブ マスター マスター
のレプリケーション クラスター マスター スレーブ スレーブ スレーブ マスター マスター レプリケーションによる耐障害性 シャードによる書き込み性能の向上
マスターのフェイルオーバーなど全部盛り盛り
の構成比較 構成 シンプルさ フェイルオーバー 書き込み分散 レプリケーション ◯ ✕ ✕ △
◯ ✕ クラスター ✕ ◯ ◯
まとめ ストレージも も、特性を理解すると活用法が 見えてくる データベースの仕組みだけでも知っておくと、 インフラ屋さんとして役立つかも!! ストレージは製品もあるので勉強しましょう 可用性には性能維持と耐障害性の観点がある レプリケーションとシャードは抑える と
の特性に合わせ構成を考えると◎
None