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

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

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

 

posted @   delphi中间件  阅读(1430)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示