Индивидуальная производительность раздела хранилища таблиц Azure

В документации говорится, что Azure Разделы хранилища таблиц имеют минимальную скорость 500 операций в секунду.

Если мои данные разделены правильно, не будут ли параллельные операции на каждом из этих разделов влиять друг на друга?

Например, если бы мне пришлось выполнять дорогостоящее полное сканирование таблицы в разделе A (максимум 500 объектов в секунду), это повлияло бы на производительность любой операции, выполняемой в разделе B?

Учетные записи хранения имеют ограничение 5000 операций в секунду. Значит ли это, что я могу максимально использовать 10 разделов, прежде чем они начнут влиять на производительность друг друга?


person Dave New    schedule 19.02.2013    source источник


Ответы (2)


Как правило, по возможности следует избегать сканирования таблиц. Это очень дорогие операции (особенно если у вас много разделов). не столько с точки зрения нагрузки на таблицу, сколько у них очень высокая совокупная задержка (поясняется ниже). Тем не менее, иногда этого просто невозможно избежать.

Мы обновили архитектуру хранилища и подняли ряд целевых лимитов.

http://blogs.msdn.com/b/windowsazure/archive/2012/11/02/windows-azure-s-flat-network-storage-and-2012-scalability-targets.aspx

Каждая учетная запись хранения теперь составляет 20 тыс. Операций ввода-вывода в секунду / сек. Каждый раздел теперь 2k / sec

То, как взаимодействуют разделы, немного тонко и зависит от того, как они используются (и меняются со временем).

Хранилище Azure состоит из двух этапов: один набор серверов обрабатывает диапазоны, а другой задает фактическое хранилище (т. Е. 3 копии). Когда таблица холодная, все разделы могут обслуживаться одним сервером. Поскольку разделы подвергаются постоянной нагрузке, система начнет автоматически распределять рабочую нагрузку (т. Е. Осколок) на дополнительные серверы. Осколки создаются на границах разделов.

Для низкого / среднего уровня стресса вы можете не достигать порогового значения для осколков или только минимальное количество раз. Также некоторое влияние будет иметь шаблон доступа (если вы только добавляете, сегментирование не поможет). Произвольный доступ ко всем шаблонам будет лучше всего масштабироваться. Когда система выполняет ребалансировку, вы получите ответ 503 в течение нескольких секунд, а затем операции вернутся в нормальный режим.

Если вы проведете сканирование таблицы, вы фактически сделаете несколько обходов к столу. Когда запрос достигает конца раздела, ответ будет возвращен с любыми найденными данными (или без данных, если критерии не были соблюдены) и токеном продолжения. Затем запрос повторно отправляется (и возвращается с токеном) снова и снова, пока вы не дойдете до конца таблицы. Это абстрагируется SDK, но если вы сделаете прямые вызовы REST, вы это увидите.

С точки зрения производительности таблицы сканирование повлияет только на тот раздел, в котором оно сканируется в данный момент.

Чтобы ускорить широкий запрос, который попадает в несколько разделов, вы можете фактически разбить его на несколько параллельных доступов (например, один поток на раздел), а затем объединить в клиенте. На самом деле это зависит от того, сколько данных вы получаете обратно, насколько велика таблица и т. Д.

person Pat Filoteo    schedule 19.02.2013

Ваши наблюдения верны, производительность каждого раздела независима. НО .. Производительность хранилища таблиц также (в основном?) Зависит от пропускной способности виртуальной машины. Если вы посмотрите на цены на Azure, там есть столбец «I / O производительность », а также на сверхмалых и малых машинах есть« Низкий »и« Средний »ввод-вывод. Таким образом, если машина может получать данные только со скоростью 10 МБ / с, производительность хранилища таблиц в значительной степени не имеет значения - также учитывая, что виртуализированное хранилище (как часть ОС) также будет использовать эту полосу пропускания.

Предел учетной записи хранения в 5000 / сек означает, что при достижении этого уровня у вас могут появиться тайм-ауты для некоторых операций. Убедитесь, что вы создаете архитектуру для любого количества учетных записей хранения, так как если все сделано правильно заранее, этот потолок производительности легко обойти.

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

person Simon Munro    schedule 19.02.2013