Snel en Schaalbaar met Velocity Distributed Cache

In het hart van je computer vind je de processor en het interne geheugen. Deze onderdelen horen bij de computerarchitectuur die is vernoemd naar John von Neumann, een beroemd wiskundige en computergeleerde. Eén van de onhebbelijkheden van deze architectuur is de “Von Neumann bottleneck”: doordat het geheugen zich “op afstand” van de processor bevindt en veel data kan bevatten, ontstaat er een grote hoeveelheid verkeer op de relatief smalle verbindingsweg tussen die twee onderdelen. Dit leidt tot opstopping en vertraging. Deze flessenhals wordt in computers deels opgeheven door een buffer tussen de twee onderdelen te plaatsen: de cache.

Op veel grotere schaal, in de wereld van software development, krijgen we steeds meer te maken met gedistribueerde data en event-driven applicaties. Gegevens zijn cruciaal voor applicaties om te functioneren, maar applicaties zijn door hun gedistribueerde en servicegeoriënteerde architectuur afhankelijk van vele schakels in de keten. Gegevens kunnen van diverse bronnen afkomstig zijn, zelfs van externe partijen. Soms moet je gegevens van verschillende bronnen aggregeren voor je er iets mee kunt. Ook kun je er niet altijd zeker van zijn dat verbindingen voorhanden zijn. Of misschien heb je een SLA waarbij je moet betalen voor het aantal calls dat je afneemt en is het dus een kostenoverweging om het aantal aanroepen van services te beperken. Denk ook aan offline scenario’s op smart clients, handheld devices, enz. In een gedistribueerde en servicegeoriënteerde omgeving ontstaat door al deze aspecten een behoefte aan een vorm van caching.

De “Von Neumann bottleneck” is (deels) op te lossen via caches

Er zijn gelukkig middelen die het ons steeds gemakkelijker maken om caches te bouwen. De prijs van geheugenchips blijft dalen en door slim gebruik te maken van meerdere computers kunnen we gedistribueerde caches bouwen op basis van goedkope hardware. Een gedistribueerde cache bestaat uit een verzameling computers die samen één grote cache vormen. Doordat de cache verspreid is over meerdere machines kun je profiteren van b.v. hoge beschikbaarheid (door kopieën van gegevens te verspreiden over meerdere computers en ze elkaars werk te laten overnemen als er een computer uitvalt) en hoge performance doordat de belasting van de machines wordt verdeeld over verschillende computers. Zolang je computers hebt met geheugen en een netwerkkaart, kun je de gedistribueerde cache blijven vergroten.

De performance van bekende community sites als Hyves en MySpace of grote webwinkels als Amazon zou als een plumpudding in elkaar zakken als zij niet waren voorzien van grote gedistribueerde caches

De performance van bekende community sites als Hyves en MySpace of grote webwinkels als Amazon zou als een plumpudding in elkaar zakken als zij niet waren voorzien van grote gedistribueerde caches.

Wat stop je in een cache?

Er zijn verschillende soorten gegevens die zich lenen om te cachen en waarbij ook verschillende scenario’s passen.

Referentiedata

Dit zijn gegevens die niet vaak wijzigen maar wel heel vaak worden geraadpleegd. Denk hierbij aan productgegevens in een productcatalogus of gegevens over reisverzekeringen van verschillende verzekeringspartners. Stamtabellen voor landen, plaatsnamen, postcodes, etc., vallen ook in deze categorie. Meestal wordt aan deze gegevens een bepaalde geldigheidsduur meegegeven. Zolang deze uiterste houdbaarheidsdatum niet is verstreken, kunnen deze gegevens in de cache blijven. Referentiedata lenen zich uitstekend om te cachen.

Activity data

Hieronder verstaan we gegevens die geldig zijn terwijl een eindgebruiker bezig is met een gebruikerssessie. We noemen dit ook wel conversational state. Een voorbeeld van activity data is de inhoud van een winkelwagentje dat een gebruiker aan het samenstellen is op de site van een internetwinkel. Deze gegevens bevinden zich meestal ergens in de user interface / front end laag van een applicatie. In ASP.NET applicaties gebruiken we daarvoor vaak de Session container. Pas na afloop van een transactie komt activity data in een of andere vorm definitief in een backendsysteem, database of service te staan. Het winkelwagentje uit het voorbeeld wordt dan omgezet in een order. Activity data wordt vaak geschreven en gelezen, maar alleen binnen de context van één gebruiker. Deze gegevens moeten daarom worden gekoppeld aan die ene gebruiker. Voorbeelden hiervan zijn de session state, cookies of de viewstate in ASP.NET applicaties.

Resource data

Dit zijn gegevens die vaak worden gelezen en geschreven door meerdere gebruikers of applicaties. Bijvoorbeeld de beschikbare voorraad van producten in een magazijn. Bij iedere bestelling moeten deze gegevens worden bijgewerkt en ze moeten altijd beschikbaar zijn. Hier is dus een sterke koppeling met de achterliggende gegevensbron en deze gegevens moeten doorlopend met elkaar in de pas worden gehouden. Caching is in deze gevallen vooral een middel om snelheid te krijgen bij het raadplegen, maar het risico is groot dat de gegevens in de cache verouderd zijn. De beste performance krijg je door de cache zo dicht mogelijk bij de applicatie te leggen, b.v. door de cache in-process te draaien of op dezelfde machine.

Gedistribueerd cachen met Velocity

Microsoft is een project gestart met de code naam Velocity uitgaande van de eerder genoemde trend in applicatiearchitectuur en de mogelijkheden die de hardware ons biedt. Velocity levert een gedistribueerde cache die in veel verschillende scenario’s inzetbaar is. Het product is nog volop in ontwikkeling en is momenteel als CTP3 beschikbaar. Wanneer versie 1.0 beschikbaar komt is nog onduidelijk.

In de rest van dit artikel ga ik in op de eigenschappen van Velocity CTP2 en waar je rekening mee moet houden als je het product wilt inpassen in je architectuur.

