.NET

ASP.NET Core 및 Couchbase를 사용한 분산 캐싱

분산 캐싱은 ASP.NET Core 애플리케이션의 성능을 개선하는 데 도움이 될 수 있습니다. 이는 서버 팜이나 확장 가능한 클라우드 환경에 배포된 ASP.NET 애플리케이션의 경우 특히 그렇습니다. 캐싱을 위해 Couchbase Server를 사용하는 것은 다음과 같은 경우에 이상적인 선택이 될 수 있는 많은 기능 중 하나입니다. 참여 데이터베이스 요구 사항.

이 블로그 게시물에서는 다음을 사용하는 방법을 보여 드리겠습니다. Couchbase.Extensions.Caching 미들웨어 플러그인 를 사용하여 애플리케이션에 분산 캐싱 기능을 쉽게 추가할 수 있습니다.

이 블로그 게시물을 작성하고 있는 현재 Couchbase.Extensions.Caching은 베타 2 릴리스이므로 일부 사항이 변경될 수 있습니다.

Couchbase의 기본 설정

먼저, Couchbase Server 클러스터가 실행 중이어야 합니다( 온프레미스또는 도커 사용또는 Azure에서 )로 변경할 수 있습니다.

다음으로 다음을 수행해야 합니다. 버킷 만들기 캐시된 데이터가 저장될 Couchbase에 저장합니다. 저는 제 것을 "캐시버킷"이라고 불렀습니다. 새로운 임시 버킷 기능 를 캐싱할 수 있지만 필수는 아닙니다.

Couchbase Server 5.0을 사용하는 경우 해당 버킷에 대한 권한(데이터 작성자 및 데이터 리더)을 가진 사용자도 만들어야 합니다. 간단하게 하려면 버킷과 이름이 같은 사용자(예: "캐시버킷")를 만드세요.

Couchbase.Extensions를 사용한 분산 캐싱

그리고 Couchbase.Extensions(GitHub) 프로젝트는 Couchbase Server 및 .NET Core 작업을 더 간단하게 만드는 것을 목표로 합니다. 캐싱은 이러한 확장 기능 중 하나에 불과합니다.

패키지 관리자를 통해 NuGet을 사용하여 ASP.NET Core 프로젝트에 추가할 수 있습니다: 설치-패키지 Couchbase.Extensions.Caching -버전 1.0.0-beta2를 클릭하거나 NuGet UI를 사용하거나 .NET 명령줄을 사용할 수 있습니다: 닷넷 Couchbase.Extensions.Caching 패키지 추가 --버전 1.0.0-beta2.

Couchbase extension for distributed caching available on NuGet

프로젝트에 이 기능을 추가한 후에는 다음과 같이 몇 가지를 약간 변경해야 합니다. 시작 클래스의 Startup.cs.

먼저 서비스 구성를 클릭하고 네임스페이스를 몇 개 추가합니다:

이렇게 하면 캐싱 네임스페이스를 사용할 수 있으며, 특히 추가 분산 카우치베이스 캐시 확장 메서드 IServiceCollection. 그런 다음 해당 확장 메서드를 서비스 구성 메서드를 사용합니다.

다른 네임스페이스가 있습니다, 의존성 주입를 사용하여 Couchbase 기능을 삽입해야 합니다. 이 경우에는 캐싱 확장 프로그램에서만 사용됩니다. 하지만 다른 용도로도 사용할 수 있으며, 이에 대해서는 향후 블로그 게시물에서 다룰 예정입니다.

하지만 지금은 단지 카우치베이스 추가 의 확장 메서드 IServiceCollection.

마지막으로, 두 가지를 모두 합치면 서비스 구성 메서드는 다음과 같이 표시되어야 합니다:

분산 캐싱 사용

이제 ASP.NET Core 프로젝트에서 Couchbase를 사용하여 분산 캐싱을 설정했으므로 다음을 사용할 수 있습니다. IDistributedCache 를 프로젝트의 다른 곳에 사용하세요.

IDistributedCache 주입

간단한 예로 컨트롤러에서 직접 사용하는 것을 들 수 있습니다. 필요에 따라 생성자에 주입할 수 있습니다:

문자열 캐싱

다음을 사용할 수 있습니다. GetString 그리고 SetString 메서드를 사용하여 캐시에서 문자열 값을 검색/설정할 수 있습니다.

