저자: 이크발 칸
높은 트래픽 사용을 수용하기 위해 웹 응용 프로그램이 폭발적으로 증가한 후 다음의 큰 물결은 SOA(서비스 지향 아키텍처)가 되었습니다. SOA는 애플리케이션 개발 및 통합 환경을 변화시켰습니다. 이는 확장성이 뛰어난 응용 프로그램을 개발하기 위한 표준 방법이 될 예정이며 Windows Azure 및 WCF(Windows Communication Foundation)와 같은 클라우드 컴퓨팅 플랫폼은 SOA를 이러한 목표 달성을 위해 이동하는 데 있어 큰 도약을 나타냅니다. SOA는 주로 확장성을 달성하고 향상된 민첩성과 향상된 생산성을 달성하기 위해 가해지는 만큼의 부하를 유지하기 위한 것입니다.
그러나 진정한 SOA 애플리케이션은 애플리케이션 아키텍처에 관한 한 쉽게 확장되어야 합니다. 그러나 진정한 확장성을 달성하려면 해결해야 하는 많은 성능 병목 현상이 있습니다.
전체 솔루션의 응답 대기 시간을 줄이기 위해 포괄적인 접근 방식은 고성능 캐싱 시스템을 활용하여 데이터 서비스와 함께 사용하거나 데이터 가상화 계층에서 사용하는 것입니다. SOA 서비스는 두 가지 유형의 데이터를 처리합니다. 하나는 서비스 상태 데이터이고 다른 하나는 데이터베이스에 있는 서비스 결과 데이터입니다. 둘 다 확장성 병목 현상을 일으킵니다.
캐싱은 서비스 상태와 애플리케이션 데이터에 모두 액세스하는 속도를 높이는 동시에 서비스를 확장하는 데 매우 중요한 역할을 할 수 있습니다. 캐싱은 캐시를 사용하는 서비스와 기본 데이터 공급자 간의 트래픽 및 대기 시간을 최소화하여 이를 달성합니다. 그림 1은 NCache 이를 달성하기 위해 분산 캐싱.
다음과 같은 분산 캐시 NCache WCF 서비스가 몇 시간이라는 작은 창에서 필요로 하는 것을 기반으로 데이터베이스에 있는 데이터의 하위 집합만 캐시하는 데 사용됩니다. 분산 캐시는 다음과 같은 이유로 SOA 애플리케이션에 상당한 확장성을 제공할 수 있습니다.
구현할 기본 논리는 데이터베이스로 이동하기 전에 캐시에 데이터가 이미 있는지 확인하는 것입니다. 그렇다면 캐시에서 가져옵니다. 그렇지 않으면 데이터베이스로 이동하여 데이터를 가져오고 다음 번에 캐시에 넣습니다. 그림 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;
}
}
}
서비스에 대한 캐싱 설계는 다음과 같은 문제를 고려해야 합니다. 기본 데이터가 변경되는 빈도, 캐시된 데이터를 업데이트해야 하는 빈도, 데이터가 사용자별인지 응용 프로그램 전체인지 여부, 캐시를 나타내는 데 사용할 메커니즘 업데이트, 더티 데이터에 대한 애플리케이션의 허용 수준 등이 필요합니다. 따라서 캐싱 솔루션에는 이러한 모든 요구 사항을 정렬하는 데 필요한 기능이 있어야 합니다.
분산 캐싱을 사용하는 데이터 서비스를 통한 확장 가능한 데이터 관리의 주요 기능 중 일부는 다음과 같습니다.
만료를 사용하면 캐시가 자동으로 데이터를 제거하기 전에 데이터가 캐시에 남아 있어야 하는 기간을 지정할 수 있습니다. 두 가지 유형의 만료를 지정할 수 있습니다. NCache: 절대 시간 만료 및 슬라이딩 또는 유휴 시간 만료.
캐시의 데이터가 데이터베이스에도 존재하는 경우 캐시에 액세스할 수 없는 다른 사용자나 응용 프로그램이 이 데이터를 데이터베이스에서 변경할 수 있다는 것을 알고 있습니다. 그런 일이 발생하면 캐시의 데이터가 원하지 않는 부실이 됩니다. 이 데이터를 캐시에 보관하는 것이 안전하다고 생각하는 기간을 추측할 수 있는 경우 절대 시간 만료를 지정할 수 있습니다. 또한 슬라이딩 만료는 분산 캐싱에 세션을 저장하는 세션 기반 응용 프로그램에 매우 유용할 수 있습니다.
데이터베이스 동기화가 필요한 이유는 데이터베이스가 실제로 여러 애플리케이션에서 공유되고 있고 모든 애플리케이션이 캐시에 액세스할 수 있는 것은 아니기 때문입니다. WCF 서비스 응용 프로그램이 데이터베이스를 업데이트하는 유일한 응용 프로그램이고 캐시도 쉽게 업데이트할 수 있는 경우 데이터베이스 동기화 기능이 필요하지 않을 수 있습니다.
그러나 실제 환경에서는 항상 그런 것은 아닙니다. 타사 응용 프로그램이 데이터베이스의 데이터를 업데이트하고 캐시가 데이터베이스와 일치하지 않게 됩니다. 캐시를 데이터베이스와 동기화하면 캐시가 항상 이러한 데이터베이스 변경 사항을 인식하고 그에 따라 자체 업데이트할 수 있습니다.
데이터베이스와 동기화한다는 것은 일반적으로 캐시에서 관련 캐시 항목을 무효화하는 것을 의미하므로 다음에 애플리케이션이 필요할 때 캐시에 항목이 없기 때문에 데이터베이스에서 가져와야 합니다.
대부분의 데이터는 관계형 데이터베이스에서 가져오고 관계형 데이터베이스에서 가져오지 않더라도 본질적으로 관계형입니다. 예를 들어 고객 개체와 주문 개체를 캐시하려고 하고 두 개체가 모두 관련되어 있습니다. 고객은 여러 주문을 가질 수 있습니다.
이러한 관계가 있는 경우 캐시에서 처리할 수 있어야 합니다. 즉, 캐시는 고객과 주문 간의 관계를 알아야 합니다. 캐시에서 고객을 업데이트하거나 제거하는 경우 캐시가 캐시에서 주문 개체를 자동으로 제거하도록 할 수 있습니다. 이는 많은 상황에서 데이터 무결성을 유지하는 데 도움이 됩니다.
캐시가 이러한 관계를 추적할 수 없는 경우 직접 수행해야 하므로 애플리케이션이 더 복잡하고 복잡해집니다.
따라서 SOA 응용 프로그램은 사용하는 데이터가 빈번한 트랜잭션을 위해 확장할 수 없는 저장소에 보관되어 있으면 효과적으로 확장할 수 없습니다. 이것은 분산 캐싱과 같은 곳입니다. NCache 정말 도움이됩니다. 엔터프라이즈 환경에서 SOA 기반 애플리케이션 환경은 진정한 분산 캐싱 인프라를 사용하지 않고는 진정으로 확장할 수 없습니다. 기존 데이터베이스 서버도 개선되고 있지만 분산 캐싱이 없으면 서비스 응용 프로그램은 오늘날의 복잡한 응용 프로그램 환경에서 급증하는 확장성 요구를 충족할 수 없습니다.
저자:이크발 칸(Iqbal Khan)이 근무하는 곳 Alachisoft , .NET 및 Java 분산 캐싱, O/R 매핑 및 SharePoint 스토리지 최적화 솔루션을 제공하는 선도적인 소프트웨어 회사입니다. 당신은 그에게 연락할 수 있습니다 이크발@alachisoft.COM.