(23)uniGUI for C++ builder下HyperServer负载均衡的研究

                                                                                                    (中行雷威2018.9.10)

(同一个世界,同一个梦想,交流学习C++Builder XE10,传承c++builder的魅力!欢迎各地朋友加入我的QQ群484979943、860634510、299497712,进群密码“BCB”,同时也请将该群号广为宣传,希望能够广集各方高手,共同进步。如需下载开发工具及源代码请加入我的QQ群。)

【阅读倡议】

1、有问题请留言;

2、没问题请点赞;

3、看连载请加群;

4、下源码请加群;

【开发工具】

1、C++Builder10.2.3 tokyo

2、FMSoft_uniGUI_Complete_Professional_1.10.0build1480(正版)

本人主笔的国内第一本uniGUI教学案例代码已诞生,分为cbuilder和delphi两个版本,买代码送手册,需要的朋友可以加入我的QQ技术交流群484979943、860634510、299497712给我(群主)留言。资料简介:https://blog.csdn.net/dlboy2018/article/details/88923832

HyperServer是一个新的负载均衡技术架构,用来提升uniGUI项目的可用性、稳定性和可伸缩性,主要目标就是负载均衡和进程回收利用。一般的uniGUI项目由单个进程和多个线程构成,当太多并发出现时内部太多锁势必会导致效率降低,HyperServer改变了传统模式,变成了多进程+多线程模式。在这一模式下,多个进程共同扮演为一个WEB应用项目对外提供服务,外部服务请求被分发到不同的独立应用进程。HyperServer变成一个统一的服务入口,HyperServer负责受理、分发请求会话到不同的独立服务进程,同时负责各个节点的服务管理。每个独立的服务进程被称为一个服务节点,每个服务节点并不需要独立做项目部署,其实你只需要部署一套应用进程,多个节点的服务模式是由HyperServer独立完成的。HyperServer目前不是用来做多个独立服务器的负载均衡,而是用来实现在一台机器上创建多个服务节点,并按照相应机制生成、调用、停用、回收这些节点,其主要目的有三方面:

  1. 解决单进程用作核心应用时可能出现的不稳定问题;
  2. 解决丰富的机器性能资源如何充分利用问题;
  3. 解决一般应用做软件版本升级时需要停机的问题;

一、安装部署

HyperServer的安装很简单,在uniGUI的安装目录C:\Program Files (x86)\FMSoft\Framework\uniGUI\HyperServer下即可找到,下面分为32位程序和64位程序,按照官方文档介绍,32位的可以调度64位的项目,64位的也可以调度32位项目,但是建议使用32位程序。详细的介绍文档在C:\Program Files (x86)\FMSoft\Framework\uniGUI\Docs下,其中“uniGUI HyperServer”部分有详细介绍。对应你的项目的部署模式,HyperServer也提供三种部署模式,分别是Standalone、ISAPI、Windows Service Mode,我喜欢第一种独立部署模式,一个可执行文件全搞定,本例也将以该种模式讲解。

HyperServer的安装很简单,你只需要将安装目录下的HyperServer.exe和HperServer.cfg拷贝到你原有项目的安装目录下即可。

二、常用术语

  1. NodeId:HyperServer Node其实就是一个你的项目的运行进程。每个节点都有一个Id编号;
  2. Transport:HyperServer使用HTTP和各个节点进行通讯,暂时没用TCP和UDP;
  3. NodeRecycling:在特定请情况下,HyperServer会回收节点,节点受到回收指令后将需要先释放会话;
  4. ActiveNode:正在运行的节点成为活动节点;
  5. SuspendedNode:HyperServer会定时监测各个节点运行情况,如果节点没有相应,那么就称作挂起节点;如果多次都不响应状态检测指令,那么节点将被清除;
  6. PurgedNode:被清除出活动节点清单的节点称作清除节点,被清除的节点不再相应会话请求,将被下次队列处理时清理掉;
  7. DiscardedNode:丢弃节点是被计划停用或放弃的节点,此节点不再受理新的会话请求,但是将继续处理完正在处理的请求。
  8. PersistentNodeZero:零号节点是一个永远都要存在的节点,她不会被永久卸载,但是也像其他节点一样会被循环利用。

