이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 57382|회답: 3

[ASP.NET] ASP.NET 코어(다섯 개)는 CAP 분산 트랜잭션을 기반으로 합니다

[링크 복사]
2021-3-17 18:12:50에 게시됨 | | | |
CAP 원칙

CAP 원리, 또는 CAP 정리는 분산 시스템 내에서의 일관성, 가용성, 분할 허용 오차를 의미합니다. CAP 원리는 이 세 요소가 동시에 두 점만 달성할 수 있다고 말합니다.세 과목을 동시에 듣는 것은 불가능합니다

분산 트랜잭션의 2PC 및 3PC
https://www.itsvse.com/thread-9591-1-1.html

CAP 원칙의 본질은 AP, CP, 또는 AC 중 하나이지만, CAP는 없습니다. 분산 시스템에서 데이터 복사본이 없다면, 시스템은 강한 일관성 조건을 충족해야 합니다. 왜냐하면 유일한 데이터만 존재하기 때문에 데이터 불일치가 없기 때문입니다. 이 시점에는 두 요소 C와 P가 존재하지만, 네트워크 파티션 상태나 다운타임이 발생하면 일부 데이터가 필연적으로 접근 불가능해지고, 가용성 조건을 충족하지 못합니다. 즉, 이 경우 CP 시스템이 얻어집니다.CAP는 동시에 충족될 수 없습니다

복습:

ASP.NET 코어(4) 필터 통합 모델스테이트 모델 검증
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET 코어 (iii) ActivatorUtilities를 사용하여 동적으로 인스턴스를 생성합니다
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET 코어 (2) 코드로 애플리케이션을 재시작함
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET 코어(1)는 Redis 캐싱을 사용합니다
https://www.itsvse.com/thread-9393-1-1.html


닷넷코어.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 설치

구체적인 설치 튜토리얼은 다음을 참고하시기 바랍니다:

【실전 전투】Windows에서 RabbitMQ 설치 튜토리얼
https://www.itsvse.com/thread-4630-1-1.html

【Practice】RabbitMQ가 웹 관리 플러그인을 설치합니다
https://www.itsvse.com/thread-4631-1-1.html
계정 추가도 생략되어 있으니, 다음을 참고하시기 바랍니다:

【연습】rabbitMQ 콘솔을 통해 계정 정보를 추가하세요
https://www.itsvse.com/thread-4655-1-1.html
테스트 계정을 추가하고 가상 호스트 수를 제한하는 방법은 아래에 나와 있습니다:



그렇지 않으면 오차는 다음과 같습니다:

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% 확신할 수 없습니다따라서 일부 주요 시나리오에서는 메시지 측이 방법 구현 과정에서 비즈니스 중복 제거에 주목합니다.

인터페이스 몹등성 문제
https://www.itsvse.com/thread-6010-1-1.html

마지막으로 소스 코드를 첨부하세요:

관광객 여러분, 이 게시물의 숨겨진 내용을 보고 싶으시다면 부탁드립니다회답






이전의:마크다운 문법의 CSV 온라인 변환
다음:HttpClient POST 직접 사용하여 바이트 바이트(gzip) 압축 요청을 전송합니다
2021-3-18 18:11:20에 게시됨 |
와서 한번 봐주세요, 공유해 주셔서 감사합니다
2021-9-22 20:42:18에 게시됨 |
배우기 시작해...
2021-12-31 15:08:21에 게시됨 |
학습
아주 좋아, 아주 좋아
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com