Ldap 如何进行超快速动态配置?

Ldap 如何进行超快速动态配置?,ldap,configuration-files,Ldap,Configuration Files,我们计划从与每个客户端部署相关的一系列静态配置文件迁移出去 所有客户机数据都存在于MySQL中,客户机部署的元数据存在于静态文本文件中:要使用的数据库/碎片、文件存储的存储库目录/位置,以及更多信息,如默认分页、速率和启用的模块 我们希望摆脱这些静态配置文件,这些文件目前不仅仅是键值对,并利用Perl的散列和数组,但通过一些努力可以简化,并利用可以存在于快速响应数据库、LDAP或其他存储库中的内容。LDAP的灵活结构允许数据嵌套/层次结构,我认为这看起来很吸引人,但我想知道是否有其他关于最佳方法

我们计划从与每个客户端部署相关的一系列静态配置文件迁移出去

所有客户机数据都存在于MySQL中,客户机部署的元数据存在于静态文本文件中:要使用的数据库/碎片、文件存储的存储库目录/位置,以及更多信息,如默认分页、速率和启用的模块

我们希望摆脱这些静态配置文件,这些文件目前不仅仅是键值对,并利用Perl的散列和数组,但通过一些努力可以简化,并利用可以存在于快速响应数据库、LDAP或其他存储库中的内容。LDAP的灵活结构允许数据嵌套/层次结构,我认为这看起来很吸引人,但我想知道是否有其他关于最佳方法的建议,我认为LDAP并不是为此而设计的,它已经存在很长一段时间了

我们用来识别部署、数据库、存储库路径和其他变量的“关键”是部署的“域”(这些将是唯一的),理想情况下,我们希望配置存储解决方案是一个中心点或联合服务,多个服务器可以(通过LAN)快速查询

很少对这些数据进行“更新”操作,但读取速率非常频繁,因此读取速度至关重要

有什么建议吗

Geoff免责声明:我致力于开发一个工具来帮助部署(但我并不提倡将其用于您)


我建议您只需拥有一个分发配置的私人网站,并将其缓存在您的“阅读”应用程序中即可。然后,当更新发生时,您可以让中央服务器“ping”外部,建议它们刷新缓存(或者作为客户端缓存过期的一部分进行刷新)。

我的解决方案是将配置与应用程序放在同一个数据库中。这样,我只需将一个DB连接器传递给应用程序,它就会使用正确的配置

在应用程序中,配置是通过一个全局配置实例访问的,该实例将一次性读取数据库中的所有值并缓存它们。对于基于web的应用程序,我使用一个特殊的URL通知配置实例刷新自身

对于其他应用程序,我使用本地文件。当文件存在时,将重新读取配置数据。您可以在第二个线程中执行此操作,或者每次只检查文件。由于路径是静态的,因此操作系统可以优化此访问,直到只需很少的时间。在读取配置文件之后,文件被删除,所以我知道重载发生了。

< P>这可能是一种“非回答”,但是请考虑以下几点:你是否试图以一种会在未来引入更多问题的方式来解决感知到的问题?您提到了您对存在于配置文件中的Perl数据结构的依赖。考虑一下,所有这些配置数据都存在于RDBMS中。在一个提供完全不同的功能集的系统中,您将如何使用现有方法复制“免费”获得的功能?在某个时刻,您是否会得到包含良好的旧Perl数据结构的CLOB列


到底是什么让您远离当前的配置机制?我有一种感觉,这些问题可以自行解决,而不必进行大规模的建筑变革。

很有趣。在发布了我的答案后,我才意识到你是谁。是的,我也很好奇;-)谢谢你的帖子-你的项目看起来真的很有趣!好提示;我不确定它在这种情况下是否会起作用,因为我们在应用程序服务器中使用的是一个通用代码,它可能会在某一时刻命中一个域,然后在下一时刻命中另一个域(部署)。。很遗憾,他们记不起上下文/配置。杰夫:那么你就在这个基础上为缓存设置密钥。那么,想法是将所有配置变量存储在内存中,然后在运行时以这种方式访问它们?不能否认这种方法的“速度”优势。。。隔离命名空间方面可能有点有趣;你可以把它们存放在你想要的地方;它可以是memcached,也可以是文件,也可以是DB(正如其他人所建议的);主要的技巧是从一个中心位置获取它们,并且仅根据到期日从该位置进行更新。。。虽然将每个部署放在一个大的数据库中是可能的,但它会让一些客户机有点担心,因此使用离散的数据库并对它们进行“分区”会为客户机提供一些自然的切分以及增加的安全/隐私感。我想我的另一个问题是,像使用InnoDB或MyISAM的MySQL这样的东西在读量大的环境中是否会像其他数据库类型一样“快速”…我的建议是将DB名称作为应用程序的唯一配置元素。因此,您可以有许多数据库,每个数据库本身都包含一个配置副本。示例:您有DBs“dev”、“test”、“prod”。同一个应用程序,每个应用程序都将名称作为启动参数,然后从正确的数据库读取正确的配置;我们可以回到键/值对,并通过将它们命名为“slurp”,将它们放入我们已有的Perl数据结构中(如果需要的话)。我们只需要达到这样一个点,即我们能够在不接触任何.pl或静态配置的情况下部署新的部署/域。负载平衡和优化核心代码集是驱动因素。尽管如此,您关于思考后果和测试不存在的问题的警告仍值得赞赏。。。最好不要过度杀戮。