分布式缓存:Velocity之应用实践
最近一直在研究微软的分布式缓存(Velocity)项目,今天终于完成 了公司的分布式缓存系统的编码,在完成的第一时间就想写出来分享给大家,希望能帮到那些正在学习,渴望实例的同学,废话不多说,先上图哈~
哈哈,界面简单比较丑,不喜勿喷哈~,下面继续
项目简介
系统以微软的分布式缓存(Velocity)项目为基础,实现了对分布在各地的缓存服务器实现集群管理,主要技术采用TCP协议、信道通信模式完成了如下功能:
1、分区:缓存集群区域管理
2、安全:访问IP限制
3、备份:缓存项实时备份
4、日志:日志采用界面、文件双记录
5、服务端未启动客户端无异常
二、整体架构设计
三、代码解读
3.1、 服务启动(TCP协议信道通信)
/// <summary>
/// 启动服务
/// </summary>
/// <param name="Port"></param>
public static void Start(int Port)
{
IDictionary props = new Hashtable();
props["name"] = "Velocity";
props["port"] = Port;
IAuthorizeRemotingConnection authorizeCallback = (IAuthorizeRemotingConnection)new Server();
channel = new TcpServerChannel(props, new BinaryServerFormatterSinkProvider(), authorizeCallback);
//channel = new HttpServerChannel("Velocity", Port);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(VelocityUtil), "Velocity", WellKnownObjectMode.SingleCall);
}
3.2服务停止
/// <summary>
/// 停止服务
/// </summary>
public static void Stop()
{
if (channel == null)
{
return;
}
ChannelServices.UnregisterChannel(channel);
}
3.3、安全验证(IP限制)
/// <summary>
/// 验证IP
/// </summary>
/// <param name="endPoint"></param>
/// <returns></returns>
public bool IsConnectingEndPointAuthorized(System.Net.EndPoint endPoint)
{
#region 验证IP地址代码
bool flag = true;
flag = SafeIP.Count == 0 || SafeIP.Contains(endPoint.ToString().Split(':')[0]);
if (!flag)
{
VelocityUtil.UpLog(string.Format("非法访问:{0}", endPoint.ToString()), VelocityUtil.LogType.Warning);
}
return flag;
#endregion
}
3.4、备份启动缓存区初始化
public DataCache BackCache
{
get
{
#region 初始化方
if (backCache == null)
{
InitCache();
#region 初始化备份缓存区
Parallel.ForEach(Areas, (a) =>
{
try
{
backCache.CreateRegion(a, false);
}
catch { }
});
#endregion
}
return backCache;
#endregion
}
set { backCache = value; }
}
四、注意事项
1、缓存备份的实时性及缓存区的同步
2、系统通信的安全性能,防止恶意访问
3、委托更新UI太频繁容易界面假死
哈哈,由于工作原因就先写这么多吧,有机会再补充,欢迎转载,共同学习,转载请留下本人(Alum:349545750) 脚印~谢谢,欢迎一起交流学习!