提供DELPHI中间件和中间件集群,有意请联系。
中间件集群的三种角色:客户端(简称C)、代理服务器(简称A)、中间件(简称M)。
以下文字均使用简称。
说明:C和M可能有多个,M在一台机器上可以开多个,多个M可以使用同一个IP地址,但必须绑定不同的端口号。
中间件集群需要定义私有协议。
M和A之间的交互协议:
M每隔一秒钟发送一次心跳包给A,A收到后发送一个应答数据包给M。
M发给A的数据包格式类似:
TMiddleHeartBeat = packed record
Head: byte; // 包头的命令字
IP: array[0..14] of char; // 中间件的IP地址
Port: Word; // 中间件的端口号
Clients: word; // 中间件的负载数量
end;
如上所示,M每隔一秒钟发送自己的IP地址、端口号以及当前的负载数量给A,使A能够即时地知道M的状态。
A对M的应答数据包类似:
TMiddleHeartBeat_Resp = packed record
Head: byte; // 包头的命令字
Status: Byte; // 状态,status=0,返回正确;status=其它,返回其它状态
end;
C和A之间的交互协议:
C必须向A申请以获得提供服务的M(C不能直连某个M),C发送给A请求提供服务器中间件的数据包类似:
TClientNeedMiddle = packed record
Head: byte; // 包头的命令字
end;
A对C的应答数据包类似:
TClientNeedMiddle_Resp = packed record
Head: byte; // 包头的命令字
Status: Byte; // 状态,status=0,返回正确;status=其它,返回其它状态
IP: array[0..14] of char; // 提供服务的中间件的IP地址
Port: Word; // 提供服务的中间件的端口号
end;
C开始连接A返回来的中间件。
A对M的负载均衡算法:
1)随机算法,A随机选择一个活动的M;
2)负载数最少的优先算法,负载数是M发送给A的心跳包中提供的。
当然还有其它的负载均衡算法,此处略。