データベース 大規模,分散型データ管理のシステムアーキテクチャ前提
前段
リアルタイム性が求められて、厳密性が求められる場合はどうするんだろう。例えば、グローバルの決済企業(Visa, Materとか), ECプラットフォーム(shopifyとか, eBay)ってどんな構成にしているんだろうか。以下をヒントに調べてみたいと思う。
参考記事
規模対応へのインフラ戦略は、垂直スケーリング OR 水平スケーリング
新たに構築したシステムを使っている事業が成長した場合、システムにかかる負荷はどんどん増えていくことになります。そしてある時期からは、既存のシステム基盤ではその負荷をサポートできなくなり、許容量を拡張する必要性が生じることになるはずです。その際、最も一般的な拡張戦略として考えられるのが、水平スケーリングと垂直スケーリングです。
水平スケーリングとは、システムにマシン(またはノード)を追加して容量を増やすこと。クラスタに(仮想)マシンを追加し、分散型システムの拡張には最も一般的とされています。
水平スケーリングがコストや継続的に増加するロード量を考えるとbetter。
https://gyazo.com/c88692c318d25b4502fa25e91e57f29e
注釈:(横軸)余分に必要となる容量
(縦軸)容量を確保するユニットごとの価格
(上)垂直スケーラビリティだと、あるポイントを超えてからコストが急に上がり始める
(左下)水平スケーラビリティだと、イニシャルコストが高くなりがち
(右下)水平スケーラビリティだと、あるポイントを超えてから非常に効率的になる
一貫性と可用性のトレードオフは、落としどこを探ること
水平スケーリング, 分散コンピュータのデータ管理の大前提としてCAP定理がある。
分散コンピュータシステムのマシン間の情報複製に関する定理
https://gyazo.com/35867871d4e697bf21e1ebaf299f114f
https://gyazo.com/1e74ed35a88234759f2977dc65fbef18
3つをバランスを取ることが大事である。2つを選び1つを捨てる、ということではない。
3つの属性は満たす/満たせないのふたつの選択肢しかないのではなく、度合いがあります。可用性は明らかに0%から100%まで度合いがありますが、一貫性にも多様なレベルがあります。分割耐性にも同様です。システムに分割があるかどうかについての意見の相違も含んだ度合いがあります。
例えば、一貫性の「強さ」は分散システムにおいてはさほど重視しない考えもある。
参考
整合性, 強い弱い整合性, 結果整合性の解説
一貫性には種類, 分類があり、グラデーションとして考えたほうが適切な評価ができる
強い一貫性と結果整合性
強整合性 の場合、データの更新の際にデータベースをロックすることによってデータの一貫性(Consistency)を担保するが、ロックされる期間が長いほどその間のデータベース・アクセスがブロックされ、可用性(Availability)を犠牲にすることになる。
結果整合性 はデータの更新でデータベースがロックされることはないため、可用性とスケーラビリティを維持することができる。その代わりノード間でのデータの一貫性はデータ複製にかかる時間に依存することになるため、必ずしも担保されない。
table:強整合性と結果整合性の違い
強整合性 結果整合性
データのロック あり なし
スケーラビリティ 低い 高い
一貫性 担保される すぐには担保されない
強い整合性, 結果整合性の比較
--.icon
参考記事
じゃあ実際にシステムはどのように構成, 構築されるのか?
分散型システムのノードは演算し、データを保存し、互いにメッセージを送信し合います。メッセージ送信の重要な指標は、これらのメッセージがどれだけ確実に届くか
メッセージの永続性と持続性が非常に重要
メッセージの永続性とは、メッセージを処理しているノードで何らかの問題が起こった時、その問題の解決後に処理されるよう、メッセージはそこに残ること。消失しないこと。
それでも消失したりシステム間で不整合が発生するから冪等性が重要
分散型システムでは、途中で接続が切れたり、リクエストがタイムアウトになったりして挙動がおかしくなることがあります。クライアント側はそのようなリクエストをよく再試行します。冪等性を備えたシステムでは、特定のリクエストが何度実行されたとしても、そのリクエストに対する実際の実行は必ず1度限りです。
補足