DNS para API REST em máquinas com recursos diferentes

1

Suponha que eu tenha um sistema de API REST com esses 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 construir esses três acessos API em um único URL usando um nome de domínio. Por exemplo, link para esses três computadores (A, B e C no link de URL único )?

O que eu sei é que o DNS pode retornar vários IPs e o cliente pode escolher 1 IP de forma round robin. No entanto, nesse caso, A, B e C têm 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 o recurso X reside.

Pergunta de acompanhamento: Se o DNS não é adequado, existe outro protocolo distribuído para implementar este tipo de sistema?

Obrigado.

    
por kaitosenpai 18.05.2015 / 07:55

1 resposta

0

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

Use um registro DNS com round robin, por exemplo, api.yourcompany.com, para que todos os clientes possam acessar a API por meio do link e devido Para 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.yourcompany.com, servicey.yourcompany.com ... usando um CNAME apontando para o servidor correto.

Como Ian Bamforth afirmou que 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 o 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/

Dessa forma, os pedidos que chegam ao seu servidor com URL / api serão roteados através do balanceador de carga, URLs / servicex serão roteados para o serverx e assim por diante.

    
por 18.05.2015 / 11:01