이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 25783|회답: 0

[출처] 서비스 패브릭 - 상태 기반 서비스 개념

[링크 복사]
게시됨 2018. 3. 15. 오전 10:03:44 | | | |

이전 섹션에서는 서비스 패브릭의 두 가지 가장 낮은 개념, 즉 노드 유형과 하드웨어 수준의 노드에 대해 이야기했습니다. 다른 하나는 '응용'입니다.



노드 유형은 배포 기계의 개념적 추상화인 노드들의 집합입니다. 서비스 패브릭의 경우, 노드는 물리 머신, 가상 머신, 심지어 현재 가장 인기 있는 컨테이너일 수도 있습니다.



노드 타입에서 실행되는 것은 애플리케이션입니다. 이는 시스템 소프트웨어 수준에서의 추상적인 이해입니다. 애플리케이션에는 여러 마이크로 서비스가 존재합니다. FailoverManager 서비스나 Naming Service와 같은 서비스 패브릭의 모든 기본 서비스도 마이크로 서비스입니다.



서비스 패브릭의 모든 분산 기능은 마이크로 서비스 배포에 대응합니다. 마이크로 서비스가 몇 개의 노드에서 실행해야 하는지 동적으로 조정하여 부하 압력을 분산시키거나 재해 복구 백업을 수행할 수 있습니다. 각 인스턴스는 서로 다른 포트를 듣고, 부하 분산 계층은 요청을 서로 다른 인스턴스에 분산시킵니다.



실제 상황

상태 기반 서비스는 마이크로 서비스 중 하나입니다.

스테이트풀 서비스를 소개하기 전에, 다음과 같은 일반적인 비즈니스 시나리오를 살펴보겠습니다.



웹사이트에 쇼핑 카트 기능을 도입하려고 생각 중입니다. 로그인 후 사용자는 일부 상품을 장바구니에 넣게 됩니다.

다음에 사용자가 로그인할 때, 프런트 데스크 페이지가 쇼핑 카트 서비스를 호출하여 저장된 쇼핑 카트 데이터를 다시 읽어 표시해야 합니다.

만약 그렇다면, 어떻게 달성하시겠습니까?

사용자 수가 그리 크지 않으면, 데이터베이스에 쇼핑카트 테이블을 추가하고 사용자 테이블과 연관시킵니다. 카트리지 테이블에는 사용자 ID 필드가 있고 많은 양의 사용자 카트리지 데이터를 기록합니다.





그렇다면 추가 문제들이 생길 것입니다.

사용자 수가 계속 증가하면 데이터베이스 테이블의 성능이 계속 저하될 것입니다.
데이터베이스 테이블 데이터는 데이터 손실 시 정기적으로 백업해야 합니다
데이터베이스 성능에 문제가 있다면, 테이블을 반드시 해독하거나 파티션해야 합니다
쇼핑카트 시스템 자체가 데이터베이스의 조정을 처리해야 하며, 심지어 로드 밸런싱도 필요할 수 있습니다
이 문제의 근본 원인은 시스템 자체가 애초에 확장 가능하게 설계되지 않았다는 점입니다. 게다가 데이터베이스는 잠재적인 병목 현상이자 성능 위협이 될 수 있습니다.



국가 복무

이렇게 완전히 새로운 아키텍처를 생각해 봅시다.

처음부터 쇼핑카트 시스템은 모든 요청을 처리하는 36개의 하위 서비스로 구성되어 있습니다(사용자 ID의 이니셜이 0-9 a-z로 되어 총 36개).

사용자의 요청은 특정 하위 서비스로 사용자 ID의 초기 해시에 따라 처리됩니다.

서브서비스는 쇼핑카트 데이터를 경량 데이터베이스를 통해 내부에 저장하고, 자체 저장 장치에 보존합니다.

각 하위 서비스에는 3개의 백업이 있어, 저장된 데이터를 지속적으로 동기화하고, 이 백업들은 항상 서로 다른 노드에서 실행됩니다.

동시에, 하나의 백업만이 활성화 상태로 요청을 처리하며, 백업 활성화에 문제가 생기면 나머지 두 백업이 스케줄링 알고리즘에 따라 하나를 활성화합니다.

재해 복구 서브시스템은 서브서비스가 항상 3개의 건강한 백업을 갖도록 새 백업을 생성합니다.



스테이트풀 서비스(Stateful Service)가 바로 그런 해결책 중 하나입니다.

앞서 언급한 시나리오로 돌아가면, 쇼핑카트 시스템은 상태 기반 서비스입니다.

36개의 하위 시스템은 이 상태 기반 서비스의 36개 인스턴스로, 우리는 이를 파티션(Partitions)이라고 부릅니다.

각 하위 시스템 아래의 백업은 Replica이며, 파티션에는 3개의 Replica가 있습니다.

현재 활성 백업은 Active Replica이며, 두 개의 비활성 대기 백업은 Secondary Replica입니다.

동일한 파트리언의 각 복제본은 반드시 다른 노드에서 실행되어야 합니다.

스테이트풀 서비스 코드<T>는 IReliableCollection, IReliableDictionary< T1, >T2와 같은 인터페이스를 사용하여 데이터를 저장하고 내부적으로 동기화합니다.



또한, 스테이트풀 서비스는 다음과 같은 기능을 구현할 수 있습니다:

위의 모든 숫자를 초기화할 수 있고, 카트 시스템에 수백 개의 파티션을 두어 더 많은 스트레스를 불러올 수 있습니다. 더 견고함을 위해 파티션당 5개 이상의 복제본을 가질 수도 있습니다.
외부 시스템은 상태 기반 서비스가 몇 개의 파티션을 가졌는지는 신경 쓰지 않고, 파티션 키로 호출됩니다. 파티션 키와 해당 파티션은 서비스 패브릭의 기본 마이크로 서비스에 의해 해결됩니다. 예를 들어, 귀하의 비즈니스에서는 수백만 명의 사용자가 있지만 파티션을 5개만 설정할 수 있습니다. 쇼핑카트를 Stateful Service로 호출할 때, 외부 시스템은 사용자 ID(파티션 키)와 저장된 데이터만 알리면 됩니다. 이 요청은 사용자 ID와 해시 알고리즘에 따라 다섯 개의 파티션 중 하나로 자동으로 매핑됩니다.
스테이트풀 서비스의 데이터 운영은 트랜잭션을 지원합니다. 그래서 실패 시 롤백할 수 있습니다


위의 소개가 국가적 봉사(Stateful Service)를 더 잘 이해하는 데 도움이 되길 바랍니다.

다음 섹션에서는 국가 서비스 코드 예시를 다룰 것입니다.




이전의:서로 이야기해 보길 바랍니다
다음:C# 프로그램을 최적화하는 47가지 방법
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com