다음을 통해 공유


Microsoft Orleans

Orleans:

  • 강력하고 확장 가능한 분산 앱을 빌드하기 위한 플랫폼 간 프레임워크입니다. 분산 앱은 종종 하드웨어 경계를 넘어 피어 투 피어 통신을 통해 여러 프로세스에 걸쳐 작동하는 앱으로 정의됩니다.
  • 단일 온-프레미스 서버에서 클라우드에서 수천 개의 분산되고 고가용성 앱으로 확장됩니다.
  • 친숙한 개념 및 C# 관용구를 다중 서버 환경으로 확장합니다.
  • 탄력적으로 크기를 조정하도록 설계되었습니다. 호스트가 클러스터에 조인하면 새 활성화를 수락할 수 있습니다. 호스트가 클러스터를 떠날 때 해당 호스트의 이전 활성화는 필요에 따라 나머지 호스트에서 다시 활성화됩니다. 호스트는 규모 축소 또는 머신 오류로 인해 클러스터를 떠날 수 있습니다. Orleans 클러스터를 단일 호스트로 축소할 수 있습니다. 탄력적 확장성을 가능하게 하는 동일한 속성들이 내결함성도 가능하게 합니다. 클러스터는 자동으로 오류를 감지하고 신속하게 복구합니다.
  • 일반적인 패턴 및 API 집합을 제공하여 분산 앱 개발의 복잡성을 간소화합니다.
  • 단일 서버 앱 개발에 익숙한 개발자가 복원력 있고 확장 가능한 클라우드 네이티브 서비스 및 분산 앱 빌드로 전환할 수 있습니다.
  • "Distributed .NET"이라고도 합니다.
  • 클라우드 네이티브 앱을 빌드할 때 선택하는 프레임워크입니다.
  • .NET이 지원되는 모든 위치에서 실행됩니다. 여기에는 Linux, Windows 및 macOS에서의 호스팅이 포함됩니다.
  • Azure App Service Azure Container Apps 같은 Kubernetes, 가상 머신 및 PaaS 서비스에 앱을 배포할 수 있습니다.

"행위자 모델"

Orleans "행위자 모델"을 기반으로 합니다. 행위자 모델은 1970년대 초에 시작되었으며 현재 Orleans핵심 구성 요소입니다. 행위자 모델은 각 행위자 상태 및 해당 동작을 캡슐화하는 가볍고 동시적이고 변경할 수 없는 개체인 프로그래밍 모델입니다. 행위자가 비동기 메시지를 사용하여 서로만 통신합니다. Orleans 특히 행위자가 영구적으로 존재하는 추상화 가상 행위자를 발명했습니다.

메모

액터는 항상 가상으로 존재하는 순전히 논리적 엔터티입니다. 행위자를 명시적으로 만들거나 제거할 수 없으며 해당 가상 존재는 해당 행위자를 실행하는 서버의 오류에 영향을 받지 않습니다. 행위자는 항상 존재하기 때문에 항상 주소 지정이 가능합니다.

클라우드 시대를 위한 새로운 세대의 분산 앱을 빌드하기 위한 새로운 접근 방식입니다. Orleans 프로그래밍 모델은 기능을 제한하거나 개발자에게 제약 조건을 적용하지 않고도 고도로 병렬 분산된 앱에 내재된 복잡성을.

자세한 내용은 Orleans: Microsoft Research를 통해 가상 행위자 참조하세요. 가상 행위자는 Orleans 그레인으로 표현됩니다.

곡물이란?

곡물은 여러 Orleans 기본 요소 중 하나입니다. 행위자 모델의 관점에서, 곡물은 가상 행위자입니다. 모든 Orleans 애플리케이션의 기본 구성 요소는 그레인입니다. 그레인은 사용자 정의 ID, 동작 및 상태를 구성하는 엔터티입니다. 다음은 곡물의 시각적 표현입니다.

곡물은 안정적인 정체성, 동작 및 상태로 이루어져 있습니다.

그레인 ID는 그레인을 항상 호출할 수 있도록 만드는 사용자 정의 키입니다. 다른 그레인이나 여러 외부 클라이언트가 그레인을 호출할 수 있습니다. 각 곡물은 다음 인터페이스 중 하나 이상을 구현하는 클래스의 인스턴스입니다.

곡물은 스토리지 시스템에 저장할 수 있는 휘발성 또는 영구 상태 데이터를 가질 수 있습니다. 따라서 곡물은 애플리케이션 상태를 암시적으로 분할하여 자동 확장성을 가능하게 하고 오류로부터의 복구를 간소화합니다. 그레인 상태가 활성 상태인 동안 메모리에 유지되므로 대기 시간이 짧아지고 데이터 저장소에 대한 로드가 줄어듭니다.

