<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ono &#187; База данных</title>
	<atom:link href="/category/planirovanie-moshhnostej/baza-dannyx/feed" rel="self" type="application/rss+xml" />
	<link>http://ono.org.ua</link>
	<description>жизнь в цифровом мире</description>
	<lastBuildDate>Wed, 07 Aug 2013 08:59:17 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.8</generator>
	<item>
		<title>Использование API и его влияние на мощности</title>
		<link>http://ono.org.ua/ispolzovanie-api-i-ego-vliyanie-na-moshhnosti.html</link>
		<comments>http://ono.org.ua/ispolzovanie-api-i-ego-vliyanie-na-moshhnosti.html#comments</comments>
		<pubDate>Wed, 07 Mar 2012 18:57:11 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[База данных]]></category>

		<guid isPermaLink="false">http://ono.org.ua/?p=1722</guid>
		<description><![CDATA[
В наше время все больше веб-сайтов используют открытые АРI, предоставляющие доступ к их сервису внешним разработчикам. Появление открытых API должно сопровождаться планированием мощностей для использования этого сервиса.
Возможно вы уже поняли, что я являюсь убежденным сторонником использования  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2012/03/API_stat.jpg"><img class="aligncenter size-full wp-image-1723" title="Статистика запросов API" src="/wp-content/uploads/2012/03/API_stat.jpg" alt="Статистика запросов API" width="500" height="404" /></a></p>
<p>В наше время все больше веб-сайтов используют открытые АРI, предоставляющие доступ к их сервису внешним разработчикам. Появление открытых API должно сопровождаться <a title="Цели и проблемы планирования мощностей" href="/celi-i-problemy-planirovaniya-moshhnostej.html">планированием мощностей</a> для использования этого сервиса.<span id="more-1722"></span></p>
<p>Возможно вы уже поняли, что я являюсь убежденным сторонником использования метрик прикладного уровня наряду с системными метриками. <a title="Влияние социальных веб-сайтов и открытых API" href="/vliyanie-socialnyx-veb-sajtov-i-otkrytyx-api.html">Использование API</a> относится к тем областям, в которых метрики прикладного уровня играют особенно важную роль. Разрешая другим разработчикам работать с вашими данными через открытые API, вы фактически делаете возможным намного более целенаправленное и формализованное использование своего сайта.</p>
<p>Одно из преимуществ открытых API заключается в том, что они позволяют повысить эффективность вашего приложения. Если внешние разработчики захотят получить доступ к данным, а вы не предоставите методы API для этой цели, вероятно, им придется извлекать данные из страниц сайта, а это крайне неэффективно по многим причинам. Скажем, даже если их интересует только конкретное значение на странице, им все равно придется запрашивать всю страницу со всем содержимым: разметкой CSS, JavaScript и другими компонентами, которые необходимы для отображения страницы в клиентском браузере, но не представляют интереса для разработчика. Но, хотя API повышают эффективность приложения, при отсутствии должного контроля они также открывают ваш веб-сервис для потенциальных злоупотреблений, так как у других приложений появляется возможность запрашивать конкретные фрагменты данных. Наличие методов сбора и сохранения данных об использовании открытых API на уровне пользователей или запросов может считаться обязательным требованием к отслеживанию мощностей на таких сайтах. Задача обычно решается посредством использования уникальных ключей API или других уникальных удостоверений. При каждом обращении к API ключ идентифицирует приложение и разработчика, ответственного за его создание.</p>
<p>Поскольку выдать огромное количество вызовов через API намного проще, чем из обычного клиентского браузера, вы должны следить за тем, какие вызовы API генерируются тем или иным приложением, и с какой частотой.</p>
<p>В Flickr автоматически объявляются недействительными любые ключи, которые используются для злоупотреблений API в соответствии с положениями, описанными в условиях обслуживания. Для каждого ключа API накапливается почасовая статистика о количестве вызовов и подробностях каждого вызова. Рисунок дает общее представление о метриках вызовов API.</p>
<p>Располагая такой информацией, вы можете определить, какие ключи API ответственны за наибольший объем трафика. В случае необходимости по каждому ключу можно получить подробную информацию.</p>
<p>Регулярный сбор этой информации даст вам гораздо более четкое представление о том, как использование API влияет на ваши ресурсы. После этого вы сможете регулировать ограничения API по мере изменения ситуации с мощностями.</p>
]]></content:encoded>
			<wfw:commentRss>http://ono.org.ua/ispolzovanie-api-i-ego-vliyanie-na-moshhnosti.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Особые случаи и многофункциональные серверы</title>
		<link>http://ono.org.ua/osobye-sluchai-i-mnogofunkcionalnye-servery.html</link>
		<comments>http://ono.org.ua/osobye-sluchai-i-mnogofunkcionalnye-servery.html#comments</comments>
		<pubDate>Wed, 07 Mar 2012 18:32:24 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[База данных]]></category>

		<guid isPermaLink="false">http://ono.org.ua/?p=1712</guid>
		<description><![CDATA[
В примере с веб-сервером определяющей метрикой была загрузка процессора. Стоит признать, что это допущение — наличие фиксированного объема процессорных ресурсов для выполнения работы облегчает задачу. Кроме того, задача упрощалась и тем фактом, что Apache был единственным приложением, существенно  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2012/03/Apache_query.jpg"><img class="aligncenter size-full wp-image-1714" title="Запросы Apache за два дня" src="/wp-content/uploads/2012/03/Apache_query.jpg" alt="Запросы Apache за два дня" width="500" height="326" /></a></p>
<p>В примере с веб-сервером определяющей метрикой была загрузка процессора. Стоит признать, что это допущение — наличие фиксированного объема процессорных ресурсов для выполнения работы облегчает задачу. Кроме того, задача упрощалась и тем фактом, что Apache был единственным приложением, существенно использовавшим процессор. Однако довольно часто специализация каждого сервера на выполнении единственной задачи оказывается слишком большой роскошью. Выполнение сервером нескольких функций электронная почта, веб-сервер, прием загружаемых данных — повышает эффективность использования оборудования, но усложняет <a title="Средства сбора метрических данных" href="/sredstva-sbora-metricheskix-dannyx.html">сбор метрических данных</a>.<span id="more-1712"></span></p>
<p>До настоящего момента наша задача заключалась в привязке системных ресурсов (процессора, памяти, сети, дисков и т д.) к <a title="Сбор данных прикладного уровня" href="/sbor-dannyx-prikladnogo-urovnya.html">метрикам прикладного уровня</a> (запросы Apache, запросы к базе данных и т. д,). При запуске нескольких разных, процессов трудно отслеживать использование ими ресурсов и признаков достижения каждым процессом потолков эффективной работы. Но несмотря на то, что этот сценарий усложняет <a title="Как измеряются мощности" href="/kak-izmeryayutsya-moshhnosti.html">измерение мощностей</a>, не следует полагать, что планирование становится невозможным.</p>
<p>Чтобы различить, какими процессами потребляются те или иные ресурсы, можно выбрать один из двух путей:</p>
<ul>
<li>Изоляция каждого работающего приложения и измерение его потребления ресурсов.</li>
<li>Обеспечение постоянного потребления ресурсов некоторыми приложениями.</li>
</ul>
<p>Вам придется немного поэкспериментировать с данными для выявления ситуации в которых события просто выполняют управляемые эксперименты за вас. Например, в примере, приведенном позднее, я случайно заметил, что в течение двух дней трафик веб-серверов был сходным, но загрузка процессора различалась. Мне удалось воспользоваться этой аномалией для определения ограничений по мощностям веб-сервера.</p>
<p>Когда-то в Flickr приемом и обработкой фотографий занимались те же компьютеры, которые генерировали страницы веб-сайта Flickr.com; <a title="Архитектурные решения" href="/arxitekturnye-resheniya.html">такая конфигурация</a> усложняла планирование мощностей. Обработка графики требует значительных затрат процессорного времени, а с увеличением количества отправляемых фотографий увеличивалась и зависимость компьютеров от ресурсов дискового ввода/вывода. Добавьте к этому рост трафика, и мы быстро убедимся в том, что все три разные функции сражаются за одни и те же ресурсы.</p>
<p>Мы не были уверены в том какая часть оборудования используемся каждым процессом в тот или иной момент, поэтому в систему оценок были добавлены метрики прикладного уровня, на основании которых должны были формироваться оценки:</p>
<ul>
<li>отправка фотографии (в основном дисковый ввод/вывод и сетевые ресурсы);</li>
<li>обработка графики (процессор);</li>
<li>генерирование страниц сайта (память и процессор)</li>
</ul>
<p>Я уже знал закономерности трафика и форму каждой из системных метрик, теперь нужно было связать их с выполняемыми задачами. Я хотел изолировать влияние на ресурсы каждой из задач, чтобы наблюдать за ними по отдельности или по крайней мере хорошо представлять, что делает каждая из задач. Так как метрики уже хранились в файлах RRD, я мог преобразовать их значения в текстовую форму, а затем загрузить в Excel для построения графиков.</p>
<p>Сначала я нашел двухдневный период с похожим распределением веб-траффика. В то время веб-серверы занимались не только генерированием страниц сайта, но также и приемом отправляемых фотографий с их обработкой.</p>
<p>Теперь посмотрим, как в это время использовались системные ресурсы. На рисунке график загрузки процессора с предыдущего рисунка наложен на данные веб-сервера за тот же период.</p>
<p>Очевидно, что во второй день процессор был загружен сильнее, несмотря на то, что трафик Apache был примерно тем же. Единственной дополнительной задачей, которая выполнялась сервером, была обработка графики; следовательно, различия в загрузке процессора были обусловлены обработкой графики. Оставалось оценить ее влияние в количественной форме.</p>
<p><a href="/wp-content/uploads/2012/03/processor_tasks.jpg"><img class="aligncenter size-full wp-image-1715" title="Функционирование веб-сервера и общая загрузка процессора за два дня" src="/wp-content/uploads/2012/03/processor_tasks.jpg" alt="Функционирование веб-сервера и общая загрузка процессора за два дня" width="500" height="337" /></a></p>
<p>График подкрепляет наше предположение: дополнительная загрузка процессора на второй день была обусловлена обработкой фотографий. Все это происходило в выходные, а как упоминалось ранее, по воскресеньям количество отправляемых фотографий особенно велико.</p>
<p>На рисунке представлены данные об интенсивности обработки фотографии за два дня, а также график разности между ними. Обратите внимание, хотя воскресные пики были более чем на 20 процентов выше, вечером интенсивность падала ниже субботней интенсивности за тот же период времени, в результате чего разность на графике становилась отрицательной.</p>
<p><a href="/wp-content/uploads/2012/03/processor_tasks_1.jpg"><img class="aligncenter size-full wp-image-1717" title="Общая загрузка процессора и интенсивность обработки фотографий за два дня" src="/wp-content/uploads/2012/03/processor_tasks_1.jpg" alt="Общая загрузка процессора и интенсивность обработки фотографий за два дня" width="500" height="303" /></a></p>
<p>Мы располагали всеми данными необходимыми для обоснованной оценки того, какие ресурсы процессора расходовались на обработку изображений (в отличие от ресурсов, необходимых для обслуживания запросов Apache). Оставалось только проанализировать данные для получения конкретных значений.</p>
<p>Как видно из рисунка, по крайней мере в эти конкретные выходные обработка каждых 30 фотографий в минуту повышала загрузку процессора на лишние 25 процентов.</p>
<p><a href="/wp-content/uploads/2012/03/processor_tasks_2.jpg"><img class="aligncenter size-full wp-image-1718" title="Интенсивность обработки фотографий в субботу и воскресенье  " src="/wp-content/uploads/2012/03/processor_tasks_2.jpg" alt="Интенсивность обработки фотографий в субботу и воскресенье  " width="500" height="317" /></a></p>
<p>Мы получили чрезвычайно <a title="Приблизительные вычисления" href="/priblizitelnye-vychisleniya.html">грубую оценку</a>, которая базируется на малом и статистически незначительном наборе данных. Рассматривайте ее всего лишь как пример изоляции использования ресурсов в многофункциональной системе. Более корректное подтверждение соотношения 25:30 потребовало бы анализа большего объема трафика и интенсивности отправки, с последующим повторным сравнением данных. Но этот процесс предоставляет в наше распоряжение отправную точку, на которой могут базироваться оценки потолков.</p>
<p><a href="/wp-content/uploads/2012/03/processor_tasks_3.jpg"><img class="aligncenter size-full wp-image-1719" title="Интенсивность обработки фотографий и загрузка процессора за два дня" src="/wp-content/uploads/2012/03/processor_tasks_3.jpg" alt="Интенсивность обработки фотографий и загрузка процессора за два дня" width="500" height="336" /></a></p>
<p>В данной ситуации идеальным сценарием стал бы тот, в котором мы отслеживаем две переменные (веб-трафик и интенсивность отправки фотографий) и вычисляем количество компьютеров, необходимых при выполнении обоих процессов на одном компьютере. Такой процесс более года работал в ходе <a title="Цели и проблемы планирования мощностей" href="/celi-i-problemy-planirovaniya-moshhnostej.html">планирования мощностей</a> веб-серверов Flickr. В конечном итоге мы выделили под обработку графики отдельный специализированный кластер, который мог пользоваться преимуществами многоядерных процессоров, — еще один пример практического применения диагонального масштабирования.</p>
]]></content:encoded>
			<wfw:commentRss>http://ono.org.ua/osobye-sluchai-i-mnogofunkcionalnye-servery.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Реальный пример: сбор метрических данных для кэша</title>
		<link>http://ono.org.ua/realnyj-primer-sbor-metricheskix-dannyx-dlya-kesha.html</link>
		<comments>http://ono.org.ua/realnyj-primer-sbor-metricheskix-dannyx-dlya-kesha.html#comments</comments>
		<pubDate>Wed, 07 Mar 2012 17:16:35 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[База данных]]></category>

		<guid isPermaLink="false">http://ono.org.ua/?p=1699</guid>
		<description><![CDATA[
Как упоминалось ранее, в Flickr принимаются во внимание все метрики, упоминавшиеся в предыдущем разделе. Кэши постоянно заполнены, а вытеснение идет непрерывно при отправке пользователями новых фотографий. Используется кэширование Squid на диске и в памяти, поэтому по обоим ресурсам тоже  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2012/03/Squid_frequency.jpg"><img class="aligncenter size-full wp-image-1702" title="Частота запросов Squid и загрузка процессора (пользовательская + системная) за пять месяцев" src="/wp-content/uploads/2012/03/Squid_frequency.jpg" alt="Частота запросов Squid и загрузка процессора (пользовательская + системная) за пять месяцев" width="500" height="629" /></a></p>
<p>Как упоминалось ранее, в Flickr принимаются во внимание все метрики, упоминавшиеся в предыдущем разделе. Кэши постоянно заполнены, а вытеснение идет непрерывно при отправке пользователями новых фотографий. Используется кэширование Squid на диске и в памяти, поэтому по обоим ресурсам тоже необходимо собирать данные.<span id="more-1699"></span></p>
<p>Для начала взгляните на графики, представленные на рисунке, которые показывают как частота запросов влияет на системные ресурсы.</p>
<p>Как видно из графиков, частота запросов Squid за период сбора данных неуклонно росла. «Зигзаги» представляют пиковые периоды еженедельной активности (понедельники), о которых говорилось ранее. За тот же период времени общая загрузка процессора тоже возрастала, но непосредственного риска исчерпания ресурсов процессора пока не видно. Так как серверы Squid широко используют дисковое кэширование, также необходимо измерять и интенсивность дискового ввода/вывода. Результаты показаны на рисунке.</p>
<p><a href="/wp-content/uploads/2012/03/disk_iowait.jpg"><img class="aligncenter size-full wp-image-1701" title="Ожидание и интенсивность дискового ввода/вывода на сервере Squid" src="/wp-content/uploads/2012/03/disk_iowait.jpg" alt="Ожидание и интенсивность дискового ввода/вывода на сервере Squid" width="500" height="422" /></a></p>
<p>Рисунок подтверждает наши предположения: количество операций, ожидающих завершения дискового ввода/вывода, почти идеально коррелирует с интенсивностью запросов. Мы знаем, что сервер Squid использует диск интенсивнее, чем любой другой ресурс (например, процессор или память). Из этого мы делаем вывод, что определяющей ресурсной метрикой является ожидание дискового ввода/вывода, как и в случае с <a title="Определение потолков базы данных" href="/opredelenie-potolkov-bazy-dannyx.html">потолком базы данных</a>. Воспользовавшись <a title="Основы и элементы систем сбора метрических данных" href="/osnovy-i-elementy-sistem-sbora-metricheskix-dannyx.html">RRDTool для получения метрик</a> ожидания дискового ввода/вывода и интенсивности запросов, мы можем построить график по этим данным в Excel, как показано на рисунке.</p>
<p><a href="/wp-content/uploads/2012/03/query_frequency.jpg"><img class="aligncenter size-full wp-image-1703" title="Интенсивность запросов Squid и ожидание дискового ввода/вывода за день  " src="/wp-content/uploads/2012/03/query_frequency.jpg" alt="Интенсивность запросов Squid и ожидание дискового ввода/вывода за день  " width="500" height="352" /></a></p>
<p>Теперь мы ясно видим, что две метрики связаны друг с другом (по тому как они одновременно возрастают) и как ожидание дискового ввода/вывода влияет на производительность Squid.</p>
<p>Squid хранит внутренние метрики, определяющие время обработки как попаданий в кэш, так и промахов. Эти метрики тоже можно собирать в Ganglia. Время обработки промахов нас мало интересует, потому что оно не несет полезной информации об <a title="Установление потолков системы кэширования" href="/ustanovlenie-potolkov-sistemy-keshirovaniya.html">ограничениях кэша</a>. Обработка промаха в основном создает нагрузку для сети и сервера источника. Попадания обслуживаются из кэша Squid в памяти и на диске, поэтому именно на них мы должны сосредоточить свое внимание. На рисунке представлены результаты за пять месяцев.</p>
<p>Мы видим, что время обслуживания попаданий не претерпевает сколько-нибудь существенных изменений за период наблюдении (оно колеблется около 100 миллисекунд). Следует учесть, что метрика «времени обслуживания » Squid учитывает время до момента получения клиентом последнего байта ответа, а оно может изменяться в зависимости от удаленности клиента от сервера. Из диаграммы следует, что, хотя ожидание дискового ввода/вывода возросло, оно не отразилось на времени отклика сервера Squid, по крайней мере при той нагрузке, которую он испытывал. Нам хотелось бы, чтобы время обслуживания находилось в разумном диапазоне, чтобы пользователю не приходилось подолгу ждать фотографий, поэтому мы установили для этого конкретного сервера максимальное время обслуживания равным 180 миллисекундам. Но что произойдет, если объем трафика поднимет время обслуживания выше порогового значения?</p>
<p><a href="/wp-content/uploads/2012/03/query_frequency_1.jpg"><img class="aligncenter size-full wp-image-1704" title="Интенсивность запросов Squid и ожидание дискового ввода/вывода за день" src="/wp-content/uploads/2012/03/query_frequency_1.jpg" alt="Интенсивность запросов Squid и ожидание дискового ввода/вывода за день" width="500" height="378" /></a></p>
<p>Чтобы получить ответ на этот вопрос, мы снова займемся уже знакомым делом — повышением нагрузки. Медленно увеличивайте нагрузку на серверах, записывая их метрики. Поскольку мы теперь знаем, какой из аппаратных ресурсов следует за повышением трафика, известно, что нужно искать порог, при котором ожидание дискового ввода/вывода начинает влиять на время обслуживания попаданий в кэш. Повышение интенсивности запросов к нашему серверу Squid должно происходить медленно, чтобы избежать слишком резкого подъема частоты попадании. Как видно из рисунка, воспроизведение URL-адресов из Httperf или Siege или исключение серверов из пула с распределением нагрузки позволяет постепенно повышать частоту запросов на одном сервере Squid.</p>
<p><a href="/wp-content/uploads/2012/03/cash_time.jpg"><img class="aligncenter size-full wp-image-1705" title="Время обслуживания попадании в кэш Squid (в миллисекундах): данные за пять месяцев" src="/wp-content/uploads/2012/03/cash_time.jpg" alt="Время обслуживания попадании в кэш Squid (в миллисекундах): данные за пять месяцев" width="429" height="163" /></a></p>
<p><a href="/wp-content/uploads/2012/03/Squid_max.jpg"><img class="aligncenter size-full wp-image-1706" title="Выявление потолков Squid: время обслуживания попадании и ожидание дискового ввода/вывода  " src="/wp-content/uploads/2012/03/Squid_max.jpg" alt="Выявление потолков Squid: время обслуживания попадании и ожидание дискового ввода/вывода  " width="500" height="435" /></a></p>
<p>Как видите, время обслуживания растет со временем ожидания дискового ввода/вывода (что, собственно, и предполагалось). Ввиду широкого разброса размеров фотографий время обслуживания также весьма разнообразно, но время 180 миллисекунд начинает встречаться приблизительно на 40 процентах ожидания дискового ввода/вывода. Остается лишь определить интенсивность запросов, при которой достигается этот порог.</p>
<p><a href="/wp-content/uploads/2012/03/Squid_iowait.jpg"><img class="aligncenter size-full wp-image-1707" title="Интенсивность запросов Squid и ожидание дискового ввода/вывода, потолок" src="/wp-content/uploads/2012/03/Squid_iowait.jpg" alt="Интенсивность запросов Squid и ожидание дискового ввода/вывода, потолок" width="500" height="393" /></a></p>
<p>На этом рисунке мы видим искомую «красную линию» (выражаясь образно). На 40 процентах ожидания дискового ввода/вывода мы обрабатываем до 850 запросов в секунду. Если взять за основу время обслуживания, это будет максимальная производительность, которую мы можем ожидать от нашей <a title="Аппаратные решения" href="/apparatnye-resheniya.html">аппаратной платформы</a> с этой конкретной конфигурацией. Для полноты картины стоит сказать, что в эту конфигурацию входит Dell PowerEdge 2950 с шестью SAS-дисками (15 000 об./мин), 4 Гбайт ОЗУ и одним четырехъядерным процессором.</p>
<p>Однако сбор метрик кэша еще не закончен. Необходимо убедиться в том, что <a title="Эффективность кэширования: рабочие наборы и динамические данные" href="/effektivnost-keshirovaniya-rabochie-nabory-i-dinamicheskie-dannye.html">эффективность кэширования</a> изменяется со временем, так как мы работаем с динамическим рабочим набором. На рисунке показаны результаты за пять месяцев.</p>
<p><a href="/wp-content/uploads/2012/03/Squid_total.jpg"><img class="aligncenter size-full wp-image-1708" title="Частота попаданий в кэш (%) и возраст LRU (дни), данные за пять месяцев" src="/wp-content/uploads/2012/03/Squid_total.jpg" alt="Частота попаданий в кэш (%) и возраст LRU (дни), данные за пять месяцев" width="439" height="368" /></a></p>
<p>На этих двух графиках представлена частота попаданий в кэш и эталонный возраст LRU для конкретного кэширующего сервера Squid, который использовался для обслуживания запросов в течение 5 месяцев. Частота попаданий в кэш выражена в процентах, а эталонный возраст LRU — в днях. В течение наблюдаемого периода возраст LRU и частота попаданий снижались с небольшой, но различимой скоростью, это обстоятельство объясняется возрастанием количества фотографий, отправляемых пользователями. С ростом рабочего набора запрашиваемых фотографий кэшу приходится выполнять все большую работу по вытеснению, чтобы освободить место для новых объектов. Но даже при таком снижении эффективности похоже, что при 72-процентной частоте попаданий эталонный возраст LRU для этого сервера составляет около 3 часов. Значение более чем достойное и вполне приемлемое для нашей среды. В дальнейшем следует наблюдать за частотой попаданий и изменять размер кэша в случае необходимости.</p>
<p>Подведем итог. В этом примере задействованы две метрики, связанные с потолками нашей системы кэширования — ожидание дискового ввода/вывода и эффективность кэширования.</p>
<p>С ростом интенсивности запросов также возрастает интенсивность использования дисковой подсистемы и время обслуживания. Приблизительно на уровне 850 запросов в секунду нам удается обеспечить параметры, по нашему мнению <a title="Ожидания пользователей" href="/ozhidaniya-polzovatelej.html">приемлемые для конечного пользователя</a>. При приближении к этому порогу стоит подумать об увеличении количества кэширующих серверов, которые справлялись бы с нагрузкой без лишнего напряжения.</p>
<p>Потолок в 850 запросов в секунду предполагает стабильную частоту попадания в кэш, которая тоже может изменяться со временем.</p>
]]></content:encoded>
			<wfw:commentRss>http://ono.org.ua/realnyj-primer-sbor-metricheskix-dannyx-dlya-kesha.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Установление потолков системы кэширования</title>
		<link>http://ono.org.ua/ustanovlenie-potolkov-sistemy-keshirovaniya.html</link>
		<comments>http://ono.org.ua/ustanovlenie-potolkov-sistemy-keshirovaniya.html#comments</comments>
		<pubDate>Wed, 07 Mar 2012 13:09:03 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[База данных]]></category>

		<guid isPermaLink="false">http://ono.org.ua/?p=1695</guid>
		<description><![CDATA[
Мощность систем кэширования определяется по-разному в зависимости от их использования. Если кэш способен вместить весь рабочий набор, потолок может определяться частотой запросов и временем отклика.
В этом случае можно снова воспользоваться тем же методом, который применялся к веб-серверам и  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2012/03/cash_max.png"><img class="aligncenter size-full wp-image-1696" title="Потолк системы кэширования  " src="/wp-content/uploads/2012/03/cash_max.png" alt="Потолк системы кэширования  " width="500" height="283" /></a></p>
<p>Мощность <a title="Системы кэширования" href="/sistemy-keshirovaniya.html">систем кэширования</a> определяется по-разному в зависимости от их использования. Если кэш способен вместить весь рабочий набор, потолок может определяться частотой запросов и временем отклика.<span id="more-1695"></span></p>
<p>В этом случае можно снова воспользоваться тем же методом, который применялся к веб-серверам и ожиданию <a title="Закономерности дискового ввода/вывода" href="/zakonomernosti-diskovogo-vvodavyvoda.html">дисковых операций ввода/вывода</a>: повышать нагрузку на сервер осторожно, попутно собирая <a title="Разные виды требований и метрик" href="/raznye-vidy-trebovanij-i-metrik.html">метрические данные</a>, и связывать системные ресурсные метрики (загрузка процессора, дисковый ввод/вывод, сеть, использование памяти) с <a title="Эффективность кэширования: рабочие наборы и динамические данные" href="/effektivnost-keshirovaniya-rabochie-nabory-i-dinamicheskie-dannye.html">метриками системы кэширования</a>, перечисленными в предыдущем разделе.</p>
<p>Определение потолка заполненного кэша, из которого постоянно вытесняются объекты, весьма непростое занятие. Возможно, потолок лучше определять не по частоте запросов, а по частоте попадания в кэш (и косвенно — по эталонному возрасту).</p>
<p>В таблице приведена сводка основных факторов планирования кэша.</p>
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="180">
<p align="center"><strong>Тип использо­вания кэша</strong></p>
</td>
<td valign="top" width="204">
<p align="center"><strong>Характеристики</strong></p>
</td>
<td valign="top" width="196">
<p align="center"><strong>Потолки кэша</strong></p>
</td>
<td valign="top" width="194">
<p style="text-align: center;"><strong>Потолки ресурсов</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="180">Небольшой или медленно ра­стущий рабочий набор</td>
<td valign="top" width="204">100% набора находится в кэше</td>
<td valign="top" width="196">Частота запросов</td>
<td valign="top" width="194">Интенсивность и ожидание дис­кового ввода/ вывода, использо­вание процессора и памяти</td>
</tr>
<tr>
<td valign="top" width="180">Большой или быстро растущий рабочий набор</td>
<td valign="top" width="204">Подвижное окно,</p>
<p>постоянное</p>
<p>вытеснение</td>
<td valign="top" width="196">Частота попада­ния в кэш, эта­лонный возраст LRU</td>
<td valign="top" width="194">Размер кэша</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://ono.org.ua/ustanovlenie-potolkov-sistemy-keshirovaniya.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Эффективность кэширования: рабочие наборы и динамические данные</title>
		<link>http://ono.org.ua/effektivnost-keshirovaniya-rabochie-nabory-i-dinamicheskie-dannye.html</link>
		<comments>http://ono.org.ua/effektivnost-keshirovaniya-rabochie-nabory-i-dinamicheskie-dannye.html#comments</comments>
		<pubDate>Wed, 07 Mar 2012 12:57:29 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[База данных]]></category>

		<guid isPermaLink="false">http://ono.org.ua/?p=1688</guid>
		<description><![CDATA[
Мощности кэширования определяются двумя основными факторами: размером рабочего набора и степенью динамизма (изменчивости) данных.
От частоты изменения данных зависит принятие решения об их кэшировании. На одном конце оси находятся данные, которые почти никогда не изменяются. Например, к данным  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2012/03/cash_effectivness.jpg"><img class="aligncenter size-full wp-image-1690" title="Зависимость эффективности кэширования от частоты изменения данных" src="/wp-content/uploads/2012/03/cash_effectivness.jpg" alt="Зависимость эффективности кэширования от частоты изменения данных" width="500" height="373" /></a></p>
<p>Мощности кэширования определяются двумя основными факторами: размером рабочего набора и степенью динамизма (изменчивости) данных.</p>
<p>От частоты изменения данных зависит принятие решения об их кэшировании. На одном конце оси находятся данные, которые почти никогда не изменяются. Например, к данным такого рода относятся имена пользователей и информация учетных записей. На другом конце оси находится часто изменяющаяся информация: последний комментарий пользователя или последняя отправленная фотография, На рисунке представлена зависимость эффективности кэширования от типа данных.<span id="more-1688"></span></p>
<p>Понятно, что <a title="Системы кэширования" href="/sistemy-keshirovaniya.html">кэширование</a> часто изменяющихся данных никакой пользы не принесет, потому что прокси потратит больше времени на обновление кэша, чем на выборку из него данных. Каждое приложение обладает специфическими характеристиками в области кэширования, поэтому никаких эвристических правил в этой области не существует. Однако измерение и запись частоты попаданий в кэш крайне важны для понимания эффективности кэширования. Собранные данные участвуют в <a title="Цели и проблемы планирования мощностей" href="/celi-i-problemy-planirovaniya-moshhnostej.html">планировании мощностей</a> и помогут определить, как (и когда) следует кэшировать объекты.</p>
<p>Другим важным фактором является размер рабочего набора кэшируемых объектов. Кэш имеет фиксированный размер. Рабочим набором (working set) кэшируемых объектов называются уникальные объекты (результаты запросов к <a title="База данных" href="/baza-dannyx.html">базе данных</a> или файлы), запрашиваемые за заданный период времени. В идеале емкость кэша должна быть достаточной для хранения всего рабочего набора; в этом случае подавляющее большинство запросов будет приводить к попаданиям в кэш. Однако на практике хранение всех нужных объектов в кэше может оказаться невозможным по целому ряду причин. В этом случае для освобождения в кэше места для новых объектов приходится использовать механизм вытеснения старых объектов. Вскоре мы рассмотрим вытеснение из кэша более подробно.</p>
<p>Чтобы программа кэширования нормально функционировала, она должна вести внутренний учет собственных метрик. По этой причине большинство прокси предоставляют доступ к таким метрикам, позволял <a title="Сбор данных прикладного уровня" href="/sbor-dannyx-prikladnogo-urovnya.html">собирать данные</a> и сохранять их во внешних программах мониторинга.</p>
<p>В Flickr используется Squid для кэширования фотографий по технологии кешируюшего прокси. Фотографии хранятся на относительно медленных и дешевых дисках большой емкости, а для предоставления фотографий пользователям применяются системы кэширования с быстрыми дисками меньшей емкости. С ростом интенсивности запросов на получение фотографий выполняется горизонтальное масштабирование количества кэширующих серверов. Также с ростом количества фотографий выполняется горизонтальное масштабирование объема долгосрочного хранилища в back-end-подсистеме.</p>
<p>Каждый кэширующий сервер обладает ограниченным <a title="Скорость потребления дискового пространства" href="/skorost-potrebleniya-diskovogo-prostranstva.html">объемом дискового пространства</a> и памяти, используемой в качестве кэша. Рабочий набор фотографий слишком велик для размещения в кэше, поэтому кэш постепенно заполняется. Заполненному кэшу приходится постоянно принимать решения относительно того, какие объекты следует удалить из кэша, чтобы освободить место для новых объектов. Этот процесс основан на алгоритме замены, или вытеснения. Существует много разных алгоритмов вытеснения; одним из самых распространенных является алгоритм вытеснения по давности использования LRU (Least Recently Used). Принцип его работы представлен на рисунке.</p>
<p><a href="/wp-content/uploads/2012/03/algorithm_LRU.jpg"><img class="aligncenter size-full wp-image-1692" title="Алгоритм вытеснения по давности использования LRU" src="/wp-content/uploads/2012/03/algorithm_LRU.jpg" alt="Алгоритм вытеснения по давности использования LRU" width="443" height="391" /></a></p>
<p>По мере обращения к кэшу с запросами объекты объединяются в список в соответствии со временем последнего обращения. Если запрос не попал в кэш, то полученный от сервера источника объект помещается в начало списка. Объекты, соответствующие попаданиям в кэш, перемещаются из текущей позиции в начало списка. Таким образом, объекты сортируются от недавно использованных до тех, которые не использовались давно. Когда кэшу потребуется освободить место для новых объектов, он удаляет объекты в конце списка. Возраст самого старого объекта в списке называется эталонным возрастом LRU и наряду с частотой попаданий в кэш является показателем эффективности кэширования.</p>
<p>Алгоритм LRU используется в Memcached, Squid, Varnish и многих других кэширующих приложениях. Он хорошо известен, а его поведение относительно легко понять. Squid также поддерживает несколько более сложных алгоритмов вытеснения, но почти все популярные системы кэширования баз данных используют метод LRU.</p>
<p>Важнейшие метрики, которые должны отслеживаться при использовании любой программы кэширования:</p>
<ul>
<li>Частота попаданий в кэш.</li>
<li>Общая частота запросов</li>
<li>Средний размер объекта.</li>
<li>Эталонный возраст LRU (при использовании метода LRU).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ono.org.ua/effektivnost-keshirovaniya-rabochie-nabory-i-dinamicheskie-dannye.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Системы кэширования</title>
		<link>http://ono.org.ua/sistemy-keshirovaniya.html</link>
		<comments>http://ono.org.ua/sistemy-keshirovaniya.html#comments</comments>
		<pubDate>Wed, 07 Mar 2012 11:50:11 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[База данных]]></category>

		<guid isPermaLink="false">http://ono.org.ua/?p=1680</guid>
		<description><![CDATA[
Ранее уже говорилось о том, что диски являются самыми медленными компонентами инфраструктуры, что делает обращения к ним затратными по времени. Большинство крупномасштабных сайтов избегают лишних затратных операций, организуя кэширование данных на разных уровнях.
В веб архитектурах кэширование  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2012/03/cashe_server.jpg"><img class="aligncenter size-full wp-image-1681" title="Базовые механизмы кэширования контент-серверов (обратный посредник)" src="/wp-content/uploads/2012/03/cashe_server.jpg" alt="Базовые механизмы кэширования контент-серверов (обратный посредник)" width="500" height="215" /></a></p>
<p>Ранее уже говорилось о том, что диски являются самыми медленными компонентами инфраструктуры, что делает обращения к ним затратными по времени. Большинство крупномасштабных сайтов избегают лишних затратных операций, организуя кэширование данных на разных уровнях.<span id="more-1680"></span></p>
<p>В <a title="Архитектурные решения" href="/arxitekturnye-resheniya.html">веб архитектурах</a> кэширование чаще всего применяется для хранения результатов операций с базами данных (Memcached) или самих файлов (Squid или Varnish). Оба метола должны использоваться в одних и тех же обстоятельствах, относящихся к планированию мощностей. Они являются примерами кешируюших прокси (reverse proxy) — специализированны к систем для кэширования данных, передаваемых веб-сервером клиенту (чаще всего браузеру).</p>
<p>Диаграмма на рисунке показывает, как механизм кэширования Squid и Varnish обычно используется с серверами.</p>
<p><a href="/wp-content/uploads/2012/03/cashe_database.jpg"><img class="aligncenter size-full wp-image-1682" title="Кэширование базы данных  " src="/wp-content/uploads/2012/03/cashe_database.jpg" alt="Кэширование базы данных  " width="500" height="333" /></a></p>
<p>Как видно из рисунка, в схеме кэширования базы данных в стиле Memcached диаграмма изменяется лишь незначительно.</p>
]]></content:encoded>
			<wfw:commentRss>http://ono.org.ua/sistemy-keshirovaniya.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Определение потолков базы данных</title>
		<link>http://ono.org.ua/opredelenie-potolkov-bazy-dannyx.html</link>
		<comments>http://ono.org.ua/opredelenie-potolkov-bazy-dannyx.html#comments</comments>
		<pubDate>Wed, 07 Mar 2012 11:41:44 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[База данных]]></category>

		<guid isPermaLink="false">http://ono.org.ua/?p=1677</guid>
		<description><![CDATA[
Более целенаправленный и агрессивный метод определения потолков базы данных заключается в медленном (и, более того, осторожном!) повышении нагрузки на «живой» сервер. Если в вашем ведении находится всего одна база данных, сделать это без ущерба для безопасности будет непросто. С единичной точкой  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2012/03/database_architecture.jpg"><img class="aligncenter size-full wp-image-1678" title="Архитектура с главной и несколькими подчиненными базами данных  " src="/wp-content/uploads/2012/03/database_architecture.jpg" alt="Архитектура с главной и несколькими подчиненными базами данных  " width="500" height="470" /></a></p>
<p>Более целенаправленный и агрессивный метод определения потолков базы данных заключается в медленном (и, более того, осторожном!) повышении нагрузки на «живой» сервер. Если в вашем ведении находится всего одна база данных, сделать это без ущерба для безопасности будет непросто. С единичной точкой отказа вы рискуете полностью вывести сайт из строя. Задача существенно упрощается при использовании любой разновидности <a title="Балансировка нагрузки" href="/balansirovka-nagruzki.html">распределения нагрузки</a> (аппаратного или прикладного уровня). На рисунке снова представлена диаграмма типичной архитектуры базы данных с добавлением некоторых реалистичных подробностей.<span id="more-1677"></span></p>
<p>В этой архитектуре все операции записи направляются в главную базу данных; операции чтения выполняются с подчиненными базами. Информация в подчиненных базах данных обновляется посредством репликации. Чтобы определить потолки подчиненных баз данных, следует увеличивать нагрузку на одной из них, приказав балансировщику отдавать предпочтение этому конкретному устройству. Если вы используете аппаратный балансировщик нагрузки, назначьте одному из серверов более высокий приоритет по сравнению с другими серверами пула.</p>
<p>Повышение нагрузки на базу данных может показать, как нагрузка влияет на ваши ресурсы, а возможно, и выявить точку, в которой нагрузка начинает влиять на задержку репликации. В нашей ситуации хотелось бы подтвердить обоснованное предположение о том, что 40-процентное ожидание <a title="Закономерности дискового ввода/вывода" href="/zakonomernosti-diskovogo-vvodavyvoda.html">дискового ввода/вывода</a> определяет верхний предел, который база данных может выдержать без образования задержки репликации.</p>
<p>В этом примере отражена общая особенность определения мощностей баз данных по дисковому вводу/выводу. База данных может быть ориентирована на интенсивное использование процессора, памяти или сети, но процесс определения потолка для каждого сервера остается неизменным.</p>
]]></content:encoded>
			<wfw:commentRss>http://ono.org.ua/opredelenie-potolkov-bazy-dannyx.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Анализ метрик баз данных</title>
		<link>http://ono.org.ua/analiz-metrik-baz-dannyx.html</link>
		<comments>http://ono.org.ua/analiz-metrik-baz-dannyx.html#comments</comments>
		<pubDate>Wed, 07 Mar 2012 11:18:45 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[База данных]]></category>

		<guid isPermaLink="false">http://ono.org.ua/?p=1674</guid>
		<description><![CDATA[
Возможно, при виде графиков реального примера сбора метрик для базы данных у вас возник вопрос: если пик обусловлен не аппаратным дефектом, а произошел вследствие &#171;законного&#187; события базы данных, что же стало его причиной? Вопрос уместный, но ответ на него совершенно не поможет вам  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2012/03/analis_metric.jpg"><img class="aligncenter size-full wp-image-1675" title="Анализ метрик баз данных" src="/wp-content/uploads/2012/03/analis_metric.jpg" alt="Анализ метрик баз данных" width="500" height="327" /></a></p>
<p>Возможно, при виде графиков реального <a title="Реальный пример: сбор метрик для базы данных" href="/realnyj-primer-sbor-metrik-dlya-bazy-dannyx.html">примера сбора метрик для базы данных</a> у вас возник вопрос: если пик обусловлен не аппаратным дефектом, а произошел вследствие &#171;законного&#187; события базы данных, что же стало его причиной? Вопрос уместный, но ответ на него совершенно не поможет вам определить, сколько серверов баз данных потребуется для обработки вашего трафика.<span id="more-1674"></span></p>
<p>При потреблении ресурсов всегда наблюдаются пики из-за ошибок, некорректных запросов и других непредвиденных обстоятельств. Вы как специалист по планированию мощностей обязаны взять плохое вместе с хорошим, не надеясь на то, что плохое куда-нибудь исчезнет. Конечно, когда вы отправите обоснования на закупку оборудования — никто не мешает вам заняться настройкой производительности, и со всем рвением выискивать причины пиков. Более того, поиск причин должен быть обязательным следующим шагом — только не позволяйте расследованию какой-то одной аномалии встать на пути прогнозирования необходимых мощностей.</p>
<p>На основании этих метрик можно довольно уверенно сказать, что 40-процентное ожидание дискового ввода/вывода является потолком для этой базы данных. В том, что касается <a title="Аппаратные решения" href="/apparatnye-resheniya.html">конфигурации оборудования</a>, распределения и частоты запросов, характерных для этой базы данных, следует планировать нахождение в зоне ниже 40 процентного ожидания. Но что это означает в контексте реальной работы базы данных?</p>
<p>Прежде чем углубляться в числовые данные, мы применим к базе данных тот же метод тестирования, который применялся нами ранее для веб-серверов: <a title="Нагрузочное тестирование на одном компьютере" href="/nagruzochnoe-testirovanie-na-odnom-kompyutere.html">повышение рабочей нагрузки</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ono.org.ua/analiz-metrik-baz-dannyx.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Реальный пример: сбор метрик для базы данных</title>
		<link>http://ono.org.ua/realnyj-primer-sbor-metrik-dlya-bazy-dannyx.html</link>
		<comments>http://ono.org.ua/realnyj-primer-sbor-metrik-dlya-bazy-dannyx.html#comments</comments>
		<pubDate>Wed, 07 Mar 2012 10:46:38 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[База данных]]></category>

		<guid isPermaLink="false">http://ono.org.ua/?p=1668</guid>
		<description><![CDATA[
Базы данных весьма сложны, и выявление их ограничений может потребовать много времени, но оно того стоит. Как и в случае с веб-серверами, ограничения баз данных обычно определяются тем, как они работают в пиковые периоды максимальной активности пользователей. Соответственно, начинать следует с  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2012/03/mysql_metric.jpg"><img class="aligncenter size-full wp-image-1669" title="Метрики рабочих баз данных MySQL" src="/wp-content/uploads/2012/03/mysql_metric.jpg" alt="Метрики рабочих баз данных MySQL" width="500" height="638" /></a></p>
<p>Базы данных весьма сложны, и выявление их ограничений может потребовать много времени, но оно того стоит. Как и в случае с веб-серверами, ограничения баз данных обычно определяются тем, как они работают в пиковые периоды максимальной активности пользователей. Соответственно, начинать следует с пристального изучения периодов пикового трафика и анализа состояния системных ресурсов.<span id="more-1668"></span></p>
<p>Но, прежде чем начинать поиски волшебной «красной линии» потребления <a title="База данных" href="/baza-dannyx.html">ресурсов баз данных</a>, запомните: смотреть нужно на то, как ваша база данных ведет себя с реальными запросами и реальными данными.</p>
<p>Один из первых показателей, которые следует определить, &#8212; когда ваша база данных исчерпает аппаратные ресурсы относительно текущего трафика. В зависимости от характеристик нагрузки «узким местом» может оказаться процессор, сеть или <a title="Закономерности дискового ввода/вывода" href="/zakonomernosti-diskovogo-vvodavyvoda.html">дисковый ввод/вывод</a>.</p>
<p>Если вам повезло и наиболее часто запрашиваемые данные хранятся в памяти, ограничивающим фактором может оказаться процессор или сетевые ресурсы. В этой ситуации поиски потолка производительности немного упрощаются, потому что отслеживать придется всего один показатель (как было показано в разделе, посвященном <a title="Измерение нагрузки на веб-серверах" href="/izmerenie-nagruzki-na-veb-serverax.html">мониторингу производительности Apache</a>).</p>
<p>Если объем ваших данных не позволяет разместить их в физической памяти, то производительность базы данных будет ограничиваться самым медленным устройством: физическим диском. Из-за непредсказуемой природы сайтов, управляемых базами данных, запросы к данным получаются еще более непредсказуемыми, а соответственно, и дисковый ввод/вывод тоже непредсказуем. Непредсказуемые операции ввода/вывода обычно выполняются медленно, потому что скорость выдачи данных ограничивается необходимостью позиционирования головки диска в случайных точках пластин. Таким образом, многие быстрорастущие сайты в конечном итоге выбирают дисковый ввод/вывод в качестве определяющей метрики своих мощностей баз данных.</p>
<p>Собственно, базы данных Flickr находятся именно в такой ситуации. Чтобы понять это, достаточно беглого взгляда на статистику использования дисков (в сочетании с тем фактом, что объем данных, запрашиваемых у MySQL, намного превышает объем физической памяти). В качестве примера рассмотрим один из серверов. На рисунке приведены соответствующие метрики MySQL для одной базы данных пользователей Flickr во время пиковой нагрузки.</p>
<p>На рисунке представлены данные о количестве параллельных подключений MySQL, а также количестве выполняемых операций INSERT, UPDATE, DELETE и SELECT в секунду за один час. За время наблюдения в каждой из метрик наблюдаются пики, но только один из них заслуживает особого внимания. На нижнем графике представлена величина задержки репликации базы данных за последний час, пиковое значение достигает 80 секунд. Видеть такую задержку репликации, конечно, не хочется. Обычно она означает, что на подчиненных машинах временно отсутствуют свежие данные, загруженные на главную машину.</p>
<p><a href="/wp-content/uploads/2012/03/mysql_metric_1.jpg"><img class="aligncenter size-full wp-image-1670" title="Метрики рабочих баз данных MySQL (продолжение)" src="/wp-content/uploads/2012/03/mysql_metric_1.jpg" alt="Метрики рабочих баз данных MySQL (продолжение)" width="500" height="640" /></a></p>
<p>Flickr направляет все запросы пользователей подчиненным машинам, следовательно, пока информация на них не обновится, самые новые данные останутся недоступными для пользователей. Это может привести к различным нежелательным эффектам; скажем, пользователь пишет комментарий к фотографии, щелкает на кнопке Submit&#8230; и не видит только что введенный комментарий. Все это сбивает с толку и приводит к разного рода странностям десинхронизации. Ситуация, мягко говоря, не идеальна.</p>
<p>Из прошлого опыта я знаю, что базы данных ограничиваются пропускной способностью дисковых операций, но давайте убедимся в этом, взглянув на графики использования диска и ожидания ввода/вывода на рисунке.</p>
<p><a href="/wp-content/uploads/2012/03/disc_operations.jpg"><img class="aligncenter size-full wp-image-1671" title="Интенсивность дисковых операций и ожидание ввода/ вывода для реальной базы данных" src="/wp-content/uploads/2012/03/disc_operations.jpg" alt="Интенсивность дисковых операций и ожидание ввода/ вывода для реальной базы данных" width="500" height="424" /></a></p>
<p>В этом примере Ganglia собирает и представляет в графическом виде статистику использования дисков для нашей базы данных. Отчет составляется каждые 60 секунд по значениям некоторых полей, возвращаемых командой Linux iostat: %iowait и %ioutil.</p>
<p>Обратите внимание: хотя интенсивность использования диска поднималась до 100 процентов более одного раза, задержка репликации MySQL увеличилась только во время того периода, когда ожидание ввода/вывода пересекло 40-процентную отметку.</p>
<p>Что это означает? Даже после беглого взгляда на метрики можно сделать вывод, что задержка репликации обусловлена дисковым вводом/выводом, а не общей загрузкой диска. Также можно сказать, что проблемы с задержкой репликации появляются только тогда, когда ожидание ввода/вывода составляет 40 и более процентов. Учтите, что эти результаты относятся только к конкретной конфигурации базы данных в Flickr; это всего лишь пример, а не общее правило. А может, они указывают на какой-нибудь дефект этого конкретного сервера? Возможно. Гипотеза должна легко проверяться — для этого следует спровоцировать указанное поведение на аналогичном сервере. В нашем конкретном случае <a title="Метрическая интерпретация журналов" href="/metricheskaya-interpretaciya-zhurnalov.html">анализ графиков</a> с других серверов показал, что данная связь имеет общий характер и наблюдается в работе Flickr постоянно: другие базы данных с идентичным оборудованием также испытывали задержку репликации, когда ожидание дискового ввода/ вывода приближалось к 40 процентам.</p>
]]></content:encoded>
			<wfw:commentRss>http://ono.org.ua/realnyj-primer-sbor-metrik-dlya-bazy-dannyx.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>База данных</title>
		<link>http://ono.org.ua/baza-dannyx.html</link>
		<comments>http://ono.org.ua/baza-dannyx.html#comments</comments>
		<pubDate>Wed, 07 Mar 2012 10:19:43 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[База данных]]></category>

		<guid isPermaLink="false">http://ono.org.ua/?p=1664</guid>
		<description><![CDATA[
Практически каждый динамический веб-сайт хранит информацию в какой-либо базе данных. А это означает, что мощности базы данных тоже необходимо планировать. В мире LAMP наибольшей популярностью обладают базы данных MySQL и Postgres; впрочем, Oracle, Microsoft SQL Server и множество других баз данных  [...]]]></description>
				<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2012/03/Database.jpg"><img class="aligncenter size-full wp-image-1665" title="Планирование мощностей баз данных" src="/wp-content/uploads/2012/03/Database.jpg" alt="Планирование мощностей баз данных" width="500" height="251" /></a></p>
