Sharding (так!) ярус веб-узлов для предотвращения узкого места подсистемы балансировки нагрузки?

Вы можете использовать Pattern Decorator с интерфейсом Animal и вашим Lion экземпляром:

public class EatingDecorator implements Animal {
  private Animal target;
  private int counter;

  public EatingDecorator(Animal target) {
    this.target = target;
  }

  @Override
  public void eat() {
    target.eat();
    counter++;
  }

  public int getCounter() {
    return counter;
  }
}

, а затем применить его

Animal lion = new EatingDecorator(new Lion());
lion.eat();
lion.eat();
lion.eat();
System.out.println(((EatingDecorator) lion).getCounter()); // 3

7
задан til 2 September 2017 в 20:36
поделиться

4 ответа

Легкий. Веб-серверы, которые являются не сохраняющими состояние, являются сбалансированной загрузкой. Серверы приложений (средний уровень), которые содержат данные сессии, не. Веб-серверы могут использовать Ваш идентификационный cookie сессии для определения со что сервером приложений связаться.

Memcached и Скорость Microsoft являются продуктами, которые решают эту точную потребность.

Править: Как веб-сервер знает который сервер приложений связаться? Это встраивается в идентификационный хеш сессии и могло в общем быть сделано однако, Вам нравится. Это могло быть столь же просто как Ваш идентификатор сессии, являющийся server:guid. Memcached основывает его от хеша, все же.

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

Edit2: Возвращаясь по некоторым интервью eBay, я, возможно, получил подробные сведения их реализации немного неправильное. Они не делают кэширования, и они не делают состояния на среднем уровне. То, что они делают, должно иметь сбалансированный средний уровень загрузки (серверы приложений), разделенные функцией. Так, у них был бы пул серверов для, например, просматривая объекты. И затем другой пул для того, чтобы продать товары.

Те серверы приложений имеют "умный" DAL, который направляет к базам данных черепка (разделенный и функцией и данными, таким образом, Пользователи A-L на Database1, Пользователи M-Z на Database2, Объекты 1-10000 на Items1, и т.д.).

У них нет состояния на среднем уровне, потому что они делятся функцией. Так, опыт обычного пользователя включил бы больше чем 1 пул серверов приложений. Скажите просмотр объекта (ViewAppServerPool) затем пойдите для предложения цены за объект (BidAppServerPool). Все те серверы приложений должны были бы остаться в синхронизации, которая затем требует, чтобы распределенный кэш управлял всем. Но, их масштаб является столь большим, что никакой распределенный кэш не мог эффективно управлять им, ни мог сервер единой базы данных. Это означает, что у них есть к черепку уровень данных, и любая реализация кэша должна была бы быть разделена через те же границы.

Это подобно тому, что я отправил выше, просто спустил слой. Вместо того, чтобы иметь веб-сервер определяют, какой сервер приложений связаться, сервер приложений определяет который база данных связаться. Только, в случае eBay, это могло на самом деле совершать нападки 20 + серверы баз данных из-за их стратегии раздела. Но, снова, уровень не сохраняющий состояние имеет своего рода правило (правила), что он использует для контакта с уровнем с сохранением информации. Правила eBay, однако, немного более сложны, чем упрощенный "User1 находится на Server10", постановляют, что я объяснял выше.

1
ответ дан 7 December 2019 в 07:52
поделиться

Можно найти полезным следующая бумага, которая представляет разработку и реализацию высоконадежной системы хранения значения ключа что часть базового сервисного использования Amazon для обеспечения “постоянного” опыта:

Giuseppe DeCandia, Deniz Hastorun, Madan Jampani, Gunavardhan Kakulapati, Avinash Lakshman, Alex Pilchin, Свами Sivasubramanian, Peter Vosshall и Werner Vogels, “Динамо: Высоконадежное Хранилище Значения ключа Amazon”, в Продолжениях 21-го Симпозиума ACM по Принципам Операционных систем, Stevenson, Вашингтон, октябрь 2007.

2
ответ дан 7 December 2019 в 07:52
поделиться

Я не знаю, как они делают это, но здесь являются некоторыми предложениями:

  • Чтобы постараться не перегружать сам хост подсистемы балансировки нагрузки, используйте циклический DNS ИЛИ
  • Перенаправьте различные клиенты к различным кластерным адресам на основе загрузки, настроек, геолокации, и т.д.

Распределять загрузку среднего уровня,

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

Распределять загрузку базы данных бэкэнда

  • "Стандартный" sharding "оперативных" данных в расчете на пользователя или на учетную запись
  • Асинхронно копируйте медленно изменяющиеся или относительно статические данные; пользователи видели его устаревший (но не очень большую часть времени). Средний уровень и веб-серверы соединяются с базой данных, локальной для их собственного местоположения
2
ответ дан 7 December 2019 в 07:52
поделиться

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

Архитектура eBay и архитектура Amazon

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

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

Если это не получает Вас до такой степени, что единственная подсистема балансировки нагрузки может обработать загрузку затем, следующие повышаются, должен повредить транзакции с помощью маршрутизации IP и/или гео-DNS. Сайты, столь же большие как eBay и амазонка, будут во многих различных центрах обработки данных с большим количеством интернет-соединений в каждом. Вы берете все входящее из Интернета, выталкивают запад поисков и отправляют его на серверы "поисков" центра обработки данных западного побережья, что-либо с запада внимания отправляется на серверы "внимания" центра обработки данных западного побережья, что-либо с востока поисков, и он переходит к серверам "поисков" центра обработки данных восточного побережья и т.д. Каждая из тех систем могла быть островом единственная подсистема балансировки нагрузки, которая могла обработать загрузку, некоторые подсистемы балансировки нагрузки там могут обработать сотни тысяч транзакций в секунду даже зашифрованный SSL. На задней стороне Вы постоянно копируете оптом в каждый центр обработки данных, но это может быть вне синхронизации.

2
ответ дан 7 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: