CAP 원칙
CAP 원리, 또는 CAP 정리는 분산 시스템 내에서의 일관성, 가용성, 분할 허용 오차를 의미합니다. CAP 원리는 이 세 요소가 동시에 두 점만 달성할 수 있다고 말합니다.세 과목을 동시에 듣는 것은 불가능합니다。
CAP 원칙의 본질은 AP, CP, 또는 AC 중 하나이지만, CAP는 없습니다. 분산 시스템에서 데이터 복사본이 없다면, 시스템은 강한 일관성 조건을 충족해야 합니다. 왜냐하면 유일한 데이터만 존재하기 때문에 데이터 불일치가 없기 때문입니다. 이 시점에는 두 요소 C와 P가 존재하지만, 네트워크 파티션 상태나 다운타임이 발생하면 일부 데이터가 필연적으로 접근 불가능해지고, 가용성 조건을 충족하지 못합니다. 즉, 이 경우 CP 시스템이 얻어집니다.CAP는 동시에 충족될 수 없습니다。
복습:
닷넷코어.CAP
CAP는 분산 시스템(SOA, 마이크로서비스)에서의 이벤트 버스이자 구현체입니다.최종 일관성(Distributed Transactions)는 가볍고 성능이 뛰어나며 사용하기 쉬운 오픈소스 C# 라이브러리입니다.
GitHub 주소:하이퍼링크 로그인이 보입니다.
Dotnet CAP는 이벤트 버스의 모든 기능을 갖추고 있으며, CAP는 이벤트 버스에서 게시/구독을 보다 간소화한 방식으로 처리합니다.
MediatR은 단일 핸들러에 배포하는 Send 메서드와 여러 핸들러에 게시하는 Publish 메서드를 제공하는 진행 중인 메시지 구독 및 게시 프레임워크로, 매우 편리하게 사용할 수 있습니다. 현재 .NET Framework4.5, . NET Stardand1.3, . NET Stardand 2.0 및 기타 버전으로, 다양한 플랫폼에서 사용할 수 있습니다.
ASP.NET 코어는 MediatR 중개 모델을 사용합니다
https://www.itsvse.com/thread-9272-1-1.html 아키텍처 미리보기
CAP는 Kafka, RabbitMQ, AzureServiceBus, AmazonSQS 등과 같은 메시지 큐를 지원하며, 데이터베이스 저장소로서 Sql Server, MySql, PostgreSQL, MongoDB에 대한 확장을 제공합니다.
이 글에서는 RabbitMQ와 SQL Server를 메시지 큐와 저장소로 사용합니다.
RabbitMQ 설치
구체적인 설치 튜토리얼은 다음을 참고하시기 바랍니다:
계정 추가도 생략되어 있으니, 다음을 참고하시기 바랍니다:
테스트 계정을 추가하고 가상 호스트 수를 제한하는 방법은 아래에 나와 있습니다:
그렇지 않으면 오차는 다음과 같습니다:
ACCESS_REFUSED - 인증 메커니즘 PLAIN을 사용해 로그인이 거부되었습니다. 자세한 내용은 브로커 로그파일을 참조하세요.
지정된 엔드포인트 중 어느 곳에도 접근할 수 없었습니다
.NET 코어는 CAP를 통합합니다
먼저, 송신자이자 수신자 역할을 하는 새로운 ASP.NET Core 프로젝트를 만드세요. nuget 명령어를 사용해 패키지를 이렇게 설치하세요:
시작 시 서비스 메서드 ConfigureServices를 다음과 같이 구성하세요:
아래 대시보드를 보려면 웹사이트 /cap 주소를 방문하실 수 있습니다:
데이터 지속성: 캡틴이 할 거야자동 생성"게시됨"과 "수신됨"은 두 개의 로컬 데이터베이스 테이블입니다
테이블 [대문자]를 생성하세요. [출판됨] ( [id] [bigint] 무효가 아니라, [버전] [은바르차르] (20) 무효가 아니다, [이름] [은바르차르] (200) 무효가 아니라, [내용] [은바르차르] (맥스) NULL, [재시도] [내성] 무효가 아니라, [추가됨] [날짜 2] (7) 무효가 아니다, [만료 날짜] [날짜 2] (7) 무효, [StatusName] [은바르차르] (50) 무효가 아니며, 제약 [PK_cap. 게시됨] 주 키 클러스터
( [id] ASC ) (PAD_INDEX = 꺼짐, STATISTICS_NORECOMPUTE = 꺼짐, IGNORE_DUP_KEY = 꺼짐, ALLOW_ROW_LOCKS = 켜짐, ALLOW_PAGE_LOCKS = 켜짐) [기본 신호] ) [초요] TEXTIMAGE_ON [초등] 가세요 테이블 [대문자]를 생성하세요. [수신됨] ( [id] [bigint] 무효가 아니라, [버전] [은바르차르] (20) 무효가 아니다, [이름] [은바르차르] (200) 무효가 아니라, [그룹] [은바르차르] (200) 무효, [내용] [은바르차르] (맥스) NULL, [재시도] [내성] 무효가 아니라, [추가됨] [날짜 2] (7) 무효가 아니다, [만료 날짜] [날짜 2] (7) 무효, [StatusName] [은바르차르] (50) 무효가 아니며, 제약 [PK_cap. 수신] 주 키 클러스터
( [id] ASC ) (PAD_INDEX = 꺼짐, STATISTICS_NORECOMPUTE = 꺼짐, IGNORE_DUP_KEY = 꺼짐, ALLOW_ROW_LOCKS = 켜짐, ALLOW_PAGE_LOCKS = 켜짐) [기본 신호] ) [초요] TEXTIMAGE_ON [초등] 가세요
HomeController 컨트롤러 방식은 다음과 같습니다:
사용자가 성공적으로 등록하면 서로 다른 주제의 3개의 메시지가 전송되고, 구독자는 이를 소비하게 됩니다.
CAP이 시작되면, 동일한 소비자 그룹의 여러 소비자가 동일한 주제 메시지를 소비하면 기본 소비자 그룹이 생성됩니다.단 한 명의 소비자만 처형될 것입니다。 그와는 반대로소비자가 모두 다른 소비자 그룹에 속해 있다면, 모든 소비자가 실행 처리됩니다。
구독자(소비자)로서 새로운 .NET Core 콘솔 프로젝트를 생성하거나 패키지를 참조할 때, 대시보드는 무시할 수 있습니다.
컨트롤러에 있다면, 관련 메시지에 직접 [CapSubscribe(""])를 추가하세요.
만약 메서드가 컨트롤러에 없다면, 구독하는 클래스가 ICapSubscribe를 상속받아 [CapSubscribe("")] 태그를 추가해야 합니다. 코드는 다음과 같습니다:
구독 클라이언트를 열고 메시지를 보내기 위해 http://localhost:28116/Home/UserRegister 에 접근해 보세요. 효과는 다음과 같습니다:
콘솔과 컨트롤러 수신기 모두 트리거되며, 아래 그림에서 확인할 수 있습니다:
수신 메시지 메서드에서 수동으로 예외를 던져보세요. 코드는 다음과 같습니다:
CAP는 자동으로 방법을 다시 시도합니다,실패 후 재시도 횟수는 기본값으로 50초이며, 실패 후 재시도 간격은 기본값으로 60초입니다, 아래 그림에서 볼 수 있습니다:
프레임워크는 메시지가 단 한 번만 실행된다는 것을 100% 확신할 수 없습니다따라서 일부 주요 시나리오에서는 메시지 측이 방법 구현 과정에서 비즈니스 중복 제거에 주목합니다.
마지막으로 소스 코드를 첨부하세요:
관광객 여러분, 이 게시물의 숨겨진 내용을 보고 싶으시다면 부탁드립니다 회답
|