<p>Практически каждый динамический веб-сайт хранит информацию в какой-либо базе данных. А это означает, что мощности базы данных тоже необходимо планировать. В мире LAMP наибольшей популярностью обладают базы данных MySQL и Postgres; впрочем, Oracle, Microsoft SQL Server и множество других баз данных используются в bаск-еnd-подсистеме многих успешных сайтов.<span id="more-1664"></span></p>
<p>Кроме базовой серверной статистики также имеется ряд специфических метрик баз данных, которые тоже желательно отслеживать:</p>
<ul>
<li>Количество запросов в секунду (SELECT, INSERT, UPDATE и DELETE).</li>
<li>Текущее количество открытых подключений.</li>
<li>Задержка репликации.</li>
<li>Частота попаданий в кэш.</li>
</ul>
<p>Планирование мощностей баз данных, особенно в кластерах, бывает весьма непростым делом. Выявление потолков быстродействия баз данных затрудняется тем, что некоторые скрытые «ловушки» могут проявляться только в особых граничных случаях.</p>
<p>Например, в прошлом в Flickr предполагалось, что базы данных, работающие на некоторой аппаратной платформе, обладают потолком в X запросов в секунду, а после прохождения этого потолка наступает неприемлемое снижение производительности. Однако позднее сотрудники с удивлением обнаружили, что некоторые запросы нормально выполняются для пользователей, у которых не более 10 000 фотографий, но резко замедляются для пользователя, имеющего более 100 000 фотографий (да, на Flickr есть пользователи, загружающие более ста тысяч фотографий!) Тогда мы переопределили потолки для сервера базы данных, обслуживающего пользователей с большим количеством фотографий. Такого рода «творческое отслеживание» мощностей и производительности практически обязательно для баз данных; оно подчеркивает, насколько важно понимать особенности реального использования баз данных вне контекста <a title="Cтатистика использования системы" href="/ctatistika-ispolzovaniya-sistemy.html">системной статистики</a>.</p>
<p>На этой стадии я должен еще раз повторить замечание, относившееся к настройке производительности. Как упоминалось в книге Джереми Заводны и Дерека Боллиннгa High Performance MySQL, производительность баз данных часто сильнее зависит от схем и запросов, чем от скорости оборудования. По этой причине разработчики и администраторы баз данных направляют первоочередные усилия на оптимизацию схем и запросов, зная, что это может кардинально отразиться на производительности базы данных. В свою очередь, это обстоятельство отражается на потолках базы данных. Сегодня вы думаете, что вам нужны 10 серверов баз данных для обслуживания 20 000 запросов в секунду, а завтра выясняется, что можно обойтись всего 5, потому что вы (или ваши программисты) смогли оптимизировать наиболее частые (или высоко затратные) запросы.</p>
]]></content:encoded>
			<wfw:commentRss>http://ono.org.ua/baza-dannyx.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