Orleans 곡물의 관리되는 수명 주기입니다.

곡물 인스턴스화는 Orleans 런타임에 의해 요청 시 자동으로 수행됩니다. 잠시 동안 사용되지 않는 곡물은 자동으로 메모리에서 제거되어 리소스를 확보합니다. 이는 안정적인 ID로 인해 가능하며, 이를 통해 이미 메모리에 로드되었는지 여부에 관계없이 곡물을 호출할 수 있습니다. 또한 호출자가 특정 시점에 곡물이 인스턴스화되는 서버를 알 필요가 없으므로 오류로부터 투명한 복구를 수행할 수 있습니다. 곡물에는 관리되는 수명 주기가 있으며, Orleans 런타임은 필요에 따라 곡물을 활성화/비활성화하고 배치/찾기를 담당합니다. 이를 통해 개발자는 모든 곡물이 항상 메모리에 있는 것처럼 코드를 작성할 수 있습니다.

사일로란?

사일로는 Orleans 기본 요소의 또 다른 예입니다. 사일로는 하나 이상의 곡물을 호스팅합니다. Orleans 런타임은 애플리케이션에 대한 프로그래밍 모델을 구현하는 것입니다.

일반적으로 사일로 그룹은 확장성 및 내결함성을 위한 클러스터로 실행됩니다. 클러스터로 실행하면 사일로가 서로 조정되어 작업을 분산하고 오류를 감지하고 복구합니다. 런타임을 사용하면 클러스터에 호스트된 곡물이 단일 프로세스 내에 있는 것처럼 서로 통신할 수 있습니다. 클러스터, 사일로 및 곡물 간의 관계를 시각화하는 데 도움이 되도록 다음 다이어그램을 고려합니다.

클러스터에는 하나 이상의 사일로가 있고 사일로에는 하나 이상의 곡물이 있습니다.

위의 다이어그램은 클러스터, 사일로 및 곡물 간의 관계를 보여 줍니다. 여러 클러스터를 가질 수 있고, 각 클러스터에는 하나 이상의 사일로가 있고, 각 사일로에는 하나 이상의 곡물이 있습니다.

사일로는 핵심 프로그래밍 모델 외에도 그레인을 위해 타이머, 알림(영구 타이머), 지속성, 트랜잭션, 스트림 등과 같은 런타임 서비스를 제공합니다. 자세한 내용은 Orleans을(를) 사용하여 무엇을 할 수 있나요?.

웹앱 및 기타 외부 클라이언트는 네트워크 통신을 자동으로 관리하는 클라이언트 라이브러리를 사용하여 클러스터의 곡물을 호출합니다. 클라이언트는 단순성을 위해 사일로와 동일한 프로세스에서 공동 호스팅될 수도 있습니다.

Orleans로 무엇을 할 수 있나요?

Orleans 클라우드 네이티브 앱을 빌드하기 위한 프레임워크이며 결국 확장해야 하는 .NET 앱을 빌드할 때마다 고려해야 합니다. Orleans사용하는 방법은 무한해 보이지만 가장 일반적인 방법은 다음과 같습니다. 게임, 뱅킹, 채팅 앱, GPS 추적, 주식 거래, 쇼핑 카트, 투표 앱 등. Orleans Azure, Xbox, Skype, Halo, PlayFab, Gears of War 및 기타 여러 내부 서비스에서 Microsoft에서 사용됩니다. Orleans 다양한 애플리케이션에 쉽게 사용할 수 있는 많은 기능이 있습니다.

고집

Orleans 요청을 처리하기 전에 상태를 사용할 수 있고 일관성이 유지되도록 하는 간단한 지속성 모델을 제공합니다. 그레인에는 여러 개의 명명된 영구 데이터 개체가 있을 수 있습니다. 예를 들어, 사용자 프로필을 "프로필"로 하고, 인벤토리를 "인벤토리"로 부를 수 있습니다. 이 상태는 모든 스토리지 시스템에 저장할 수 있습니다.

곡물이 실행되는 동안, 스토리지에 액세스하지 않아도 읽기 요청을 처리할 수 있도록 상태가 메모리에 유지됩니다. 곡물이 상태를 업데이트하면 IStorage.WriteStateAsync 호출하면 내구성 및 일관성을 위해 백업 저장소가 업데이트됩니다.

자세한 내용은 Grain 지속성참조하십시오.

타이머 및 미리 알림

미리 알림은 곡물에 대한 지속성 일정 메커니즘입니다. 해당 시간에 곡물이 현재 활성화되지 않은 경우에도 향후 시점에 일부 작업이 완료되도록 하는 데 사용할 수 있습니다. 타이머는 미리 알림에 대한 비지속성 대응이며 안정성이 필요하지 않은 고주파 이벤트에 사용할 수 있습니다.

