手游业务MySQL数据库虚拟化漫谈

2015年09月08日 14:35 0 点赞 0 评论 更新于 2025-11-21 18:58

手游业务MySQL服务特点

目前,手游业务大多采用Redis和MySQL相结合的方案。其中,Redis用于存储游戏业务中的当前状态数据,而MySQL则主要用于数据持久化存储、事务控制以及保证数据一致性。通常情况下,手游业务中的MySQL数据库负载并不高。

正因为MySQL负载不高,所以需要想办法提高资源利用率,主要有以下两种思路:

  • 单机多实例
  • 虚拟化技术

下面将对这两种方法的优缺点进行详细分析对比。

1、单机多实例

单机多实例是指在同一个操作系统(OS)下启动多个mysqld进程,并让它们监听多个端口。

优点

  • 计算资源利用率较高:由于没有虚拟化层的损耗,计算资源能够得到相对充分的利用。
  • 适合中小企业:无需额外维护KVM等虚拟化组件,降低了维护成本和技术门槛。

缺点

  • 隔离性较差:不同业务的MySQL实例之间可能会因为业务瞬间突增而相互影响,一个实例的高负载可能会对其他实例的性能产生负面影响。
  • 定制化麻烦:如果不同实例需要使用不同的MySQL版本,操作和配置会比较复杂。
  • 端口使用受限:不同实例无法都使用默认的3306端口,除非事先绑定多个IP地址,这增加了配置的复杂性。

2、虚拟化技术

虚拟化技术是指在每个虚拟机中只运行一个数据库实例。

优点

  • 推动部署标准化和模版化:方便推动数据库部署的标准化和模版化,为后续的快速部署奠定基础。
  • 实现快速批量部署:通过虚拟化技术,可以实现数据库服务的快速批量部署,公有云关系型数据库服务(RDS)一般也采用这种方式。
  • 隔离性良好:一个实例中的操作系统(OS)或数据库故障不会影响其他实例下的服务,提高了系统的稳定性和可靠性。

缺点

  • 增加计算资源消耗:多了虚拟化层,会增加一部分计算资源的消耗。
  • 网络管理复杂:每个虚拟化实例使用单独的IP地址,在网络管理上更加复杂。

对于手游业务数据库虚拟化方案,可以考虑采用KVM结合Docker的方案。

数据库使用KVM虚拟化方案要点

在使用KVM虚拟化方案时,需要关注以下几个要点:

  • 服务稳定性:业务的稳定是一切的基础,再好的方案也不能影响业务的稳定,否则将失去实际意义。
  • 避免性能瓶颈:数据库服务的主要瓶颈在于磁盘I/O,虽然手游业务的压力一般不大,但上线前仍需进行充分的测试,对潜在的性能需求要有预估。在遇到高负载情况时,可以直接使用SSD或者PCIe SSD设备,在KVM虚拟化中还可将SSD以裸盘方式直接挂载到KVM实例上。
  • 服务可靠性:可以从以下两个方面提升服务可靠性:
  • 数据库层面:采用主从复制、定期物理&逻辑备份(全备 + 差异备份)、备份恢复等机制。
  • 虚拟化层面:采用共享存储、虚拟机快照等。共享存储优先选择企业级存储设备,但需要注意的是,虚拟机快照并不能保证数据库的完整性。

数据库使用Docker技术

基于Docker技术的数据库服务,有效平衡了单机多实例和KVM虚拟化两种方案的优缺点。它的资源损耗较小,同时具备虚拟化灵活部署和良好隔离性等优点。

然而,当前Docker技术仍存在诸多限制:

  • 磁盘I/O性能瓶颈:Docker使用AUFS文件系统,更容易造成磁盘I/O性能瓶颈,可以通过配置SSD盘来缓解I/O压力。
  • 不支持热迁移:Docker的实例不支持热迁移,可以与KVM结合,利用KVM实现热迁移。
  • 网络模块瓶颈:Docker的网络模块也存在一定的瓶颈。

综上所述,目前在Docker里运行MySQL还有待进一步完善。但随着Docker技术的不断发展和改进,这些限制和瓶颈将会逐渐减少,使其更适合大规模运行MySQL等服务。

作者信息

洞悉

洞悉

共发布了 3994 篇文章