다음을 통해 공유


Service Fabric 아키텍처

서비스 패브릭은 계층화된 하위 시스템으로 빌드됩니다. 이러한 하위 시스템을 사용하여 다음 특징을 가진 애플리케이션을 작성할 수 있습니다.

  • 고가용성
  • 확장성
  • 관리 가능
  • 테스트 가능

다음 다이어그램은 서비스 패브릭의 주요 하위 시스템을 보여 줍니다.

Diagram of Service Fabric architecture

분산된 시스템에서는 클러스터의 노드 간에서 안전하게 통신할 수 있는 기능이 매우 중요합니다. 스택의 기본은 전송 하위 시스템으로, 노드 간의 보안 통신을 제공합니다. 전송 하위 시스템 위에는 서로 다른 노드를 단일 엔터티로 클러스터화(클러스터라고 부름)하여 서비스 패브릭이 오류를 감지하고 리더 선택을 수행하며 일관된 라우팅을 제공하는 페더레이션 하위 시스템이 있습니다. 페더레이션 하위 시스템 위에 있는 안정성 하위 시스템은 복제, 리소스 관리 및 장애 조치(failover)와 같은 메커니즘을 통해 서비스 패브릭 서비스의 안정성을 담당합니다. 또한 페더레이션 하위 시스템은 단일 노드에서 애플리케이션의 수명 주기를 관리하는 호스팅 및 활성화 하위 시스템의 기반이 됩니다. 관리 하위 시스템은 애플리케이션 및 서비스의 수명 주기를 관리합니다. 테스트 용이성 하위 시스템은 애플리케이션 개발자가 애플리케이션 및 서비스를 프로덕션 환경에 배포하기 전후에 시뮬레이트된 오류를 통해 서비스를 테스트할 수 있게 해줍니다. 서비스 패브릭은 자체 통신 하위 시스템을 통해 서비스 위치를 확인하는 기능을 제공합니다. 개발자에게 노출되는 애플리케이션 프로그래밍 모델은 도구 사용이 가능한 애플리케이션 모델과 함께 이러한 하위 시스템의 맨 위에 계층화됩니다.

전송 하위 시스템

전송 하위 시스템은 지점간 데이터그램 통신 채널을 구현합니다. 이 채널은 서비스 패브릭 클러스터 간 통신 및 서비스 패브릭 클러스터와 클라이언트 간의 통신에 사용됩니다. 페더레이션 계층에서의 브로드캐스트 및 멀티캐스트를 구현하는 기반을 제공하는 단방향 및 요청-회신 통신 패턴을 지원합니다. 전송 하위 시스템은 X509 인증서 또는 Windows 보안을 사용하여 통신을 보안합니다. 이 하위 시스템은 Service Fabric에 의해 내부적으로 사용되며, 개발자가 애플리케이션에 직접 액세스할 수는 없습니다.

페더레이션 하위 시스템

분산 시스템의 노드 세트를 추론하려면 시스템에 대한 일관적인 시각이 필요합니다. 페더레이션 하위 시스템은 전송 하위 시스템에 의해 제공되는 통신 기본 형식을 사용하며, 추론 가능한 단일 통합된 클러스터에 다양한 노드를 연결합니다. 오류 탐지, 리더 선택, 일관된 라우팅 등 다른 하위 시스템에 필요한 분산 시스템 기본 형식을 제공합니다. 페더레이션 하위 시스템은 분산 해시 테이블 위에 128비트의 토큰 공간으로 빌드됩니다. 이 하위 시스템은 링의 각 노드가 소유권에 대한 토큰 공간의 하위 집합으로 할당되는 노드 간의 링 토폴로지를 만듭니다. 오류 감지의 경우, 해당 계층은 심박 및 중재에 기반한 임대 메커니즘을 사용합니다. 또한 페더레이션 하위 시스템은 복잡한 조인 및 출발 프로토콜을 통해 언제든지 토큰의 소유자가 하나만 존재하도록 합니다. 따라서 리더 선택 및 일관된 라우팅을 보장할 수 있습니다.

안정성 하위 시스템

안정성 하위 시스템은 복제자, 장애 조치(Failover) 관리자리소스 분산 장치를 통해 Service Fabric 서비스의 상태를 매우 가용성 있게 하는 메커니즘을 제공합니다.

  • 복제자는 기본 서비스 복제본에서 보조 복제본으로 자동으로 복제되는 변경되는 상태를 확인하고 서비스 복제본 세트에서 기본 및 보조 복제본간의 일관성을 유지합니다. 복제자는 복제본 세트의 복제본 간의 쿼럼 관리를 담당합니다. 장애 조치(failover) 단위와 상호 작용하여 복제할 작업 목록을 가져오고, 재구성 에이전트는 복제본 세트의 구성과 함께 이를 제공합니다. 여기서 구성은 작업을 복제해야 하는 복제본을 나타냅니다. 서비스 패브릭은 패브릭 복제자라고 불리는 기본 복제자를 제공합니다. 이는 프로그래밍 모델 API가 서비스 상태를 높은 가용성과 안정성 있게 만드는 데 이용될 수 있습니다.
  • 장애 조치(Failover) 관리자는 클러스터에 노드가 추가되거나 삭제된 경우 부하가 사용 가능한 노드에 걸쳐 자동으로 재분산되도록 합니다. 클러스터의 노드가 실패한 경우, 해당 클러스터는 자동으로 서비스 복제본을 재구성하여 가용성을 유지합니다.
  • 리소스 관리자는 클러스터의 실패 도메인을 통해 서비스 복제본을 배치하고 모든 장애 조치(failover) 단위가 작동하도록 합니다. 또한 리소스 관리자는 클러스터 노드의 기본 공유 풀을 통해 서비스 리소스를 분산시켜서 최적화된 균일한 부하 분산을 달성합니다.

