수많은 상위 기업들이 수십억 건의 요청을 처리하고 다운타임 없이 업그레이드할 수 있는 복잡한 분산 시스템을 구축했다.
확장 가능한 분산 시스템은 기본적인 고가용성(HA)이 필요하다.
분산 시스템은 사용자를 위한 단일 컴퓨터를 형성하기 위해 함께 작동하는 컴퓨터들의 집합이다.
이러한 모든 분산 컴퓨터는 하나의 공유 상태를 가지며 동시에 작동한다.
마이크로 서비스처럼 전체 시스템을 손상시키지 않고 독립적으로 고장 날 수 있다.
상호 의존적이고 자율적인 컴퓨터들은 네트워크에 연결되어 정보를 공유하고 소통한다.
→ 분산 시스템에는 IP주소나 물리적 케이블을 사용하여 구성요소를 연결할 수 있는 공유 네트워크가 있어야 한다.
분산 시스템의 이점
유지보수가 어려울 수 있다는 단점이 있지만 아래와 같은 이점도 있다.
- Scaling : 분산 시스템을 사용하면 더 많은 트래픽을 고려할 수 있도록 수평 확장이 가능하다.
- Modular growth : 어디까지 확장할 수 있는지에 대한 상한선이 거의 없다.
- Fault tolerance : 분산 시스템은 단일 시스템보다 fault tolerant가 높다.
- Cost effective : 초기 비용은 기존 시스템보다 높지만 확장성으로 인해 빠르게 비용 효율이 향상된다.
- Low latency
- Efficiency : 분산된 시스템은 복잡한 데이터를 더 작은 조각으로 나눈다.
- Parallelism : 여러 프로세서가 복잡한 문제를 조각으로 나눠서 병렬 처리할 수 있다.
예시
horizontal scaling의 예시로는 Cassandra, MongoDB가 있으며 쉽게 scale-out이 가능하다.
vertical scaling의 예로는 MySQL이 있다.
설계 시 고려사항
- Failure Handling :분산 시스템에서 failure handling은 어려울 수 있다. 왜냐하면 일부 component(구성)은 실패하는 반면 다른 요소들은 계속 작동하기 때문이다. 이렇게 하면 대규모 장애를 방지할 수 있지만 문제 해결 및 디버깅 시 복잡성이 더 커진다.
- Concurrency(동시성) : 몇몇의 client가 공유 자원에 동시에 접근하려고 할 때 이슈가 발생할 수 있다.
모든 리소스가 동시 환경에서 안전 할 수 있도록 보장해야 한다. - Security issues : 데이터 보안과 공유는 분산 컴퓨터 환경의 위험을 증가시킨다. 네트워크를 보호하고 사용자는 여러 위치에서 복제된 데이터에 안전하게 접근할 수 있어야 한다.
- Higher initial infrastructure costs : 분산 처리 환경의 deployment 초기 비용은 단일 시스템에 비해 높다. 이 비용에는 기본적인 네트워크 설정 문제가 포함돼있다.
(+) 다음은 대규모의 웹 시스템을 설계할 때 고려해야 할 주요 사항들이다.
- 가용성(Availability): 웹 사이트의 가용성은 많은 회사의 명성과 기능에 절대적으로 중요하다. 예를 들어 Amazon.com과 같은 온라인 마켓 사이트에서 몇 분간 서비스가 제대로 동작하지 않으면, 회사는 수천 혹은 수만 달러의 손실을 입게 된다. 따라서 항상 가용적이고 장애에 유연한 아키텍처를 가지는 것은 가장 기본적인 비즈니스 요구사항이라 할 수 있다. 분산 시스템에서 높은 가용성을 얻기 위해, 중요한 컴포넌트의 이중화와 실패가 발생했을 경우에 대한 빠른 복구 방법, 문제가 발생할 때 일부만으로 동작할 수 있게 해 전면 장애가 발생하지 않게 하는 구성(graceful degradation)에 대한 고려가 필요하다.
- 성능(Performance): 대부분의 웹 사이트에서 성능은 매우 중요한 고려사항이다. 웹 사이트의 속도는 사용성, 만족도뿐 아니라 수익 및 유지에 직접적으로 연관이 있는 검색 엔진의 랭킹에도 중요한 영향을 미친다. 결과적으로 빠른 응답 시간과 낮은 지연시간을 위해서 최적화된 시스템을 만드는 것은 중요하다.
- 신뢰성(Reliability): 항상 똑같은 요청에는 똑같은 결과를 제공해야 한다. 시스템이 항상 정상적으로 동작해야 한다는 말이다. 데이터가 변하거나 업데이트되고 나면 업데이트된 새로운 데이터를 반환해야 한다. 어떤 데이터가 시스템에 저장된 이후 사용자가 해당 데이터를 검색할 때 항상 그 결과가 반환된다는 것을 사용자들이 알게 할 필요가 있다.
- 확장성(Scalability): 대규모의 분산 시스템에서라면 규모 자체는 확장성에서 고려해야 할 하나의 측면에 불과하다. 중요한 것은 더 많은 부하를 처리할 수 있도록 처리량을 증가시키기 위해 필요한 노력이다. 시스템의 확장성이란 시스템의 여러 특징이나 기능/비기능 한계 상황으로 설명될 수 있다. 예를 들어 얼마나 많은 추가적인 트래픽을 처리할 수 있는지, 저장 공간을 추가하기가 얼마나 쉬운지, 얼마나 더 많은 트랜잭션을 처리할 있는지와 같은 것들 말이다.
- 관리성(Manageability): 쉽게 운용할 수 있는 시스템을 설계하는 것은 또 다른 중요한 고려 사항이다. 시스템의 관리성이란 운용(유지와 업데이트)의 확장성과 같은 말이다. 관리성이 좋아지려면 문제 발생 시 분석이 용이해야 하며 문제를 이해하기 쉬워야 한다. 그리고 업데이트와 수정, 시스템 운용 자체가 쉬워야 한다(주기적으로 하는 일을 실패나 예외 없이 수행할 수 있다면 얼마나 좋을까?).
- 비용(Cost): 비용은 중요한 요소다. 비용은 물론 하드웨어와 소프트웨어 비용을 포함하지만, 시스템을 배포하고 관리하는 비용 또한 중요하게 고려해야 한다. 이러한 비용에는 시스템이 빌드하는 데 걸리는 시간, 시스템을 실행시키는 데 드는 운용 노력의 양, 모든 고려해야 할 사항에 대해서 필요한 교육 비용까지 포함된다. 즉 비용은 시스템 소유에 필요한 모든 비용이다.
출처 : https://d2.naver.com/helloworld/206816
분산 처리 시스템을 구축해서 사용하는 것은 쉽지 않다 그리고 종종 분산 시스템은 많은 시스템에 "overkill"(지나친) 기술이다.
마찬가지로, 버그 감지는 여러 위치에 분산되어 있는 시스템에서 탐지하기가 더 어렵다.
예상치 못한 상황에서 다양한 요구사항을 보장하는 데이터를 배포하는데 많은 어려움이 있을 수 있다.
Cloud vs distributed system
클라우드 컴퓨팅과 분산 시스템은 다르지만 유사한 컨셉을 사용하고 있다.
분산 컴퓨팅은 여러 기기에 task를 분산함으로써 분산 시스템을 사용한다.
반면에 클라우드 컴퓨팅은 스토리지, 프로세스, 데이터 관리를 위해 네트워크 호스팅 서버를 사용한다.
분산 컴퓨팅은 협업적인 자원 공유를 만들고 size와 geographical scalability을 제공하는 것을 목표로 한다.
클라우드 컴퓨팅은 투명성, 모니터링 및 보안을 사용하여 On-demand 환경을 제공하는 것이다.
References
'IT 기본지식' 카테고리의 다른 글
HTTPS란 무엇인가? / TLS(=SSL) 공개키 암호화 (0) | 2022.02.19 |
---|---|
방화벽과 웹 방화벽의 차이는 뭘까? (0) | 2022.02.19 |
고가용성 High Availability이란? (0) | 2022.02.16 |
Load Balancer란? / L4 load balancer, L7 load balancer (0) | 2022.02.15 |
Micro Service Architecture(MSA)의 장단점 (0) | 2022.02.15 |
댓글