使用微软分布式缓存服务Velocity Part 1

简介:

概述

Velocity是微软推出的分布式缓存解决方案,为开发可扩展性,可用的,高性能的应用程提供支持,可以缓存各种类型的数据,如CLR对象、XML、二进制数据等,并且支持集群模式的缓存服务器。Velocity也将集成在.NET Framework 4.0中,本文将介绍Velocity的一些预备知识、安装配置以及开发一个简单的示例。

简介

既然是分布式的缓存平台,客户端应用程序能够与缓存服务器集群中的任何一台服务器通信,并且执行缓存操作,如新增缓存项,移除缓存项等。在Velocity中,提供了一套统一的API,开发者可以使用任何一种.NET语言来访问这些API,如图1所示:
TerryLee_0212
图 1

物理模型

在整个Velocity分布式缓存解决方案中,从物理模型上来看,主要涉及到如下几个元素:缓存宿主,缓存集群,Velocity提供的基于Windows PowerShell的管理工具,对于服务器集群配置的存储。缓存宿主是指一个或者多个以Windows服务形式运行的服务器,每台服务器都可以运行缓存宿主服务;缓存集群是一个或者多个缓存宿主实例的集合;当缓存集群启动时,它将从集群配置存储位置处来获取配置信息,Velocity提供了多种方式的集群配置信息存储,可以基于XML文件、SQL Server数据库或者SQL Server CE等;基于PowerShell的管理工具后面会详细讲到。 如图2所示:
TerryLee_0213 
图 2

逻辑模型

从逻辑模型上来看,在Velocity中主要有命名缓存,在命名缓存中我们还可以继续分区,命名缓存,可以理解为内存中的一个独立的存储结构单元,它们之间完全互相隔离,互不干扰,当有多个应用程序共享同一个缓存集群时,可以为每个应用程序分别建立命名缓存;在同一个命名缓存中,还可以对命名缓存进行分区,这样即可以解决数据冲突的问题,再配合Velocity中的“标签”功能,可以极大的提高检索效率。如图3所示:
TerryLee_0216  
图 3

安装

Velocity当前最新的版本是CTP 2,大家可以到微软官方站点下载,由于Velocity中提供了一套基于Windows PowerShell的管理工具,所以在安装之前需要首先安装Windows PowerShell。在安装过程中,其中有一步需要进行服务器集群的配置,如图4所示:
TerryLee_0214
图 4
需要设置服务及集群端口号,集群配置的存储位置,集群配置存储的Provider,可以基于XML存储或者基于SQL Server CE存储等。另外可以访问如下站点获得一些资源:
团队博客: [url]http://blogs.msdn.com/velocity/[/url]  
示例代码: [url]http://code.msdn.microsoft.com/velocity[/url]
安装完成后,请在Windows Service中启动Microsoft project code named "Velocity"服务。

管理工具

Velocity提供了基于Windows PowerShell的管理工具,对于Windows PowerShell不熟悉的可以参考《 回归Dos操作的快感,进入PowerShell世界 》这篇文章。使用Windows PowerShell可以非常方便的对Velocity缓存集群、缓存宿主等进行管理。使用如下命令金额图对启动、停止、重启服务器集群:
Start-CacheCluster 
Stop-CacheCluster 
Restart-CacheCluster 
使用如下命令可以启动、停止缓存宿主、获取命名缓存、获取缓存分区等:
Get-CacheHost 
Get-CacheConfig 
Set-CacheConfig 
Start-CacheHost 
Stop-CacheHost 
Get-CacheStatistics 
Get-Cache 
Get-CacheRegion 
如使用Get-CacheHost命令获取缓存宿主的信息,如图5所示,可以看到宿主对应的服务名以及服务状态等:
TerryLee_0217
图 5
使用Get-Cache命名查看所有的命名缓存,如图6所示:
TerryLee_0218
图 6
使用该管理工具还可以创建、移除命名缓存等,这里不再叙述。

简单示例