관리 하위 시스템

관리 하위 시스템은 엔드투엔드 서비스 및 애플리케이션 수명 주기 관리를 제공합니다. PowerShell cmdlet 및 관리 API로 가용성의 손실 없이 애플리케이션을 프로비전, 배포, 패치, 업그레이드 및 프로비전 해제할 수 있습니다. 관리 하위 시스템은 다음 서비스를 통해 이를 수행합니다.

  • 클러스터 관리자: 서비스 배치 제약을 기반으로 노드에 애플리케이션을 안정적으로 배치하는 장애 조치(Failover) 관리자와 상호 작용하는 기본 서비스입니다. 장애 조치(failover) 하위 시스템의 리소스 관리자는 이 제약이 깨지지 않도록 합니다. 클러스터 관리자는 프로비전에서 프로비전 해제까지 애플리케이션의 수명 주기를 관리합니다. 상태 관리자와 통합하여 업그레이드하는 동안 의미상 상태 관점에서 상태 애플리케이션 가용성이 손상되지 않도록 합니다.
  • 상태 관리자: 이 서비스는 애플리케이션, 서비스 및 클러스터 엔터티의 상태를 모니터링합니다. 클러스터 엔터티(노드, 서비스 파티션, 복제본 등)는 중앙 집중화된 Health 스토어에 집계된 상태 정보를 보고할 수 있습니다. 이 상태 정보는 클러스터의 여러 노드에 분산된 서비스 및 노드의 전체 지정 시간 상태 스냅샷을 제공하여 필요한 수정 작업을 할 수 있게 합니다. 상태 쿼리 API는 보고된 상태 이벤트를 상태 하위 시스템에 쿼리할 수 있게 합니다. 상태 쿼리 API는 Health 스토어에 저장된 원시 상태 데이터 또는 특정 클러스터 엔터티에 대해 집계 및 해석된 상태 데이터를 반환합니다.
  • 이미지 스토리지: 이 서비스는 애플리케이션 바이너리의 스토리지 및 분산을 제공합니다. 이 서비스는 애플리케이션이 업로드되고 다운로드되는 단순 분산 파일 저장을 제공합니다.

호스팅 하위 시스템

클러스터 관리자는 호스팅 하위 시스템(각 노드에서 실행 중)에 특정 노드를 관리하는 데 필요한 서비스를 알립니다. 그런 다음, 호스팅 하위 시스템은 해당 노드의 애플리케이션의 수명 주기를 관리합니다. 안정성 및 상태 구성 요소와 상호 작용하여 복제본이 적절히 배치되고 정상이도록 합니다.

통신 하위 시스템

이 하위 시스템은 클러스터 내의 안정적인 메시징과 이름 지정 서비스를 통한 서비스 검색을 제공합니다. 이름 지정 서비스는 클러스터의 위치에 서비스 이름을 확인하고 사용자가 서비스 이름 및 속성을 관리할 수 있도록 합니다. 이름 지정 서비스를 사용하면 클라이언트는 클러스터의 모든 노드와 안전하게 통신하여 서비스 네임을 확인하고 서비스 메타데이터를 검색할 수 있습니다. 단순 이름 지정 클라이언트 API를 사용하면 서비스 패브릭 사용자는 노드 동적 특성이나 클러스터의 크기 조정에 관계없이 현재 네트워크 위치를 확인할 수 있는 서비스 및 클라이언트를 개발할 수 있습니다.

테스트 용이성 하위 시스템

테스트 용이성은 서비스 패브릭에서 빌드된 서비스를 테스트하는 데 적합하도록 설계된 도구 모음입니다. 개발자는 이 도구를 사용하여 쉽게 의미 있는 오류를 유도하고 테스트 시나리오를 실행하고 서비스가 수명 기간에 걸쳐 제어되고 안전한 방식으로 연습하게 될 다양한 상태 및 전환을 연습하고 유효성을 검사할 수 있습니다. 또한 테스트 용이성은 가용성을 손상시키지 않고 각종 가능한 오류를 반복할 수 있는 장시간 테스트를 실행하는 메커니즘도 제공합니다. 테스트할 수 있는 프로덕션 환경을 제공합니다.