三、参数配置

hyper_server.cfg文件是负载均衡的配置文件,HyperServer的服务行为由该文件控制,项目的运行由HyperServer根据该参数调度使用。

[transport]

pool_size=0 //最大参数传输池,默认0无限制

command_timeout=20000 //HyperServer和各个节点的通讯超时时间

request_timeout=300000 //服务完成等待时间,要和项目AjaxTimeout参数一致

connect_timeout=20000 //HyperServer和节点建立通讯的等待时间

 

[http_transport]

start_port=16384 //HyperServer和第一个节点通讯的默认端口,后续节点通讯端口将自动递增

 

[hyper_server]

binary_name=bocWebFrame.exe //你的同目录下的程序名,不带目录喔

initial_nodes=2 //启动时运行几个节点

max_nodes=8 //最大活动节点数,可增加但是不建议超过16

max_sessions=0 //所有节点的最大会话数

sessions_per_nodes=0 //暂时没用

prompt_login=1 //访问http://ip:port/server时是否需要密码,1代表需要密码,则后续[login-X]则需要设定访问管理密码

 

persistent_node_zero=0 //如果需要一个持续有效节点则需要设为1

port=80 //你的项目的服务端口,要和项目一致

url_path=

url_referer=

ext_root=[ext]\

uni_mobile_root=[unim]\

uni_root=[uni]\

uni_packages_root=[unipack]\

max_requests=500

 

[node_recycling]

enabled=1

recycle_after_secs=3600

recycle_after_sessions=0

recycle_after_idle_secs=300

recycle_when_empty=1

 

[login-0]

user_name=root //服务管理功能的访问用户和密码

password=admin

admin=1   //如果设为0则只有访问权限没有管理权限

 

[login-1]

user_name=

password=

admin=0

 

[login-2]

user_name=

password=

admin=0

 

[login-3]

user_name=

password=

admin=0

 

[login-4]

user_name=

password=

admin=0

 

[login-5]

user_name=

password=

admin=0

 

[login-6]

user_name=

password=

admin=0

 

[login-7]

user_name=

password=

admin=0

 

[login-8]

user_name=

password=

admin=0

 

[login-9]

user_name=

password=

admin=0

 

[custom_mimes]

mime_0_ext=7z //增加浏览器允许下载的文件类型

mime_0_type=application/x-7z-compressed

mime_1_ext=

mime_1_type=

mime_2_ext=

mime_2_type=

mime_3_ext=

mime_3_type=

mime_4_ext=

mime_4_type=

四、远程部署

一般情况下,如果你需要升级版本,你必须停掉程序,然后替换执行代码,但是这种方式中断了对外服务。有了HyperServer后你可以选择远程部署,访问http://localhost:8077/server在HyperServer界面有一个远程部署按钮。

下图箭头指示的就是远程发布按钮

 

确认发布提交后,所有节点状态将变成Discarded状态,等待正在受理的业务结束。

 

如下图所示,当有新的会话请求进来时,系统将自动创建一个新的节点,启用新的程序版本受理会话请求。这个不间断投产功能还是蛮好滴。

Version的具体值来源于你的项目程序的版本配置,为便于升级,建议在你的项目的Project-》Options-》Version Info中设置“Auto increment build number”自动增加版本号。

HyperServer还支持另一种自动部署方式,即将你的程序hyper.exe先拷贝到你的项目和HyperServer运行目录下的Deploy目录下,然后将hyper.exe修改为hyper.dep,系统将自动更新。哈哈,至此大功告成,试试吧,让HyperServer为你的应用程序保驾护航吧。

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值