Velocity is dus een gedistribueerde cache. De filosofie die Microsoft hanteert is die van een bundeltje computers waarvan de interne geheugens aan elkaar worden gesmeed tot één grote cache die beschikbaar is voor de applicatie. Vanuit de applicatie gezien benader je één logische cache, Velocity zorgt voor lastige zaken als het verdelen van gegevens over een heel cluster. Hiermee zorgt Velocity voor failover, hoge beschikbaarheid, schaalbaarheid enzovoort.

In de huidige opzet is Velocity een cache-aside, wat betekent dat de cache niet meer is dan een grote silo voor gegevens. De applicatie bepaalt zelf wanneer objecten in de cache moeten worden gezet of wanneer ze moeten worden ververst. Velocity heeft zelf dus geen weet van wat de applicatie doet of wat er in de cache wordt opgeslagen.

Wat kan er allemaal in Velocity worden opgeslagen? Eigenlijk alle gegevens, zolang ze serializable zijn: .NET objecten, DataRows, XML en byte arrays. De reden waarom ze serializable moeten zijn is dat ze proces- en machinegrenzen oversteken. Met serializable bedoel ik dat ze moeten zijn voorzien van het Serializable attribuut of de DataContract en DataMember attributen.

Velocity een Silo van serializable data.

In zijn kleinste vorm kan Velocity ook worden ingezet als een in-process cache. Dit heet een local cache. Velocity draait dan in het proces van je applicatie mee. De hoeveelheid gegevens die Velocity in de local cache stopt heeft dan wel direct invloed op het geheugengebruik van de applicatie. Een local cache kun je ook combineren met een volledig cache cluster. Gegevens die je opvraagt vanuit het cache cluster worden dan gebufferd in de local cache. Velocity werkt met een fallback mechanisme: het controleert of objecten in de local cache staan. Alleen wanneer dat niet het geval is, zal Velocity het cache cluster aanspreken. De eerstvolgende keer staan de gegevens wel in de local cache. Omdat de local cache in het proces van de applicatie meedraait, hoeven objecten niet te worden geserialiseerd en gedeserialiseerd. Het werkt daardoor zeer snel, maar het zorgt er wel voor dat de applicatie zelf meer geheugen gaat gebruiken.

De opbouw van een cache cluster

In de gedistribueerde cache van Velocity praten we over een aantal onderdelen: de cache zelf, hosts, clusters en regions. Figuur 1 toont hoe de verschillende onderdelen met elkaar in verbinding staan.

Fig. 1: Schematische weergave van de Velocity onderdelen

Een cache host is een proces dat (een deel van) een cache beheert en vormt een apart te beheren onderdeel van de gedistribueerde cache. Een host is meestal gekoppeld aan één fysieke machine, maar er kunnen best meerdere hosts draaien op één computer.

Een cluster is een logische verzameling van hosts en van één of meerdere caches. Een cluster als geheel is ook weer een eenheid van beheer. Zo kun je een cluster in zijn geheel stoppen en starten. Je kunt de omvang van je cache beïnvloeden door er hosts aan toe te voegen of eruit te verwijderen.

Een cache wordt gevormd door het geheugen van de hosts binnen een cluster te combineren en er een logische naam aan te koppelen. Door die naam wordt het een ‘named cache’. Er kunnen meerdere named caches in een cache cluster bestaan. De naam levert niets meer op dan een context voor je applicatie. Zo kunnen een order- en een salesapplicatie gebruik maken van hetzelfde cachecluster en zelfs dezelfde sleutels gebruiken voor hun data, maar doordat de cache in beide gevallen een eigen naam heeft, ontstaat er geen verwarring. Vergelijk het met de namespace van XML documenten. Zoals de figuur al aangeeft, is een cache uitgesmeerd over de hosts in het cluster.

Fabric
Het fabric clustering protocol is een populaire technologie in de netwerkwereld. Het is een protocol dat zorgt voor het beheer van group membership van hosts binnen een cluster, het automatisch detecteren dat er hosts worden toegevoegd of verwijderd. Het zorgt voor schaalbaarheid en beschikbaarheid en voorkomt een single point of failure doordat data wordt gerepliceerd naar andere nodes. Daarnaast levert het routing tables om een verzoek van de client door te verwijzen naar de juiste host binnen een cluster.
Microsoft heeft Fabric geïmplementeerd en beschikbaar gesteld als een verzameling .NET assemblies. Deze zijn op dit moment onderdeel van de Velocity CTP2 download.

Binnen een cache kun je nog een opdeling maken in regions. Een region gebruik je om gelijksoortige gegevens te bundelen, vergelijkbaar met een tabel in een database. Je kunt dan, behalve de sleutel voor een object, ook meer informatie aan je data koppelen in de vorm van tags. Je kunt daardoor tag based zoeken, b.v. naar alle objecten met de tag “Dieselauto”. Velocity koppelt zo’n region wel aan één bepaalde host, dus je kunt dan niet profiteren van het feit dat Velocity de gegevens verdeelt over de verschillende hosts ten behoeve van de schaalbaarheid. Velocity kan overigens wel regions als geheel repliceren voor failover doeleinden.

Door een cluster op te bouwen uit verschillende hosts en daar een cache overheen te “projecteren” kan Velocity een cache leveren met een hoge beschikbaarheid en failover. Deze twee doelen bereikt Velocity door gegevens slim te verdelen over de hosts en vervolgens te repliceren. Mocht er een node uitvallen, dan is er altijd nog een host die een kopie van de gegevens beschikbaar heeft.

Doordat er onbeperkt hosts kunnen worden toegevoegd aan een cluster, zelfs terwijl een cluster draait, is Velocity enorm schaalbaar. Het beheren van het cluster gebeurt in Velocity op basis van het Fabric Cluster Management protocol (zie kader). Voor het beheren van de clusters en hosts krijg je een beheertool op basis van Windows PowerShell.

Velocity past goed op je spullen

In een gedistribueerde omgeving zullen er meerdere applicaties zijn die gebruik maken van de cache. Denk aan een web farm waarop dezelfde web applicatie meerdere malen is uitgevoerd. Ook meerdere lagen binnen een applicatie kunnen gebruik maken van dezelfde cache. Doordat de cache vanuit verschillende bronnen kan worden gevuld met data en weer worden uitgelezen, is belangrijk dat Velocity zijn cache goed bewaakt.

