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.