最近我被要求为我编写的应用程序实现客户端故障转移。就个人而言,我可以回想起的所有故障转移/负载平衡方案都是通过中间人代理服务器在服务器端实现的。然而,服务器团队的负责人希望我做一些与众不同的事情,这导致我提出了许多问题,并且对于在相关技术和框架的讨论中没有找到太多的挫折感。花了一点时间思考这个问题,我有一些担忧,我希望这里的人可以帮助教育我:) ...
所以,一个基本的方案,你可以从某种形式的多个服务器地址开始,我会通过跟踪故障在放弃之前轮换等等,这似乎很简单。他想要一些不同的东西。他的愿望是设置我们的DNS服务器,为我们的各种Web服务/服务器返回多个A记录。然后他希望我的客户端在一个失败时智能地在各种IP地址之间进行故障转移。类似于许多大型网络农场的运作方式。在构思上再简单,但在细节上,我有顾虑。
此时我想,我应该描述我正在使用的环境。该应用程序是在Android / iOS上运行的移动应用程序。在内部,除了利用框架之外,它并不是非常重要,该应用程序被编写为构建在cordova之上的角度spa(因此是混合移动应用程序)。目前,我使用ngResource来满足我所有的web api需求(下面使用$ http)。
A)那么我的第一个问题。据我所知,具有多个A记录的DNS条目无法保证将IP地址传递给任何给定的客户端。已解析的DNS记录缓存在中间DNS服务器上,通常只保存1条记录,除非DNS服务器是“智能”的。虽然有些DNS服务器可能会按响应时间,tracerts等对IP地址进行加权,但大多数DNS服务器都没有,即使它们有多个IP地址。如果我是正确的,那么这个方案似乎不太可能在实践中运作良好。
B)我的下一个概念障碍是更具体的实施。 Apriori,似乎我能够获得域名的全套IP地址的唯一方法是通过本机插件(例如Android上的Java中的InetAddress.getAllByName)。这似乎比第二个明显的答案更好 - 一个外部Web服务,可以为我查找。我不知道有任何方法可以在Javascript中执行此操作,更不用说具有此功能的任何angular / $ http / $资源模块了吗?有什么建议吗?
C)获得多个IP地址(不知何故),我可以设置一个带有超时和故障转移的承诺链。然而,这并不是我所希望的。目前我已经构建了我的应用程序,以使用角度工厂生成的$ resource对象和定义的适当路径(例如,帐户),我使用标准依赖注入机制来根据需要访问各种控制器。我宁愿不重新发明轮子,也不为自己或其他任何人创造巨大的代码足迹或维护问题,因此我想提出最常用的“常用做法”方法来处理这个问题angular / cordova编码器失去了理智,开始牺牲瑞典码鱼到他的(或她的!)心灵的一个永久黑暗角落竖立的头足类祭坛。其中,假设我必须在应用程序自我引导之后的某个时刻从外部到角度源获取dns名称的IP地址集合(因为这些将是应用程序中可能任意点的异步调用)生命周期),(捕捉呼吸)人们如何建议构建我的ngResource对象的引用来引用它们?我可以想象几种不同的技巧,但我更希望这不是因为我的谷歌搜索引起我的信念,并且人们会为我提出一些建议8。)
提前致谢!