【发布时间】:2014-07-14 15:38:09
【问题描述】:
我正在创建一个 WCF 服务,该服务将利用第三方服务,该服务要求我们通过请求传递几个 API 密钥。其中一个密钥必须每 30 天更新一次,另一个必须每 24 小时更新一次。这些导致一个新的密钥被发布。由于我将运行此服务的多个负载平衡实例,因此我需要一些方法来保持这些实例之间的密钥更新和同步。我更愿意在它们到期之前(至少提前几个小时)更新它们。
我一直在寻找解决这个问题的方法,但除了找到一些并没有真正解决问题的行锁定讨论之外,我还没有找到很多解决问题的方法。不过,我可能只是没有使用正确的搜索词。
我有几个想法,但它们都有缺点,我想知道是否有更好的方法,甚至我不知道的模式(或模式组合)会提供更好的解决方案。
一个问题是如何以及何时更新密钥。更新过程很简单,因为我将存储最初检索密钥的日期时间,所以我会知道何时需要更新。如果需要,我可以让服务尝试在每天的某个时间更新它,但是所有服务实例都会同时尝试这样做。我可以将它们配置为在不同的时间尝试,但是我必须确保配置始终设置为不同的时间。如果他们部署更新并为所有人提供相同的配置,我可能会看到这在某些时候会成为一个问题。
我考虑过让每个 Web 服务在数据库中注册自己,并让其中一个作为主服务。然后,当更新时间滚动时,只有指定为主实例会尝试更新,并且它可以在其他已注册实例上调用方法以在密钥更新后同步它们。我想我需要让每个服务相当频繁地更新它在数据库中的状态。他们还需要检查主服务以确保它最近也已更新,否则需要另一个实例来接管该角色。这似乎会变得混乱,我目前不知道服务实例如何知道它正在运行的服务器当前是否处于轮换状态。如果我这样做会涉及很多场景,所以如果有更好的方法,我不急于尝试这样的事情。
所以,这似乎已经解决了很多次,但我只是没有找到正确的答案。我确信我可以把一些东西放在一起来完成它,但我想确保我不会让事情变得比他们应该做的更困难,或者给我们制造任何不必要的维护问题。对此的任何建议将不胜感激!
【问题讨论】:
标签: c# web-services wcf load-balancing api-key