이는 '캐시버킷' 버킷에 인코딩된 바이너리 값(JSON이 아님)으로 표시됩니다.

String cached in Couchbase

샘플 코드에서, 저는 단순히 ViewData["메시지"] 를 클릭합니다. 다음과 같이 표시되어야 합니다:

Cached string output to Razor

개체 캐싱

다음을 사용할 수도 있습니다. Set 그리고 Get 메서드를 사용하여 캐시에 객체를 저장하고 검색할 수 있습니다. 데모를 위해 아주 간단한 POCO(Plain Old CLR Object)를 만들었습니다:

다음으로, 샘플에서는 캐시 키로 사용할 임의의 문자열을 생성하고 무작위로 생성된 MyPoco. 먼저 캐시에 저장하기 위해 Set 메서드를 사용합니다:

그런 다음 Razor 보기의 키를 인쇄합니다:

Cached POCO output to Razor

다음으로, 이 키를 사용하여 Couchbase에서 값을 조회할 수 있습니다:

Cached POCO in Couchbase

또한 JSON으로 직렬화되었다는 점도 주목하세요. 즉, 읽을 수 있을 뿐만 아니라 필요한 경우 N1QL로 쿼리할 수도 있습니다.

만기가 있는 분산 캐싱

캐시의 값이 특정 기간 후에 만료되도록 하려면 다음을 사용하여 지정할 수 있습니다. 분산 캐시 항목 옵션 (전용 슬라이딩호흡 현재 지원됩니다).

샘플 프로젝트에서는 Razor로 인쇄하도록 설정했습니다.

Cached POCO with expiration

(10초가 다 되기 전에) Couchbase 콘솔에서 해당 문서를 보면 만료 값을 추가할 수 있습니다. 다음은 예시입니다:

10초 후에 해당 문서가 버킷에서 사라지고 "찾을 수 없음(문서가 존재하지 않음)" 오류가 표시됩니다.

분산 캐싱 해체하기

마지막으로, 분산 캐싱을 위해 Couchbase .NET SDK에서 사용하는 리소스를 정리하는 것을 잊지 마세요. 이를 위한 쉬운 방법 중 하나는 응용 프로그램 중지 이벤트에 연결합니다. 다음에서 연결할 수 있습니다. 시작:

다음 사항을 추가해야 합니다. I애플리케이션평생 앱평생 앱 를 매개변수로 구성 메서드의 시작 아직 설치하지 않으셨다면요.

요약

ASP.NET Core 애플리케이션에서 분산 캐싱을 위해 Couchbase Server를 사용하면 애플리케이션의 성능과 확장성을 개선할 수 있습니다. 이러한 종류의 "참여" 사용 사례는 Couchbase Server가 탁월한 역량을 발휘하는 부분입니다. 캐싱을 위해 Couchbase Server를 사용하는 고객을 확인하려면 카우치베이스 고객 페이지로 이동합니다.

Couchbase.Extensions.Caching 프로젝트에 대해 질문이나 의견이 있으시면 GitHub 리포지토리 또는 카우치베이스 .NET SDK 포럼.

언제나 그렇듯이 아래에 댓글을 남기거나 다음에서 저를 찾아 연락하실 수 있습니다. 트위터 @mgroves.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 매튜 그로브스

Matthew D. Groves는 코딩을 좋아하는 사람입니다. C#, jQuery, PHP 등 무엇이든 풀 리퀘스트를 제출할 정도로 코딩을 좋아합니다. 90년대에 부모님의 피자 가게를 위해 QuickBASIC POS 앱을 만든 이후로 전문적으로 코딩을 해왔습니다. 현재 Couchbase의 선임 제품 마케팅 관리자로 일하고 있습니다. 여가 시간에는 가족과 함께 축구 경기를 관람하고 개발자 커뮤니티에 참여하며 시간을 보냅니다. 그는 .NET의 AOP, .NET의 프로 마이크로서비스, Pluralsight 저자, Microsoft MVP의 저자이기도 합니다.

