中间件集群的协议和算法的类语言描述

提供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的心跳包中提供的。

当然还有其它的负载均衡算法,此处略。

原文地址:https://www.cnblogs.com/hnxxcxg/p/3904699.html