java rmi 负载均衡_Java RMI 实现一个简单的GFS(谷歌文件系统)——演示与实现篇...

本文主要是使用Java RMI 实现一个简单的GFS(谷歌文件系统,google file system),这里提供演示运行视频、系统实现以及源代码相关。

🧨 大年初二,走亲访友🏮 🧧

🏮祝大家新年快乐!🏮

ʰᵅᵖᵖʸ ⁿeᵚ ʸᵉᵅʳ

家人闲坐 灯火可亲

辞旧迎新 新年可期

系统整体介绍、背景以及设计信息:

演示运行视频

1. 系统组织结构

e0ee49ba72ed527907c45808dffe760f.png

如图所示,整个MyGFS分布式文件系统由SPI、Common API,Master,ChunkServer和Client五个模块组成:

SPI:定义Master与ChunkServer需要实现的接口,并实现存放Chunk及其信息的抽象类。MasterApi与ChunkServerApi均继承自Remote接口,标识着这是一个远程接口。

Master:实现远程接口实现类MasterEngine,继承自UnicastRemoteObject类并实现MasterApi接口,负责与Client的通信与对ChunkServer的管理。

ChunkServer:实现远程接口实现类ChunkServerEngine,继承自UnicastRemoteObject类并实现ChunkServerApi接口,接收Master的调度并负责对Chunk的管理。

Client:使用分布式文件系统的本地端,通过与Master直接通信来间接地对文件系统进行操作。

Common:该模块负责实现工具类与配置文件,例如生成UUID,将文件读入内存等操作。

其具体的三方通讯流程如下图所示:

6ab8ace61345883028f45d94c4a7539d.png

2. Master模块

2.1 心跳机制

​使用Java RMI方式,在Master端检测每个ChunkServer是否在线。具体操作如下:

通过RMI方式来检测Chunk服务器的心跳,直接以try-catch方式判断。若服务器宕机则加入failedChunkServerList中。

检查正常ChunkServer上的所有Chunk的Hash值,若不一致则加入到Chunk失败列表中。

最后进行错误处理。

public synchronized void heartbeatScan() {

System.out.println("heartbeat checking...");

// 错误Chunk列表

Map> failedChunkMap = new LinkedHashMap<>();

// 错误Server列表

List failedChunkServerList = new ArrayList<>();

ChunkServerApi chunkServerApi;

Map hashMap;

int index = 0;

for(String chunkServer : chunkServerList) {

// 使用RMI检测心跳

try{

chunkServerApi = (ChunkServerApi) Naming.lookup("rmi://" + chunkServer + "/chunkServer");

// 获取Hash,用来检测Chunk错误

hashMap = chunkServerApi.getHashMap();

} catch (Exception e) {

// 服务器宕机

System.out.println("ChunkServer: " + chunkServer + " is down!");

failedChunkServerList.add(chunkServer);

}

try {

List failedList = new ArrayList<>();

for (ChunkInfo chunkInfo : serverInfoMap.get(chunkServer)) {

String hash = hashMap.get(chunkInfo.getChunk().getChunkId());

if (hash == null || !hash.equals(chunkInfo.getHash())) {

System.out.println("chunk:" + chunkInfo.getChunk().getChunkFileName() + " ERRO

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值