- 분산시스템
- CAP 이론
- Consistancy(일관성)
- 동시적인 상황의 R/W 에도, 동일한 결과를 제공 함.
- 분산노드간 데이터가 항상 똑같다.
- Availability(가용성)
- 어떠한 상황의 R/W 에도, 결과 제공을 보장 함.
- 분산노드중 하나에 장애라도, 전체엔 문제없다.
- Partition-Tolerance(분할내성)
- 네트워크 장애로 통신단절이 발생해도, 각각의 시스템은 정상적으로 동작 함.
- 분산노드간에 통신장애라도, 단절된 각각은 정상적으로 동작한다.
- 한 분산시스템만으로는 절때! CAP 3가지 다 완벽히 지원 할 수 없음. (1가지를 꼭 희생해야 함)
- CA : MySQL, PostgreSQL, ...
- AP : Cassandra, TokyoCabinet, CouchDB, DynamoDB ...
- PC : Redis, MongoDb, HBase, BigTable, ... (예를들면, Availability는 외부솔루션으로 처리하는식)
- (기본적으로 RDBMS는 P를 지양 , NoSQL은 P를 지향)
- Consistancy(일관성)
- PACELC 이론
- CAP에서 확장하여, Partitioning 장애가 있고/없는 상황에 따라~ 능동적으로.
- Partition -> "Availability&Consistency" Else "Latency&Consistency"
- 강한 일관성(Strong Consistency) 와 지연(Latency) 간의 적절한 타협점을 찾는 전략.
- 예) 네트워크간 통신에러가 나면,
- A를 포기하고 장애로 돌입하여~ C를 유지.
- C를 포기하고 부분적 노드에만 적용해~ HA유지.
- 예) 정상적인 네트워크 상황에서는,
- 모든 노드에 적용과정에서 L 과 C 간에 trade-off.
- 수직적 확장 Vs 수평적 확장
- 수직적 한계에 봉착으로... 수평적 분산시스템이 탄생.
- 즉, 여러대의 서버를 하나의 클러스터로 묶을수있는 기술이다.
- 샤딩 및 Replication
- 샤딩 : 필연적으로 분산을 하는, '자동샤딩'이 필수적.
- App -> {Router} -> Shard (애플리케이션에서는 신경쓰지 않고, 라우터가 알아서 해줌)
- Replication : 보완적으로 분산에 위험성에 따른, '다중복제'도 필수적.
- Master-Slave
- peer to peer (Multi-Master) (Ring형태의 노드에 Gossip 프로토콜 기반으로 해줌)
- 샤딩 : 필연적으로 분산을 하는, '자동샤딩'이 필수적.
- ACID Vs BASE
- ACID
- 시스템의 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질.
- 원자성(Atomicity) : transaction 작업이 부분적으로 실행되다가 중단되지 않는 것을 보장.
- 일관성(Consistency) : transaction 작업이 완료되면, 그 결과는 일관적임을 보장.
- 고립성(Isolation) : transaction 작업 수행 시, 다른 transactino이 끼어들지 못하도록 보장.
- 지속성(Durability) : transaction 작업이 수행되면, 그 최종적인 반영을 보장.
- BASE (Basically Available. Soft state. Eventually consistency.)
- Basically Available : 부분적인 장애는 날수도 있이만, 전면적인 장애는 최소한 없음.
- Soft state : Master-Slave 구조로 외부로 전송되는 사본 데이터는 비일관적 일수있음.
- Eventually consistency : 복제 과정에서 약간의 지연은 있을 수 있지만, 최종적 궁극적 일관성 제공.
- ACID
- Consistency(일관성) 이슈
- Read/Wirte : 샤딩 및 복제 를 지원하면서, 일관성을 유지하기는 쉽지않다.
- Durability(지속성) 완화 : 성능을 최대화 하기위해, 메모리를 이용
- Quorum(정족수) : 분산환경에서 성능을 위해, Replication Factor를 기준으로 RQ/WQ를 튜닝.
- ...
- CAP 이론
-끝-