我们都已经看到了当您使用裸露的“heroku create”将应用程序部署到Heroku时会自动分配的有趣子域。
例如:炽热薄雾4652,电夜4641,晨霜5543,辐射河7322等。
似乎它们都遵循形容词-名词4位数字的模式(大部分情况下)。他们是否只是简单地输入了一些形容词和名词的字典,然后在按下应用程序时从中随机选择组合?是否有一个完成此任务的Ruby gem ,或者提供了一本可以按词性搜索的字典,还是需要手动完成?
最佳答案
这里的Heroku API团队的工程师:我们采用了最简单的方法来生成应用名称,这基本上就是您的建议:将形容词和名词的数组保留在内存中,从每个元素中随机选择一个元素,并将其与一个随机数组合1000至9999。
这不是我编写的最激动人心的代码,但是很有趣的是,我们看到了要进行扩展才能做到的事情:
INSERT
,然后挽救唯一性约束错误以选择另一个名称。在我们拥有大量名称(以及使用它们的应用程序不太多的情况)的情况下,此方法可以很好地工作,但是在某种程度上,我们开始注意到在名称生成过程中发生了很多冲突。为了使其更具 flex ,我们决定选择多个名称,并通过单个查询检查哪些名称仍然可用。显然,由于存在竞争条件,我们仍然需要检查错误并重试,但是表中有如此多的应用程序,显然更有效。
如果我们的名字池很低,它还具有一个方便的钩子(Hook)让我们获得警报的好处(例如:如果抽取了1/3的随机名称,则发送警报)。
61 * 74 * 8999
)。 您可能已经猜到的罪魁祸首是
rand
是一个非常糟糕的pseudorandom number generator。相反,使用SecureRandom
选择随机元素和数字可以从根本上降低冲突的数量,使其与我们最初期望的相匹配。 由于要进行大量工作来扩展此方法,因此我们不得不问是否有更好的方法来首先生成名称。讨论的一些想法是:
很高兴看到下次碰撞警报触发时我们将要做什么!
希望这可以帮助任何从事友好名称生成工作的人。
关于ruby - 如何以编程方式生成类似于Heroku的子域名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7621341/