Bij het beheren van de cache waar meerdere partijen gebruik van maken komen eigenlijk dezelfde aspecten aan bod als bij “traditioneel” gegevensbeheer, namelijk constistency, concurrency en beveiliging. Specifiek bij caching is ook een goed beheer van geheugen belangrijk.

Consistency

Consistency in Velocity betekent het gelijk houden van de gegevens die verspreid en gerepliceerd zijn over de verschillende hosts binnen het cluster. Je kunt kiezen voor twee modellen: weak consistency of strong consistency. Bij strong consistency is een operatie om gegevens in de cache te stoppen of te wijzigen synchroon: de operatie is pas klaar als de gegevens succesvol zijn gerepliceerd naar alle hosts in het cluster. Als je het niet zo belangrijk vindt om te weten of een object wel in de cache is opgeslagen, dan kun je kiezen voor het weak consistency model. In het weak model gebeurt het wegschrijven en repliceren van gegevens in de cache asynchroon. Dit kan je veel snelheidswinst opleveren als je vaak gegevens in de cache schrijft, doordat je niet telkens hoeft te wachten totdat alle gegevens succesvol over alle hosts in het cluster zijn verspreid. Wanneer het wegschrijven van de gegevens mislukt door een onvoorzien probleem terwijl je daar niet van op de hoogte bent, moet je er in je applicatie wel rekening mee houden dat objecten niet per se in de cache staan en je hierdoor mogelijk vaker misgrijpt als je om objecten vraagt. Velocity ondersteunt in CTP2 alleen nog het synchrone model (strong consistency).

Concurrency en beveiliging

Bij resource data heb je mogelijk te maken met gegevens die door verschillende clients worden gewijzigd. In deze gevallen is het prettig dat Velocity de concurrency bewaakt. Net als in een database kun je kiezen tussen optimistic en pessimistic locking. Bij optimistic locking gebruikt Velocity wat extra metadata in de vorm van een versienummer. Een update op de gegevens in de cache lukt dan alleen als je ook het juiste versienummer van die data hebt. Heeft iemand anders dat nummer in de tussentijd opgehoogd, dan zal de wijziging falen.

In het pessimistic locking scenario leg je expliciet een lock op het object in de cache en kan alleen de houder van het lock de gegevens wijzigen en het lock weer vrijgeven.

Het is wel belangrijk om te beseffen dat Velocity geen transacties over meerdere items heen ondersteunt. In een pessimistic locking scenario moet de applicatie goed de volgorde van acties en het leggen van locks bewaken om deadlock situaties te voorkomen. Velocity heeft zelf geen deadlock detectie, dus dat moet je in de applicatie verzorgen.

Velocity doet in CTP2 nog niets aan beveiliging. Objecten worden nog niet beveiligd tegen ongeautoriseerde toegang en er is ook nog geen moeite gestoken in b.v. het coderen van gevoelige gegevens. Hoewel je je moet afvragen of het verstandig is om gevoelige gegevens te cachen, moet je er dus wel rekening mee houden dat deze objecten in het geheugen van je computer kunnen zijn geladen. Ze zouden door kwaadwillenden kunnen worden uitgelezen. Het Velocity team werkt momenteel aan een model voor security. De ideeën lopen uiteen van een systeem met ACL’s (Access Control Lists) of het gebruik van een simpele sleutel per region of object. In de afweging wordt vooral gekeken naar een goed evenwicht tussen beveiliging en goede performance.

 “Traditioneel” gegevensbeheer, zoals constistency, concurrency en beveiliging, is nog steeds belangrijk in de cache

Geheugenbeheer

Eerder werd al genoemd dat Velocity een cache-aside is. Dit betekent dat de applicatie verantwoordelijk is voor het beheer van de gegevens in de cache: de applicatie bepaalt of gegevens nog geldig zijn en wanneer ze moeten worden vervangen.

Velocity zorgt echter wel voor efficiënt geheugenbeheer en houdt daarbij rekening met de kaders die je stelt bij het aanmaken van een gedistribueerde cache. Deze kaders worden uitgedrukt in twee strategieën: expiration en eviction.

Expiration gaat over de geldigheid van gegevens. Je kunt aan gegevens een bepaalde levensduur (time-to-live) meegeven. Wanneer deze levensduur is verstreken, zal Velocity de gegevens verwijderen uit de cache.

Het verwijderen van items hangt nauw samen met eviction. Eviction is het verwijderen van cache items op basis van een Low en een High Watermark. Als je een cache aanmaakt, kun je een low en een high watermark als kaders opgeven. Deze watermarks zijn een soort barometers die bepalen wanneer Velocity moet gaan opruimen. De low watermark geeft aan bij welk geheugengebruik Velocity moet beginnen met opruimen van items waarvan de levensduur is verstreken. Als de high watermark is bereikt, dan gaat Velocity objecten opruimen ongeacht de levensduur. Bij deze laatste vorm van eviction verwijdert Velocity wel als eerste de objecten die het langst niet zijn gebruikt. Dit gaat op basis van het least-recently-used (LRU) algoritme.

Als je in je oplossing gebruik maakt van expiration en/of eviction, dan is het dus belangrijk om je bewust te zijn van het gedrag dat Velocity dan vertoont. Bij caching in zijn algemeenheid kun je er niet altijd van uitgaan dat gegevens ook daadwerkelijk beschikbaar zijn in de cache en je applicatie is ervoor verantwoordelijk dat ontbrekende gegevens worden aangevuld of ververst. Het Velocity team heeft wel toekomstplannen voor het automatisch aanvullen van de cache op het moment dat objecten niet (meer) in de cache zitten.

Hoe gebruik ik Velocity?

Grofweg zijn er twee manieren waarop je Velocity kunt inzetten in je applicatie: als een expliciete cache-aside en voor sessiemanagement in webscenario’s. In het eerste geval heb je een client API ter beschikking waarmee je objecten in de cache kunt stoppen of eruit kunt halen. Voor sessiemanagement heeft Velocity een provider. Als je Velocity wilt inzetten als sessionstate-provider, dan is het wel belangrijk de cache die je daarvoor gebruikt zodanig te configureren dat sessies niet zomaar verloren gaan. Denk daarbij aan het eerder beschreven eviction en expiration gedrag. Eviction zal moeten worden uitgeschakeld. Verder kan het handig zijn de standaard expiration van 10 minuten te verhogen naar bijvoorbeeld een half uur. Sessiegegevens zijn belangrijk, dus het aanzetten van de high availability eigenschap van Velocity is in dit geval ook een goed idee. Dit alles doe je via de PowerShell beheertool met de opdracht in listing 1.

