[DB]分散データベースの決定(CAP、PACELC)


🧐 緒論


CAP理論は分散型データベースシステムにおける有意義な理論である.
分散データベースの3つのプロパティを示します.コンシステンシ、可用性、およびネットワークパーティションの許可です.
最初のCAP理論発表後,時間が経つにつれて理論の抜け穴が発見され,完全なPACELC理論が出現した.
通常、分散型データベースでは、レプリケーションとShardingが基本的にサポートされています.
レプリケーション機能により、あるデータベースノードに障害が発生した場合、別のノードにレプリケーションされたデータが存在し、信頼性が向上します.
あるいは、キャラクターをRead DB、Write DBに分けて負荷分散効果を得る.そして、Shardingにより各DBノードにデータを格納することで、分散性、安定性などの効果も得られる.
🔎 Replication : 두 개의 이상의 DBMS 시스템을 
		Mater / Slave로 나눠서 동일한 데이터를 저장하는 방법
        
🔎 Sharding : 같은 테이블 스키마를 가진 데이터를 
		다수의 데이터베이스에 분산하여 저장하는 방법
        

CAP理論



CAP理論は分散系においてCAP 3個の属性を同時に満たすことは不可能であり,2個の属性しか満たすことができない理論である.
💡 주의해야 될 것은 2가지 속성만을 지원한다는 것이 아니라 
2가지 속성을 지원하기 위해서는 1가지 속성을 희생해야 된다는 것이다.

1가지 속성을 포기한다는 뜻이 극단적으로 그 속성을 포기하는 것이 아닌 
1~100까지의 수치가 있을 때 일관성과 가용성을 100% 지원하던 것에서 
수치를 60%로 낮춘다고 생각을 하면 된다.
RDBMS、NOSQLなどのどのデータベースを使用するかを選択すると、システムの特徴に基づいてCAPのニーズを分析し、適切なデータベースを選択できます.

コンシステンシ


これは、あるデータに対して一貫したデータ保証、すなわち同期性、一貫性を提供することを意味する.
一貫したデータを保証することは、ある時点でデータを要求し、クエリーするときに、データが常に同じであることを意味します.
RDBMSにおいて、クライアント1が特定のカラムに格納されている値300を500に変更する場合、クライアント2がデータを問い合わせるとき、その値は常に500である必要がある.
コンシステンシはRDBMSがサポートする最も基本的な機能ですが、NoSQLではコンシステンシがコンシステンシを犠牲にして高速分散処理を実現する場合があります.

フロントエンドの可用性(Availability)


すべてのクライアントの読み取りと書き込みに常に応答(成功)しなければならないことを意味します.これを「My Failure」と呼び、「My Failure」のあるクラスタでは、いくつかのノードに障害が発生しても、通常のサービスを提供できます.
DBがA,B,Cノードに分散している環境では,Bノードが故障し,サービスができない.しかし,A,Cノードがまだ生きていて,A,Cノードとしてユーザサービスを続けていれば,利用可能なシステムといえる.
一部のNOSQLでは、データ・レプリケーションを使用して可用性を保証します.

≪グローバル・ネットワーク・パーティションの使用を許可|Allow Global Network Partition|emdw≫(パーティションの使用を許可)


ノード間通信に失敗しても、システムは正常に動作します.
ネットワーク障害により、BノードがA、Cノードに接続できず、正しくコピーできない場合、A、Cノード、Bノードのデータは異なります.
それでもサービスを継続すれば利用可能なシステムといえる.しかし、一貫性は破られたシステムである.しかし、一貫性を保つためにネットワーク障害の解消を待つと、可用性が低下します.

すべてのCAP理論の抜け穴


CPシステム
完全な一貫性を持つ分散システムでは、データ変更はすべての存在する操作にコピーする必要があります.これは可用性とパフォーマンスに大きなマイナス影響を及ぼします.ノードに問題がある場合、トランザクションは失敗します.また,ノードが多ければ多いほど遅延時間が長くなる.
アクセスポイントシステム
完全な可用性を有する分散システムでは、すべてのノードが任意の場合に応答できる必要があります.ネットワークの問題が発生した場合、ノードにアクセスしたユーザーにデータを返して、どのノードでもレプリケーションを必要とせずに可用性を確保します.コンシステンシが破られるのは当然であり,ユーザも問題が発生したことを認識しない.
CAシステム
一貫性と可用性の要件を同時に満たすには、ネットワーク障害を回避する必要があります.ネットワーク構成は、ネットワーク障害を回避できますか?そんなものはこの世界には存在しない.最終的に,CAP理論はネットワークパーティションの許可から始まるべきである.P,C,Aのいずれかを選択する必要があります.しかし、前に紹介したCP、APシステムもちょっと憂鬱です.我々が必要とするのは、ある態様を完全に満たすシステムを構築することではなく、サービスの目的を満たすために一貫性と可用性がバランスしたシステムを構築することである.

PERCELC理論



PACELC理論はCAP理論で不足を補い,ネットワーク障害状況と正常状況に分けて説明した理論である.P(ネットワークパーティション)の場合,A(可用性)とC(コンシステンシ)の競合関係,E(else,通常)の場合のL(遅延)とC(コンシステンシ)の競合関係について説明した.
PACELC理論では,故障状況,通常の動作方式により,システムをPC/EC,PC/EL,PA/EC,PA/ELに分けることができる.

🙏 参考資料


https://geunyang93.tistory.com/41
https://dongwooklee96.github.io/post/2021/03/26/cap-%EC%9D%B4%EB%A1%A0%EC%9D%B4%EB%9E%80/
https://ohjongsung.io/2019/05/01/cap-%EC%9D%B4%EB%A1%A0%EA%B3%BC-pacelc-%EC%9D%B4%EB%A1%A0