具有不同资源的机器上的 REST API 的 DNS

具有不同资源的机器上的 REST API 的 DNS

假设我有一个 REST API 系统,具有以下要求:

The API that can be accessed via this URL http://<ipaddress>/api/
I have three computers with three IP addresses: IP A, B and C respectively. 

Each of this computer can be accessed via URL API specified earlier.
to access A the URL is http://<IP A>/api.
to access B the URL is http://<IP B>/api.
to access C the URL is http://<IP C>/api.

Each computer may have different information / resources.
A has resource X
B has resource Y
C has resource Z

Client 1 has access in resource X
Client 2 has access in resource Y
Client 3 has access in resource Z

问题: 我可以使用域名在单个 URL 中构建这三个 API 访问吗?例如,http://示例/api对于这三台计算机(A、B 和 C 在单个 URL 中)http://示例/api)?

我知道 DNS 可能会返回多个 IP,客户端可以以循环方式选择 1 个 IP。但是,在这种情况下,A、B 和 C 拥有不同的资源。因此客户端需要映射到特定机器。例如,来自客户端 1 的请求需要映射到资源 X 所在的计算机 A。

后续问题: 如果DNS不适合,是否有其他分布式协议来实现这种系统?

谢谢。

答案1

您有多种选择,最简单的一个:

使用循环 DNS 记录,例如 api.yourcompany.com,以便所有客户端都可以通过以下方式访问 apihttp://api.yourcompany.com/api并且由于采用循环机制,访问将或多或少保持平衡。然后,对于每个服务 X、Y、Z,您可以使用指向正确服务器的 CNAME 创建 DNS 记录,例如 servicex.yourcompany.com、servicey.yourcompany.com ...。

正如 Ian Bamforth 所说,您还可以在它们前面有一个反向代理(nginx、apache、haproxy......),并根据所使用的 URL 重定向到所需的服务。

编辑:

Apache 的示例配置

<Proxy "balancer://apicluster">
    BalancerMember "http://serverx.yourcompany.com:80"
    BalancerMember "http://servery.yourcompany.com:80"
    BalancerMember "http://serverz.yourcompany.com:80"
</Proxy>

ProxyPass /api/ balancer://apicluster/api/
ProxyPass /servicex/ http://serverx.yourcompany.com/servicex/
ProxyPass /servicex/ http://servery.yourcompany.com/servicey/
ProxyPass /servicex/ http://serverz.yourcompany.com/servicez/

这样,通过 URL /api 到达你的服务器的请求将路由通过负载均衡器,URL /servicex 将路由到serverx等等。

相关内容