Set-CacheConfig –CacheName MijnSessionCache
  –Eviction none –TTL 30 –Secondaries 1

Listing 1: Cache configureren voor session state via PowerShell beheertool

Bovenstaande opdracht schakelt eviction uit (“-Eviction none”), stelt de expiration periode in op 30 minuten (“-TTL 30”) en schakelt high availability in (“-Secondaries 1”).

Als je eviction uitschakelt, loop je wel de kans dat het geheugen volloopt, omdat objecten niet meer worden opgeruimd tenzij de houdbaarheid verloopt.

Om CTP2 te kunnen gebruiken moet je referenties maken naar twee DLL´s: CacheBaseLibrary.dll en ClientLibrary.dll. Deze vind je na installatie in %PROGRAMFILES%\Microsoft Distributed Cache\v1.0.

Listing 2 laat zien hoe je toegang krijgt tot de cache en welke methodes je onder andere kunt aanroepen om de data in de cache te manipuleren. In het eerste deel van de code wordt de cache-client geconfigureerd. De code geeft aan met welke cache-host hij communiceert, dat het een simple client is en dat de local cache ingeschakeld is. Je ziet dat hier expliciet de naam van een cache-host wordt opgegeven. Er is altijd één host die je als eerste aanspreekt om toegang te krijgen tot de cache, maar de Velocity infrastructuur zorgt ervoor dat je ook bij de andere hosts binnen het cluster uitkomt als dat nodig is.

//--------------------------
// Cache client configureren
//--------------------------

//We communiceren met 1 cache host
ServerEndPoint[] servers = new ServerEndPoint[1];

//Cache Host Details
//  Parameter 1 = host name
//  Parameter 2 = cache port number
//  Parameter 3 = cache service name
servers[0] = new ServerEndPoint("localhost",
  22233, "DistributedCacheService");

//Routing of Simple Client
// False = Simple Client (geen routing table)
// True = Routing Client
bool routingClient = false;

//Local cache of niet
// True = Wel local cache
// False = Geen local cache
bool localCache = true;

//Geen logging van cache exceptions
CacheFactory.DisableLogSinks();

//Configuratie meegeven aan CacheFactory constructor
myCacheFactory = new CacheFactory(servers,
  routingClient, localCache);

//Vraag de "default" cache op
myDefaultCache = myCacheFactory.GetCache("default");

//----------------
// Cache gebruiken
//----------------

//Maak een region aan in de cache
myDefaultCache.CreateRegion("DemoRegion", true);

//Zet objecten in DemoRegion, beiden met twee tags
//Widget is een class met DataContract en DataMember attributen
Tag[] tags = new Tag[] { new Tag("lifestyle"),
  new Tag("work") };
myDefaultCache.Add("DemoRegion", "key1",
  new Widget("Widget101"), tags);
myDefaultCache.Add("DemoRegion", "key2",
  new Widget("Widget102"), tags);

//Zoeken op tags
List<KeyValuePair<string, object>> results =
  myDefaultCache.GetAnyMatchingTag("DemoRegion",
    new Tag[] { new Tag("work") });

foreach (KeyValuePair<string, object> kv in results)
{
  Console.WriteLine(kv.Key + ": " +
    ((Widget)kv.Value).Name);
}

//Zet een waarde buiten een region
myDefaultCache.Add("key2", "Testwaarde2");

//Zet een waarde via indexer
myDefaultCache["key3"] = "Testwaarde3";

Listing 2: Gebruik van Velocity vanuit code

Je hoeft de cache-client niet altijd vanuit code te configureren. Dat kan ook in de App.config. Listing 3 geeft een voorbeeld van dezelfde configuratie als in het C# codevoorbeeld, maar nu in App.config.

<configuration>
  <configSections>
    <section name="dcacheClient"
       type="System.Data.Caching.DCacheClientSection,
         CacheBaseLibrary"
       allowLocation="true"
       allowDefinition="Everywhere"/>
  </configSections>

  <!-- Simple client -->
  <dcacheClient deployment="simple">
    <!-- Local cache staat aan -->
    <localCache isEnabled="true"
       sync="TTLBased"
       ttlValue="300" />
      <hosts>
        <!-- Cache host configuratie -->
        <host name="localhost"
          cachePort="22233"
          cacheHostName="DistributedCacheService"/>
    </hosts>
  </dcacheClient>

</configuration>

Listing 3: Configuratie van Velocity in App.config

De eigenschappen van Velocity, zoals het schaalbaar, gedistribueerd en highly available zijn, hebben ook voordelen in webapplicaties die draaien in grote webfarms. In ASP.NET heb je voor sessiemanagement de keuze uit in-process, SQL Server of een State Server. ASP.NET gebruikt daarvoor een provider model, waardoor je gemakkelijk kunt wisselen zonder de applicatie te hoeven aanpassen. SQL Server en State Server zijn de opties die je overweegt wanneer je applicatie flink is opgeschaald en draait op meerdere webservers, zeker als je geen sticky routing toepast. Bij sticky routing wordt dezelfde gebruiker voor ieder request telkens door dezelfde web server bediend.

Nu we de kracht van Velocity kennen, zou het handig zijn ook meteen hier het sessie-management te beleggen. Dat kan, want Microsoft levert een ASP.NET sessionstate-provider op basis van Velocity. Listing 4 toont hoe je deze kunt configureren.

<!-- Overige configuratie weggelaten voor duidelijkheid -->
  <sessionState mode="Custom" customProvider="Velocity">
    <providers>
      <add
        name="Velocity"
        type="System.Data.Caching.SessionStoreProvider"
        cacheName="MijnSessionCache"/>
    </providers>
  </sessionState>

Listing 4: Configuratie van session state provider op basis van Velocity

Afwegingen voor configuratie

