티스토리 뷰
목차
MSA에 대한 논문을 읽고 리뷰하면서, MSA자체에 대한 개념도 개념이지만 새로운 단어를 많이 접하게 됐다.
일단 되는대로 메모장에 옮겨 적어두기는 했는데, 오늘부터 하나씩 쪼개며 머릿속에 집어넣어 보자.
CAP Theorem
CAP 정리, 혹은 가설을 제시한 사람의 이름을 딴 브루어 정리는 이론 컴퓨터과학의 정리 중 하나이다.
정확한 단어 사용을 위해 굳이 다시 강조하자면, CAP는 2002년에 증명이 끝난 정리이다.
이는 마치 피타고라스의 정리와 같이 법칙보다 엄밀하게 증명된, 신뢰할 수 있는 대상이라는 뜻이다.
그 내용을 요약하면 다음과 같은데,
C, A, P 세 가지를 모두 만족시키는 분산 데이터 저장소는 없다.
여기서 C, A, P란 각각 아래와 같은 그림으로 나타낼 수 있다.
- Consistency(일관성, 정합성)
데이터의 I/O작업이 일관되게 유지되는 것을 가리킨다.
여러 개의 노드로 분산된 데이터 시스템에서 하나의 노드에서 데이터를 읽거나 쓸 때,
작업이 완료된 이후엔 다른 노드에서 동일한 결과를 확인하는 것이 보장되는 것이라고 할 수 있다. - Availability(가용성)
말 그대로 전체 시간 중 시스템이 작동하고 있는 시간의 비율이 높은 것을 가리킨다.
분산 서버나 노드 중 일부분에서 장애가 발생하더라도 전체적인 시스템은 작동 가능한 상태를 유지하는 것이라고 할 수 있겠다.
여기서 작동 가능한 상태란 사용자는 언제나 데이터 소스에 접근할 수 있으며
모든 요청이 항상 성공 혹은 실패를 일관되게 반환하는 것을 가리킨다.
추가로 이를 위해 노드에 대한 실시간 모니터링이 필요하며, 장애가 생긴 노드를 빠르게 다른 노드로 대체해야 한다.
P와 비슷해 보이지만, A의 경우는 사용 가능한 노드를 최대한 활용하는 것이 주된 목표이다. - Partition Tolerance(분할 내성)
내성이라는 단어는 MSA에서 높은 빈도로 사용되는 것 같다.
어쨌거나 분할 내성은 분할 환경에서 노드 간 통신이 실패하거나 불안정해도 시스템 전체는 정상적으로 작동하는 것을 가리킨다.
즉, 네트워크 문제로 노드 간의 연결이 끊기더라도 각 노드가 독립적으로 작동해서 시스템을 작동 가능하게 유지시키는 것이다.
A와 비슷해 보이지만, P의 경우는 네트워크 오류를 대비해 노드를 분산시키는 것이 주된 목표이다.
이 세 가지 중 한 가지를 포기해야 하는 예를 들어보면 다음과 같다.
Example
먼저, 대규모 트래픽이 발생하는 쇼핑몰이 있다고 치자. 서비스 운영자는 대규모 트래픽을 처리하기 위해
서버를 수백대로 나눠 배치하여 분산처리를 노린다. 이때 C, A, P 각각에 대해 다음과 같은 결과가 빚어질 수 있다.
- C를 포기하는 경우, 데이터 저장소간의 일관성을 포기했기 때문에 다른 요청에 대해 일관된 응답을 할 수 없게 된다.
대신 A와 P를 보장할 수 있으므로 일부 장애가 생기더라도 주문을 계속해서 받을 수 있게 된다. - A를 포기하는 경우, 데이터 일관성을 챙겼으므로 모든 요청에 동일한 응답을 할 수 있게 된다.
하지만 이런 경우 데이터를 동기화하는데 시간이 걸리므로 그 시간 동안 사용자는 서비스를 이용할 수 없게 된다.
속도와 사용자 경험이 최우선인 쇼핑몰에서는 가장 가능성이 낮은 경우로,
A를 포기하는 경우는 금융 도메인과 같이 일관성이 우선 과제인 분야이다. - P를 포기하게 되면 네트워크 분할 상황에서 시스템이 제대로 작동하는 것을 보장할 수 없다.
또한 분할이 해결됐을 때지리적으로 떨어진 서버에서 처리된 각각의 영역에서 처리된 요청 정보를 병합하고 복구하는데
시간이 오래 걸리고 비용이 많이 들게 된다. - 정리하면 대규모 쇼핑몰에서는 A> C> P순으로 중요한 가치를 가진다.
Tech Stack
계속해서 C, A, P, 그리고 그 사이의 CA, CP, AP를 보장하기 위한 기술스택에 대해 정리하자.
Tech Stack | |
Consistency | ACID 트랜잭션 2PC(Two-Phase Commit) - 분산 트랜잭션의 일관성 보장 Paxos, Raft - 분산 환경의 일관성 보장 |
Availability | Load Balancer - 서버 부하 분산을 통해 가용성 확보 Replication - 여러 노드에 데이터 복제, 데이터 가용성 확보 Cache |
Partition Tolerance | Replication -여러 노드에 데이터 복제, 분할 내성 보장 Consistent Hashing - 노드 추가/삭제시 데이터 재배치 최소화 |
CA(Consistency and Availability) | ACID 트랜잭션을 지원하는 RDBMS MySQL, PostgreSQL, Oracle RDBMS 등 |
CP(Consistency and Partition tolerance) | 일시적 가용성 포기에도 무정지 운영이 가능한 시스템 Bigtable, HBase, MongoDB, Redis 등 |
AP(Availability and Partition tolerance) | 일관성을 포기하고 A, P 확보 Cassandra, DynamoDB, Riak 등 |
자주 보거나 사용해 본 스택도 있고, 이름만 들어본 스택과 생전 처음 보는 스택도 있다.
각각에 대해 다 알아볼 수는 없겠지만 눈에라도 익도록 하는 걸 목표로.
기회가 된다면 CAP 정리에 대해 조금 더 자세히 알고 싶다는 게 결론인 것 같다.
끝!
'Development > MSA' 카테고리의 다른 글
[MSA]분산 트랜잭션(Distributed Transaction) 튜토리얼 (0) | 2023.04.19 |
---|---|
[MSA]분산 환경(Distributed Environment)에서의 내부 통신 (2) | 2023.04.16 |
[MSA]수직적 분할, 수평적 분할, 그리고 (2) | 2023.04.04 |
[MSA]분산 서버 환경에서 세션 스토어 문제 (0) | 2023.03.19 |
[MSA]Microservice Architecture(MSA) 튜토리얼 (0) | 2023.03.17 |
- Total
- Today
- Yesterday
- 지지
- Algorithm
- 스프링
- Python
- BOJ
- 파이썬
- java
- 리스트
- spring
- 야경
- 남미
- 세계일주
- 자바
- 유럽
- 여행
- a6000
- 면접 준비
- 세계여행
- 맛집
- 유럽여행
- 스트림
- RX100M5
- 기술면접
- 칼이사
- Backjoon
- 백준
- 알고리즘
- 세모
- 동적계획법
- 중남미
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |