《技术方案曝光,网易游戏是如何做到不停服维护的?》(3)
来源:未知 时间:2019-03-06 10:57
为支持上述需求,我们基于openflow协议开发了一套自研的SDN方案(Gon)。在宿主机上引入了OVS(OpenvSwitch)用于管理宿主机内所有虚拟网络设备,OVS模块通过集群中NVC(NetworkVirtualizationController)模块基于openflow协议实现互通。
我们同时引入了两个弹性虚拟网关设备IGW与BGW,对内外网流量进行分离管理。整套SDN方案可以做到全局流控。根据网络组同事的测试,目前整套SDN单网关支持10GBPS,80WPPS、500W连接数,虚拟网关可依据需求在线弹性扩容,支持VPC,支持IP复用、支持docker虚拟网络与私有云的混布。
经过一些列研发与测试,GonSDN方案可以较好满足内部的网络要求,在并且在虚拟网络内部通信中,能做到接近物理网络性能。
解决网络问题之后,整体测试顺利,实现方式也相对优雅。不过如上面提到的,我们是需要对宿主机进行超卖的。这并不符合Docker一般的使用习惯。在容器编排上,需要有一定的特殊调整。要求对于一个业务群组(10001),需要严格按照一个podA和一个podB同时出现在一台计算节点。不然无法实现维护期间集群内计算资源的复用。
基于需求的特殊性,除了使用docker常用的podAffinity外,还需要结合nodeSelector特性来完成容器亲和性操作。
我们给需要复用的集群资源打上集群标签,然后通过NodeSelector的特性,进行实例编排,之后运用PodAntiAffinity的特性,保证不会出现AA或BB分配到同一个宿主的情况。可以实现AB服的运行要求。但依旧有很多待优化的问题,包括资源层和应用层耦合,方案的通用性低。
经历了一系列之后,我们终于完成了不停服维护。以下就是完成的效果,在维护的同时,是不影响玩家的正常游戏的,使玩家体验上升,据我了解,整个产品团队的工作满意度也有了比较大的提升,大家都不需要熬夜维护了。