Назад | Перейти на главную страницу

Как распределить HTTP-трафик на ближайший сервер?

Это вопрос из двух частей. Итак, у меня есть DigitalOcean Droplet в Торонто со стеком ламп (конечно, с веб-сайтом). Я хочу создать снимок этой капли и развернуть клон, возможно, в Сан-Франциско и Амстердаме.

  1. Как мне выполнить маршрутизацию на сервер с наименьшей задержкой в ​​зависимости от местоположения?

  2. Как мне клонировать эти сайты в реальном времени. Например, если я редактирую веб-сайт, изменение отражается на всех серверах?

Спасибо

Ты можешь использовать Маршрутизация на основе задержки AWS Route 53. Я почти уверен, что вы можете использовать R53 с источниками, не относящимися к AWS.

В качестве альтернативы CloudFlare имеет менеджер по трафику который умеет делать "геоуправление". Возможно, он все еще находится в стадии бета-тестирования, и я не знаю, платный он или бесплатный.

Обновить Я только что заметил твой второй вопрос. Я предполагаю, что ваша цель - это в первую очередь время загрузки страницы, а второстепенная задача - доступность сервиса. Далее я предполагаю, что веб-сайт - это Wordpress, потому что сделать то, что я предлагаю ниже, со стандартным программным обеспечением сложнее, чем написанное на заказ.

Если вы хотите, чтобы два сайта обслуживали трафик одновременно, синхронно, вам нужно подумать о какой-то репликации базы данных с несколькими мастерами. Это не так просто, но есть способы сделать это. Digital Ocean имеет учебник здесь. RSync или BitTorrent синхронизация будет иметь дело с репликацией файлов.

Если ваша единственная цель - быстрое время отклика, вам может быть не хуже, если вы используете один сервер с CDN, чтобы гарантировать, что ваши статические ресурсы обслуживаются локально - CloudFlare подходит для этого. Ваша задержка для одного запроса страницы, вероятно, не так значительна, около 100 мс дополнительно, другие ресурсы будут обслуживаться с ближайшего узла.

Если вашей единственной целью является резервирование на случай сбоя, вы все равно можете рассмотреть для базы данных сценарий типа реплики мастер / чтение. Маршрутизируйте весь трафик на один сервер, при этом база данных и файлы реплицируются в реальном времени на второй сайт. Если основной сайт выходит из строя, вы переходите на второй сайт. Если это произойдет, вам нужно решить, что делать, когда основной сайт снова подключится к сети, и как восстановить синхронизацию. В этом случае проще всего синхронизировать работу с несколькими мастерами.

К сожалению, то, что вы пытаетесь сделать, не совсем тривиально и может быть от умеренного до исключительно сложного в зависимости от ваших сценариев использования. Нам действительно нужно понимать ваши цели, чтобы предлагать лучшие решения.

Тим дал хорошие ответы на ваш первый вопрос.

Во втором (к сожалению) нет, это относится к проблемам "инвалидации кеша". Есть несколько решений:

  • Используйте один сервер и используйте сервисы CDN (Cloudflare / CloudFront) для кэширования содержимого. Вы можете настроить TTL для обработки недействительности кеша (т. Е. Модели «конечной согласованности») или,
  • Используйте один сервер и службы CDN, а также отправляйте запросы на очистку после обновления содержимого.
  • Сохраните три сервера, тогда вам нужно будет разработать API, чтобы выполнить чистку самостоятельно.