Velocity kun je in verschillende configuraties toepassen. Welk scenario past nu het best bij datgene wat je wilt bereiken? Tabel 1 geeft een overzicht van de effecten die een bepaalde configuratie met zich meebrengt.

Configuratie Effect
  Positief Negatief
High availability Hogere garantie dat gegevens beschikbaar zijn en blijven, ook bij uitval van een host. Negatief effect op performance doordat Velocity kopieën van gegevens op meerdere hosts moet bijhouden.
Gepartitioneerde cache Betere performance doordat gegevens worden verdeeld over het cluster en daardoor ook de belasting van de cache hosts. Hierdoor ook een grotere scale. Als een cache host uitvalt, verlies je die gegevens. Deze moeten dan opnieuw in de cache worden gezet.
Local cache Hoge performance doordat local cache binnen de applicatie draait en objecten niet hoeven te worden geserialiseerd/gedeserialiseerd. Kleine overhead door fallback mechanisme.
De applicatie verbruikt meer geheugen.

Tabel 1: Verschillende configuraties en hun effecten

De configuraties in tabel 1 kunnen worden gecombineerd. Je kunt dus een gepartitioneerde cache maken die highly available is. Het verlies aan performance door high availability te gebruiken kun je compenseren door een local cache toe te passen.

Een kijkje in de toekomst

De CTP’s tonen al een aardig werkend product. Maar er zijn nog zaken waar het team aan werkt. Naast het continu verbeteren van de schaalbaarheid en snelheid wordt gekeken naar betere manieren om de cache te monitoren voor diagnose van problemen. Verder staan voor versie 1.0 de volgende zaken op de planning:

  1. Notificaties vanuit de cache bij wijzigingen in objecten, zodat clients hierop kunnen anticiperen;
  2. Beveiligde toegang tot named caches;
  3. Bulk operaties met meerdere objecten;
  4. Read thru/write behind ondersteuning.

De read thru/write behind ondersteuning is er één die een beetje tegen de cache-aside filosofie indruist. Read thru betekent dat de cache automatisch terugvalt op een back-end service of database wanneer een object niet kan worden gevonden in de cache. Write behind houdt in dat Velocity een wijziging in een item in de cache (asynchroon) doorstuurt naar de back-end. Hiermee wordt Velocity meer dan een cache-aside, namelijk de spil tussen applicatie en gegevensbronnen. Persoonlijk ben ik benieuwd naar de manier waarop Microsoft dit gaat oplossen. Ik denk dat een uniforme toegang tot gegevens hiervoor noodzakelijk is, dus ik verwacht rechtstreekse koppelingen met SQL Server tabellen of REST style interfaces zoals als die van ADO.NET Data Services.

Op de roadmap staan verder nog zaken als het ondersteunen van LINQ queries op de cache en Velocity in the cloud. Deze zaken zullen waarschijnlijk na versie 1.0 aan Velocity worden toegevoegd. Op deze manier is Microsoft bezig om technologieën, die op zichzelf al nuttig zijn, op een slimme manier te combineren.

Conclusie

In een gedistribueerde applicatie, waar gegevens uit meerdere heterogene bronnen afkomstig zijn, is caching bijna onmisbaar. Het zorgt voor snellere toegang tot data, betere beschikbaarheid en grotere schaalbaarheid. Er zijn meerdere oplossingen op de markt maar Velocity is een veelbelovende nieuwe speler. Het is gratis beschikbaar komen als losse release naast het .NET framework.

Velocity is veelzijdig doordat het in uiteenlopende scenario’s inzetbaar is, van een in-process cache tot volledig gedistribueerd en highly available en zelfs als session state provider voor ASP.NET.

Referenties

