일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- akka 강좌
- 안드로이드 웹뷰
- 하이브리드앱
- 파이썬 동시성
- 주키퍼
- Actor
- 그라파나
- 파이썬 머신러닝
- Golang
- 스칼라 강좌
- 엔터프라이즈 블록체인
- 이더리움
- 플레이프레임워크
- 파이썬 데이터분석
- 파이썬 강좌
- Akka
- 하이퍼레저 패브릭
- 스칼라
- CORDA
- hyperledger fabric
- 스칼라 동시성
- 스위프트
- Adapter 패턴
- play 강좌
- Play2 로 웹 개발
- 파이썬
- play2 강좌
- Play2
- 블록체인
- Hyperledger fabric gossip protocol
- Today
- Total
HAMA 블로그
[DB/분산] 초보자를 위한 CAP 이론 본문
* 꿈을 이루어가는 소녀들인 도연이와 미나는 DB 하나를 같이 사용합니다.
* DB 가 돌아가는 서버(노드) 가 망가져서 둘은 DB 를 사용하지 못하게 됬습니다.
* DB 를 하나 더 설치해서 2개를 사용합니다.
* 하나의 DB 가 고장났지만, 나머지 하나를 사용 할 수 있게 되었습니다.
* 복제본(Replica) 란 A 와 B 가 정확히 동일한 데이터를 가지고 있는것입니다.
(하나가 고장나도 나머지 하나로 사용 할 수 있습니다. 데이터 안정성을 높입니다)
* 파편본(Shard) 란 A 의 데이터중 일부를 빼서 그것을 B에 가져다 놓는것입니다.
(A 에 너무 많은 데이터가 있을 경우에 B에 옮겨놓습니다. 양을 분산합니다.)
결국 복제본과 파편본을 여러 컴퓨터에서 사용하면 데이터안정성과 데이터 크기를 분산시킬수 있게됩니다.
* 쿼럼은 분산시스템을 관리하는녀석이라고만 생각하면 됩니다.
* 도연이가 A 에 1000원을 더 입금하였는데, B 에 갱신이 안되어서 미나는 2000원으로만 보입니다.
* 미나한테도 3000원으로 보이려면 즉시 A 는 데이터를 B 에 업데이트 해야합니다.
* 이 업데이트는 LB 라는 녀석이 해줄 수 도 있고, A 랑 B 가 서로 간에 해 줄 수 도 있습니다. 개발하는 사람 맘.
* A 가 B 로 2000원을 3000원으로 업데이트하는 시간이 0 일 수는 없습니다. 그 시간동안 미나를 기다리게 해서
미나도 3000원으로 보이게하는것을 "일관성있는 시스템이다" 라고 말합니다.
* 근데 real life 에서 미나를 기다리게 하는 시간이 너무 지나치게 된다면 "가용성" 은 떨어 진다고 봅니다.
* B 라는 노드가 망가져도, A 노드와 C 노드로 도연이와 미나에게 서비스 해줄 수 있습니다. "가용성 있다" 라고 합니다.
* 쿼럼은 B 노드를 다시 re-join 시켜 줄 것입니다.
* B 가 다시 re-join 되었을때, A 와 데이터가 다를 수 있고, 그 다른 B의 데이터를 미나가 보게되면 이 시스템은 "일관성" 이 없는 시스템이라 할 수 있습니다.
* A 도 작동하고, B 도 작동합니다. 다만 둘간의 커뮤니케이션이 안되기때문에 둘이 동일한 데이터를 갖기
힘들어졌습니다. (다른 노드를 경유해서 공유를 하면 됩니다)
* "일관성" 을 지키기위해서 네트워크가 복구될때까지 기다린다면 "가용성" 이 떨어지게 됩니다. 가용성이란건 정확히 규정하는게 정해져있지 않지만 , 즉시 서비스 결과를 도연이와 미나는 받을 수 있는걸 말합니다. (실패여부라도 즉시, 여기서 즉시에 해당하는 시간은 정의에 따라서 달라집니다.)
“분산 시스템에서는 3개 속성을 모두 가지는 것이 불가능하다!” 이다. 각 속성은 아래와 같이 3가지이다.
Consistency (일관성)
- 우선.. CAP이론에서 말하는 Consistency는 ACID의 ‘C’가 아니다! ACID의 ‘C’는 “데이터는 항상 일관성 있는 상태를 유지해야 하고 데이터의 조작 후에도 무결성을 해치지 말아야 한다”는 속성이다.
- CAP의 ‘C’는 “Single request/response operation sequence”의 속성을 나타낸다. 그 말은 쓰기 동작이 완료된 후 발생하는 읽기 동작은 마지막으로 쓰여진 데이터를 리턴해야 한다는 것을 의미한다.
- 모든 노드가 같은 시간에 같은 데이터를 보여줘야 한다. (저장된 데이터까지 모두 같을 필요는 없음)
Availability (가용성)
- 흔히 보는 단어이고 의미도 크게 혼동될 이유가 없어보인다. “특정 노드가 장애가 나도 서비스가 가능해야 한다”라는 의미를 가진다.
- 데이터 저장소에 대한 모든 동작(read, write 등)은 항상 성공적으로 리턴되어야 한다.
- 명확해 보이는 단어이기는 하지만 분산 시스템에서의 특징을 말하는 것이기 때문에 “서비스가 가능하다”와 “성공적으로 리턴”이라는 표현이 애매하다. 얼마동안 기다리는 것 까지를 성공적이라고 할 수 있느냐에 대한 문제가 남아있다. “20시간정도 기다렸더니 리턴이 왔어! Availability가 있는 시스템이야!”라고 할 수 없기 때문이다.
- 다시한번 “성공적으로 리턴”에 대해서 보면 모든 동작에 대해서 시스템이 “Fail!!”이라는 리턴을 성공적으로 보내준다면 그것을 Availability가 있다고 해야 하느냐에 대해서도 애매하다. CAP를 설명하는 문서들 중 “Fail!!”이라고 리턴을 하는 경우도 “성공적인 리턴”이라고 설명하는 것을 보았다.
Partitions Tolerance (분리 내구성)
- 원래는 Tolerance to network Partitions인데 보통은 Partition-tolerance라고도 한다.
- 노드간에 통신 문제가 생겨서 메시지를 주고받지 못하는 상황이라도 동작해야 한다.
- Availablity와의 차이점은 Availability는 특정 노드가 “장애”가 발생한 상황에 대한 것이고 Tolerance to network Partitions는 노드의 상태는 정상이지만 네트워크 등의 문제로 서로간의 연결이 끊어진 상황에 대한 것이다
위에 말했다시피 MySQL 가 CA 에 있는것에 빠지면 혼동을 겪게되는데, MySQL 은 CA 이기도 하지만 클러스터링 방법에 따라서 다양하게 변화 할수 있음을 인지하셔야합니다. 그래서 결국 각 제품의 클러스터링 전략 별로 살펴보는게 도움이 됩니다. 3 장에선 각 제품들의 CAP 특성에 대해서 조사한 결과를 나열해 보겠습니다.
3-1. 카산드라, 카우치DB (AP)
가. C가 없기때문에 카산드라는 사용자 A,B의 요청에 다른 대답을 할 가능성이 생긴다.
나. A 가 있기때문에 카산드라는 하나의 노드에 문제가 생겨도 바로바로 리턴한다.
어차피 여러노드간에 데이타가 좀 달라도 상관없기때문에 (C 를 포기했으니..)
다. P 가 있기때문에 카산드라는 네트워크가 끊어져도 , 서비스에 문제가 없다.
어차피 여러노드간에 데이타가 좀 달라도 상관없기도 하며 (C를 포기했으니)
커넥션에 문제있는 노드는 제거되고, 잘되는 놈으로만 서비스한다.
3-2. 몽고DB (CP)
가. C 가 있기때문에 몽고DB 는 모든 사람에게 동일한 대답을 해주려고 해야한다.
나. 동일한 대답을 해줘야하기때문에 A 노드와 B 노드가 같은 값을 가져야하는데
그러기위해 동기화 시간이 생기기 마련이다. 좀 느릴수가있다. A 가 없으니 상관없다.
다. P 가 있기때문에 네트워크 단절이 되도 서비스는 가능해야한다. 음 어렵네..
네트워크 단절이되어서 일관성에 문제가 생길듯한데, 제 3의 노드를 통해서 일관성을 지킨다는 뜻인듯?
라. 결국 A 가 없기때문에 P 네트워크 단절이 고쳐질때까지 대기타야하며, A 가 없으니깐
대기타도 괜찮음으로 결론 -.-a
3-3. Percona Cluster (CA)
가. 이것은 CA 속성을 가지고 있다.
나. 이중 커밋 프로세스에 따라 일관성을 지원한다.
다. 노드간 네트워크가 깨지면 일관성을 유지할수 없기때문에, 그룹 커뮤니케이션은 매우 중요하다.
라. 온라인 쇼핑몰같은곳에 어울린다. 금액을 지불하는 고객에게 일관성 있는 서비스를 제공해야한다.
3-3. MySQL NDB (AP)
가. 이것은 AP 속성을 가지고 있다.
나. MySQL 서버들은 각각 독립노드로써 기능을 유지한다. 만약 분리된 노드간의 네트워크가 단절되었을때 데이터는 그 노드들 사이의 일관성을 유지시켜주지 못한다.
다. 소셜 싸이트에 어울린다. 쇼셜사이트에서는 수많은 서버들간에 네트워크가 문제가 생겼더라도 즉시 즉 시 서비스를 해야하며, 내가 올린 데이터가 상대방에게 즉시 보여질 필요보다는 서비스가 죽었다는 느낌 을 안주는게 중요하다.
3-4. Galera Cluster for MySQL (CA)
분리내구성(P) 사이에 트래이드오프 작용이 있다는것. 이 말은 불안정한 네트워크를 사용했을때, evs.suspect_timeout 와 evs.inactive_timeout 이러한 값이 높냐? 낮냐에 따라서 오래
지연시킴으로 해서 가용성이 악화되거나, 빠른 실패를 동반하여 네트워크 내구성을 떨어뜨릴 수 있게된다.
시간으로 설정하것은 일관성 제약에 기인한 클러스터의 가용성을 높힌다는 뜻이다.
3-5. Oracle RAC (CP)
가. 오라클 RAC 은 일관성 및 분리내구성을 가지고 있다. 만약 SQL node 중 하나를 잃더라도 여전히 잘 동작할 것이며, 데이터를 모든 시스템에 나눌것이다.
나. 명확하게 CP 다. 라고 말하는 문서는 못찾았음.
3-6. Zookeeper (P)
가. 엄격하게 얘기하면 디폴트로 일관성도 없고, 가용성도 없다. 단지 P
나. 만약 옵션으로 sync를 호출하면 CP , read only 모드를 사용하면 AP
다. 주키퍼 잣대로 위의 다른 DB 를 보면 대부분 C 도 아니고 A 도 아니다.
4. CAP 논란
https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html
https://www.percona.com/live/mysql-conference-2013/sessions/cap-theorem-two-out-three-aint-right
https://www.quora.com/Distributed-Databases-What-are-the-best-known-exceptions-for-CAP-theorem
http://www.stucharlton.com/blog/archives/2010/10/confused-cap-arguments.html
P.S
* 제가 분산이나 DB CAP 이론만 파온 전문가는 아니기때문에 이 글을 100% 신뢰를 하시면 아니 됩니다.
* CAP 이론에 대한 논란은 꽤 많은거 같습니다. 위의 논란 부분을 읽는거 추천합니다.
'RDBMS (PostgreSQL)' 카테고리의 다른 글
[PostgreSQL] mac 에서 시작하고 멈추기 (0) | 2016.08.28 |
---|---|
왜 PostgreSQL 을 선택 했나? ( PostgreSQL vs MySQL ) [번역] (0) | 2016.08.02 |
JDBC 트랜잭션 (0) | 2015.07.30 |
트랜잭션 인사이드 (0) | 2015.07.01 |
PostgreSQL 조인 (0) | 2015.05.13 |