经过前面一大堆的理论介绍,现在来看一个最简单的示例。首先要把CacheBaseLibrary和ClientLibrary这两个程序集添加到应用程中,在Velocity安装目录下可以找到,并且引入命名空间:
using System.Data.Caching;
在使用Velocity缓存数据时,首先需要创建一个命名缓存,它可以通过CacheFactory来创建,如下代码所示:
private Cache GetCurrentCache()
{
    Cache dCache;
    ServerEndPoint[] servers = new ServerEndPoint[1];
    servers[0] = new ServerEndPoint("localhost", 22233, "DistributedCacheService");
    bool routingClient = true;
    bool localCache = false;
    var factory = new CacheFactory(servers, routingClient, localCache);
    dCache = factory.GetCache("default");
    return dCache;
}
此处首先指定了所有的服务器信息,当然这些都可以放在应用程序配置文件中,将会在下篇中介绍,有了Cache对象,其它的使用就非常方便了,如我们可以使用Add、Put、Remove、Get等方法来对缓存项进行操作,
添加缓存项:
Cache dCache = GetCurrentCache();
String key = keyTextbox.Text;
String val = valueTxtBox.Text;
if (key == "" || val == "") return;
dCache.Add(key, val);
statusLabel.Text =
    String.Format("Successfully added key {0} to cache.", key);
获取缓存项:
Cache dCache = GetCurrentCache();
String key = keyTextbox.Text;
if (key == "") return;
String val = dCache.Get(key).ToString();
valueTxtBox.Text = val;
statusLabel.Text =
    String.Format("Successfully did Get of key {0} from cache", key);
运行程序可以测试,数据被正确的缓存,如图7所示:
TerryLee_0219
图 7

总结

本文简单介绍了微软的分布式缓存解决方案Velocity的一些概念以及开发了一个简单的示例,希望对大家有用。在下篇文章中,我们将会更深入学习缓存复杂数据类型以及Velocity的编程模型和配置模型。

















本文转自lihuijun51CTO博客,原文链接:http://blog.51cto.com/terrylee/151965  ,如需转载请自行联系原作者

相关文章
|
15天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
30 2
|
2月前
|
监控 负载均衡 Dubbo
|
28天前
|
消息中间件 算法 Java
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
187 0
|
3月前
|
Dubbo Java 应用服务中间件
Spring Boot Dubbo 构建分布式服务
Spring Boot Dubbo 构建分布式服务
47 0
|
3月前
|
消息中间件 算法 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
尽管经过了上一篇文章 《【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现》有了低延迟的优化保障,消息引擎仍需精心规划其容量。为了提供无与伦比的流畅体验,消息引擎必须实施有效的容量管理策略。
52 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的保障容量的三大关键方案实现
|
5月前
|
监控 微服务
微服务技术系列教程(28) - SpringCloud- 分布式服务跟踪Sleuth
微服务技术系列教程(28) - SpringCloud- 分布式服务跟踪Sleuth
22 0
|
2月前
|
消息中间件 存储 负载均衡
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
昔之善战者,先为不可胜,以待敌之可胜。不可胜在己,可胜在敌。故善战者,能为不可胜,不能使敌之必可胜。故曰:胜可知,而不可为。
82 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
|
2月前
|
存储 Oracle 关系型数据库
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
分布式事物【Seata实现、下载启动Seata服务、搭建聚合父工程构建】(四)-全面详解(学习总结---从入门到深化)
45 0
|
3月前
|
消息中间件 存储 Java
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
在充满挑战的2023年度,我们不可避免地面对了一系列棘手的问题,例如响应速度缓慢、系统陷入雪崩状态、用户遭受不佳的体验以及交易量的下滑。这些问题的出现,严重影响了我们的业务运行和用户满意度,为了应对这些问题,我们所在团队进行了大量的研究和实践,提出了低延迟高可用的解决方案,并在分布式存储领域广泛应用。
43 2
【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的低延迟可用性机制方案实现
|
3月前
|
Cloud Native Java 开发工具
云原生 阿里云分布式文件系统 对象存储OSS 服务配置
【1月更文挑战第8天】云原生 阿里云分布式文件系统 对象存储OSS 服务配置