인프라 & 클라우드 & 코딩 이야기/IT 이것저것

Distributed Systems 분산 시스템 / Distributed Computing 분산 컴퓨팅

인생여러방 2023. 5. 29. 14:03
728x90
반응형

https://www.educative.io/blog/distributed-systems-considerations-tradeoffs

분산 시스템 혹은 분산 컴퓨팅이란 위 그림처럼 Scale Up(Vertical Scaling) 한 것이 아니라, Scale Out(Horizontal Scaling) 된 아키텍쳐로 이해하면 편하다.
여기에 단순 Scale out이 아니라, 3 Tier Web 아키텍처와 같이 

그리고, 

MSA나 SOA 처럼 서비스가 분산되어 있는 아키텍처도 같이 이해하면 된다.
그렇다고, 꼭 서비스가 쪼개져 있고, 티어가 나뉘어져 있을 필요는 없다.
그리고 동시에 소비서가 쪼개져 있더라도 하나의 장비에 돌아간다면 그것은 분산 시스템이라고 볼 수 없다.

하나의 DB 서비스라도, 양이 많아서 여러대의 DB서버로 분산되어 처리된다면 분산시스템이고, 하나의 웹 포탈 서비스인데, 메일 서버, 뉴스 서버 이렇게 서비스 별로 분산되어 처리되는 것도 분산 시스템이다. 또 동일한 서비스를 고가용성을 위해 2개에 서버로 동시에 운영하는 이런 경우도 분산 시스템이다. 

분산 시스템을 구분해서 정리를 아래와 같이 할 수 있을 것 같다.
클러스터 컴퓨팅 / 그리드 컴퓨팅
네트워크로 연결된 여러 컴퓨터들이 하나의 서비스를 위해서 하나의 컴퓨터처럼 작동하는 구조이다.
(실질적으로는 서버별로 서비스가 나뉘어져 있고, 티어가 나뉘어져 있고, 부하분산을 위해/성능을 위해/고가용성울 위해 여러 서버로 병렬처리하고 있어도, 결과적으론 하나의 서비스. 사용자가 느끼기에는 하나로 보임)
클러스터는 네트워크 연결이 LAN으로 근거리 통신망이고, 그리드 컴퓨팅은 WAN으로 원거리 통신망이다.
즉 회사 내부에 여러 서버들이 돌아가면서 하나의 서비스를 제공한다면, 클러스터 컴퓨팅인 것이다.
반면 클라우드 회사와 같은 업체를 이용하여 혹은 알아서 WAN을 통해 여러 컴퓨터들을 하나의 서비스로 연결한 것이다.
이때 하나 참고해야될 사항은 서비스를 제공하는데 있어 효율적이고 효과적인 컴퓨터 성능을 위해 여러 컴퓨터를 하나의 컴퓨터 처럼 사용하는 것이데, 단순 성능 향상이 아닌 효율적 사용에 있다.
두 대의 서버를 사용하여 2배의 컴퓨팅 성능을 내는 것이 전부가 아니라, 한 서버가 메일 관련 서비스 서버이고, 한 서버가 회원가입 관련 서비스 서버라고 한다면 평소에 메일 서버는 바쁘게 돌아가는데 비해, 회원가입 서버는 메일 서버에 비해 사용되지 않고 있을 것이다. 이때 회원가입 서버의 유휴 자원을 메일 서버에 사용할 수 있도록, 이렇게 하여 컴퓨팅 자원을 효율적으로 사용할 수 있도록 컴퓨터들을 네트워크로 연결하여 하나의 컴퓨터 처럼 사용하는 것이다.

클라우드 컴퓨팅
다른 사람들의 정리를 보면, 클라우드 컴퓨팅과 비교를 하고 그러던데.. 클라우드 컴퓨팅은 그냥 클라우드 회사가 제공하는 컴퓨팅 서비스이다. 클라우드 컴퓨팅을 통해 클러스터 컴퓨팅, 그리드 컴퓨팅을 구성할 수 있을 것이다.

분산 시스템을 고려할 때, 아래와 같은 항목들을 고려해야된다.

1. 가용성.
가용성/고가용성은 분산 시스템을 사용하는 이유 중 비중 있는 이유이다. 이중화를 통해 Active-Active 구조 혹은 Active-Standby 구조를 통해 장애가 나도 무중단 운영 혹은 빠른 복구를 가능하도록 설계가 되어야한다. 또한 백업 장비등을을 배치함으로써 데이터 복구 능력을 향상 시킬 수 있다.

2. 성능. 
단순히 컴퓨터를 여러대 쓴다고 해서 성능(퍼포먼스/IOPS)가 올라가진 않는다. 예를들어 Actvie-Sandby로 한다면, 장애를 대비하여 Standby를 수십대를 두어도 서비스는 Active 하나에서 이뤄지기 때문에 성능은 하나의 컴퓨터 성능 밖에 나오지 않는다. 성능 향상이 필요한 부분이라면, Active-Active 구조로 하고 로드밸런스를 두는 구조를 설계해야 된다.

