Skip to content

负载均衡

orapis 集群默认启用负载均衡功能,当客户端以 集群请求方式 访问集群中的任意节点时,系统会依据所配置的负载均衡算法,将请求分配至集群内的空闲节点,从而实现资源的高效利用与服务的稳定运行。

客户端访问 orapis-engine 服务时,可以 集群请求单机请求 两种不同的方式进行访问:

集群请求 :被请求节点作为负载均衡服务器,通过负载均衡算法分配请求到集群内的某节点。

单机请求 :被请求节点的 orapis-engine 直接处理请求,不进行集群负载均衡的转发。

使用以下不同的访问方式,以实现不同的请求:

集群请求方式 :以 6638 端口进行请求。 例: http://192.168.2.10:6638/api/getInfo

单机请求方式 :以 6636 端口进行请求。 例: http://192.168.2.10:6636/api/getInfo

支持的负载均衡算法:

  1. SWRR(加权最短请求响应轮询)

    基于加权轮询的算法,适用于性能不均的服务器或负载不均的场景。

  2. Round Robin(轮询)

    经典的轮询算法,适用于负载均衡的服务器配置相似、负载均衡需求较低的场景。

  3. Least Connections(最少连接数)

    根据每个节点当前的连接数分配请求,适合处理长连接或高负载的服务。

选择适合的负载均衡算法,依据您的服务器性能、请求的性质以及系统架构来做决定。

测试示例

环境准备

服务器 :预先准备三台 Linux 服务器,并在其上安装 Ubuntu 系统。

网络环境 :三台服务器需处于同一网络环境下。 IP 地址依次为:192.168.2.28192.168.2.38192.168.2.48。 下文中分别将服务器称为 “28服务器” 、“38服务器” 和 “48服务器”。

配置中心 Tendis :在同一网络环境中准备一个提供 Tendis 数据库服务的服务器。 IP 地址为 192.168.2.29Tendis 访问端口为 51002 ,访问密码为 123

示例环境准备情况如下图:

loadBalance_img_1.png

集群配置

根据操作步骤(点击 此处 跳转 Linux 操作文档),分别为 集群 范围内的各服务器 安装启动 orapis-engine ,并 登录 各服务器的管理网页。

根据操作步骤(点击 此处 跳转操作文档),分别为各服务器 orapis-engine 完成 注册

创建集群

登录 28服务器 的 orapis-engine 管理网页,在集群配置界面中创建集群:

填写预备的 Tendis 配置。

当前示例不启用高可用配置,所以直接以服务器真实IP 192.168.2.28 作为浮动IP即可。

不启用高可用配置时,浮动IP的配置对集群管理与使用无特殊作用,所以填写集群内任一服务器的真实IP即可。

loadBalance_img_2.png

添加节点

分别为集群添加 38服务器 和 48服务器:

loadBalance_img_3.pngloadBalance_img_4.png

创建完成的集群:

loadBalance_img_5.png

创建完成后,28服务器、38服务器、48服务器 都处于集群内,客户端可通过 IP192.168.2.28 访问集群。

集群结构图为:

loadBalance_img_6.png

服务设计

准备一个获取并返回服务器 IP 地址和请求端口的服务,通过请求集群查看实际处理请求消息的服务器,以验证请求是否被集群真实地进行负载均衡的转发。

使用 orapis-design 进行服务开发:

loadBalance_img_7.png

服务设计流程如下:

  1. 添加 获取请求的服务器地址控件

    loadBalance_img_8.png
  2. 添加 获取请求的服务器端口号控件

    loadBalance_img_9.png
  3. 添加输出控件 返回数据格式设置为:

    json
    {
      "IP": "#{serverIP}",
      "Port": "#{serverPort}"
    }
    {
      "IP": "#{serverIP}",
      "Port": "#{serverPort}"
    }
    loadBalance_img_10.png

服务部署

服务开发完成后,提交打包 并到 28服务器 orapis-engine 后台管理网页上 部署 服务包。

部署时,该服务包会被同时同步到集群内的所有其它节点上的 orapis-engine

通过不同的IP访问各服务器节点的 orapis-engine 管理网页,查看APP发布界面,观测到服务包被正确地同步部署到所有节点。

28服务器

loadBalance_img_11.png

38服务器

loadBalance_img_12.png

48服务器

loadBalance_img_13.png

服务访问

根据服务访问 Url 的拼接规则,可获得该示例服务的访问 Url 为: http://engine_ip:port/clusterExample/getServerInfo

我们以调用 28服务器 为例,即以上 Urlengine_ip 替换成 192.168.2.28

以下对服务分别进行 单机请求集群请求 的调用测试:

单机请求

单机请求时,访问端口需为 6636,所以最终的访问 Url 为: http://192.168.2.28:6636/clusterExample/getServerInfo

在任一客户端,使用 curl 命令请求服务:

$ curl http://192.168.2.28:6638/clusterExample/getServerInfo
$ curl http://192.168.2.28:6638/clusterExample/getServerInfo

调用结果如下:

loadBalance_img_14.png

通过调用记录可以发现,通过 6636 端口调用服务时,输出消息 IPPort 始终跟请求 IP192.168.2.28端口6636 一致,说明处理请求的服务器始终是我们所调用的服务器。

集群请求

集群请求时,访问端口需为 6638,所以最终的访问 Url 为: http://192.168.2.28:6638/clusterExample/getServerInfo

loadBalance_img_15.png

通过调用记录可以发现,通过 6638 端口调用服务时,输出消息 IP 分别有 192.168.2.28192.168.2.38192.168.2.48 ,即说明实际处理请求的服务器一直在集群范围内变换,并且调用端口都统一为了单机请求的端口 6636

说明在通过 集群请求方式 调用服务时,所调用的服务器作为负载均衡服务器,根据负载均衡算法分配请求给集群内的服务器,并且在分发请求的过程中,是以 单机请求方式 调用 6636 端口进行的。