Consul을 멤버 자격 공급자로 사용
Consul 간단한 서비스 등록, 상태 검사, 오류 검색 및 키-값 스토리지를 포함하는 분산되고 고가용성 데이터 센터 인식 서비스 검색 플랫폼입니다. 데이터 센터의 모든 노드가 서버 또는 클라이언트 역할을 하는 Consul 에이전트를 실행한다는 전제 하에 빌드되었습니다. 각 에이전트는 확장 가능한 소문 프로토콜을 통해 통신합니다.
여기에서유사한 솔루션과의 비교를 포함하여 Consul에 대한 자세한 개요가 있습니다.
consul은 Go 작성되었으며 오픈 소스 ;. 컴파일된 다운로드는 macOS X, FreeBSD, Linux, Solaris 및 Windows 사용할 수 있습니다.
Consul을 선택하는 이유는 무엇인가요?
Orleans 멤버 자격 공급자Consul은 잠재 고객에게 기존 인프라 및 협력 IT 공급자가 필요하지 않은 온-프레미스 솔루션을 제공해야 하는 경우에 적합합니다. Consul은 간단한 단일 실행 파일이며 종속성이 없으므로 미들웨어 솔루션에 쉽게 빌드할 수 있습니다. Consul이 마이크로 서비스를 검색, 확인 및 유지 관리하기 위한 솔루션인 경우 단순성과 운영 편의성을 위해 Orleans 멤버 자격과 완전히 통합하는 것이 좋습니다. Consul에는 Orleans의 클러스터 관리와 완전히 통합된 멤버십 테이블(일명 "Orleans 사용자 지정 시스템 저장소")도 있습니다.
Consul을 설정하세요
안정적인 Consul 클러스터를 설정하는 방법에 대해 Consul.io에서 사용할 수 있는 방대한 문서가 있으며, 그것을 여기서 반복하는 것은 의미가 없습니다. 그러나 편의상 독립 실행형 Consul 에이전트를 사용하여 Orleans 빠르게 실행할 수 있도록 이 가이드가 포함되어 있습니다.
Consul을 설치할 폴더를 만듭니다(예: C:\Consul ).
하위 폴더 만들기: C:\Consul\Data(Consul이 없는 경우 이 디렉터리를 만들지 않음).
C:\Consul 명령 프롬프트를 열고 다음 명령을 실행합니다.
./consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client='0.0.0.0'
이전 명령에서 다음을 수행합니다.
-
agent
: Consul에게 서비스를 호스트하는 에이전트 프로세스를 실행하도록 지시합니다. 이 스위치가 없으면 Consul 프로세스는 RPC를 사용하여 실행 중인 에이전트를 구성하려고 시도합니다. -
-server
: 에이전트를 클라이언트가 아닌 서버로 정의합니다(Consul 클라이언트 모든 서비스와 데이터를 호스트하지만 클러스터 리더가 될 수 없는 결정 권한이 없는 에이전트입니다. -
-bootstrap
: 클러스터의 첫 번째 노드(및 첫 번째 노드만 해당)는 클러스터 리더십을 가정할 수 있도록 부트스트랩되어야 합니다. -
-data-dir [path]
: 클러스터 멤버 자격 테이블을 포함하여 모든 Consul 데이터가 저장되는 경로를 지정합니다. -
-client='0.0.0.0'
: Consul에게 서비스를 열 IP를 알릴 수 있습니다.
다른 많은 매개 변수와 JSON 구성 파일을 사용하는 옵션이 있습니다. 옵션의 전체 목록은 영사 설명서를 참조하세요.
-
Consul이 실행 중이고 Orleans로부터의 멤버십 요청을 수락할 준비가 되었는지를 확인하기 위해 브라우저에서 서비스 엔드포인트
http://localhost:8500/v1/catalog/services
을 여십시오. 올바르게 작동하면 브라우저에 다음 JSON이 표시됩니다.{ "consul": [] }
Orleans 구성
Consul을 멤버십 공급자로 사용하도록 Orleans을 구성하려면, 당신의 사일로 프로젝트에서 Microsoft.Orleans.Clustering.Consul NuGet 패키지를 참조에 추가해야 합니다. 이렇게 하면 다음과 같이 사일로의 Program.cs 파일에서 멤버 자격 공급자를 구성할 수 있습니다.
IHostBuilder builder = Host.CreateDefaultBuilder(args)
.UseOrleans(silo =>
{
silo.UseConsulSiloClustering(options =>
{
// The address of the Consul server
var address = new Uri("http://localhost:8500");
options.ConfigureConsulClient(address);
});
})
.UseConsoleLifetime();
using IHost host = builder.Build();
host.Run();
앞의 코드는 다음과 같습니다.
- Host.CreateDefaultBuilder()에서 기본값을 사용하여 IHostBuilder을 만듭니다.
- Orleans 사일로를 구성하기 위해 UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>)에 대한 호출을 연결합니다.
- 주어진 조건으로 ISiloBuilder가 UseConsulSiloClustering을 호출합니다.
- Consul
address
지정된 경우 Consul을 사용하도록 클러스터 멤버 자격 공급자를 구성합니다.
클라이언트를 구성하려면 동일한 NuGet 패키지를 참조하고 UseConsulClientClustering 확장 메서드를 호출합니다.
클라이언트 SDK
서비스 검색에 Consul을 사용하려는 경우 가장 인기 있는 언어에 대한 클라이언트 SDK 있습니다.
구현 세부 정보
멤버십 테이블 제공자는 키/값 저장소 기능과 Check-And-Set(CAS) 작업을 통해 Consul의 기능을 활용합니다. 각 Silo가 시작될 때 Silo 세부 정보가 포함된 항목과 Silo가 마지막으로 정상 작동 중임을 보고한 항목, 이 두 개의 키-값 항목이 등록됩니다. 후자는 진단 'I'm alive' 항목을 가리키며, 이는 사일로 간에 직접 전송되고 테이블에 기록되지 않는 실패 감지 하트비트를 뜻하지 않습니다. 테이블에 대한 모든 쓰기는 Orleans의 클러스터 관리 프로토콜에 의해 요구되는 대로, 동시성 제어를 제공하기 위해 CAS를 사용하여 수행됩니다.
Silo가 실행되면 http://localhost:8500/v1/kv/?keys&pretty
웹 브라우저에서 다음과 같은 항목을 볼 수 있습니다.
[
"orleans/default/192.168.1.11:11111@43165319",
"orleans/default/192.168.1.11:11111@43165319/iamalive",
"orleans/default/version"
]
모든 키는 공급자에 의해 하드 코딩된 orleans
접두사가 붙어 있으며, 이는 Consul의 다른 사용자와 키 공간 충돌을 방지하기 위한 것입니다. 이 키 중 하나를 사용하여 추가 정보를 검색할 수 있습니다. 각 키 이름(따옴표 없이)을 http://localhost:8500/v1/kv/
Consul KV 루트에 추가하여 읽을 수 있습니다. 이렇게 하면 다음 JSON이 표시됩니다.
[
{
"LockIndex": 0,
"Key": "orleans/default/192.168.1.11:11111@43165319",
"Flags": 0,
"Value": "[BASE64 UTF8 Encoded String]",
"CreateIndex": 321,
"ModifyIndex": 322
}
]
Base64 UTF-8로 인코딩된 문자열 Value
디코딩하면 실제 Orleans 멤버 자격 데이터가 제공됩니다.
http://localhost:8500/v1/KV/orleans/default/[SiloAddress]
{
"Hostname": "[YOUR_MACHINE_NAME]",
"ProxyPort": 30000,
"StartTime": "2023-05-15T14:22:00.004977Z",
"Status": 3,
"SiloName": "Silo_fcad0",
"SuspectingSilos": []
}
http://localhost:8500/v1/KV/orleans/default/[SiloAddress]/IAmAlive
"2023-05-15T14:27:01.1832828Z"
클라이언트가 연결되면, URI http://192.168.1.26:8500/v1/KV/orleans/default/?recurse
을 사용하여 HTTP GET에서 클러스터 내 모든 사일로의 KV를 읽습니다.
제한
Consul을 멤버 자격 공급자로 사용할 때 알아야 할 몇 가지 제한 사항이 있습니다.
확장 멤버 자격 프로토콜 Orleans(테이블 버전 & ETag)
Consul KV는 현재 원자성 업데이트를 지원하지 않습니다. 따라서 Orleans Consul Membership Provider는 Orleans클러스터 관리에 설명된 대로 Orleans 기본 멤버 자격 프로토콜만 구현하며 확장 멤버 자격 프로토콜을 지원하지 않습니다. 이 확장 프로토콜은 필수는 아니지만 추가적인 사일로 연결 유효성 검사로 도입되었으며 아직 구현되지 않은 기능의 기초로 도입되었습니다.
여러 데이터 센터
Consul의 키-값 쌍은 현재 Consul 데이터 센터 간에 복제되지 않습니다. 이 복제 작업을 해결하기 위한 별도의 프로젝트 있지만 아직 Orleans지원하는 것으로 입증되지 않았습니다.
Windows에서 실행하는 경우
Windows에서 Consul이 시작되면 다음 메시지가 기록됩니다.
==> WARNING: Windows is not recommended as a Consul server. Do not use in production.
이 경고 메시지는 실제 알려진 문제가 아니라 Windows 환경에서 실행할 때 테스트에 집중하지 않기 때문에 표시됩니다. Consul이 적합한 선택인지 결정하기 전에 토론 읽어보세요.
향후 향상된 기능
- Consul KV 복제 프로젝트가 여러 Consul 데이터 센터 간의 WAN 환경에서 Orleans 클러스터를 지원할 수 있음을 증명합니다.
- Consul에서 미리 알림 테이블을 구현합니다.
- 확장 멤버 자격 프로토콜을 구현합니다. Consul 뒤에 있는 팀은 원자성 작업을 구현할 계획입니다. 이 기능을 사용할 수 있게 되면 공급자의 제한을 제거할 수 있습니다.
.NET