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