Commentaar van anderen:
Lars op 10-1-2010 om 14:23
Perfect artikel - onwijs bedankt hiervoor!!!!
bags op 9-7-2010 om 9:02
You get different types of Chanel handbags and Fake handbag product like Replica Chloe handbags, Fake Watches Bvgari,Coach handbags.We specialized in selling replica Chloe handbags of Designer Name fashion replica Coach handbags,such as : Louis Vuitton handbags,designer watches,Coach Handbag,Chanel Handbag Click here to go to replica Maurice Lacroix.High quality Fendi Juicy Corture handbags on sale with the lowest price and great discount, cheap replica Juicy Corture at wholesale price Marc Jacob replica handbags offer.We are reliable provider Rado watches dedicating to offering our customers high qualiyh Marni replica handbags and replica handbags online. Among our wide product line that Rolex watches.Specialize in Tag Heuer watches including Discount Hermes Handbags.
replica handbags op 16-7-2010 om 9:35
Having fallenDesigner Handbags in love with horological complicationsbally handbags, de Grisogono has added a new balenciaga replica handbagscomplication to its model collection - the replica Hermesannual calendar. This remarkable swiss watchescomplication is featured by the brand'sreplica omega new Instrumento Novantatre paul smith men's bagdesign.The dial of the timepiece handbags todscatches attention due to the oddlyceline bags placed pair of dial openingsA.Lange & Sohne for sale. These small arc-shaped windows are Tag Heuer for saleplaced at 12 and 8 o'clockcroum for sale, displaying the date and the monthchopard for sale. The hours and minutes are shown by a pair of hands. The seconds hand is featured on a separateA.Lange & Sohne for salesub-dial found at 5 o'clock. The latest timekeeping Rado for salecreation from de Grisogonogucci handbags has incorporated a complicated movement. Thereplica handbags Instrumento Novantatre's self-winding mechanical chanel handbagsmovement automatically takesTag Heuer for sale account of the irregular length of 30-day and replica hermes handbags31-day months.
Tiffany jewelry op 6-8-2010 om 4:15
Tiffany jewelry manufacturers directory,cheap jewelry - lots of registered importers and exporters. Cheap tiffany jewelry manufacturers, Tiffany & co jewelry suppliers, tiffany jewelry wholesales, Tiffany Watches,exporters, sellers, traders and gold tiffany jewelry Distributors from China and around the world at www.goldtiffanyjewelry.com Tiffany jewelry exporters, Tiffany Accessories, Tiffany Bangles, Tiffany Bracelet, Discont Tiffany Bracelet, Discount Tiffany Cufflinks, Fashion Tiffany Earring, Tiffany Necklaces , Discount Tiffany Necklaces, Tiffany Rings, Tiffany Watches
ghdivstyler op 7-8-2010 om 9:06
http://www.google.com.hk/search?q=%22Geef+feedback%22+site:www.sdn.nl&hl=zh-CN&newwindow=1&safe=strict&ei=sARdTMy5BYu4uQOQ8pyaDA&start=240&sa=N
752823 op 13-8-2010 om 11:05
Louis Vuitton Insolite Wallet M66563 On Sale Louis Vuitton Wallet Louis Vuitton Porte Tresor International Damier N61215 On Sale Louis Vuitton Pochette Cles - Yellow M60033 On Sale Louis Vuitton Monceau M51185 On Sale Cheap Louis Vuitton Monogram Jokes Bags Cheap Louis Vuitton Louis Vuitton Bags Louis Vuitton Graduate M95739 On Sale Louis Vuitton Cosmestic Pouch Bleu Galactic M93650 On Sale Louis Vuitton Heartbreak M95740 On Sale Louis Vuitton Speedy 40 M41522 On Sale Louis Vuitton Wallet Louis Vuitton Speedy Louis Vuitton Diaper Bag Louis Vuitton Bags Louis Vuitton Replica Louis Vuitton Shoes Louis Vuitton Shoes Replica Louis Vuitton Scarf Replica Louis Vuitton Shoes for Men Louis Vuitton Shoes 2010 Louis Vuitton Bags Wholesale Louis Vuitton Belts for Men Louis Vuitton Bags for Sale Louis Vuitton Belt Louis Vuitton Mancrazy M95737 RED On Sale Louis Vuitton Beverly XXL M40119 On Sale Louis Vuitton Houston M91122 PEARL On Sale Louis Vuitton Weekender PM M95734 On Sale Louis Vuitton Flat Pouch M95007 On Sale Cheap Louis Vuitton Monogram Leopard Bags Cheap Louis Vuitton Louis Vuitton Bags Louis Vuitton Wallet Louis Vuitton Adele M95284 On Sale Louis Vuitton Stephen M95281 On Sale Louis Vuitton Tikal PM M40078 On Sale Louis Vuitton Shoes on Sale Louis Vuitton Bags Replica Louis Vuitton Wallets for Men Louis Vuitton red bottom shoes Louis Vuitton Diaper Bag Blue Louis Vuitton Sunglasses Millionaire Louis Vuitton replica belt Louis Vuitton replica scarf Louis Vuitton Speedy Cube Louis Vuitton Replica Sunglasses Louis Vuitton Sunglasses Cheap Louis Vuitton Sunglasses for sale Louis Vuitton Sunglasses Louis Vuitton Sunglass Case Louis Vuitton Shoes with the Red Bottom Louis Vuitton Shoes Kanye West Cheap Louis Vuitton Louis Vuitton Polly M95282 On Sale Louis Vuitton Alma M51130 On Sale Cheap Louis Vuitton Monogram Mini Lin Bags Cheap Louis Vuitton Louis Vuitton Bags Louis Vuitton Manon Mini Pouch M95668 On Sale Louis Vuitton Jasmin M5208H ORANGE On Sale Louis Vuitton Manon MM M95619 On Sale Louis Vuitton Keepall 50 M41416 On Sale Louis Vuitton Speedy 30 M95224 On Sale Louis Vuitton Lockit MM M91875 GOLD On Sale Louis Vuitton Diaper Bag Black M95221 On Sale Louis Vuitton Marelle Sac Dos M51158 On Sale Louis Vuitton Rift - Black M40056 On Sale Louis Vuitton Speedy 30- Dune M95319 On Sale
replicaHandbags op 14-8-2010 om 9:02
Christian Louboutin Shoes, Christian Louboutin, Christian Louboutin Shoes, Wedding Shoes, Christian Louboutin Copyright 2010, Chemicals Chemistry via VerticalNews. Christian Louboutin Shoes, Wedding Shoes Pattinson great actorly virtue is that he wears clothes well, so it too bad he slackered-out in cargo pants here. Christian Louboutin, Christian Louboutin Shoes, Wedding Shoes, Discount Christian Louboutin, Manolo Blahnik Shoes Tyler is less revealed than telegraphed through accessories a dead brother depth, a pack-a-day habit angst, a bookstore job smart, Discount Christian Louboutin, Louboutin, Christian Louboutin Sale, Louboutin Shoes, Sale Christian Louboutin Rodita zip sandals New style Black 14 a rich, aloof, and permanently disappointed daddy Pierce Brosnan. Louboutin Sale, Herve Leger Bandage Dress, Herve Leger Dress, Herve Leger V Neck Dress, Herve Leger Bandage Dress Falling for You Love, angst, and something else is in the air in Remember Me Remember Me Herve Leger Dress, Chanel Shoes, Yves Saint Laurent Shoes, Manolo Blahnik Shoes Platform Cage Sandal 13 by Allen Coulter Summit Entertainment Opens March 12 Putatively a new romance starring Robert Pattinson, Remember Me begins like a vigilante movie Alexander Wang Shoes, Louboutin Shoes, Louboutin Sale, Louboutin, Christian Louboutin Sale, Buy Christian Louboutin A Brooklyn subway platform, a racially charged stickup girl watches her mother get shot. Christian, Christian Louboutin Discount, Christian Dior Shoes, Christian Louboutin Pumps Pattinson great actorly virtue is that he wears clothes well, so it too bad he slackered-out in cargo pants here.
BAG-a op 19-8-2010 om 5:36

