• 分布式缓存:Velocity之应用实践


    最近一直在研究微软的分布式缓存(Velocity)项目,今天终于完成 了公司的分布式缓存系统的编码,在完成的第一时间就想写出来分享给大家,希望能帮到那些正在学习,渴望实例的同学,废话不多说,先上图哈~

    哈哈,界面简单比较丑,不喜勿喷哈~,下面继续

    1. 项目简介

      系统以微软的分布式缓存(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) 脚印~谢谢,欢迎一起交流学习!

  • 相关阅读:
    [Swift]LeetCode910. 最小差值 II | Smallest Range II
    转 关于shell脚本中#!/bin/bash and #!/bin/ksh 的说明
    转 对象继承
    转 PHP编程过程中需要了解的this,self,parent的区别
    转: ORA-06508 could not find program unit being called: "DBSNMP.BSLN_INTERNAL
    Multitenant best Practice clone pdb seed and Clone a Pluggable Database – 12c Edition
    Plugging an Unplugged Pluggable Database issue 3
    日历 php
    Datapatch AND What to do if the status of a datapatch action was not SUCCESS due to finding non-ignorable errors
    oracle中的用户详解 【转】
  • 原文地址:https://www.cnblogs.com/Alum/p/3649850.html
Copyright © 2020-2023  润新知