자세한 내용은 타이머 및 미리 알림참조하세요.

유연한 곡물 배치

Orleans곡물이 활성화되면 런타임은 해당 곡물을 활성화할 서버(사일로)를 결정합니다. 이를 곡물 배치라고 합니다.

Orleans 배치 프로세스는 완전히 구성할 수 있습니다. 개발자는 임의, 선호 로컬 및 부하 기반과 같은 기본 배치 정책 집합에서 선택하거나 사용자 지정 논리를 구성할 수 있습니다. 이렇게 하면 곡물이 생성되는 위치를 유연하게 결정할 수 있습니다. 예를 들어 곡물은 작동해야 하는 리소스 또는 통신하는 다른 곡물과 가까운 서버에 배치할 수 있습니다.

자세한 내용은 Grain 배치를 참조하십시오.

그레인 버전 관리 및 이기종 클러스터

특히 상태 저장 시스템에서 변경을 안전하게 고려하는 방식으로 프로덕션 시스템을 업그레이드하는 것은 어려울 수 있습니다. 이를 고려하기 위해 Orleans 그레인 인터페이스의 버전을 관리할 수 있습니다.

클러스터는 클러스터의 사일로 및 해당 구현 버전에서 사용할 수 있는 곡물 구현의 매핑을 유지 관리합니다. 이 버전의 정보는 런타임에서 배치 전략과 함께 사용되어, 호출을 그레인으로 라우팅할 때 배치 결정을 내립니다. 또한 버전이 지정된 곡물을 안전하게 업데이트하기 위해 서로 다른 사일로에 다양한 곡물 구현 집합을 사용할 수 있는 다른 유형의 클러스터도 사용할 수 있습니다.

자세한 내용은 Grain 버전 관리을 참조하세요.

무상태 작업자

상태 비저장 워커는 상태가 연결되지 않은 특별히 표시된 요소로, 여러 사일로에서 동시에 활성화할 수 있습니다. 이를 통해 상태 비지정 함수에 대한 병렬 처리가 향상됩니다.

자세한 내용은 상태 비저장 작업자 곡물을 참조하세요.

그레인 호출 필터

곡물 호출 필터는 많은 곡물에 공통적으로 사용되는 논리입니다. Orleans 수신 및 발신 호출 모두에 대한 필터를 지원합니다. 권한 부여, 로깅 및 원격 분석 및 오류 처리에 대한 필터는 모두 일반적인 것으로 간주됩니다.

요청 컨텍스트

요청 컨텍스트사용하여 일련의 요청과 함께 메타데이터 및 기타 정보를 전달할 수 있습니다. 요청 컨텍스트는 분산 추적 정보 또는 기타 사용자 정의 값을 보유하는 데 사용할 수 있습니다.

분산 ACID 트랜잭션

위에서 설명한 간단한 지속성 모델 외에도, 곡물은 트랜잭션 상태가질 수 있습니다. 여러 곡물은 상태가 궁극적으로 저장되는 위치에 관계없이 ACID 트랜잭션에 함께 참여할 수 있습니다. Orleans 트랜잭션은 분산되고 탈중앙화되어 있으며(중앙 트랜잭션 관리자나 트랜잭션 코디네이터가 없습니다) 직렬화 가능한 격리 수준 .

트랜잭션에 대한 자세한 내용은 트랜잭션 참조하세요.

스트림

스트림은 개발자가 거의 실시간으로 일련의 데이터 항목을 처리하는 데 도움이 됩니다. Orleans 스트림은 관리되는; 스트림은 그레인 또는 클라이언트가 게시하거나 스트림을 구독하기 전에 만들거나 등록할 필요가 없습니다. 이렇게 하면 스트림 생산자와 소비자를 서로 분리하고 인프라를 더 많이 분리할 수 있습니다.

스트림 처리는 신뢰할 수 있습니다. 그레인(Grain)은 활성화 중 또는 이후에 체크포인트(커서)를 저장하고 저장된 체크포인트로 복구할 수 있습니다. 스트림은 효율성 및 복구 성능을 개선하기 위해 소비자에게 메시지를 일괄 배달하도록 지원합니다.

스트림은 Azure Event Hubs, Amazon Kinesis 등과 같은 큐잉 서비스에서 지원됩니다.

임의 개수의 스트림을 더 적은 수의 큐에 멀티플렉싱할 수 있으며 이러한 큐를 처리하는 책임은 클러스터 전체에서 균등하게 분산됩니다.

Orleans 비디오 소개

Orleans대한 비디오 소개에 관심이 있는 경우 다음 비디오를 확인하세요.

다음 단계