在过去几年里,从主流的 Java 应用到象 Erlang 这样的边缘语言,分布式内存缓存的应用相当流行。为了继续疯狂赶超开源世界中处于支配地位的技术,微软也引入了它的分布式缓存。
Velocity 是专门针对.NET 平台设计的分布式缓存。那些熟悉其他分布式内存缓存的人们会在其中发现许多相似的特性。它目前作为社区技术预览对外提供下载。
Velocity 的客户端有两类。简单客户端只知晓一个单缓存服务器。如果在那个服务器上没有找到被请求的对象,那么缓存服务器会从合适的服务器上将它取来。路由客户端(Routing client)则对其了解更深一些。它们总是知道在哪里可以找到哪个特殊的对象,因此它可以直接查询缓存服务器。关于发送所有缓存位置数据给路由客户端(Routing client)对性能造成的影响,尚未有所定论。除了缓存服务器,两类客户端都支持一个本地缓存选项。对于过期数据,该选项仍然要求去检查服务器。但是在处理大量缓存对象时,它应该能减少网络流量。
关于并发性有两个选项。使用乐观并发,只有第一次更新才能成功,任何后续对现有过期对象的更新都将失败。使用悲观锁,一个锁句柄将会被返回。在锁释放或超时之前,任何获得锁的尝试都将失败。获得锁失败操作是一个非阻塞操作。
通过设置过期日期或每当内存压力过大时,对象可以从缓存中显式被移除。后一种方法,被称为驱逐(eviction),使用最近最少使用的算法来处理。
除了一个关键字,对象还可能有一组与之关联的标签。Velocity 提供了检索一个或全部与一个标签列表相匹配的对象的方法。
尽管支持 ASP.NET 的会话模型,但是那只是微软众多设想中的一个。 S Muralidhar 写道:
我们对 ASP.NET 的支持只是整个.NET 平台蓝图中的一部分。剩下的是确保我们不只把焦点单单放在 ASP.NET 应用上。作为例子,我们计划与普通.NET 应用(如 Windows 服务)或那些不涉及 ASP.NET 的 IIS 应用集成。
现在让我们看看即将到来的功能。目前的 CTP 版特性支持向外扩展(scale-out)、本地缓存,以及 ASP.Net SessionState 与许多其他应用的集成。我们有大量的工作项,它们有望在随后的 CTP 和 RTM 版中实现,包括:支持可用性、缓存复制、通知和更好地管理支持等。
我们已经从很多开发者那里听到对于推式通知(Push-based notification)的需求。这当然是我们非常关心的领域。尽管目前的 CTP 版还不支持它,但是这个需求有望在我们即将发布的版本中得到满足。在目前这个过渡时期,如果你使用 Velocity 的本地缓存,我们提供了一些绕过它的 API(如 GetIfVersionMismatch())来处理本地缓存中潜在的陈旧 / 过期对象。(你需要使用 Get() 和 GetIfVersionMismatch() 方法组合来得到正确的行为。)
对更高级技术的支持亦在计划中。 Anil Nori 补充道:
由于应用开始将缓存用于数据访问,我也相信,他们会要求更丰富的数据服务,如查询、事务、分析、同步等。例如,我相信.NET 有可能会要求在分布式缓存上使用 LINQ 查询,就像它们查询后端 SQL Server 数据库一样。我们预计“Velocity”会成为一个全面的分布式缓存平台。
评论