多个服务器上的常量

时间:2016-02-27 05:51:37

标签: mysql authentication refactoring constants credentials

问题是,如何更新常量?这听起来像是一个愚蠢的问题,但让我们看一下我的问题的背景:

背景

我管理一个服务器网络,其中包括一个MySQL服务器,多个HTTP服务器和一个Minecraft服务器(一个自托管服务器,安装了Minecraft的游戏玩家可以连接并一起玩)。所有用户端服务(HTTP服务器,Minecraft服务器,用户应用程序)都与MySQL服务器直接或间接相关。 MySQL数据库为每个玩家账户存储不同的数据,例如,玩家的在线/离线状态等。

在编程中,常量用于创建对运行时不会更改的值的常规引用。特别是对于软件内部标识符,例如数据标志,位掩码等。在我的例子中,我还使用常量来存储特定数据,例如MySQL服务器的地址和其他凭证。因此,当我想更改服务器地址时,我只需要从一个点修改它们,例如,服务器的内部constants.php

问题

  1. 当我将MySQL数据库迁移到另一台主机或更改密码时,我必须更新每台服务器上的详细信息。由于MySQL服务器本身是集中式数据提供者,因此无法创建提供服务器地址的集中式数据提供程序。这意味着,每次更改值时,我都必须更新所有服务器。我还必须在所有这些地方维护一个非常私人和本地的列表(可能必须写在备忘录上并将其粘贴在我的计算机上!),因为很难找到所有这些参考文献。所以,我的问题是,是否有更好的管理方式可以让我从一个地方改变价值观?请注意,服务器位于不同的主机上,因此无法将其放在本地文件中,创建集中式数据提供程序(称为密码提供程序)听起来并不合理。提供对真实集中数据提供者(MySQL)的访问,因为如果我需要更改MySQL数据库的详细信息,我也同样需要更改密码提供者的详细信息。
  2. 这不是一个问题。但由于这是一个类似的问题,我也把它放在这里。我使用整数位掩码来存储玩家等级。例如,如果玩家是VIP,他有一个0x01标志,如果玩家是主持人,他有0x10标志,0x11如果是VIP和主持人,反之亦然。我也想重构位掩码值,但这会很麻烦,因为我需要关闭所有服务器并更新MySQL值,更新每台服务器上的常量,然后重启所有服务器,以避免在此期间出现潜在的安全漏洞更新。有没有更方便的方法呢?
  3. 这也是一个网络管理问题,但我认为它与编程有关。

1 个答案:

答案 0 :(得分:1)

  1. 我们谈论的是部署系统。例如,我们可以使用 capistrano:https://github.com/capistrano/capistrano。我们要 将constants.php保存到git并在capistrano中创建任务以进行部署 这个文件到每个服务器。我使用这个工具来部署项目,这些项目是俄罗斯互联网上最繁忙的50个站点之一:)

  2. 我们谈论的是数据迁移。所以有几种方法。其中一些有停机时间而有些没有(有时取决于具体情况)。

  3. 无停机的数据迁移:

    1. 修改你的应用程序,这样就可以理解玩家位线掩码的旧版本 和新的
    2. 部署修改后的应用
    3. 将位掩码更新到数据库中
    4. 修改您的应用,以便它只能理解位掩码的新变种
    5. 部署修改后的应用