DevOps/Cloud

[Cloud] 클라우드 규모에 맞는 높은 안정성 확보 : 6장

샤아이인 2022. 1. 23.

클라우드 세상 속으로 라는 책을 읽으며, 중요한 내용은 저 자신도 곱씹어 볼겸 가겹게 포스팅 하겠습니다.

6.1 클라우드 선구자로서의 SOA

1) 분산 시스템

분산 시스템에 대한 가장 중요한 핵심은 분산되지 않은 시스템에 비해 장애단일점 이 없다는 사실이다. 즉 일부분의 고장으로 인하여 시스템 전체가 멈추는 일이 없다.

 

2) 낮은 상호의존성

낮은 상호의존성은 다른 모든 개체들과 독립적으로 동작하는 각각의 컴포넌트들이 별도로 분리되어 구축되고, 테스트되고, 교체될 수 있다는 것이기 떄문에 안정성에 영향을 주게 된다. 장애가 발생하는 상황에 대해 스스로 또 다른 문제를 일으키지 않고 장애상황을 직면하거나, 다른 곳에서 돌아가는 인스턴스가 접근하여 장애를 대처하도록 다른 컴포넌트들을 구축하는 것 이 더 쉽다.

 

3) SOA

시스템 개발과 통합 과정에서 사용되는 유연한 일련의 설계 원칙들을 말한다. 배포된 SOA기반의 아키텍처는 다수의 사업 영역에서 사용될 수 있는 낮은 상호의존성을 가지는 서비스 군을 제공한다. SOA는 기능들을, 구분되는 단위 또는 서비스들로 나누고, 개발자들은 이것을 네트워크를 통해 접근되도록 만들어서 사용자들이 어플리케이션을 만들 때, 이것들은 조합하거나 재활용할 수 있도록 해준다. 이러한 서비스와 각 서비스를 사용하는 소비자들은 잘 정의된 공유 포멧으로 데이터를 전달하거나 두개 또는 그 이상의 서비스들 간의 동작을 조율하는 방법으로 서로 간에 통신을 한다.

 

4) SOA와 낮은 상호의존성

SOA 서비스 들은 낮은 상호 의존성을 특징으로 한다. 이들은 잘 동작하기 위해서는 특정 덩어리끼리 또는 덩어리들 내부에 상호작용이 없어야 한다. 대신 매번 새롭게 발생하는 긴급한 요구사항을 처리하기 위해 서비스들 간의 상호작용을 상대적으로 그때그때 임의로 지정하는 방법을 따라야 한다.

 

이것은 하나의 실행 프로그램을 만들기 위해 링커가 동적으로 링크된 라이브러리를 바인드 하는 것과 대조된다. 단위가 서비스 단위이기 때문에 전통적인 함수나 클래스들 보다 훨씬 간단해졌다. 또한 SOA 서비스 들은 안전한 wrapper안 이나 다른 프로그래밍 언어로 실행된다.

 

5) SOA와 클라우드 컴퓨팅

SOA와 클라우드 컴퓨팅을 결합하면, 서비스 배포와 규모, 클라우드 경제성의 이점을 모두 얻을 수 있다. 클라우드 컴퓨팅을 이용해서 기업들은 인터넷을 통해 제3자의 서버에서 운영되는 서비스들에 접근할 수 있고, SOA를 이용하여 기업들은 전통적인 어플리케이션 플랫폼들보다 더 가벼운 방법으로 통합된 서비스를 사용하게 된다.

 

SOA는 IT솔루션이나 아키텍쳐를 정의하는 절차에 대한 것 이다. 반면 클라우드 컴퓨팅은 하나의 아키텍처적인 대안이다.

 

6) 클라우드 기반에서 프로세스 간 통신

아마존 심플 큐 서비스(SQS) 는 어플리케이션들 간에 메시지를 보내는 방법 중 하나이다. SQS는 EC2를 보조하는 역할을 한다.

 

 

6.2 고성능 분산 클라우드의 안정성

1) 맵리듀스

맵리듀스는 2008년 말까지 1조가 넘는 웹 상에서 모든 콘텐츠에 대한 대용량 검색 문제를 풀기 위해 구글에서 고안한 소프트웨어 프레임워크이다. 맵리듀스는 낮은 상호의존성을 갖는 대규모 분산 컴퓨팅으로 일반서버 클러스터들에서 아주 큰 데이터 셋을 처리하기위해 동작한다.

 

왜 일반서버를 사용할까? 고사양의 서버를 두고 말이다?

 

이는 서버의 수가 너무 많아졌기 때문에 하드웨어 안정성에 대한 부분을 포기하고 소프트웨어에 의해서 제공되는 안정성으로 전환하기 위해서이다. 대량의 법칙이 지배하고 수십만의 서버들은 운영한다고 하면, 각각의 개별 서버의 안정성이 아무리 훌륭하다고 할지라도 한두대는 장애 확률에 걸려 매일 몇대의 장비에는 여전히 장애가 발생할 것 이다. 이런 상황에서 안정적인 시스템을 구축하기 위한 유일한 방법은 이러한 장애에 대응할 수 있는 소프트웨어를 갖추는 것 이다.

 

맵리듀스 는 데이터 셋에 대한 연산을 네트워크 내 각 노드들로 분배함으로써 안정성을 확보한다. 각 노드는 작업의 결과와 상태에 대한 업데이트를 보고한다. 당연히, 장애 노드는 응답이 없을 것 이다. 이 노드의 마스터는 죽은 작업자를 감지하고 이 노드가 맡았던 작업을 다시 보낸다.

맵 단계

맵은 입력 쌍을 받아서 중간의 [키 : "값"] 쌍을 생성한다. 맵리듀스 라이브러리는 동일한 중간 단계의 키와 관련된 모든 중간단계의 값들을 그룹으로 모아 리듀스 함수로 넘긴다.

 

중간에 shuffling 과정을 통해 key 별로 분류 시킨다.

 

리듀스 단계

리듀스 함수는 중간 단계의 키, 값 쌍들을 받는다. 이러한 값들을 합쳐서 가능하면 더 적은 수의 값들로 만든다. 마스터 노드는 자신이 만든 모든 하위 문제에 대한 답들을 받아 결합하여 하나의 답을 생성한다.

댓글