3. 확장성.
분산 시스템에서는 컴퓨터 성능을 향상 시킬 때(물리적으로) Sacle Up 뿐만 아니라, Scale Out도 가능하다.(여러대의 컴퓨터를 사용하는 시스템이기 때문에) Scale out을 통해 scale up보다 더 가격 효율적으로 성능을 증가시킬수 있고, 부하분산등을 통해 2.성능 등을 올리는데 용이하다.
그리고 특정 세부 서비스에서만 많은 부하가 걸릴 수 있는데, 분산시스템이 아니라면, 특정 세부 서비스의 부하를 감당하기 위해 불필요하게 고성능의 컴퓨터를 구축해야될 수도 있다. 하지만, 분산시스템에서는 해당 세부 서비스를 분리하고, 해당 세부 서비스 장비만 scale up/out을 통해 효율적인 확장이 가능해진다.

만약, 세부 시스템으로 컴퓨터들을 나누지 않고, 하나의 컴퓨터(VM)으로 만들어서 하나의 컴퓨터처럼 사용한다면, 성능과 확장에 관려하여 큰 신경을 쓸 것은 없지만, 효율적으로 효과적으로 효과를 보기 위해서는 세부 시스템, 혹은 티어 등으로 나누는 것이 좋다.

4. 관리성.
분산시스템을 사용하면 가용성 부분, 성능 부분 그리고 확장성 부분에서 장점을 가지는 것은 사실이다. 하지만 이런 장점을 가지는 구조가 되면서 아키텍처는 복잡해지게 된다. 그러면서 동시에 많은 관리포인트가 생기게 된다. 그러다보니 서비스의 운영, 업데이트 및 수정 등이 분산시스템을 하지 않은 것에 비해 어려워 질 수 있다. 따라서 분산 시스템으로 아키텍처를 설계할 때, 이 부분을 고려하며 설계가 들어가야한다. 무조건적으로 분산하고, 이중화하는 것은 좋은 것이 아니다.

5. 신뢰성
신뢰성은 관리성과 연결되어있다. 관리가 제대로 되지 않게되어 업데이트 및 수정 사항이 일부 세부 서비스에게는 적용되지 않을 수 있다. 예를 하나 더 들어보면 DB를 2개로 복제하고 분산처리해서 각 동일한 내용의 DB가 몇몇개의 세부 서비스를 지원하고 있는 경우를 가정 했을 때, 이 DB는 동일해야 되므로 실시간 동기화가 제대로 이뤄져야한다. 만약 한쪽 DB가 업데이트 혹은 수정이 늦어 다른 DB와 차이가 발생하다면, 동일한 서비스를 동시에 사용했지만, 사용자별로 다른 결과를 받을 수도 있다. 이렇게 될 시 서비스의 신뢰성이 떨어지게된다.
DB 관련 뿐만 아니라, 어떤 모든 경우에서도, 동일한 입력에는 동일한 결과가 나올 수 있도록, 동기화나 fail over 등의 구조가 잘 갖춰져있어야한다.

5. 비용.
서버의 CPU , 메모리 등을 올리는 scale up이 아니라 scale out 형태의 성능 증설. 하나의 컴퓨터로 모두 해결하지 않고 여러 컴퓨터를 사용하는 이런 아키텍처는 비용적으로 고려할 것이 많아진다. 일단 공간도 필요하고, 장비 대수가 늘어남에 따라 발열량(냉각비), 전기 사용료, 관리 비용 등도 늘어나게 된다. 그리고 더 복잡해진 설계, 그리고 장비의 관리등은 인적 자원에 드는 비용도 증가시키게 된다.
물론 초 고성능 CPU의 큰 메모리를 탑재한 서버 한 대보다, 중간 성능 cpu와 중간 크기 메모리의 서버 2개를 사용하는 것이 가성비 적으로 좋을 수 있고, 지속적인 확장이 가능하기 때문에 가성비로는 좋을 수 있지만,  분산시스템을 도입하면서 다른 여러 이유로 비용이 나가는 것은 충분히 고려해야될 사항이다.
따라서 정말 필요한 부분, 효과를 볼 수 있는 부분들을 고려하여 분산 컴퓨팅 아키텍처를 설계해야한다.
비용이 그렇게 싸다고 볼 수는 없겠지만 클라우드를 사용하는 것이 장비 값 이외에 부수적인 노력과 비용을 내지 않아도 되서 가격 효율적일 수 있다.
하지만 여전히 클라우드라고해서 가격이 무조건적으로 싼 것이 아니기 때문에, 하이브리드 클라우드 형태 혹은 멀티클라우드 형태로 비용을 고려한 많은 고민이 필요하다.

728x90
반응형