对于小型的程序应用,通常在初始阶段访问量会维持在一个较低的水平。但随着访问量上来,虽然可以对单台服务器进行配置升级,但是到后期还是会遇到单机性能瓶颈。所以对于大型应用来说,我们可以考虑将云服务器横向扩容,通过负载均衡技术对外提供服务,可以有效解决单机性能瓶颈以及单点故障问题。
我们的微信小程序解决方案的初始架构如下图:业务和会话管理服务器都只有一台。
通过外网、内网负载均衡绑定扩容的云服务器后,业务和会话管理服务器都可形成如下所示集群架构:
接下来我们具体来操作下会话管理服务器
以及业务服务器
横向扩容
注意所有新创建的资源与存量资源的地域、可用区、项目需要保持一致
首先需要登录腾讯云CVM控制台,在会话管理CVM实例右侧操作栏,点击【更多】-【制作镜像】。
填写好镜像名称
和镜像描述
后点击确定
,接下来会提示该服务器的镜像正在创建中
创建好镜像后,我们进入镜像控制台,选中镜像点击创建云主机
在云服务器购买页使用我们之前创建好的镜像来创建云服务器
首先需要登录负载均衡购买页,选择 内网类型
微信小程序
项目下负载均衡
创建完后在负载均衡控制台找到刚建好的负载均衡实例,点击实例ID
进入实例详情,点击绑定云主机
,勾选用于会话管理的云服务器(包括之前创建好的),点击确定
进行绑定
注意只要绑定的云服务器开启了安全组,必须将负载均衡 VIP 加入到后端服务器的放通规则中 左侧列表中显示的是未被隔离、未过期、带宽不为0的可选云服务器列表
创建负载均衡监听器
- 监听协议选
TCP
,监听端口即业务服务器访问会话管理服务器用的端口(配置文件中默认是80) - 后端端口填会话服务的端口(默认是80)
配置文件CentOS
系统在/etc/qcloud
路径下,Windows Server
系统在c://qcloud
路径下
修改sdk.config
中的authServerUrl
字段值,
"authServerUrl": "http://VIP/mina_auth/", //VIP上个步骤创建负载均衡实例的VIP
重启服务来生效配置
- Node.js环境,进入
/data/release/node-weapp-demo
下执行pm2 start process.json
- .Net环境 需要重启 IIS 中的网站来生效配置
- JAVA环境 重启tomcat执行命令
systemctl restart tomcat
到此我们已经完成了对会话管理服务器
的横向扩容,接下我们进行业务服务器
的扩容
注意所有新创建的资源与存量资源的地域、可用区、项目需要保持一致
制作流程可以参考制作会话管理服务器镜像
流程
注意选择业务服务器实例来进行镜像制作 如果制作Windows Server系统镜像的话可能稍慢点,请耐心等待
创建流程可以参考基于镜像创建会话管理服务器
流程
注意
地域``可用区``项目
需要保持一致,镜像则选择业务服务器镜像
云主机创建好后,我们只需在负载均衡控制台实例详情中,将新创建的云服务器绑定到负载均衡,流程可以参考上面的会话管理服务器绑定操作
到此为止我们的横向扩容操作已经全部完成
#配置更智能的弹性伸缩策略 我们推荐您为小程序的业务服务器集群及会话服务器集群配置上弹性伸缩AS(auto scaling)策略,充分利用公有云“灵活”“弹性”的优势。
##为什么配置弹性伸缩? 以下两个场景下弹性伸缩能降低成本和提高业务连续性:
1、 小程序访问有明显的高峰低谷:根据测算,如果业务服务器集群和会话服务器集群需要不只一台机器,且高峰短于8个小时,采用“按闲时保留固定服务器+高峰时期增加临时服务器”的方式,能节约30%左右成本。您通过AS设置定时扩缩容任务,让腾讯云在忙时扩容临时服务器,闲时回收终止未充分利用的服务器。
2、 小程序访问量稳定的预期下,配置基于监控告警的伸缩策略可应对意外高负载,保障服务的持续可用,给问题解决争取时间。异常高负载包括CC攻击,以及意外流量(类似“脸萌”刚上线的远超预期的传播速度,或特定事件带来的突发访问)。可参看公益网站“宝贝回家”的案例。
注:弹性伸缩能力免费,扩容的CVM按秒正常计费。
##弹性伸缩会做哪些事情? 1、 定时给集群增加机器或减少机器
2、 根据集群服务器的负载情况自适应地增加机器或减少机器
3、 增加的机器会自动注册到负载均衡中,实现全自动扩容
##为会话服务器配置弹性伸缩策略 ###1、创建启动配置 扩容时以启动配置为模板创建机器,因此我们事先通过启动配置指定地域、机型、镜像。
登录弹性伸缩控制台,点击导航条中的【启动配置】。
选择项目和地域: 这里要注意必须选择小程序所在的项目和地域。
接下来的操作与购买机器类似。您可跟着指引完成启动配置创建。
###2、 创建伸缩组
在弹性伸缩的【控制台】,点击【新建】,按如下填写集群的管理信息:
【名称】:按需起一个名字。这里填“会话服务器集群”
【最小伸缩数】:集群服务器数量的下限,这里填0即可
【起始实例数】:伸缩组刚创建时,自动创建的机器数量。这里填0即可.
【最大伸缩数】:集群服务器数量的上限,这里按需填写
【启动配置】:选择刚才您创建的启动配置
【支持网络】:会话服务器的网络环境,一般选“基础网络”即可
【支持可用区】:即选择机扩容器落在哪个可用区里,此处按会话服务器所在的可用区勾选即可
【移出策略】:选择默认即可
【负载均衡】:选择会话服务器的负载均衡,即刚才创建的
最后点击“确定”,完成创建。
###3、 添加现有机器进伸缩组
在【控制台】点击伸缩组名字,进入管理页,在页面下方点击“添加云主机”,
加入后对服务器设置“免于缩容”,这样在缩容活动中,伸缩组不会选择这台服务器缩容。
###4、 设置扩容策略 您可以选择定时扩容、或者基于告警动态扩容。通常扩容任务和缩容任务成对出现。
a. 定时扩容:
比如一个点餐小程序,可预期午饭时间的负载比其他时间高,就可以设置每天11:00-13:00扩容两台额外服务器支撑负载。
先设置一个定时扩容任务:
再设置一个定时缩容任务:
b. 基于告警扩容:
预期无明确的扩容,但需要防范出现意料之外的流量/攻击:
##为业务服务器配置弹性伸缩策略
这个过程与会话服务器类似:
- 为业务服务器创建一个启动配置
- 为业务服务器创建一个伸缩组“业务服务器集群”,指向业务服务器的负载均衡
- 为业务服务器设置伸缩策略
##验证伸缩性和查看伸缩活动 将伸缩组的期望实例数+1,伸缩组会自动扩容一台服务器到集群中。如果新扩的机器能正常处理请求,说明伸缩组已正常工作。
伸缩组还支持查询历史伸缩活动,确保您完全掌控伸缩活动情况。
至此,您的小程序已经具备了智能扩容的能力。您无需为扩容缩容的问题再操心,留意伸缩组通知或者不定期查看历史伸缩活动即可。 其他问题具体可查看弹性伸缩文档。