If MBT Sandals you are taking more measures to solve, you will discove MBT shoes, you have r free delivery service less pain. MBT Shoes also leads to increased blood circulation, very long time MBT Sale wear shoes. Sports can help you Mbt in your body, it may reduce tension or intonation, MBT Lami Shoes knee and legament walk also plays a very important role and feet, legs, in many places the muscles.In other words, MBT Outlet is very suitable for medical physiology sneakers. Not only is comfortable, fashion, pay attention to the following ways MBT Footwear chocolate women fashion. Its circular design is the modern classical and elegant represent another success!Perforated mbt sport shoes insole provides additional cushioning with antibacterial treatment to reduce odor. MBT TEMBEA Shoes TPU and glass fiber shank to add firmness only construction, but also MBT Shoes UK ensures a natural rolling movement of the feet, and even weight distribution. PU midsole with pivot is the end of metatarsus requires MBT Voi an active rolling step by step, part of the movement balance. MBT Fumba Sandals will activate a stable throughout the entire body when standing or walking more than muscle.The right for the process of the MBT Shoes Outlet motherland, for the national identity, dignity, MBT Habari Sandalsimperceptibly growing. From the French MBT Sport Shoes be found on the website, MBT Tataga Shoesthe beautiful city of the organization and orderly procession there are many details in advance. This paper discusses whether the two processions take mbt changa sale. This MBT Voi is a truly unique design of interest, muscle fatigue, the negative impact from the MBT Panda Sandals, whole body shoes, slippers Mbt results of many years of research into their structure and design. The world's only model MBT Chapa Shoes rocker very successful results.P90X DVD P90X Workout Cheap P90X DVD Vibram Five Fingers Cheap Nike Hyperize Vibram Five Fingers Nike Zoom BB low MBT Tariki Shoes MBT Unono SandalsMBT give them a test driver and couldn't believe they are comfortable!MBT Sapatu Sandals is really like walking in the cloud, I just feel no common influence. A few months later, I feel much better. I can't say for sure, help me all the MBT Chapa back off, but I'm sure they do. MBT Fumba Sandals At least, they are by far the most comfortable MBT Shuguli GTX Shoes I have, and because of this, I think they are your money,MBT Imara Sandals I paid the money.

Air Jordans op 19-8-2010 om 5:40

NIKE in the Jordan Shoes, based on the use of a new color,Cheap Air Jordans and this color had been subjected to NBA's banned, that is, "black and red". AIR JORDAN 1, the first-generation design of Cheap Air Jordan Shoes the shoes Dunk, Terminator, Air Force 1 designed with features. Air Jordans is not only the history of the founding of Air Jordan Shoes series siege, shoes themselves become a permanent classic.Looking as fresh as they did a year ago comes from the re-edition of the Nike Air Trainer Max 91, the last signature of Air Jordan retro shoes worn by Bo Jackson. Taking cues from its past, the Air Max 91 Trainer is back in one of its original color combinations Graystone / Medium-Yellow-Black.Air Jordan Fusion 7 If you did not get their hands on the original in its day, and lost in the limited edition some years ago, now is the time to bring this classic Nike Trainer. The ticket price is set at $ 100 and considering the Air Yeezy Shoes fact that we have seen older (used) versions sell about $ 200 before, you can not argue with the price. This was by far one of the most popular color schemes of the Nike Air Trainer Max 91, however, Nike also plans to Supra Skytop Shoes launch the Black / White version in the coming months for those who prefer the darker.World Cup is over, but the passion is still Pullman that People’s desire for movement is still exciting. Can better reflect the movement perfect, people generally choose a pair of shoes for his Jordan. Jordan is a ball field star,Air Jordans 2010 superstar, famous brands of sport shoes to Jordan the world. The arena is not only the strength of Jordan, Supra Footwear or their quality, are determined by the people’s trust! Some fashion fans,Air Jordan 23 Shoes like the cool feeling, I saw a pair of shoes on our site, pretty cool. That looks so good, it was Air Jordan 8 white gray red. Air Jordan 1 Shoes Really cool, do not believe you look! The first one is Air Jordan 2010 White Varsity Red black. Since the Air Yeezy For Sale already available on select retailers, we now share more detail information regarding new Air Jordan 2010. We now know that the official color-way reads Black/Dark Charcoal-Varsity Red, and this sneaker will be released in June 2010. The upper of the footwear is coated in black leather and suede, while hints of dark charcoal are seen throughout. The Nike Air Yeezy Shoes will release in June for a reasonable price of $89. Will you going to purchase a pair?
The second product is Supra Shoes. We'e brought you a couple of looks at Air Jordan Accolades, a silhouette that is becoming one of the most anticipated team Jordan models of 2010 immediately. The Black/Black-Red and White/Black-Cement Grey pairs of the Air Jordan 4 Shoes released in April attract too much attention from the public. Also, a previously unreported on Black/Red-White Supra TK Society will appear on Air Jordan shelves of the coming June this year.

Asics Shoes Cheap Asics Shoes Asics Whizzer Lo Onitsuka Mid Runner Onitsuka Tokidoki Mex lo Asics Gel Kinsei 2 Asics Gel Lyte III Asics Gel-Stratus 2.1 Asics Running Shoes

Onitsuka Tiger Mexico 66 Onitsuka Tiger Mini Cooper Onitsuka Tiger Olympos Puma Shoes Puma Sneakers Cheap Puma Shoes Puma Speed Cat Puma SF Drift Cat Puma 2010 Sport Shoes

Puma Repli Cat Puma Future Cat Low Puma Speed Cat Big Puma Speed Cat Suede Puma ENGINE Cat Low Puma Basket Brights PUMA SPEED CAT BIG Puma SF Trionfo Low Puma TRIONFO LO L II

Puma Trionfo Low BAYLEE PUMA Lazy insect Puma FUTURE CAT LO ENGINE PUMA BAYLEE FUTURE CAT II Nike Air Max 2010 Cheap Nike Air Max Nike

Air Max On Sale Nike Air Max 87 Nike Air Max 180 Nike Air Max 2003 Nike Air Max 2009 Nike Air Max 360 Nike Air Max 89 Nike Air Max 97 Nike Air Max 95

Air Max Shoes Nike Air Max Ltd Nike Air Max TN Nike Air Max Skyline nike sb dunk nike dunks nike dunk sb shoes nike dunk shoes Air Force 1

Cheap Nike Air Force 1 Nike Air Force 1 Shoes Nike Shox Shoes Nike Shox NZ Nike Shox OZ Nike Shox R3 Nike Shox R4 Nike Shox R4 Torch Nike Shox TL1 Nike Shox Turb

