다음 요구 사항을 충족하는 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세 대의 컴퓨터(단일 URL의 A, B, C)http://예제/API)?
내가 아는 것은 DNS가 여러 IP를 반환할 수 있고 클라이언트는 라운드 로빈 방식으로 1개의 IP를 선택할 수 있다는 것입니다. 그러나 이 경우 A, B, C는 서로 다른 자원을 가지고 있습니다. 따라서 클라이언트를 특정 컴퓨터에 매핑해야 합니다. 예를 들어 클라이언트 1의 요청은 리소스 X가 있는 컴퓨터 A에 매핑되어야 합니다.
후속 질문: DNS가 적합하지 않은 경우 이러한 종류의 시스템을 구현할 수 있는 또 다른 분산 프로토콜이 있습니까?
감사합니다.
답변1
여러 가지 선택 사항이 있으며 가장 간단한 선택 사항은 다음과 같습니다.
예를 들어 api.yourcompany.com과 같이 라운드 로빈이 포함된 DNS 레코드를 사용하면 모든 클라이언트가 다음을 통해 API에 액세스할 수 있습니다.http://api.yourcompany.com/api라운드 로빈으로 인해 액세스가 다소 균형을 이룰 것입니다. 그런 다음 각 서비스 X, Y, Z에 대해 올바른 서버를 가리키는 CNAME을 사용하여 servicex.yourcompany.com, servicey.yourcompany.com ...과 같은 DNS 레코드를 생성할 수 있습니다.
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를 사용하여 서버로 들어오는 요청은라우팅됨로드 밸런서를 통해 /servicex URL은 다음과 같습니다.라우팅됨serverx 등에.