분산 시스템이란?
분산 시스템은 여러 컴퓨터 또는 장치들이 네트워크로 연결되어 작업을 분산하고 협력하여 동작하는 컴퓨팅 환경을 말한다. 이러한 시스템은 컴퓨터 자원과 작업 부하를 여러 노드에 분산시켜 성능을 향상 시킬 수 있으며, 높은 가용성, 확장성, 신뢰성을 제공할 수 있다.
분산 시스템은 중앙 집중식 시스템과 달리 분산된 자원을 활용하여 작업을 처리하므로, 여러 개의 컴퓨터나 서버에 응용 프로그램, 데이터 또는 서비스를 분산시킬 수 있다. 이러한 분산 시스템은 대규모 데이터 처리, 병렬 컴퓨팅, 실시간 시스템, 클라우드 컴퓨팅 등 다양한 분야에서 사용된다.
분산시스템의 구성요소는 여러 개의 노드로 구성되며, 이 노드들은 네트워크를 통해 통신하고 작업을 협력하여 수행한다. 이러한 노드들은 동일한 작업을 수행하거나 특정 역할을 수행할 수 있으며, 각 노드는 독립적으로 동작하면서도 전체 시스템의 일부분을 구성한다.
1. 분산 시스템이 필요한 이유
초기에 소프트웨어 개발자들은 scale-up 보다는 원격 처리 장치의 수를 늘리는 scale-out 전략을 생각했다. (scale-up은 한계가 있음) scale-out 전략을 사용하기 위해서는 상태를 공유하지 않아야 했다. 왜냐하면 상태 공유는 많은 자원이 소모되고 불필요한 기술적 한계 지점이 발생했기 때문이다.
따라서 데이터베이스를 중심으로 여러대의 서버로 scale-out이 가능하면서도 상태와 데이터의 공유가 가능하고 user(client)가 사용하는 기능에는 변화가 없는 소프트웨어가 필요해졌다. 이후에는 데이터베이스가 아닌 시스템들도 분산시스템을 필요로 했다.
2. 분산 시스템의 특징
2.1 기본 특징
2.1.1 Concurrency
자원은 공유하면서, 리소스 내에서 동시에 여러가지 작업을 수행한다.
동시 실행 자원을 늘려서 처리량을 늘릴 수 있다.
2.1.2 No Global Clock
시스템의 각 부분이 비동기식으로 동작한다.
어떤 한 부분의 상태 때문에 다른 곳에 Lock, Bottleneck이 걸리면 안 된다.
2.1.3 Independent Failure
시스템의 한 부분의 실패가 전체 시스템의 영향을 주면 안 된다.
2.2 설계 원칙
2.2.1 BASE Principle
- 일관성, 가용성, 신뢰성 측면에서 분산 시스템의 설게와 운영을 유연하게 하기 위한 원칙이다. 일부 데이터의 일관성은 희생하더라도 가용성과 응답성을 보장하는 것을 강조한다.
- Basically Available - 전체가 이용불가능한 상태는 없다. 부분적인 장애는 가능.
- 데이터 replica를 만든다.
- 한 종류의 data를 여러 노드에 분산한다.
- Soft State - 응답하는 데이터(또는 집합의) 상태는 inconsistency 할 수 있다. 이것에 대한 책임은 사용자에게 있다.
- Eventually Consistent - 입력된 데이터는 약간의 지연이 있을 수 있지만, 결국 저장 및 조회가 될 것이다.
2.2.2 CAP Theorem
- 네트워크 파티션 상황에서 consistency-availability 축을 이용하여 시스템의 특성을 설명한다.
- 분산 시스템에서는 일관성, 가용성, 분할 허용성을 동시에 보장하기 어렵고 한 가지는 포기해야 실제 소프트웨어로 구현이 가능하다는 딜레마가 있다.
- Consistency(일관성)
- 분산된 환경이라도 모든 동일한 요청에 대한 응답 데이터는 항상 똑같다.
- 동시에 여러개의 병렬 요청에도 같은 결과를 제공한다.
- Availability(가용성)
- 어떤 상황에서도 기능을 이용할 수 있다.
- 분산 환경의 일부에 장애가 있어도 전체엔 문제가 없다.
- Partition-Tolerance(분할 허용성)
- 분산 시스템을 구성하는 노드 간 통신의 문제가 발생해도, 각각의 부분 시스템은 정상적으로 동작한다.
현실적으로 완벽한 CP, 완벽한 AP 시스템은 존재할 수 없다. 따라서 AP와 CP 사이에서 요구사항에 맞는 균형점을 찾아야 한다.
- 강할수록 Strong, 약할수록 Week으로 말한다.
- 대부분의 분산 데이터베이스는 AP 쪽에 비중을 둔다.
- AP: 어떤 상황에서도 안정적으로 시스템은 운영된다. 또한 데이터와 상관없이 안정적인 응답을 받을 수 있다. 단, 데이터의 정합성에 대한 보장은 불가능하다. 에를 들어 나는 동기화가 되어 최신 데이터를 확인했지만, 어떤 사람은 동기화가 되기 전이여서 다른 데이터를 확인하는 경우가 생길 수 있다.
2.2.1 PACELC Theorem
- CAP 이론의 단점들을 보완하기 위해 나온 이론이다. PACELC 이론은 P(partition)상황에서 A(availability)과 C(consistency)의 상충 관계와 E(else, 정상)상황에서 L(latency)과 C(consistency)의 상충 관계를 설명한다.
- Partition -> "Availability&Consistency" Else "Latency&Consistency"
- Strong Consistency 와 Latency 사이의 trade-off 를 고려한 타협점을 찾는다.
- If 노드간 네트워크 Parition 발생
- Availability를 포기하고 장애로 상태로 변경, Consistency를 유지
- Consistency를 포기하고 부분적 노드 그룹에만 HA유지
- else 정상적인 네트워크 상황에서는,
- 모든 노드에 적용과정에서 L 과 C 간에 trade-off
결국 내가 원하는 시스템의 요구사항에 맞게 어떤 것을 원하는지 먼저 정의해야 한다.
내가 선택할 수 있는 기술적인 요소들 중에서 어느 정도까지 구현가능한지 파악한 후, trade-off 를 감안해서 시스템을 구현하고 요구사항이나 기능을 조정해야 한다.
따라서 가장 적합한 기술을 선택하기 위해서는 여러 기술을 알아야 한다.
새로운 기술이 나왔을 때 어떤 특징을 갖고 있는지 배우는 자세가 중요하다.