Air Jordan 3 Shoes Air Jordan 1 Shoes Air Jordan 4 Shoes Air Jordan 5 Shoes Air Jordan 6 Shoes Air Jordan 8 Shoes Air Jordan 9 Shoes Air Jordan 10 Shoes Air Jordan 11 Shoes

Air Jordan 12 Shoes Air Jordan 13 Shoes Air Jordan 14 Shoes Air Jordan 17 Shoes Air Jordan 18 Shoes Air Jordan 19 Shoes Air Jordan 23 Shoes Air Jordan 24 New Shoes

Administrator op 21-8-2010 om 9:48
The Waltham replica watches Company timepieces are really appreciated by replica burberry watches collectors and connoisseurs as they were without a doubt produced by the most important American replica bvlgari watches company. It became the first company that organized mass production of replica Cartier watches in the U.S. and many collectors can not help admiring the way they look!The Company's HistoryThe history of the company started in 1850 when Edward Howard, David Davis and Aaron Dennison met in Roxbury, Massachusetts, and joined their efforts to start their own replica Chopard watches company. They established the "American Horologe Company" in 1851 and 17 archetype replica Concord watches were launched in 1852 with "Howard, Davis & Dennison" engraving on the movements. The company was then named the "Warren Mfg. Co." after a renowned Revolutionary War hero, and the next replica DeWitt watches featured the name "Warren" on their movements. In 1853 the name was once again officially changed to the "Boston replica Ebel watches Company" and in 1854 the founders based a factory in Waltham, Massachusetts. The factory employed a lot of Yankee Protestants offering higher wages and skilled work. Its management possessed enough knowledge about replica Ferrari watches but lacked experience at operating with money, and three years later the replica Franck Muller watches Company failed and was purchased by Royal Robbins that transformed the company into the "Appleton, Tracy & Co." In 1859 its fusion with the company called the Waltham Improvement Company resulted in the appearance of "The replica Glashutte watches Company" that was soon renamed into "The replica Gucci watches Company." A job with the replica Graham watches Company was in high demand. Its market success was provided by the fact that it became the first replica Hublot watches manufacturer that launched the production of replica Hermes watches on assembly lines rather than the traditional artisan style of replica Jaquet droz watches. Beforte the Civil War, Waltham presented the largest replica Louis Vuitton watches manufacturer in the United States. In 1891 in Cleveland, Ohio, two trains collided because a replica Maurice Lacroix watches of one of the engineers stopped. Following the disaster, the railroads were given a set of universal precision time keeping standards introduced in 1893. The American replica Montblanc watches industry started developing a special category of railroad replica Movado watches among which the Waltam replica Oris watches enjoyed real appreciation. Their success helped Waltham begin the export of its timepieces, especially of fine replica Patek Philippe watches in “hunter” style to Great Britain.In 1957 with the great demand of cheap mass produced replica Piaget watches , the company changed its name to the Waltham Precision Instrument Company that finally completed its activity in 1973. The Waltham replica rado watches About 40 million Waltham replica Tudor watches were produced through the company's long history. Among them there were medium grade replica Vacheron Constantin watches that satisfied the needs of the existing markets, but Waltham also developed replica tiffany jewelry watches of superior quality. They engaged themselves into producing a wide variety of rolex replica comprising replica Watch Accessories watches, chronographs, repeating omega replica and deck U-boat replica, as well as jeweled IWC replica, clocks, speedometers, compasses, time fuses for bombs and other precision instruments. Early Waltham Panerai replica with low serial numbers have been particularly appreciated by many collectors. Waltham's "hunter" style pocket breitling replica are among the most desirable by collectors and longines replica lovers. Often produced in silver or gold and superbly engraved, the "hunter" style is preferred by both gentlemen and railroad men. While choosing a tag Heuer replica, try to find one featuring a serial number below 180,000 that possesses solid balances and a heavy silver case or one of the very underestimated "bell & Ross replica." Starting a collection might cost as little as few hundred dollars.
Cheap Jordan Shoes op 21-8-2010 om 11:25
zn2010-8-21 airjordanshoesbest focuses on all the different Air Jordan Shoes produced by Nike that have been realeased starting in 1985 to the present. There are various Nike Air Jordan Shoes are available for you now. They are an absolute must, they're cozy and fashionable. And these jordan sneakers are the perfect partner for your favorite jeans. So, beautiful and fashionable girls and boys, come to our website and buy a pair of authentic Air Jordan 2010, Air Jordan 1 or Air Jordan 5, you will find this new companion can content you. When you buy Cheap Jordan Shoes here you will find it's worthwhile.
NHN op 24-8-2010 om 4:44
LRH20100824

There are many men to choose Cheap Lacoste Shoes for his fame and service which is famous with the world people.Countries' leaders like to wear Locaste Shoes.On 4th of August, Western media quoted the Lebanese and Arab Mens Lacoste Shoes TV stations reported that Iran - President Mahmoud Ahmadinejad's team that day was in Iran bomb attacks, several people were injured, Mahmoud Ahmadinejad, I survived.The leader wears the style shoe of 2010 Lacoste Shoes.

nike air max 90 op 24-8-2010 om 10:40
adidas shoes nike shoes on sale replica handbags charmorigin
Chanel Handbags op 24-8-2010 om 11:50
zn2010-08-24 weclome to the designer handbags outlet.our shop is sell all kind bags ,all of them are famous brand,they are Cheap Coach Handbags, burberry bags, Louis Vuitton bags , chole bags, Dolce Gabbana handbags, ed hardy bags,Designer Purses,fendi handbags, jimmy choo bags ,juicy couture bags, juicy couture handbags, Gucci Handbags,prada bags ,coach handbags. also,we are prove that all of them are good and beautiful,with many colour and different size.if you like our goods,you can pay them by paypal, credit cards, western union and we will ship to you within 48 by DHL ,EMS and UPS shipping ,just to buy what Paul Smith Bags you like,and let you to feel the different experience of you life.come on,choose our handbags online,choose the succeed. Perfectly imitated, of high quality, are our Paul Smith Clothing.From the beginning, ReplicasHandbag has a good concept of Chanel Handbags and was clear what exactly attract their clients's attention.
Geef feedback:

CAPTCHA image
Vul de bovenstaande code hieronder in
Verzend Commentaar