11
Enterprise Caching Evgen Napryaglo Intetics Inc [email protected]

Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

  • Upload
    fwdays

  • View
    364

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

Enterprise Caching

Evgen NapryagloIntetics Inc

[email protected]

Page 2: Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

Data access latency

Register L1 L2 L3 RAM SSD HDD0

200

400

600

800

1000

1200Latency

Latency

Page 3: Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

Common caching scenarios

• Static content delivery• Increase database IO bandwidth• Slow API integration

Page 4: Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

Caching Practices

• InProc data caching• Dedicated cache service• Static content cache• Distributed cache

Page 5: Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

Distributed Cache topologies

Alachisoft

Page 6: Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

Aspects oriented programming

Programming paradigm that aims to increase modularity by allowing the separation of cross-cutting concerns. It does so by adding additional behavior to existing code without modifying the code itself

Concern areas• Security• Logging• Metrics profiling• Dependency Injection• Caching

Page 7: Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

AOP in common IoC frameworks

Application Proxy Service

public interface IInterceptor

void Intercept(IInvocation invocation);

bool CanIntercept(IInvocation invocation);

public interface IInvocation

MethodInfo Method { get; set; }

object Target { get; set; }

object Result { get; set; }

Page 8: Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

Service definition with a cache support[Cache]

public interface ISomeThirdPartyDataProvider

{

[Cache(CacheScope.Session, Timeout=200, Key=“SD”)]

UserSubscriptionDetails [] GetSubscriptions(User u);

[Cache(CacheScope.Global, Timeout = -1)]

AreaLocationDetails [] GetLocationDetails([Key] Area a);

[Cache(CacheScope.Session, Key=“userProducts”,

Invalidate = typeof(AvailableProductsInvalidationStrategy))]

Product [] GetAvailableProducts ()

}

Page 9: Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

Caching interceptor internalssealed class CacheInterceptor : IInterceptor

{

public void Intercept(IInvocation invocation)

{

var cacheOptions = invocation.Method.GetAttribute();

var cache = IoC.Resolve<ICache>();

if (!cache.TryGetValue(cacheOptions.CacheKey, out value))

invocation.Result = cache[cacheOptions] = invocation.Proceed();

else

invocation.Result = value;

}

}

Page 10: Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

Pros & cons

• Strict separation of concern• Clean application code• Nonfunctional design specification inside a

declaration• Focus on features instead of infrastructure

• Increasing project learning curve• Little flexibility with a cached data invalidation

Page 11: Евгений Напрягло "Методы кэширования данных в распределенных высоконагруженных приложениях"

THANK YOU