随着人民生活水平的提升和科技的发展,人们对于家庭网络的使用需求越来越多样化。家庭网络的控制对象由原来的个人电脑,扩展到手机和iPad,再到现在的冰箱、电视、智能门锁等数十种智能家居设备。家庭的使用需求也由原来简单的联网,到现在的一键提速、家长控制、WIFI管控等。智能家庭网关作为互联网控制物联网设备的桥梁,既可以使用户连接到网络、也可以使智能设备间实现通信,是整个系统的“大脑”。现今智能家庭网关的用户数量呈几何式上涨,截止到2022年12月31日,智慧家庭appcore平台已累计激活网关量2.4亿+。
由于智能网关数据传输实时的特性,大都选择TCP长连接方式进行通信,但是每台服务器对于 TCP 长连接处理能力非常有限。2.4亿+的激活网关量使单机房的部署形式暴露出以下难点:
1、单机房支撑的流量和服务器数量已经成为业务发展的瓶颈,亟需机房部署方案。
2、单机房单点问题,比如机房硬件故障(交换机宕机)导致的整个系统奔溃,降低了系统的可用性,亟需跨机房容灾方案。
本文提出的亿级TCP长连接跨机房负载均衡解决方案与实践很好的解决了上述难点。
针对单机房部署形势成为业务发展瓶颈的问题,设计了流量决策控制模块。这个模块会对热点模块的流量进行划分,实现集群间的负载均衡。其次通过各个集群基于 F5 的实时监控通过连接数和响应时间等的权重,实现服务器集群的负载均衡。更细粒度的拆分,针对单个省份的流量进行拆分。在正常的流程中,智能网关先到流量控制模块通过流量控制机制返回调用tcp-connect地址,智能网关在通过这个地址来进行TCP长连接。如图1所示。
图1:亿级TCP长连接跨机房负载均衡
新的负载均衡方案专利已过集团评审,方案使用之后解决了遇到的业务流量瓶颈,可支撑亿级流量,简单的扩容方式也为业务后续的扩展提供了空间。
自研了基于web容器工作线程忙比的服务降级实现方案。根据工作线程忙碌数是否达到降级阈值,进行服务状态(正常态和降级态)切换,降级态可以在不扩容的情况下,应对数倍于正常时的压力,并可以应对缓存、数据库等中间件的故障,提高系统可靠性、可用性。我们实现了多级缓存架构和分类数据存储。通过Mybatis两级缓存、本地缓存Caffeine、分布式缓存Redis Cluster来实现多级缓存。通过高频数据放本地缓存、重构Redis-Key的设计,实现一次服务请求至多执行一次Redis命令,开启Mybatis二级缓存来减少DB访问次数等方式来实现数据的分类存储。
使用之后提升了资源利用率。提升单台应用服务器(规格相同)处理能力是实践前的8+倍,降低Redis整体TPS请求量50%;使用后解决了流量风暴适用性差的问题,平稳应对流量风暴。目前能平稳应对TPS风暴时总量是正常6倍的情况,可支撑全网超2.4亿+智能家庭网关插件地址请求服务,保障了系统的可用性。
通过搭建多机房应用集群及底层中间件集群(Redis-Cluster和Mycat/Mysql集群),通过Redis-Shake进行Redis-Cluster跨机房数据实时同步,通过mysql原生同步机制进行mysql集群跨机房数据同步,实现缓存与数据库“一写多读”。同时实行域名多线解析至不同机房,并根据不同机房的集群规模进行DNS负载均衡,实现多机房多活。如图2所示。
使用之前单机房出现了交换机损坏的单点问题,使用之后可切换到正常机房。现在园区和石桥分别部署,并进行同步,实现多活。
图2:跨机房缓存/数据库的多活容灾方案
本文提出的亿级TCP长连接跨机房负载均衡解决方案与实践,为同一模块的TCP长连接异地机房的集群部署提供了一种解决方案,解决了单机房的流量瓶颈和可靠性问题。同时,积累的海量流量调优方案和容灾方案,为抖动、流量风暴等极端场景提供了平滑过渡实践方案,有效提升了用户宽带体验感知,助力家庭宽带业务高质量发展。