DNS para API REST em máquinas com recursos diferentes

DNS para API REST em máquinas com recursos diferentes

Suponha que eu tenha um sistema API REST que tenha estes requisitos:

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

Pergunta: Posso criar esses três acessos à API em um único URL usando um nome de domínio. Por exemplo,http://exemplo/apipara esses três computadores (A, B e C em URL únicohttp://exemplo/api)?

O que eu sei é que o DNS pode retornar vários IPs e o cliente pode escolher 1 IP no modo round robin. Porém, neste caso, A, B e C possuem recursos diferentes. Portanto, o cliente precisa ser mapeado para uma máquina específica. Por exemplo, a solicitação do cliente 1 precisa ser mapeada para o computador A onde reside o recurso X.

Questão a seguir: Se o DNS não for adequado, existe outro protocolo distribuído para implementar este tipo de sistema?

Obrigado.

Responder1

Você tem várias opções, a mais simples:

Use um registro DNS com round robin, por exemplo, api.suaempresa.com para que todos os clientes possam acessar a API por meiohttp://api.suaempresa.com/apie devido ao round robin o acesso será mais ou menos equilibrado. Então, para cada serviço X, Y, Z você pode criar um registro DNS como servicex.suaempresa.com, servicey.suaempresa.com ... usando um CNAME apontando para o servidor correto.

Como Ian Bamforth afirmou você também pode ter um proxy reverso na frente deles (nginx, apache, haproxy ...) e redirecionar para os serviços necessários dependendo da URL usada.

EDITAR:

Exemplo de configurações para 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/

Desta forma, as solicitações que chegam ao seu servidor com URL /api serãoroteadoatravés do balanceador de carga, URLs /servicex serãoroteadopara serverx e assim por diante.

informação relacionada