분산 캐싱을 사용하는 확장 가능한 WCF 애플리케이션

저자: 이크발 칸

높은 트래픽 사용을 수용하기 위해 웹 응용 프로그램이 폭발적으로 증가한 후 다음의 큰 물결은 SOA(서비스 지향 아키텍처)가 되었습니다. SOA는 애플리케이션 개발 및 통합 환경을 변화시켰습니다. 이는 확장성이 뛰어난 응용 프로그램을 개발하기 위한 표준 방법이 될 예정이며 Windows Azure 및 WCF(Windows Communication Foundation)와 같은 클라우드 컴퓨팅 플랫폼은 SOA를 이러한 목표 달성을 위해 이동하는 데 있어 큰 도약을 나타냅니다. SOA는 주로 확장성을 달성하고 향상된 민첩성과 향상된 생산성을 달성하기 위해 가해지는 만큼의 부하를 유지하기 위한 것입니다.

그러나 진정한 SOA 애플리케이션은 애플리케이션 아키텍처에 관한 한 쉽게 확장되어야 합니다. 그러나 진정한 확장성을 달성하려면 해결해야 하는 많은 성능 병목 현상이 있습니다.

  • 응용 프로그램 데이터는 WCF 서비스에서 가장 많이 사용되는 데이터이며, 저장 및 액세스는 관계형 데이터 액세스의 부산물로 발생하는 대기 시간으로 인해 주요 확장성 병목 현상입니다.
  • 고도로 분산되고 이질적인 데이터 소스가 있는 환경은 SOA의 성능 목표를 달성하는 데 가장 큰 도전 과제입니다. 앱 계층은 원활하게 확장할 수 있지만 SOA(서비스 지향 아키텍처)에 남아 있는 주요 문제 중 하나는 참여하는 데이터 서비스의 성능입니다.
  • 데이터 계층은 트랜잭션 처리 용량 측면에서 선형 방식으로 확장할 수 없으므로 잠재적으로 전체 응답 시간에 상당한 지연이 발생할 수 있습니다.
  • 또한 SOA 서비스는 로컬에서 사용할 수 없는 다른 서비스에 의존하므로 다른 서비스에 대한 WAN 호출이 또 다른 병목 현상이 될 수 있습니다.
  • 또한 SOA가 데이터 가상화 계층 구현에 사용되는 경우 데이터 서비스의 성능이 가장 중요하며, 이 경우 애플리케이션의 성능은 기본 데이터를 가져오는 데 걸리는 시간에 정비례합니다. 데이터 서비스는 종종 지리적으로 분산된 여러 데이터 센터에 분산되어 있는 관계형 및 비관계형 데이터에 모두 액세스할 수 있으며, 이로 인해 응답 대기 시간이 발생하여 전체 애플리케이션 성능이 저하될 수 있습니다.

분산 캐시(NCache) 서비스 확장성

전체 솔루션의 응답 대기 시간을 줄이기 위해 포괄적인 접근 방식은 고성능 캐싱 시스템을 활용하여 데이터 서비스와 함께 사용하거나 데이터 가상화 계층에서 사용하는 것입니다. SOA 서비스는 두 가지 유형의 데이터를 처리합니다. 하나는 서비스 상태 데이터이고 다른 하나는 데이터베이스에 있는 서비스 결과 데이터입니다. 둘 다 확장성 병목 현상을 일으킵니다.

캐싱은 서비스 상태와 애플리케이션 데이터에 모두 액세스하는 속도를 높이는 동시에 서비스를 확장하는 데 매우 중요한 역할을 할 수 있습니다. 캐싱은 캐시를 사용하는 서비스와 기본 데이터 공급자 간의 트래픽 및 대기 시간을 최소화하여 이를 달성합니다. 그림 1은 NCache 이를 달성하기 위해 분산 캐싱.

방법 NCache 분산 캐싱은 데이터 소스에 대한 압력을 줄일 수 있습니다.
그림 1: 방법 NCache 분산 캐싱은 데이터 소스에 대한 압력을 줄일 수 있습니다.

