DNS для REST API на машинах с разными ресурсами

DNS для REST API на машинах с разными ресурсами

Предположим, у меня есть система 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

Вопрос: Могу ли я построить эти три API доступа в одном URL, используя доменное имя. Например,http://пример/apiдля этих трех компьютеров (A, B и C в одном URL-адресе)http://пример/api)?

Я знаю, что DNS может возвращать несколько IP-адресов, и клиент может выбрать один IP-адрес по круговой схеме. Однако в этом случае у A, B и C разные ресурсы. Поэтому клиент должен быть сопоставлен с определенной машиной. Например, запрос от клиента 1 должен быть сопоставлен с компьютером A, где находится ресурс X.

Дополнительный вопрос: Если DNS не подходит, есть ли другой распределенный протокол для реализации такого рода системы?

Спасибо.

решение1

У вас есть несколько вариантов, самый простой из них:

Используйте запись DNS с циклическим перебором, например api.yourcompany.com, чтобы все клиенты могли получить доступ к API черезhttp://api.yourcompany.com/apiи благодаря round robin доступ будет более или менее сбалансированным. Затем для каждой службы X, Y, Z вы можете создать запись DNS типа servicex.yourcompany.com, servicey.yourcompany.com ... используя CNAME, указывающую на нужный сервер.

Как сказал Ян Бэмфорт, вы также можете установить перед ними обратный прокси-сервер (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 и так далее.

Связанный контент