爱学习的站长www.mmic.net.cn

www.mmic.net.cn 欢迎学习共同成长
公告信息
www.mmic.net.cn 欢迎学习共同成长
文章分类
文章档案
文章
alisoft xplatform asf cache 方法
2011/8/8 13:17:46

 


alisoft xplatform asf cache是阿里开源的memcached集群的客户端,它是基于Java memcached release的,
在Java memcached release上进行了数据备份的处理,同时对Java memcached release的代码也有一定的修改,
对立面的操作的异常进行了统一的抓捕,这样方便上层进行集群协调,使用配置文件如下:
----------------------
<?xml version="1.0" encoding="UTF-8"?>
<memcached>
    <client name="mclient0" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool0">
        <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>
    </client>
    <client name="mclient1" compressEnable="true" defaultEncoding="UTF-8" socketpool="pool1">
        <errorHandler>com.alisoft.xplatform.asf.cache.memcached.MemcachedErrorHandler</errorHandler>
    </client>
    <socketpool name="pool0" failover="true" initConn="5" minConn="5" maxConn="250" maintSleep="5000"
    nagle="false" socketTO="3000" aliveCheck="true">
        <servers>10.2.224.36:33001,10.2.224.46:33001</servers>
    </socketpool>
    <socketpool name="pool1" failover="true" initConn="5" minConn="5" maxConn="250"  maintSleep="5000" 
    nagle="false" socketTO="3000" aliveCheck="true">
        <servers>10.2.224.36:33002,10.2.224.46:33002</servers>
    </socketpool>
    <cluster name="cluster1" mode="active">
        <memCachedClients> mclient0, mclient1</memCachedClients>
    </cluster>
</memcached>
----------------------
MemcachedCacheManager根据配置文件加载数据结构:
MemcachedClientCluster
----1. List<IMemcachedCache> caches
----------------1. MemCachedClientHelper helper
-----------------------1. MemCachedClient cacheClient
-----------------------------1. SockIOPool
-----------------------2. MemcachedCacheManager cacheManager
-----------------------3. IMemcachedCache memcachedCache
----------------2. ClusterProcessor processor
----------------3. ICache<String, Object> localCache
----2. String mode
IMemcachedCache是我们使用的对象,在MemcachedCacheManager层根据client配置的名字得到IMemcachedCache,
在这个地方得到哪一个IMemcachedCache无所谓,但是有几个<client>就会实例化几个MemcachedCache,同时附带
两个线程,这个地方是我觉得设计不是很合理的地方,其实全局一个MemcachedCache就可以了,因为对于
memcached的操作都是先根据key的hashCode取List<IMemcachedCache> caches的模觉得使用其下的哪一个
MemCachedClient的。

alisoft xplatform asf cache的集群支持代码主要是在MemcachedCache层有个时间任务调度器,有个任务队列即
LinkedBlockingQueue<Object[]>,另外有个线程将LinkedBlockingQueue<Object[]>中的任务组装成Runnable后
添加到时间任务调度器里去,感觉这个多的线程设计也可以取消。
对于原先的MemCachedClient操作,alisoft xplatform asf cache在操作前先根据key的hashCode取模,得到要使用的
MemCachedClient后进行调用,调用完后,如果是集群的话则将相应的任务添加到一个任务队列中去,这个任务主要
是将在得到的MemCachedClient上进行的操作在组内其他机器上进行复制操作,当然这些操作都是针对改变数据的
操作;对于读取数据的操作则是,先根据key的hashCode取模得到做读取操作的MemCachedClient后,如果顺利读取
到数据返回,如果没有读到到数据则到集群另外的MemCachedClient进行读取,如果读取到数据则返回数据,同时会
往读取失败的MemCachedClient上添加一个数据恢复的任务,对应的key-value就是在两外机器上读取到的值。
另外一个问题是,如果集群有三台机器,根据key找到第一台机器,读取失败,则接下来到第二台读取,同样失败,
再到第三台读取成功,这样数据恢复任务就只添加了第一台的。
上面值的读取操作不包括MUTIL操作。

引自:http://pdflist.mmic.net.cn

alisoft xplatform asf cache另外的一个点是数据异步操作,因为上面提到过在MemcachedCache层有个时间任务调度
器,有个任务队列,如果是异步调用的话将相应的操作添加到任务队列里面就可以了,等这个线程池来消费这些
任务。

新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"
 技术   浏览(2720)   评论(0)   关键字
  
Copyright © 2010-2020 power by CYQ.Blog - 秋色园 v2.0 All Rights Reserved