댓글 하나

  1. Mathew,

    쿠치베이스 시작에 관한 좋은 기사였습니다. 저는 공부를 위해 쿠체베이스 서버를 로컬에 다운로드했고 제공된 미들웨어를 사용하여 닷넷 코어 앱에서 캐싱을 구현할 수 있었습니다. 지금 제가 겪고 있는 유일한 문제는 직장에서 구 버전의 쿠체베이스를 사용하고 있다는 점입니다. 버킷 수준에서 암호로 보호되는 보안이 없는 오래된 쿠체베이스 서버를 사용하고 있는데, 제가 시도할 때
    services.AddCouchbase(opt => =>)
    {
    opt.Servers = 새 목록
    {
    새로운 Uri("http://myworkplacecouchebasehostname:8091")
    };
    });
    //버킷에 비밀번호가 없으므로
    services.AddDistributedCouchbaseCache("버킷 이름", opt => {});

    스택 추적에서 다음 오류가 발생했습니다. 여기서 제가 놓치고있는 것이 무엇인지 올바른 방향으로 알려주시겠습니까?
    요청을 처리하는 동안 처리되지 않은 예외가 발생했습니다.
    부트스트랩 예외: 부트스트랩할 수 없음 - 자세한 내용은 내부 예외를 확인하세요. (연결된 상대방이 일정 시간이 지나도 제대로 응답하지 않아 연결 시도가 실패했거나 연결된 호스트가 응답하지 않아 연결 설정에 실패했습니다.) (CCCP로 부트스트랩할 수 없음. (연결된 상대방이 일정 시간이 지난 후에도 제대로 응답하지 않아 연결 시도가 실패했거나 연결된 호스트가 응답하지 않아 연결 설정에 실패했습니다) (부트스트랩 후 노드 목록에 클라이언트가 부트스트랩 중 실패했음을 나타내는 요소가 0개 있습니다. 실패 이유에 대한 자세한 내용은 클라이언트 로그를 확인하시기 바랍니다.)
    Couchbase.Core.ClusterController.CreateBucketImpl(문자열 버킷 이름, 문자열 암호, IAuthenticator 인증자)

    소켓 예외: 연결된 상대방이 일정 시간이 지나도 제대로 응답하지 않아 연결 시도가 실패했거나 연결된 호스트가 응답하지 않아 연결 설정이 실패했습니다.
    Couchbase.IO.DefaultConnectionFactory+c__0.b__0_0(IConnectionPool p, IByteConverter c, BufferAllocator b)

    CouchbaseBootstrapException: 부트스트랩 후 노드 목록에 클라이언트가 부트스트랩하는 동안 실패했음을 나타내는 요소가 0개 있습니다. 실패한 이유에 대한 자세한 내용은 클라이언트 로그를 확인하세요.
    Couchbase.Configuration.CouchbaseConfigContext.UpdateServices(사전 서버)

    소켓 예외: 연결된 상대방이 일정 시간이 지나도 제대로 응답하지 않아 연결 시도가 실패했거나 연결된 호스트가 응답하지 않아 연결 설정이 실패했습니다.
    Couchbase.IO.DefaultConnectionFactory+c__0.b__0_0(IConnectionPool p, IByteConverter c, BufferAllocator b)

    1. 안녕하세요 zysed,

      이 질문은 .NET 포럼에 게시하는 것이 좋습니다: https://forums.couchbase.com/c/net-sdk 또는 확장 프로그램 라이브러리에 문제가 있을 수 있습니다: https://github.com/couchbaselabs/Couchbase.Extensions

      아마 해결 방법이 있을 것이고, 그런 곳에 글을 올리면 저뿐만 아니라 더 많은 사람들의 시선을 끌 것입니다.

      버킷에 비밀번호를 설정하거나 더 이상 비밀번호 없이 버킷을 사용할 수 없는 최신 버전의 Couchbase Server로 업그레이드하는 것을 적극 권장합니다(비밀번호 없이 버킷을 사용할 수 없는 경우). 서버가 방화벽 뒤에 있더라도 완전히 보안되지 않은 상태로 두는 것은 여전히 위험합니다. 또한 이러한 구 버전의 Couchbase는 버그 수정 릴리스가 더 이상 제공되지 않을 가능성이 높습니다(아직 제공되지 않은 경우).

  2. 감사합니다, 매튜. 또한 전적으로 동의합니다. 다시 한 번, 이런 좋은 글은 매우 도움이 되니 계속 작성해 주세요.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.