HighLoad.org – блог о высоких нагрузках
HighLoad.org > Принцип высокодоступной системы: управление параллельностью

Принцип высокодоступной системы: управление параллельностью
2010-02-23 04:40 my_fess 
Одним из важных принципов построения системы с высоким коэффициентом готовности — это управление параллельностью. Идея заключается в том, чтобы разрешить ровно столько трафика, сколько ваша система может успешно обработать. Например: если проверено, что ваша система может обработать 100 одновременных соединений, тогда 101-ому запросу должно быть предложено попробовать попозже или подождать, пока один из 100 предыдущих запросов выполнится. Нельзя позволять 101-ому запросу негативно воздействовать на других 100 пользователей. Задержки должны быть только в выполнение 101-го запроса.

Зачем нужно управление параллелизмом?

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

Преимущества управления параллелизмом

  1. Избегание волновых провалов. Представьте внезапную волну в трафике, которая перекрывает лимиты вашей системы. Допустим база данных становится узким местом. Так как база данных замедляется, то потоки в серверах с приложением будут накапливать необработанные запросы. И теперь уровень выше серверов с приложением (веб сервер/балансировщик нагрузки) будет тоже накапливать необработанные запросы. Очень скоро система достигнет такого состояния, что архитектура на каждом уровне будет подорвана — вы потеряли контроль над системой. Вы можете избежать этой ситуации, контролируя объем входящего трафика.
  2. Гибкость. Возможность контролировать объем получаемого вашей системой трафика очень мощная. Например: после релиза вы осознали, что возможности масштабирования вашей системы ухудшились. Вначале вы были уверены в каком-то определенном лимите параллельных соединений, но все измерения показывают, что по факту система не может справиться с такой нагрузкой. Вы можете взять и уменьшить предел допустимой нагрузки. Это не идеальное решение, но это лучше, чем крах всей системы.
  3. Гарантии качества обслуживания. Вы можете быть более уверены в качестве обслуживания разрешенных запросов.

Одно из решений

Хорошим началом для старта изучения проблемы будет HAProxy. Он предлагает огромное количество функций, таких как: балансировка нагрузки и переключение контента в дополнение к управлению параллелизмом. Лимиты параллелизма могут быть установлены как на глобальном, так и/или на уровне сервера. Важно, что он также предоставляет очереди запросов. Это чрезвычайно мощная функция, когда используется одновременно с управлением параллелизмом. Я рекомендую вам использовать HAProxy, если вы проектируете высокодоступную систему. Управление параллелизмом должно планироваться вместе с объемами нагрузок. Если лимит параллелизма уже достигается - лучше начать масштабировать систему и уже потом увеличивать лимит.

Автор статьи: Ashish Soni Дата: 5 февраля 2010 Оригинал статьи


комментарии [0]  | комментировать

  © 2010-2018 HIGHLOAD