애플리케이션 데이터 캐싱

다음과 같은 분산 캐시 NCache WCF 서비스가 몇 시간이라는 작은 창에서 필요로 하는 것을 기반으로 데이터베이스에 있는 데이터의 하위 집합만 캐시하는 데 사용됩니다. 분산 캐시는 다음과 같은 이유로 SOA 애플리케이션에 상당한 확장성을 제공할 수 있습니다.

  • 분산 캐시는 사용하는 아키텍처의 결과로 확장할 수 있습니다.
  • 여러 서버에 분산된 상태를 유지하면서 SOA 애플리케이션에 하나의 논리적 보기를 제공하여 하나의 캐시라고 생각할 수 있습니다. 그러나 캐시는 실제로 여러 서버에 있으므로 캐시를 실제로 확장할 수 있습니다.
  • 다음과 같은 분산 캐싱을 사용하는 경우 NCache 서비스 계층과 데이터베이스 사이에서 많은 시간이 소요되는 데이터베이스 여행을 절약할 수 있으므로 서비스 계층의 성능과 확장성을 극적으로 향상시킬 수 있습니다.

구현할 기본 논리는 데이터베이스로 이동하기 전에 캐시에 데이터가 이미 있는지 확인하는 것입니다. 그렇다면 캐시에서 가져옵니다. 그렇지 않으면 데이터베이스로 이동하여 데이터를 가져오고 다음 번에 캐시에 넣습니다. 그림 2는 예를 보여줍니다.

using System.ServiceModel;
using Alachisoft.NCache.Web.Caching;

namespace MyWcfServiceLibrary {
  [ServiceBehavior]
  public class EmployeeService : IEmployeeService {
    static string _sCacheName = "myServiceCache";
    static Cache _sCache = 
      NCache.InitializeCache(_sCacheName);

    public Employee Load(string employeeId) {
// Create a key to lookup in the cache.
      // The key for will be like "Employees:PK:1000".
      string key = "Employee:EmployeeId:" + employeeId;

      Employee employee = (Employee)_sCache[key];
      if (employee == null) {// item not found in the cache. 
        // Therefore, load from database.
        LoadEmployeeFromDb(employee);

        // Now, add to cache for future reference.
       _sCache.Insert(key, employee, null,
          Cache.NoAbsoluteExpiration,
          Cache.NoSlidingExpiration,
          CacheItemPriority.Default);
      }

      // Return a copy of the object since ASP.NET Cache is InProc.
      return employee;
    }
  }
}
그림 2 - WCF 서비스 사용 NCache - 분산 캐싱

중요한 캐싱 기능

서비스에 대한 캐싱 설계는 다음과 같은 문제를 고려해야 합니다. 기본 데이터가 변경되는 빈도, 캐시된 데이터를 업데이트해야 하는 빈도, 데이터가 사용자별인지 응용 프로그램 전체인지 여부, 캐시를 나타내는 데 사용할 메커니즘 업데이트, 더티 데이터에 대한 애플리케이션의 허용 수준 등이 필요합니다. 따라서 캐싱 솔루션에는 이러한 모든 요구 사항을 정렬하는 데 필요한 기능이 있어야 합니다.

분산 캐싱을 사용하는 데이터 서비스를 통한 확장 가능한 데이터 관리의 주요 기능 중 일부는 다음과 같습니다.

캐시된 데이터 만료

만료를 사용하면 캐시가 자동으로 데이터를 제거하기 전에 데이터가 캐시에 남아 있어야 하는 기간을 지정할 수 있습니다. 두 가지 유형의 만료를 지정할 수 있습니다. NCache: 절대 시간 만료 및 슬라이딩 또는 유휴 시간 만료.

