학습
Microsoft Orleans
Orleans:
- 강력하고 확장성 있는 분산 앱을 빌드하기 위한 플랫폼 간 프레임워크입니다. 분산 앱은 종종 피어 투 피어 통신을 사용하여 하드웨어 경계를 넘어 단일 프로세스 이상에 걸쳐 있는 앱으로 정의됩니다.
- 단일 온-프레미스 서버에서 클라우드의 수천 개의 분산된 고가용성 앱으로 크기 조정됩니다.
- 친숙한 개념과 C# 관용구를 다중 서버 환경으로 확장합니다.
- 탄력적으로 크기를 조정하도록 설계되었습니다. 호스트가 클러스터에 조인하면 새 활성화를 허용할 수 있습니다. 호스트가 클러스터를 떠나면 필요에 따라 해당 호스트의 이전 활성화가 나머지 호스트에서 다시 활성화됩니다. 규모 스케일 다운 또는 컴퓨터 오류로 인해 호스트가 클러스터를 떠날 수 있습니다. Orleans 클러스터는 단일 호스트로 스케일 다운할 수 있습니다. 탄력적인 확장성을 가능하게 하는 동일한 속성은 내결함성을 가능하게 합니다. 클러스터는 자동으로 오류를 감지하고 신속하게 복구합니다.
- 공통 패턴 및 API 집합을 제공하여 분산 앱 개발의 복잡성을 간소화합니다.
- 단일 서버 앱 개발에 익숙한 개발자가 탄력적이고 확장성 있는 클라우드 네이티브 서비스 및 분산 앱 빌드로 전환할 수 있도록 지원합니다.
- "분산 .NET"이라고도 합니다.
- 클라우드 네이티브 앱을 빌드할 때 선택하는 프레임워크입니다.
- .NET이 지원되는 모든 위치에서 실행됩니다. 여기에는 Linux, Windows, macOS에서의 호스팅이 포함됩니다.
- Kubernetes, 가상 머신 및 PaaS 서비스(예: Azure App Service 및 Azure Container Apps)에 배포할 수 있습니다.
Orleans(은)는 "작업자 모델"을 기반으로 합니다. 작업자 모델은 1970년대 초에 시작되었으며 현재는 Orleans의 핵심 구성 요소입니다. 작업자 모델은 각 작업자가 상태 및 해당 동작을 캡슐화하는 가볍고 동시적이고 변경할 수 없는 개체인 프로그래밍 모델입니다. 작업자가 비동기 메시지를 사용하여 서로 독점적으로 통신합니다. Orleans(은)는 특히 작업자가 영구적으로 존재하는 가상 작업자 추상화를 발명했습니다.
참고
작업자는 가상적으로 항상 존재하는 순전히 논리적 엔터티입니다. 작업자를 명시적으로 만들거나 제거할 수 없으며 해당 가상 존재는 해당 작업자를 실행하는 서버의 오류에 영향을 받지 않습니다. 작업자는 항상 존재하기 때문에 항상 주소를 지정할 수 있습니다.
이는 클라우드 시대에 맞는 차세대 분산 앱을 빌드하기 위한 새로운 방식입니다. Orleans 프로그래밍 모델은 기능을 제한하거나 개발자에게 제약 조건을 적용하지 않고 고도로 병렬 분산 앱에 내재된 복잡성을 길들입니다.
자세한 내용은 Orleans: Microsoft Research를 통한 가상 작업자를 참조하세요. 가상 작업자가 Orleans 조직으로 표시됩니다.
조직은 여러 Orleans 기본 형식 중 하나입니다. 작업자 모델의 관점에서, 조직은 가상 작업자입니다. 모든 Orleans 애플리케이션의 기본 구성 요소는 조직입니다. 조직은 사용자 정의 ID, 동작 및 상태를 구성하는 엔터티입니다. 다음과 같은 조직의 시각적 표현을 고려하세요.
조직 ID는 조직을 항상 호출에 사용할 수 있도록 하는 사용자 정의 키입니다. 조직은 다른 조직이나 임의의 수의 외부 클라이언트에서 호출할 수 있습니다. 각 조직은 다음 인터페이스 중 하나 이상을 구현하는 클래스의 인스턴스입니다.
- IGrainWithGuidKey:
Guid
키가 있는 조직의 표식 인터페이스입니다. - IGrainWithIntegerKey:
Int64
키가 있는 조직의 표식 인터페이스입니다. - IGrainWithStringKey:
string
키가 있는 조직의 표식 인터페이스입니다. - IGrainWithGuidCompoundKey: 복합 키가 있는 조직의 표식 인터페이스입니다.
- IGrainWithIntegerCompoundKey: 복합 키가 있는 조직의 표식 인터페이스입니다.
조직은 모든 스토리지 시스템에 저장할 수 있는 휘발성 또는 영구 상태 데이터를 가질 수 있습니다. 따라서 조직은 애플리케이션 상태를 암시적으로 분할하여 자동 확장성을 가능하게 하고 오류로부터의 복구를 간소화합니다. 조직 상태가 활성 상태인 동안 메모리에 유지되므로 대기 시간이 짧아지고 데이터 저장소에 대한 부하가 줄어듭니다.
조직의 인스턴스화는 Orleans 런타임에 의해 요청 시 자동으로 수행됩니다. 한동안 사용되지 않는 조직은 자동으로 메모리에서 제거되어 리소스를 확보합니다. 이는 안정적인 ID로 인해 가능하며, 이를 통해 이미 메모리에 로드되었는지 여부에 관계없이 조직을 호출할 수 있습니다. 또한 호출자가 특정 시점에 어떤 서버에서 조직이 인스턴스화되었는지 알 필요가 없으므로 오류로부터 투명한 복구를 수행할 수 있습니다. 조직에는 관리되는 수명 주기가 있으며, Orleans 런타임은 필요에 따라 조직을 활성화/비활성화하고 배치/찾기를 담당합니다. 이를 통해 개발자는 모든 조직이 항상 메모리에 있는 것처럼 코드를 작성할 수 있습니다.
사일로는 Orleans 원형의 또 다른 예입니다. 사일로는 하나 이상의 조직을 호스팅합니다. Orleans 런타임은 애플리케이션에 대한 프로그래밍 모델을 구현합니다.
일반적으로 사일로 그룹은 확장성 및 내결함성을 위해 클러스터로 실행됩니다. 클러스터로 실행하는 경우 사일로는 서로 조정하여 작업을 분산하고 오류를 감지하고 복구합니다. 런타임을 사용하면 클러스터에 호스트된 조직이 단일 프로세스 내에 있는 것처럼 서로 통신할 수 있습니다. 클러스터, 사일로 및 조직 간의 관계를 시각화하려면 다음 다이어그램을 고려하세요.
위의 다이어그램은 클러스터, 사일로 및 조직 간의 관계를 보여 줍니다. 클러스터 수를 지정할 수 있고, 각 클러스터에는 하나 이상의 사일로가 있으며, 각 사일로에는 하나 이상의 조직이 있습니다.
사일로는 핵심 프로그래밍 모델 외에도 타이머, 미리 알림(영구 타이머), 지속성, 트랜잭션, 스트림 등과 같은 런타임 서비스 세트를 제공합니다. 자세한 내용은 Orleans로 무엇을 할 수 있나요?를 참조하세요.
웹앱 및 기타 외부 클라이언트는 네트워크 통신을 자동으로 관리하는 클라이언트 라이브러리를 사용하여 클러스터의 조직을 호출합니다. 클라이언트는 간소화를 위해 사일로와 동일한 프로세스에서 공동 호스팅될 수도 있습니다.
Orleans(은)는 클라우드 네이티브 앱을 빌드하기 위한 프레임워크이며 결국 확장해야 하는 .NET 앱을 빌드할 때마다 고려해야 합니다. Orleans(을)를 사용할 수 있는 방법은 무궁무진해 보이지만, 게임, 뱅킹, 채팅 앱, GPS 추적, 주식 거래, 쇼핑 카트, 투표 앱 등이 가장 일반적인 방법 중 일부입니다. Orleans(은)는 Azure, Xbox, Skype, Halo, PlayFab, Gears of War 및 기타 여러 내부 서비스에서 Microsoft가 사용합니다. Orleans에는 다양한 애플리케이션에 쉽게 사용할 수 있는 많은 기능이 있습니다.
Orleans(은)는 요청을 처리하기 전에 상태를 사용할 수 있고 일관성이 유지되도록 하는 간단한 지속성 모델을 제공합니다. 조직에는 여러 개의 명명된 영구 데이터 개체가 있을 수 있습니다. 예를 들어 사용자 프로필에 대해 "profile"이라고 하고 해당 인벤토리에 대해 "inventory"라고 하는 프로필이 있을 수 있습니다. 이 상태는 모든 스토리지 시스템에 저장할 수 있습니다.
조직이 실행되는 동안 스토리지에 액세스하지 않고 읽기 요청을 처리할 수 있도록 상태가 메모리에 유지됩니다. 조직이 상태를 업데이트할 때 IStorage.WriteStateAsync를 호출하면 내구성 및 일관성을 위해 백업 저장소가 업데이트됩니다.
자세한 내용은 조직 지속성을 참조하세요.
미리 알림은 조직에 대한 지속형 일정 메커니즘입니다. 해당 시간에 조직이 현재 활성화되지 않은 경우에도 나중에 일부 작업이 완료되도록 하는 데 사용할 수 있습니다. 타이머는 미리 알림에 대한 비지속성 대응이며 안정성이 필요하지 않은 고주파 이벤트에 사용할 수 있습니다.
자세한 내용은 타이머 및 미리 알림을 참조하세요.
Orleans에서 조직이 활성화되면 런타임은 해당 조직을 활성화할 서버(사일로)를 결정합니다. 이를 조직 배치라고 합니다.
Orleans의 배치 프로세스는 완전히 구성할 수 있습니다. 개발자는 임의, 선호 로컬 및 로드 기반과 같은 기본 배치 정책 세트에서 선택하거나 사용자 지정 논리를 구성할 수 있습니다. 이를 통해 조직을 만드는 위치를 유연하게 결정할 수 있습니다. 예를 들어, 조직은 작동해야 하는 리소스 또는 통신하는 다른 조직과 가까운 서버에 배치할 수 있습니다.
자세한 내용은 조직 배치를 참조하세요.
특히 상태 저장 시스템에서 변경을 안전하게 설명하는 방식으로 프로덕션 시스템을 업그레이드하는 것은 어려울 수 있습니다. 이를 설명하기 위해 Orleans의 조직 인터페이스의 버전을 지정할 수 있습니다.
클러스터는 클러스터의 사일로 및 해당 구현 버전에서 사용할 수 있는 조직 구현의 매핑을 유지 관리합니다. 이 버전의 정보는 런타임에서 배치 전략과 함께 사용하여 조직에 대한 호출을 라우팅할 때 배치 결정을 내리는 데 사용됩니다. 또한 버전이 지정된 조직을 안전하게 업데이트하기 위해 서로 다른 사일로에 서로 다른 조직 구현 세트를 사용할 수 있는 이기종 클러스터도 사용할 수 있습니다.
자세한 내용은 조직 버전 관리를 참조하세요.
상태 비저장 작업자는 연결된 상태가 없고 여러 사일로에서 동시에 활성화할 수 있는 특별히 표시된 조직입니다. 이렇게 하면 상태 비지정 함수에 대한 병렬 처리가 향상됩니다.
자세한 내용은 상태 비저장 작업자 조직을 참조하세요.
조직 호출 필터는 많은 조직에 공통적인 논리입니다. Orleans(은)는 수신 및 발신 통화 모두에 대한 필터를 지원합니다. 권한 부여, 로깅 및 원격 분석 및 오류 처리에 대한 필터는 모두 일반적인 것으로 간주됩니다.
메타데이터 및 기타 정보는 요청 컨텍스트를 사용하여 일련의 요청과 함께 전달할 수 있습니다. 요청 컨텍스트는 분산 추적 정보 또는 기타 사용자 정의 값을 보유하는 데 사용할 수 있습니다.
위에서 설명한 간단한 지속성 모델 외에도 조직은 트랜잭션 상태를 가질 수 있습니다. 여러 조직은 상태가 궁극적으로 저장되는 위치에 관계없이 ACID 트랜잭션에 함께 참여할 수 있습니다. Orleans의 트랜잭션은 분산 및 탈중앙화되며(중앙 트랜잭션 관리자 또는 트랜잭션 코디네이터가 없음) 직렬화 가능한 격리가 있습니다.
트랜잭션에 대한 자세한 내용은 트랜잭션을 참조하세요.
스트림은 개발자가 거의 실시간으로 일련의 데이터 항목을 처리하는 데 도움이 됩니다. Orleans 스트림은 관리됩니다. 스트림은 조직 또는 클라이언트가 게시하거나 스트림을 구독하기 전에 만들거나 등록할 필요가 없습니다. 이렇게 하면 스트림 생산자와 소비자를 서로 분리하고 인프라를 더 많이 분리할 수 있습니다.
스트림 처리는 신뢰할 수 있습니다. 조직은 정품 인증 중 또는 이후 언제든지 검사점(커서)을 저장하고 저장된 검사점으로 다시 설정할 수 있습니다. 스트림은 효율성 및 복구 성능을 개선하기 위해 소비자에게 메시지 일괄 전달을 지원합니다.
스트림은 Azure Event Hubs, Amazon Kinesis 등과 같은 큐 서비스에 의해 지원됩니다.
임의의 수의 스트림을 더 적은 수의 큐에 멀티플렉싱할 수 있으며 이러한 큐를 처리하는 책임은 클러스터 전체에서 균등하게 분산됩니다.
Orleans 소개 비디오에 관심이 있는 경우 다음 비디오를 확인하세요.
.NET 피드백
.NET은(는) 오픈 소스 프로젝트입니다. 다음 링크를 선택하여 피드백을 제공해 주세요.
추가 리소스
설명서
-
.NET Orleans용 샘플, 자습서 및 교육. Microsoft의 클라우드 네이티브 및 분산 시스템 플랫폼.
-
.NET Orleans의 많은 이점에 대해 알아봅니다.
-
빠른 시작: ASP.NET Core를 사용하여 첫 번째 Orleans 앱 빌드 - .NET
Orleans를 사용하여 확장성 있는 분산형 ASP.NET Core 애플리케이션을 빌드하는 방법을 알아봅니다.