(中行雷威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目前不是用来做多个独立服务器的负载均衡,而是用来实现在一台机器上创建多个服务节点,并按照相应机制生成、调用、停用、回收这些节点,其主要目的有三方面:
- 解决单进程用作核心应用时可能出现的不稳定问题;
- 解决丰富的机器性能资源如何充分利用问题;
- 解决一般应用做软件版本升级时需要停机的问题;
一、安装部署
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拷贝到你原有项目的安装目录下即可。
二、常用术语
- NodeId:HyperServer Node其实就是一个你的项目的运行进程。每个节点都有一个Id编号;
- Transport:HyperServer使用HTTP和各个节点进行通讯,暂时没用TCP和UDP;
- NodeRecycling:在特定请情况下,HyperServer会回收节点,节点受到回收指令后将需要先释放会话;
- ActiveNode:正在运行的节点成为活动节点;
- SuspendedNode:HyperServer会定时监测各个节点运行情况,如果节点没有相应,那么就称作挂起节点;如果多次都不响应状态检测指令,那么节点将被清除;
- PurgedNode:被清除出活动节点清单的节点称作清除节点,被清除的节点不再相应会话请求,将被下次队列处理时清理掉;
- DiscardedNode:丢弃节点是被计划停用或放弃的节点,此节点不再受理新的会话请求,但是将继续处理完正在处理的请求。
- 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为你的应用程序保驾护航吧。