提高云中的文件共享和文件锁定
2010-09-02 00:00:00 来源:WEB开发网运行 Ant 构建
图 14. ... 成功了!
应该能看到构建成功。很容易。
实现应用程序
应用程序本身有一些文件,但我们只关注其中重点,让您自己构建创、建自己的应用程序。
为了实现文件共享和锁定机制,我们创建了一个名为 WalrusVirtualBlockManager 的类。代码实现了 Eucalyptus 中的文件锁定机制。清单 1 是源代码。
清单 1. WalrusVirtualBlockManager
package edu.ucsb.eucalyptus.cloud.ws;
import org.apache.log4j.Logger;
import edu.ucsb.eucalyptus.cloud.entities.ObjectInfo;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.*;
import edu.ucsb.eucalyptus.cloud.entities.ObjectInfo;
public class WalrusVirtualBlockManager
{
private static Logger LOG = Logger.getLogger(WalrusVirtualBlockManager.class);
public static Map<ObjectInfo,ReentrantLock>
storagelockMap = new HashMap<ObjectInfo,ReentrantLock>();
private static WalrusVirtualBlockManager virtualBlockMgr;
private WalrusVirtualBlockManager()
{
}
public static WalrusVirtualBlockManager getInstance()
{
VirtualBlockMgr = new WalrusVirtualBlockManager();
return virtualBlockMgr;
}
public ReentrantLock lock(ObjectInfo info)
{
ReentrantLock lck = new ReentrantLock();
storagelockMap.put(info,lck);
return lck;
}
public void unlock(ObjectInfo info)
{
ReentrantLock lck = storagelockMap.get(info);
lck.unlock();
clear(info);
}
public void clear(ObjectInfo info)
{
storagelockMap.remove(info);
}
public void clearAll()
{
for(Map.Entry<ObjectInfo,ReentrantLock> entry : storagelockMap.entrySet())
{
unlock(entry.getKey());
}
storagelockMap.clear();
}
}
如果不使用 Walrus 那怎么做?
已修改的块存储技术也可用于其他云平台。例如,在 Cassandra 中,数据被复制。这就是说,数据资源最新版本在集群的某个节点上,旧的版本在其他节点上。最终目标是,所有节点将访问最新版本。文件对象锁定不可用,但已修改的块存储技术可在此引入,按照本文介绍的方式保持数据一致性。在 Digg、Facebook、Twitter 及其他网站能看到 Cassandra。
结束语
现在您已了解如何在集群中安装 Eucalyptus,以及如何修改 Walrus 源代码来实现或改进云中的文件共享和文件锁定机制。
更多精彩
赞助商链接