Microsoft codename: “velocity”<br />Juan Ladetto<br />DPE - Arquitecto<br />Microsoft Argentina<br />Dante Otero<br />MCS ...
Windows Server AppFabric&lt;caching/&gt;<br />Juan Ladetto<br />DPE - Arquitecto<br />Microsoft Argentina<br />Dante Otero...
Porqué?<br />App Tier<br />La base de datoses un recursolimitado<br />msdn, myspace, flickr, facebook, youtube, etc<br />C...
Siempretrabajamos con != datos<br />Referencia<br />Read*<br />Gralestáticos<br />Mucho tráfico<br />High Avail.<br />Acti...
Hay algunasoluciónparaesto?<br />Solución de caching que sea explícita, distríbuida, en memoriaparacualquiertipo de dato<b...
Veamoscómofunciona (velocity)<br />Share Data Across Applications<br />No more sticky routing<br />Scale out by adding mor...
Quédebemosanalizarparaelegircorrectamente<br />Performance<br />Rendimiento<br />Latencia<br />Consistency<br />Puedellega...
Escalarparticionando el cache<br />Application<br />La “routing table client” nos dice<br />Almacenar en el cache2 (primar...
Cómo se particiona?<br />ID Ranges mapped to Nodes<br />Region Name <br />Hashed into Region Id<br />Keys Bucketized into ...
Particionandohorizontalmente se lograincrementarescalabilidad y performance<br />Escalarpor el tamaño de los datos<br />Má...
Local Cache<br />El cache local puede ayudar a mejorar la velocidad de acceso desde los clientes<br />Utiliza mecanismos d...
Availability<br />La “routing table client” nos dice<br />Almacenar en el cache2 (primario)<br />Application<br />PUT<br /...
Almacenalocalmente
Propagaoperación a otrosnodossecundarios
Espera a tener quorum (se replicocomomínimo 1 vez)
Devuelve control</li></ul>Velocity Client1<br />Velocity Client<br />Routing Table<br />Routing Table<br />Cache1<br />Cac...
Cache4<br />Partition Manager<br />Primary for <br />(K4,V4)<br />Global Partition Map<br />K4, V4<br />Secondary for <br ...
Optimistic Version Based Updates<br />GetCacheItemdevuelve el valor del objeto<br />Cadaactualización del objetoincrementa...
Pessimistic Locking<br />GetAndLock – devuelve un objeto y lo lockea<br />Otrasllamadas con GetAndLockfallarán (not block)...
Velocity API<br />// Create instance of cachefactory (reads appconfig)<br />DataCacheFactoryfac = new DataCacheFactory();<...
Access APIs – Tagging Items<br />Hot or Discount Items in catalog<br />Use Tagging<br />List All Items / Hot Items - Enume...
BETA Features<br />Seguridad<br />Authentication y Authorization<br />Configuración<br />GPM Rebuild for network share <br...
Upcoming SlideShare
Loading in …5
×

[Run Reloaded] Estrategias de Caching Distribuído con Microsoft Velocity Project (Juan Ladetto + Dante Otero)

654 views
599 views

Published on

[Run Reloaded] Estrategias de Caching Distribuído con Microsoft Velocity Project (Juan Ladetto + Dante Otero)

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
654
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • 37 signals memcachedOracle – coherenceMicrosoft VelocityEtc…
  • [Run Reloaded] Estrategias de Caching Distribuído con Microsoft Velocity Project (Juan Ladetto + Dante Otero)

    1. 1.
    2. 2. Microsoft codename: “velocity”<br />Juan Ladetto<br />DPE - Arquitecto<br />Microsoft Argentina<br />Dante Otero<br />MCS - Consultor<br />Microsoft Argentina<br />
    3. 3. Windows Server AppFabric&lt;caching/&gt;<br />Juan Ladetto<br />DPE - Arquitecto<br />Microsoft Argentina<br />Dante Otero<br />MCS - Consultor<br />Microsoft Argentina<br />
    4. 4. Porqué?<br />App Tier<br />La base de datoses un recursolimitado<br />msdn, myspace, flickr, facebook, youtube, etc<br />Cache Tier<br />Cloud<br />Data Tier<br />Base de datos<br />
    5. 5. Siempretrabajamos con != datos<br />Referencia<br />Read*<br />Gralestáticos<br />Mucho tráfico<br />High Avail.<br />Actividad<br />Read/Write<br />Cambia frec<br />User-specific<br />High-Scale<br />Recursos<br />Read/Write<br />Cambia frec<br />Application-Wide<br />High-Scale<br />Ejemplos:<br />Session<br />Shopping Cart <br />item<br />Ejemplo:<br />Inventario<br />Ejemplos:<br />Países<br />Catálogos<br />Categorías<br />etc<br />
    6. 6. Hay algunasoluciónparaesto?<br />Solución de caching que sea explícita, distríbuida, en memoriaparacualquiertipo de dato<br />Unified Cache View<br />
    7. 7. Veamoscómofunciona (velocity)<br />Share Data Across Applications<br />No more sticky routing<br />Scale out by adding more boxes<br />Performance (Quad Core Box)<br />Velocity<br />High Availability<br /> Protect from Server Failure<br />
    8. 8. Quédebemosanalizarparaelegircorrectamente<br />Performance<br />Rendimiento<br />Latencia<br />Consistency<br />Puedellegar a ser dirty? Porcuántotiempo?<br />Eviction<br />La informaciónque no sirveesdesalojada?<br />Security<br />Availability<br />Quépasa con la informaciónsi un nodo se rompe?<br />
    9. 9. Escalarparticionando el cache<br />Application<br />La “routing table client” nos dice<br />Almacenar en el cache2 (primario)<br />PUT<br />Get(K2)<br />Velocity Client1<br />Velocity Client2<br />Routing Table<br />Routing Table<br />Cache2<br />Cache3<br />Cache1<br />Routing Table<br />Routing Table<br />Routing Table<br />Primary for K1,V1<br />Primary for<br />K2,V2<br />Primary for K3,V3<br />(K2, V2)<br />K2, V2<br />K1, V1<br />K3, V3<br />K2, V2<br />Cola de operacionesparanotificaciones, new secondary, etc<br />
    10. 10. Cómo se particiona?<br />ID Ranges mapped to Nodes<br />Region Name <br />Hashed into Region Id<br />Keys Bucketized into Regions<br />Velocity Service<br />Velocity Service<br />Velocity Service<br />
    11. 11. Particionandohorizontalmente se lograincrementarescalabilidad y performance<br />Escalarpor el tamaño de los datos<br />Másmáquinas =&gt; másmemoriaparacachear<br />Escalarparatenermejorrendimiento<br />Cache Throughput: operaciones/segdesde el cache<br />Másmáquinas =&gt; keys distribuidos<br />Másmáquinas =&gt; mejorrendimiento<br />Performance<br />High Performance escalandohorizontalmentedatos y procesamiento (a tener en cuenta…)<br />Aumentar la memoria<br />Incrementar el procesamiento<br />Distribuir el procesamientopor los nodos del cache<br />
    12. 12. Local Cache<br />El cache local puede ayudar a mejorar la velocidad de acceso desde los clientes<br />Utiliza mecanismos de notificación para refrescar el cache cuando se produce un cambio<br />Get(K2)<br />Put(K2, v2)<br />Get(K2)<br />Velocity Client<br />Velocity Client<br />Local Cache<br />Local Cache<br />Routing Table<br />Routing Table<br />Cache2<br />Cache3<br />Cache1<br />K2, V2<br />K2, V2<br />Primary for K1,V1<br />Primary for K3,V3<br />Primary for K2,V2<br />K1, V1<br />K3, V3<br />
    13. 13. Availability<br />La “routing table client” nos dice<br />Almacenar en el cache2 (primario)<br />Application<br />PUT<br />Get(K2)<br /><ul><li> pone en cola la petición
    14. 14. Almacenalocalmente
    15. 15. Propagaoperación a otrosnodossecundarios
    16. 16. Espera a tener quorum (se replicocomomínimo 1 vez)
    17. 17. Devuelve control</li></ul>Velocity Client1<br />Velocity Client<br />Routing Table<br />Routing Table<br />Cache1<br />Cache2<br />Cache3<br />Primary for (K1,V1)<br />Primary for (K3,V3)<br />Primary for (K2,V2)<br />Replication Agent<br />K3, V3<br />K1, V1<br />K2, V2<br />(K2, V2)<br />K2, V2<br />K2, V2<br />Secondary for (K1,V1), (K2,V2)<br />Secondary for (K1,V1), (K3,V3)<br />Secondary for (K2,V2), (K3,V3)<br />K2, V2<br />K1, V1<br />K3, V3<br />K1, V1<br />K3, V3<br />
    18. 18. Cache4<br />Partition Manager<br />Primary for <br />(K4,V4)<br />Global Partition Map<br />K4, V4<br />Secondary for <br />K1, V1<br />Cache1<br />Cache2<br />Cache3<br />Primary for (K2,V2)<br />Failover<br />PM analiza la información de los nodossecundarios de todas los keys quetenía Cache2 paraelegir el nuevoprimario<br />Elige Cache1 comoprimariopara (K2,V2). Envíamensaje a los nodossecundarios Cache1 y Cache3. actualiza GPM<br />Detectalasfalla de Cache y notifica a PM (on Cache4)<br />Cache1 polls los secundarios de (Cache2) paraasegurarse de quetiene la últimainformación; casocontrario no toma ownership<br />Cache1 inicializaconfiguración. Después de reconfigurar Cache1 es el primariopara (K1, V1) y (K2, V2)<br />Routing Table<br />Reconfiguration<br />Agent<br />K1, V1<br />Primary for (K3,V3)<br />Replication Agent<br />K3, V3<br />K2, V2<br />Local Partition Map<br />K3, V3<br />K2, V2<br />Secondary for <br />Secondary for <br />Secondary for <br />K2, V2<br />K1, V1<br />K3, V3<br />K3, V3<br />K4, V4<br />
    19. 19. Optimistic Version Based Updates<br />GetCacheItemdevuelve el valor del objeto<br />Cadaactualización del objetoincrementasuversión<br />Envía la versiónobtenida en cada Put/Remove<br />Put/Remove serásatisfactoriounicamentesi la versiónenviadamatchea con la versión del cache<br />2 clientesacceden al mismo item<br />Ambos modifican el item<br />El segundoactualiza el cache; operaciónsatisfactoriadebido a quecoincidenlasversiones; se incrementaversión en el cache<br />El primer clienteintentaguardar;<br />Falladebido a que la versión no coincide.<br />
    20. 20. Pessimistic Locking<br />GetAndLock – devuelve un objeto y lo lockea<br />Otrasllamadas con GetAndLockfallarán (not block)<br />Lock Expiry time haceque el lock expire<br />Regular Get no lo bloquearán<br />Regular Put reescribirán el lock<br />PutAndUnlock – pone un nuevoobjeto y lo desbloquea<br />UnLock – desbloqueaexplicitamente el objeto<br />Client1: <br />GetAndLock (&quot;k1&quot;)<br />Client3:<br /> Get (&quot;k1&quot;)<br />Client2:<br /> GetAndLock (&quot;k1&quot;)<br />GetAndLock gets lock handle<br />Regular Get succeeds<br /> Other GetAndLock on same item fails<br />
    21. 21. Velocity API<br />// Create instance of cachefactory (reads appconfig)<br />DataCacheFactoryfac = new DataCacheFactory();<br />// Get a named cache from the factory<br />Cache catalog = fac.GetCache(&quot;catalogcache&quot;);<br />// Simple Get/Put<br />catalog.Put(&quot;toy-101&quot;, new Toy(&quot;Puzzle&quot;, .,.));<br />// From the same or a different client<br />Toy toyObj = (Toy)catalog.Get(&quot;toy-101&quot;);<br />// Region based Get/Put<br />catalog.CreateRegion(&quot;toyRegion&quot;);<br />// Both toy and toyparts are put in the same region <br />catalog.Put(&quot;toyRegion&quot;, &quot;toy-101&quot;, new Toy( .,.));<br />Catalog.Put(&quot;toyRegion&quot;, &quot;toypart-100&quot;, new ToyParts(…));<br />Toy toyObj = (Toy)catalog.Get(&quot;toyRegion&quot;, &quot;toy-101&quot;);<br />
    22. 22. Access APIs – Tagging Items<br />Hot or Discount Items in catalog<br />Use Tagging<br />List All Items / Hot Items - Enumeration<br />Use Enumeration<br />// Add Tags<br />Tag hotItem = new Tag(&quot;hotItem&quot;);<br />Tag discItem = new Tag(&quot;discountItem&quot;);<br />catalog.Put(&quot;toyRegion&quot;, &quot;toy-101&quot;, new Toy(&quot;Puzzle&quot;), <br /> new Tag[]{hotItem});<br />catalog.Put(&quot;toyRegion&quot;, &quot;toy-102&quot;, new Toy(&quot;Bridge&quot;), <br /> new Tag[]{hotItem,discItem});<br />// From the same or a different client<br />List&lt;KeyValuePair&lt;string, object&gt;&gt; toys = <br />catalog.GetAnyMatchingTag(&quot;toyRegion&quot;, hotItem);<br />
    23. 23. BETA Features<br />Seguridad<br />Authentication y Authorization<br />Configuración<br />GPM Rebuild for network share <br />obviates need for SQL compact file to store partition distribution information<br />ADO.Net provider for config store<br />Administración<br />Perfmon counters<br />Live Cluster Patching & Version Compatibility<br />
    24. 24. Ya se está usando?<br />
    25. 25. Demo<br />
    26. 26. ¿Preguntas?<br />
    27. 27.
    28. 28. Release Plan<br />

    ×