캐시의 데이터가 데이터베이스에도 존재하는 경우 캐시에 액세스할 수 없는 다른 사용자나 응용 프로그램이 이 데이터를 데이터베이스에서 변경할 수 있다는 것을 알고 있습니다. 그런 일이 발생하면 캐시의 데이터가 원하지 않는 부실이 됩니다. 이 데이터를 캐시에 보관하는 것이 안전하다고 생각하는 기간을 추측할 수 있는 경우 절대 시간 만료를 지정할 수 있습니다. 또한 슬라이딩 만료는 분산 캐싱에 세션을 저장하는 세션 기반 응용 프로그램에 매우 유용할 수 있습니다.

데이터베이스와 캐시 동기화

데이터베이스 동기화가 필요한 이유는 데이터베이스가 실제로 여러 애플리케이션에서 공유되고 있고 모든 애플리케이션이 캐시에 액세스할 수 있는 것은 아니기 때문입니다. WCF 서비스 응용 프로그램이 데이터베이스를 업데이트하는 유일한 응용 프로그램이고 캐시도 쉽게 업데이트할 수 있는 경우 데이터베이스 동기화 기능이 필요하지 않을 수 있습니다.

그러나 실제 환경에서는 항상 그런 것은 아닙니다. 타사 응용 프로그램이 데이터베이스의 데이터를 업데이트하고 캐시가 데이터베이스와 일치하지 않게 됩니다. 캐시를 데이터베이스와 동기화하면 캐시가 항상 이러한 데이터베이스 변경 사항을 인식하고 그에 따라 자체 업데이트할 수 있습니다.

데이터베이스와 동기화한다는 것은 일반적으로 캐시에서 관련 캐시 항목을 무효화하는 것을 의미하므로 다음에 애플리케이션이 필요할 때 캐시에 항목이 없기 때문에 데이터베이스에서 가져와야 합니다.

캐시에서 데이터 관계 관리

대부분의 데이터는 관계형 데이터베이스에서 가져오고 관계형 데이터베이스에서 가져오지 않더라도 본질적으로 관계형입니다. 예를 들어 고객 개체와 주문 개체를 캐시하려고 하고 두 개체가 모두 관련되어 있습니다. 고객은 여러 주문을 가질 수 있습니다.

이러한 관계가 있는 경우 캐시에서 처리할 수 있어야 합니다. 즉, 캐시는 고객과 주문 간의 관계를 알아야 합니다. 캐시에서 고객을 업데이트하거나 제거하는 경우 캐시가 캐시에서 주문 개체를 자동으로 제거하도록 할 수 있습니다. 이는 많은 상황에서 데이터 무결성을 유지하는 데 도움이 됩니다.

캐시가 이러한 관계를 추적할 수 없는 경우 직접 수행해야 하므로 애플리케이션이 더 복잡하고 복잡해집니다.

결론

따라서 SOA 응용 프로그램은 사용하는 데이터가 빈번한 트랜잭션을 위해 확장할 수 없는 저장소에 보관되어 있으면 효과적으로 확장할 수 없습니다. 이것은 분산 캐싱과 같은 곳입니다. NCache 정말 도움이됩니다. 엔터프라이즈 환경에서 SOA 기반 애플리케이션 환경은 진정한 분산 캐싱 인프라를 사용하지 않고는 진정으로 확장할 수 없습니다. 기존 데이터베이스 서버도 개선되고 있지만 분산 캐싱이 없으면 서비스 응용 프로그램은 오늘날의 복잡한 응용 프로그램 환경에서 급증하는 확장성 요구를 충족할 수 없습니다.


저자:이크발 칸(Iqbal Khan)이 근무하는 곳 Alachisoft , .NET 및 Java 분산 캐싱, O/R 매핑 및 SharePoint 스토리지 최적화 솔루션을 제공하는 선도적인 소프트웨어 회사입니다. 당신은 그에게 연락할 수 있습니다 이크발@alachisoft.COM.

© 저작권 Alachisoft 2002 - . 판권 소유. NCache 는 Diyatech Corp.의 등록상표입니다.