<?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/"
	>

<channel>
	<title>Highload Web</title>
	<atom:link href="http://highload.com.ua/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://highload.com.ua</link>
	<description>Масштабирование и производительность Web систем, высокие нагрузки, архитектурные решения</description>
	<pubDate>Tue, 09 Mar 2010 16:36:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Sysbench - тестируем производительность MySQL и платформы</title>
		<link>http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/</link>
		<comments>http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 13:49:05 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Технологии]]></category>

		<category><![CDATA[mysql]]></category>

		<category><![CDATA[sysbench]]></category>

		<category><![CDATA[производительность]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=976</guid>
		<description><![CDATA[Sysbench - утилита для тестирования производительности MySQL (и других СУБД), а также параметров операционной системы. Подобный инструмент незаменим для предварительного тестирования эффективности системы с (потенциально) высокой нагрузкой. Sysbench позволяет оценить производительность сервера СУБД и операционной системы в различных условиях при различной нагрузке.


Особенности sysbench
Из преимуществ этого продукта следует отметить его простоту, гибкость, а также:

Кроссплатформенность
Мультипоточность
Набор тестов для [...]]]></description>
			<content:encoded><![CDATA[<p><b>Sysbench</b> - утилита для тестирования <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> MySQL (и других СУБД), а также параметров операционной системы. Подобный инструмент незаменим для предварительного тестирования эффективности системы с (потенциально) высокой нагрузкой. Sysbench позволяет оценить <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительность</a> сервера СУБД и операционной системы в различных условиях при различной нагрузке.</p>
<p><span id="more-976"></span></p>
<p><br clear="all" /></p>
<h2>Особенности sysbench</h2>
<p>Из преимуществ этого продукта следует отметить его простоту, гибкость, а также:</p>
<ul>
<li>Кроссплатформенность</li>
<li>Мультипоточность</li>
<li>Набор тестов для параметров уровня ОС (память, файловая система, процессор и т.п.)</li>
</ul>
<p>Другими словами эта утилита нужна для решения следующих задач:</p>
<ul>
<li>Тестирование параметры ОС (даже без установки СУБД) для предварительной их оценки и последующей настройке</li>
<li>Проверка <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> СУБД с различной конфигурацией и нагрузкой</li>
</ul>
<p><br clear="all" /></p>
<h2>Установка</h2>
<p>Эта популярная утилита присутствует в пакетах многих дистрибутивов, поэтому:</p>
<pre>sudo apt-get install sysbench</pre>
<p>Или собираем из исходников (<a href="http://sf.net/projects/sysbench/" target="_blank">скачать можно тут</a>):</p>
<pre>
./configure
make
make install
</pre>
<p>После этого утилита готова к работе.</p>
<p><br clear="all" /></p>
<h2>Обзор функциональности</h2>
<p>Синтаксис вызова утилиты:</p>
<pre>sysbench --test=имя-теста [опции] команда</pre>
<p>Команды, которые можно использовать в тестах:</p>
<ul>
<li><b>prepare</b> - подготовка теста (создание таблиц, вставка данных и т.п.) если актуально</li>
<li><b>run</b> - выполнение теста</li>
<li><b>cleanup</b> - очистка данных (после этапа подготовки)</li>
<li><b>help</b> - выводит дополнительные параметры теста</li>
</ul>
<p>Параметр &#8220;&#8211;test&#8221; задает имя теста, который следует выполнять. Sysbench включает в себя несколько тестов:</p>
<h4>cpu</h4>
<p>Этот тест проверит <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительность</a> процессоров, используя вычисления с 64-разрядными числами. Например:</p>
<pre>sysbench --test=cpu --cpu-max-prime=20000 run</pre>
<h4>memory</h4>
<p>Этот тест служит для измерения <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> последовательных операций чтения/записи в оперативную память.</p>
<h4>fileio</h4>
<p>Этот тест используется для симуляции разнообразной нагрузки на файловую подсистему. При подготовке теста создается определенное количество файлов (указанного размера). Затем, при выполнении теста, над этими файлами происходят операции чтения/записи в несколько потоков.</p>
<pre>
sysbench --num-threads=16 --test=fileio --file-total-size=3G --file-test-mode=rndrw prepare
sysbench --num-threads=16 --test=fileio --file-total-size=3G --file-test-mode=rndrw run
sysbench --num-threads=16 --test=fileio --file-total-size=3G --file-test-mode=rndrw cleanup
</pre>
<h4>threads</h4>
<p>Служит для проверки работы в условиях большого количества конкурирующих потоков. Тест заключается в создании нескольких потоков и нескольких <a href="http://en.wikipedia.org/wiki/Mutual_exclusion">мутексов</a>. Далее каждый поток начинает генерировать запросы, которые блокируют мутекс, исполняют процессорные задачи (для симуляции реальной работы) и разблокируют мутекс.</p>
<pre>sysbench --num-threads=64 --test=threads --thread-yields=100 --thread-locks=2 run</pre>
<h4>oltp (Online transaction processing)</h4>
<p>Этот тест служит для оценки <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> СУБД, о нем подробнее дальше:</p>
<p><br clear="all" /></p>
<h2>OLTP тестирование - производительность MySQL</h2>
<p>Этот тест проводится в несколько этапов. На этапе <b>prepare</b создается тестовая таблица и заполняется данными (в указанных количествах). Например:</p>
<pre>sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=10000 --mysql-user=root --mysql-password=root --db-driver=mysql --test=oltp prepare</pre>
<p>Эта операция создаст innoDB таблицу на 10000 записей. По умолчанию таблица создается в базе данных sbtest (не забудьте создать эту БД либо указать другую).</p>
<p>Далее выполняются тесты:</p>
<pre>sysbench --num-threads=8 --max-requests=500 --oltp-table-size=10000 --mysql-user=root --mysql-password=root --db-driver=mysql --test=oltp run</pre>
<p>Эта команда выполнит тест с 8 клиентами (максимальное количество запросов - 500) на таблице, которая была создана на предыдущем этапе. После окончания теста не забудьте выполнить команду <strong>cleanup</strong>. После выполнения Вы увидите подробные результаты тестирования. Далее - живой пример.</p>
<h2>Пример</h2>
<p>Посмотрим на <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительность</a> innoDB таблицы с разными значениями конфигурационных параметров (проведем эксперимент со сбросом лога). Для начала подготовим innoDB таблицу (50 тыс. записей):</p>
<pre>sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=50000 --mysql-user=root --mysql-password=root --db-driver=mysql --test=oltp prepare</pre>
<p>.</p>
<p>Включим сброс лога на диск после каждой транзакции (используем стандартный метод сброса лога):</p>
<pre>
innodb_flush_log_at_trx_commit = 1
innodb_flush_method=fdatasync
</pre>
<p>Выполним тест:</p>
<pre>sysbench --num-threads=8 --max-requests=1000 --oltp-table-size=50000 --mysql-user=root --mysql-password=root --db-driver=mysql --test=oltp run</pre>
<p>И увидим следующие результаты:</p>
<pre>
OLTP test statistics:
    queries performed:
        read:                            14000
        write:                           5000
        other:                           2000
        total:                           21000
    <b>transactions:                        1000   (263.49 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 19000  (5006.24 per sec.)
    other operations:                    2000   (526.97 per sec.)</b>

Test execution summary:
    total time:                          3.7953s
    total number of events:              1000
    total time taken by event execution: 30.2361
    per-request statistics:
         min:                                  4.80ms
         avg:                                 30.24ms
         max:                                 53.01ms
         approx.  95 percentile:              33.07ms

Threads fairness:
    events (avg/stddev):           125.0000/0.00
    execution time (avg/stddev):   3.7795/0.01
</pre>
<p>Убедимя, что пропускная способность операций чтения/записи около 5 тыс в секунду. Теперь изменим параметры сброса лога:</p>
<pre>
innodb_flush_log_at_trx_commit = 0
innodb_flush_method=O_DIRECT
</pre>
<p>и проверим результаты:</p>
<pre>
OLTP test statistics:
    queries performed:
        read:                            14000
        write:                           5000
        other:                           2000
        total:                           21000
    <b>transactions:                        1000   (485.37 per sec.)
    deadlocks:                           0      (0.00 per sec.)
    read/write requests:                 19000  (9222.00 per sec.)
    other operations:                    2000   (970.74 per sec.)</b>

Test execution summary:
    total time:                          2.0603s
    total number of events:              1000
    total time taken by event execution: 16.4255
    per-request statistics:
         min:                                  2.69ms
         avg:                                 16.43ms
         max:                                235.49ms
         approx.  95 percentile:              42.15ms

Threads fairness:
    events (avg/stddev):           125.0000/6.16
    execution time (avg/stddev):   2.0532/0.00
</pre>
<p>Убеждаемся, что во втором случае пропускная способность СУБД вдвое выше, чем в первом (о параметрах подробнее в статье <a href="http://highload.com.ua/index.php/2009/04/23/оптимальная-настройка-mysql-сервера/">Оптимальная настройка Mysql сервера</a>).</p>
<p><br clear="all" /></p>
<h2>Альтернативные утилиты</h2>
<p>Кроме <strong>Sysbench</strong>, есть еще ряд инструментов, на который следует обратить внимание:</p>
<ul>
<li><a href="http://dev.mysql.com/doc/refman/5.1/en/mysql-benchmarks.html" target="_blank">MySQL Benchmark Suite (“sql-bench”)</a> - входит в стандартную поставку MySQL (Perl)</li>
<li><a href="http://vegan.net/tony/supersmack/" target="_blank">Super Smack</a> - утилита для стресс тестирования/генерации нагрузки для MySQL</li>
<li><a href="http://jeremy.zawodny.com/mysql/mybench/" target="_blank">Mybench</a> - маленькая и простая утилита для тестирования <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> (Perl)</li>
</ul>
<p><br clear="all" /></p>
<h2>Ссылки</h2>
<p><a href="http://sysbench.sourceforge.net" target="_blank">Официальный сайт Sysbench</a></p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/&title=Sysbench+-+%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC+%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C+MySQL+%D0%B8+%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/&title=Sysbench+-+%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC+%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C+MySQL+%D0%B8+%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/&title=Sysbench+-+%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC+%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C+MySQL+%D0%B8+%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/&t=Sysbench+-+%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC+%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C+MySQL+%D0%B8+%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/&title=Sysbench+-+%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC+%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C+MySQL+%D0%B8+%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/&u_data[name]=Sysbench+-+%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC+%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C+MySQL+%D0%B8+%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/&title=Sysbench+-+%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC+%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C+MySQL+%D0%B8+%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/' rel='bookmark' title='Permanent Link: Mongo DB - документо-ориентированная база данных и MySQL'>Mongo DB - документо-ориентированная база данных и MySQL</a></li><li><a href='http://highload.com.ua/index.php/2009/11/26/check-unused-keys-proverka-neispolzuemyh-indeksov-mysql/' rel='bookmark' title='Permanent Link: check-unused-keys - проверка неиспользуемых индексов в MySQL'>check-unused-keys - проверка неиспользуемых индексов в MySQL</a></li><li><a href='http://highload.com.ua/index.php/2009/07/28/maatkit-%d1%80%d0%b0%d1%81%d1%88%d0%b8%d1%80%d0%b5%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b2%d0%be%d0%b7%d0%bc%d0%be%d0%b6%d0%bd%d0%be%d1%81%d1%82%d0%b8-mysql/' rel='bookmark' title='Permanent Link: Maatkit - расширенные возможности MySQL'>Maatkit - расширенные возможности MySQL</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mongo DB - документо-ориентированная база данных и MySQL</title>
		<link>http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/</link>
		<comments>http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 17:37:00 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Технологии]]></category>

		<category><![CDATA[mongo]]></category>

		<category><![CDATA[mysql]]></category>

		<category><![CDATA[производительность]]></category>

		<category><![CDATA[СУБД]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=958</guid>
		<description><![CDATA[
Одним из основных принципов разработки масштабируемых и эффективных приложений является выбор подходящих технологий для решения той или иной задачи. Многие современные РСУБД представляют из себя решения универсальные, но во многих случаях в них просто нет необходимости.
Одним из альтернативных решений для хранения и обработки данных является СУБД Mongo DB (&#8221;humongous&#8221; - огромный, невероятный).

Что такое Mongo DB?
Mongo [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-959" title="screenshot-home-mongodb-10gen-confluence-chromium" src="http://highload.com.ua/wp-content/uploads/2010/03/screenshot-home-mongodb-10gen-confluence-chromium.png" alt="screenshot-home-mongodb-10gen-confluence-chromium" width="242" height="116" /></p>
<p>Одним из основных <a href="http://highload.com.ua/index.php/2009/08/12/масштабирование-и-производительност/">принципов разработки масштабируемых и эффективных приложений</a> является выбор подходящих технологий для решения той или иной задачи. Многие современные РСУБД представляют из себя решения универсальные, но во многих случаях в них просто нет необходимости.</p>
<p>Одним из альтернативных решений для хранения и обработки данных является СУБД Mongo DB (&#8221;hu<strong>mongo</strong>us&#8221; - огромный, невероятный).</p>
<p><span id="more-958"></span></p>
<h2>Что такое Mongo DB?</h2>
<p><strong>Mongo DB</strong> - высокопроизводительная документо-ориентированная база данных. Особенности этой СУБД:</p>
<ul>
<li>Документное хранилище, не требующее создания схем (таблиц)</li>
<li>Запросы в стиле JSON (очень удобно)</li>
<li>Широкий набор (атомарных) операций над данными (условный поиск, сложная вставка/обновление и т.п.)</li>
<li>Разные типы данных (поддержка массивов)</li>
<li>Поддержка индексов (B-Tree)</li>
<li>Автовосстановление, шардинг и репликация в коробке</li>
<li>Профилирование, хранение больших объектов, административный интерфейс, серверные функции, Map/Reduce и многое другое</li>
</ul>
<h2>Mongo DB и MySQL</h2>
<p>Многое из вышеперечисленного есть и в решениях более знакомых, таких, как MySQL. Давайте сравнивать:</p>
<table class='confluenceTable'>
<tbody>
<tr>
<th class='confluenceTh'>&nbsp;</th>
<th class='confluenceTh'> MongoDB </th>
<th class='confluenceTh'> MySQL </th>
</tr>
<tr>
<td class='confluenceTd'> Модель данных </td>
<td class='confluenceTd'> Документная </td>
<td class='confluenceTd'> Реляционная </td>
</tr>
<tr>
<td class='confluenceTd'> Типы </td>
<td class='confluenceTd'> string, int, double, boolean, date, bytearray, object, array </td>
<td class='confluenceTd'> <a href="http://dev.mysql.com/doc/refman/5.0/en/data-types.html" target="_blank">Типы MysQL</a> </td>
</tr>
<tr>
<td class='confluenceTd'> Большие объекты </td>
<td class='confluenceTd'> Да </td>
<td class='confluenceTd'> Да </td>
</tr>
<tr>
<td class='confluenceTd'> Репликация </td>
<td class='confluenceTd'> Master-slave </td>
<td class='confluenceTd'> Master-slave </td>
</tr>
<tr>
<td class='confluenceTd'> Хранилище наборов данных </td>
<td class='confluenceTd'> Коллекции </td>
<td class='confluenceTd'> Таблицы </td>
</tr>
<tr>
<td class='confluenceTd'> Метод запросов </td>
<td class='confluenceTd'> объектный язык запросов </td>
<td class='confluenceTd'> SQL </td>
</tr>
<tr>
<td class='confluenceTd'> Дополнительные индексы </td>
<td class='confluenceTd'> Да </td>
<td class='confluenceTd'> Да </td>
</tr>
<tr>
<td class='confluenceTd'> Атомарность </td>
<td class='confluenceTd'> Документ </td>
<td class='confluenceTd'> Расширенная </td>
</tr>
<tr>
<td class='confluenceTd'> Манипулирование наборами данных на сервере </td>
<td class='confluenceTd'> Map/Reduce, серверный javascript </td>
<td class='confluenceTd'> SQL </td>
</tr>
<tr>
<td class='confluenceTd'> Платформа </td>
<td class='confluenceTd'> C+&#43; </td>
<td class='confluenceTd'> C </td>
</tr>
<tr>
<td class='confluenceTd'> Контроль конкурентности (Concurrency Control) </td>
<td class='confluenceTd'> Update in Place </td>
<td class='confluenceTd'>MVCC</td>
</tr>
</tbody>
</table>
<p>Итак преимущества Mongo:</p>
<ul>
<li>Объектный язык запросов (который намного легче SQL, что является важным преимуществом для большинства задач, не требующих сложных выборок)</li>
<li>Поддержка Map/Reduce для распределенных операций над данным</li>
<li>Документы, не требующие определения схемы. Одно из самых важных преимуществ. Преимущество заключается в том, что у Вас нет нужды хранить пустые ячейки данных в каждом документе.</li>
<li>Поддержка сложных массивов. Каждый элемент массива может представлять из себя объект</li>
<li>Поддержка шардинга на уровне платформы</li>
</ul>
<h2>Производительность</h2>
<p>Для тестирования возьмем таблицу в MySQL (messages) с простой структурой (таблица личных сообщений пользователей одного из моих проектов). Количество записей в ней - около 200 тыс. Все данные скопированны в mongo с соотв. индексами.</p>
<p>Для тестирования будем использовать следующий скрипт:</p>
<pre>
&lt;?php
$m = new Mongo();
$col = $m->messages->threads;

$s = microtime(true);
for ( $i = 0; $i < 5000; $i++ )
        $cursor = $col->find( array('user_id' => $i) );

$t = microtime(true) - $s;

echo "Mongo: " .  $t . "\n\n";

mysql_connect('localhost');
mysql_select_db('messages');

$s = microtime(true);
for ( $i = 0; $i < 5000; $i++ )
        mysql_query('SELECT id FROM messages WHERE mailed_by = ' . $i);
$t = microtime(true) - $s;

echo 'MySQL: ' . $t . "\n\n";
</pre>
<p>Как видно из скрипта, мы сделали по 5000 выборок из обеих СУБД. Поля, по которым проходила выборка являются индексными. Ниже приведены результаты второго запуска скрипта (в первый раз значения были гораздо б<em>о</em>льшими, т.к. таблицы не были подтянуты в память):</p>
<pre>
Mongo: 0.010502815246582
MySQL: 0.27930092811584
</pre>
<p>Как видим MySQL справился с однотипной задачей на порядок медленее. <em>Для тестирования были использованы стандартные конфигурации обоих платформ, поэтому настройка может внести изменения в эти результаты.</em></p>
<h2>Когда выбирать Mongo DB, а когда MySQL?</h2>
<p>Mongo представляет из себя очень функциональное решение, тем не менее обладает рядом ограничений. Например, возможность сделать JOIN (а нужен ли он?). Также язык запросов Mongo конечно устапает SQL в гибкосте и возможностях. Но нужна ли Вам эта гибкость в Ваших задачах? Одним словом, Mongo подходит почти под любой класс задач, не требующих сложных выборок.</p>
<p>Что же касается MySQL (или родственных продуктов), то он остается решением для задач требующих нетривиальных выборок (например, статистические или аналитически запросы).</p>
<h2>Личное впечатление</h2>
<p>После первого знакомства с Mongo DB, этот продукт оставил очень хорошее впечатление и заставил вернуться к нему еще раз. Помимо прочих преимуществ:</p>
<ul>
<li>Очень легкий и интуитивно понятный</li>
<li>Простая установка, все заработало с первого раза</li>
<li>Отличная документация, хорошее сообщество</li>
<li>Множество клиентских разработок, в т.ч. под PHP</li>
</ul>
<p>При детальном рассмотрении, выяснилось, что сам продукт обладает очень обширным функционалом (например, полнотекстовый поиск). Кажущийся простым на поверхности, MongoDB представляет из себя очень мощную платформу для работы с данными.</p>
<p>Совсем недавно мы переписали несколько фукнциональных частей проекта на Mongo. В процессе работы проблем почти не возникало, за исключением некоторых:</p>
<ul>
<li>Mongo строго типизирован и не приводит типы автоматически (такой возможности впринципе нет, учитывая отсуствие каких-либо метаданных о коллекциях и документах). Поэтому в динамически типизированном PHP приходится приводить данные к нужным типам (например, когда они приходят из формы).</li>
<li>Не хватило возможностей для работы с массивами, что немного сбило с толку. С одной стороны - вложенные массивы - очень удобная вещь, с другой стороны - нет таких штук, как их фильтрация или сортировка. Надеюсь все это будет вскоре, хотя сейчас есть возможность реализовать это с помощью серверных функций.</li>
</ul>
<p>Интересно узнать мнение и опыт читателей, кто использовал или знаком с MongoDB.</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/&title=Mongo+DB+-+%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F+%D0%B1%D0%B0%D0%B7%D0%B0+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85+%D0%B8+MySQL+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/&title=Mongo+DB+-+%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F+%D0%B1%D0%B0%D0%B7%D0%B0+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85+%D0%B8+MySQL+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/&title=Mongo+DB+-+%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F+%D0%B1%D0%B0%D0%B7%D0%B0+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85+%D0%B8+MySQL+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/&t=Mongo+DB+-+%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F+%D0%B1%D0%B0%D0%B7%D0%B0+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85+%D0%B8+MySQL+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/&title=Mongo+DB+-+%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F+%D0%B1%D0%B0%D0%B7%D0%B0+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85+%D0%B8+MySQL+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/&u_data[name]=Mongo+DB+-+%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F+%D0%B1%D0%B0%D0%B7%D0%B0+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85+%D0%B8+MySQL+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/&title=Mongo+DB+-+%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%B0%D1%8F+%D0%B1%D0%B0%D0%B7%D0%B0+%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85+%D0%B8+MySQL+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2010/03/05/sysbench-testiruem-proizvoditelnost-mysql/' rel='bookmark' title='Permanent Link: Sysbench - тестируем производительность MySQL и платформы'>Sysbench - тестируем производительность MySQL и платформы</a></li><li><a href='http://highload.com.ua/index.php/2009/07/28/maatkit-%d1%80%d0%b0%d1%81%d1%88%d0%b8%d1%80%d0%b5%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b2%d0%be%d0%b7%d0%bc%d0%be%d0%b6%d0%bd%d0%be%d1%81%d1%82%d0%b8-mysql/' rel='bookmark' title='Permanent Link: Maatkit - расширенные возможности MySQL'>Maatkit - расширенные возможности MySQL</a></li><li><a href='http://highload.com.ua/index.php/2009/11/26/check-unused-keys-proverka-neispolzuemyh-indeksov-mysql/' rel='bookmark' title='Permanent Link: check-unused-keys - проверка неиспользуемых индексов в MySQL'>check-unused-keys - проверка неиспользуемых индексов в MySQL</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/03/02/mongodb-document-oriented-db-and-mysql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rediska — удобный PHP клиент для Redis</title>
		<link>http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/</link>
		<comments>http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 09:28:50 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Технологии]]></category>

		<category><![CDATA[key-value]]></category>

		<category><![CDATA[redis]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=943</guid>
		<description><![CDATA[Rediska - удобный PHP клиент c внушительным списком возможностей для key-value базы Redis.


Основные возможности

Полная поддержка Redis 1.2.1 API. Список обновлений, доступный в новой версии.
Работа с несколькими серверами
Несколько алгоритмов &#8220;размазывания&#8221; ключей по серверам: &#8220;consistent hashing&#8221; и crc32. Причем подключить свой не составит труда.
Работа с ключами как с объектами
Работа с списками и &#8220;сетами&#8221;, как с обычными PHP [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rediska.geometria-lab.net/"><img src="http://rediska.geometria-lab.net/images/rediska.png" alt="Rediska" align="left" /></a><a href="http://rediska.geometria-lab.net/">Rediska</a> - удобный PHP клиент c внушительным списком возможностей для key-value базы <a href="http://highload.com.ua/index.php/2009/05/01/redis/" >Redis</a>.</p>
<p><br clear="all" /><br />
<span id="more-943"></span></p>
<h4>Основные возможности</h4>
<ul>
<li>Полная поддержка <a href="http://highload.com.ua/index.php/2009/05/01/redis/" >Redis</a> 1.2.1 API. <a href="http://highload.com.ua/index.php/2009/05/01/redis/">Список обновлений, доступный в новой версии</a>.</li>
<li>Работа с <a href="http://rediska.geometria-lab.net/documentation/configuration/servers">несколькими серверами</a></li>
<li><a href="http://rediska.geometria-lab.net/documentation/configuration/key-distributor">Несколько алгоритмов</a> &#8220;размазывания&#8221; ключей по серверам: &#8220;consistent hashing&#8221; и crc32. Причем подключить свой не составит труда.</li>
<li>Работа с <a href="http://rediska.geometria-lab.net/documentation/usage/working-with-keys/single-value-keys">ключами</a> как с объектами</li>
<li>Работа с <a href="http://rediska.geometria-lab.net/documentation/usage/working-with-keys/lists">списками</a> и <a href="http://rediska.geometria-lab.net/documentation/usage/working-with-keys/sets">&#8220;сетами&#8221;</a>, как с обычными PHP массивами</li>
<li><a href="http://rediska.geometria-lab.net/documentation/usage/pipelining">Pipelining</a> - быстрая отправка серии команд на сервер.</li>
<li><a href="http://rediska.geometria-lab.net/documentation/usage/extending-rediska">Простое и удобное расширение</a> Редиски - добавление, удаление и замена команд.</li>
<li>Lazy loading (&#8221;Ленивая загрузка&#8221;) - загрузка функцинала Редиски по требованию.</li>
<li><a href="http://rediska.geometria-lab.net/documentation/integration-with-frameworks/zend-framework">Полная интеграция с Zend Framework</a></li>
<li>Исчерпывающая <a href="http://rediska.geometria-lab.net/documentation">документация</a>.</li>
</ul>
<h4>Скоро</h4>
<ul>
<li>Теги - получения списка и удаление ключей по тегу.</li>
<li>Поддержка <a href="http://www.audioscrobbler.net/development/ketama/">Ketama</a> - быстрой consistent hashing библиотеки.</li>
<li>Оптимизация <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a>.</li>
<li>Интеграция с другими фреймворками.</li>
<li>Учебное приложение - реальное приложение написанное с использованием Rediska с подробными комментариями.</li>
</ul>
<h4>Примеры работы</h4>
<p>Создаем ключ на 2 минуты и сохраняем значение, если пусто:</p>
<pre>
&lt;?php
// инциализация ключа
require_once 'Rediska/Key.php';
$key = new Rediska_Key('keyName', 60 * 2);

// старый способ
$value = $key->getValue();
if ($value === null) {
   $value = $exampleObject->getNewValue();
   $key->setValue($value);
}

// новый способ
$value = $key->getOrSetValue($exampleObject)->getNewValue();
?>
</pre>
<p>Работаем со списком:</p>
<pre>
&lt;?php
// инициализация списка
require_once 'Rediska/Key/List.php';
$list = new Rediska_Key_List('list');

// добавляем новые элементы
$list[] = 'first element';
$list[] = 'second element';

// получаем элемент
echo $list[1]; #=> 'second element';

// Заменяем элемент
$list[0] = 'new first element';

// Получаем количество элментов
echo count($list); #=> 2

// Проверяем установлен ли элемент с указанным индексом
echo isset($list[0]); #=> true

// Итерация списка
foreach($list as $element) {
   echo $element;
}
?>
</pre>
<p>Работа с &#8220;пайплайнами&#8221; и выполнение команд на указанном сервере:</p>
<pre>
&lt;?php
// инициализация
$options = array(
   'namespace' => 'MyApplication_',
	'servers' => array(
       'exapmleAlias' => array('host' => '127.0.0.1'),
	    array('host' => '127.0.0.1', 'port' => 6380)
	)
);
require_once 'Rediska.php';
$rediska = new Rediska($options);

// создать ключ на сервере "exampleAlias"
$rediska->on('exampleAlias')->set('a', 'b');

// выполяем серию команд в "пайплайне"
$result = $rediska->pipeline()->set('a', 1)
                                          ->increment('a', 10)
                                          ->rename('a', 'b')
                                          ->get('a')
                                          ->execute(); // выполнить команды и вернуть ответы
?>
</pre>
<p>Более подробную информацию и примеры читайте в <a href="http://rediska.geometria-lab.net/documentation">документации</a>.</p>
<p>Rediska - открытый проект: вы можете поучаствовать в разработке или стать автором интеграции с любимым фреймворком. Контакты авторов вы найдете на <a href="http://rediska.geometria-lab.net/">сайте проекта</a>.</p>
<p>За обзорную статью большое спасибо <b>Ивану Шумкову</b> - создателю клиента Rediska.</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/&title=Rediska+%E2%80%94+%D1%83%D0%B4%D0%BE%D0%B1%D0%BD%D1%8B%D0%B9+PHP+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82+%D0%B4%D0%BB%D1%8F+Redis+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/&title=Rediska+%E2%80%94+%D1%83%D0%B4%D0%BE%D0%B1%D0%BD%D1%8B%D0%B9+PHP+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82+%D0%B4%D0%BB%D1%8F+Redis+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/&title=Rediska+%E2%80%94+%D1%83%D0%B4%D0%BE%D0%B1%D0%BD%D1%8B%D0%B9+PHP+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82+%D0%B4%D0%BB%D1%8F+Redis+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/&t=Rediska+%E2%80%94+%D1%83%D0%B4%D0%BE%D0%B1%D0%BD%D1%8B%D0%B9+PHP+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82+%D0%B4%D0%BB%D1%8F+Redis+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/&title=Rediska+%E2%80%94+%D1%83%D0%B4%D0%BE%D0%B1%D0%BD%D1%8B%D0%B9+PHP+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82+%D0%B4%D0%BB%D1%8F+Redis+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/&u_data[name]=Rediska+%E2%80%94+%D1%83%D0%B4%D0%BE%D0%B1%D0%BD%D1%8B%D0%B9+PHP+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82+%D0%B4%D0%BB%D1%8F+Redis+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/&title=Rediska+%E2%80%94+%D1%83%D0%B4%D0%BE%D0%B1%D0%BD%D1%8B%D0%B9+PHP+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82+%D0%B4%D0%BB%D1%8F+Redis+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2009/05/01/redis/' rel='bookmark' title='Permanent Link: Redis'>Redis</a></li><li><a href='http://highload.com.ua/index.php/2009/10/06/php-redis-%d0%bf%d0%bb%d0%b0%d1%82%d1%84%d0%be%d1%80%d0%bc%d0%b0-%d0%ba%d0%bb%d1%8e%d1%87%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d0%b5/' rel='bookmark' title='Permanent Link: PHP + Redis платформа &#8220;Ключ=Значение&#8221;'>PHP + Redis платформа &#8220;Ключ=Значение&#8221;</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/01/26/rediska-php-client-for-redis/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Кеширование страниц - ускоряем сайт в 100 раз (Varnish + ESI)</title>
		<link>http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/</link>
		<comments>http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 12:32:33 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Теория и практика]]></category>

		<category><![CDATA[varnish]]></category>

		<category><![CDATA[кеширование]]></category>

		<category><![CDATA[оптимизация]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=899</guid>
		<description><![CDATA[
В этой статье поговорим о кешировании страниц и их частей, а также о том, какие плюсы это дает.
Если на Вашем сайте практически нет динамики (например, новостной сайт или блог), то Вы легко можете складывать все его страницы в кеш и практически не делать запросов к бекенду. Но что делать если на сайте есть авторизация, и [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2010/01/varnish-logo-red-64.gif" alt="varnish-logo-red-64" title="varnish-logo-red-64" width="235" height="64" class="alignleft size-full wp-image-901" /></p>
<p>В этой статье поговорим о кешировании страниц и их частей, а также о том, какие плюсы это дает.</p>
<p>Если на Вашем сайте практически нет динамики (например, новостной сайт или блог), то Вы легко можете складывать все его страницы в кеш и практически не делать запросов к бекенду. Но что делать если на сайте есть авторизация, и зависящая от этого логика?</p>
<p>В этой статье речь пойдет о том, как кешировать страницы с персональными данными используя <b>Varnish</b> и язык <b>ESI</b>.</p>
<p><span id="more-899"></span></p>
<h4>ESI</h4>
<p>Язык ESI позволяет разбить страницу на логические части, а при обработке страницы делать дополнительные запросы для получения содержимого этих частей. Все выглядит довольно просто:</p>
<pre>

&lt;HTML&gt;
&lt;BODY&gt;

Всем привет!

&lt;esi:include src=&quot;/news.php?UID&quot;/&gt;

Всем пока!!!

&lt;/BODY&gt;
&lt;/HTML&gt;
</pre>
<p>Веб сервер, поддерживаюий ESI вызовы, встретив ESI вызов, просто сделает дополнительный запрос, а результат вставит на его место. Допустим наш скрипт &#8220;news.php&#8221; содержит такой код:</p>
<pre>
&lt;?
echo "&lt;ul>&lt;li>News title 1&lt;/li>&lt;/ul>";
</pre>
<p>После обработки первого примера, клиенту вернется такая страница:</p>
<pre>

&lt;HTML&gt;
&lt;BODY&gt;

Всем привет!

&lt;ul>&lt;li>News title 1&lt;/li>&lt;/ul>

Всем пока!!!

&lt;/BODY&gt;
&lt;/HTML&gt;
</pre>
<p>Зачем это нужно, если это только увеличивает количество запросов к серверу?<br />
Все просто, если использовать кеширование - у Вас появляется удобное средство кешировать различные куски страниц (с разной логикой и временем жизни кеша). В нашем примере мы могли бы, например, закешировать главную страницу на 1 день, а скрипт новостей на 1 час. Тогда в сутки мы бы получали только 25 запросов к PHP. Это позволило бы значительно разгрузить бекенд, а также увеличить скорость загрузки страниц.</p>
<h4>Как все работает?</h4>
<p>Web сервер, который поддерживает ESI, делает запрос к бекенду (в нашем случае, PHP). Далее получив страницу, обрабатывает все ESI вызовы, делая на каждый из них дополнительный запрос для получения содержимого. Далее, следуя правилам кеширования, складывает (или не складывает) все это в кеш и генерирует страницу. Последующие вызовы страницы приведут к тому, что она будет отдана клиенту из кеша.</p>
<p>Допустим на странице три ESI вызова (например, шапка, подвал и блок новостей). В этом случае первое обращение к серверу будет выглядеть где-то так:<br />
<br />
<img src="http://highload.com.ua/wp-content/uploads/2010/01/esi11.png" alt="esi11" title="esi11" width="600" height="776" class="aligncenter size-full wp-image-911" /></p>
<p></p>
<p>Обратите внимание, что один запрос генерирует еще 3 запроса к бекенду (т.к. у нас три ESI вызова на странице). После первого запроса все части закешировались, и теперь (при последующих запросах) картинка будет выглядеть так:<br />
<br />
<img src="http://highload.com.ua/wp-content/uploads/2010/01/esi21.png" alt="esi21" title="esi21" width="600" height="588" class="aligncenter size-full wp-image-912" /></p>
<p></p>
<p>Как видите, второй запрос (и каждый последующий) не вызвали обращений к бекенду, а все нужные куски страниц были отданы из кеша.</p>
<p>Что необходимо сделать, чтобы все это заработало:</p>
<ol>
<li>Выделить блоки на странице, сделать их доступными по отдельным HTTP запросам</li>
<li>Описать ESI вызовы на месте выделенных блоков</li>
<li>Описать логику кеширования на сервере (время жизни кеша, параметры кеширования и т.п.)</li>
</ol>
<h4>Персональные данные</h4>
<p>Самая сложная часть в частичном кешировании, это выделение персональных частей. Например: блок логина после авторизации превращается в блок с персональными ссылками (типа &#8220;выйти&#8221;, &#8220;настройки&#8221; и т.п.). Для того, чтобы получить правильный результат нужно для начала разделить страницу на такие блоки. Важно понять отличие персонализированных блоков (например, блок с фоткой, именем и фамилией залогиненного пользователя) от блоков для авторизированных пользователей (например, кнопка &#8220;выйти&#8221; вместо формы логина). В первом случае объект нужно сохранить в кеш для каждого пользователя, а во втором у объекта будет всего две версии в кеше (для залогиненных пользователей и нет).</p>
<p>В случае персонализированных блоков необходимо кешировать их на основе идентификатора пользователя (либо сессии), тогда для каждого пользователя будет создан объект в кеше. Учитывая это, важно, чтобы этих объектов было очень мало и сами они были как можно меньше. В остальных случаях необходимо просто кешировать объекты на основе статуса пользователя (залогинен или нет). Далее - детальный пример.</p>
<h4>Пример</h4>
<p>Для примера возьмем такую задачу. У нас есть сайт с новостями. Новости обновляются каждый час. На сайте также есть блок авторизации и скрытые ссылки для авторизированных пользователей. Исходя из этого логическое разбиение на блоки будет следующим:</p>
<ul>
<li>Блок авторизации</li>
<li>Меню</li>
<li>Блок новостей</li>
</ul>
<p>Исходный код стартовой страницы:</p>
<pre>
&lt;HTML&gt;
&lt;BODY&gt;

&lt;h1&gt;Тестируем ESI&lt;/h1&gt;

&lt;esi:include src=&quot;/app/auth.php?UID&quot;/&gt;
&lt;esi:include src=&quot;/app/menu.php?AUTH&quot;/&gt;

&lt;h3&gt;Новости&lt;/h3&gt;
&lt;esi:include src=&quot;/app/news.php&quot;/&gt;

&lt;/BODY&gt;
&lt;/HTML&gt;
</pre>
<p>Все скрипты для ESI вызовов будут находиться в папке app. Их исходники:</p>
<h5>Скрипты бекенда</h5>
<p><b>Скрипт авторизации</b></p>
<pre>
&lt;?

session_start();

if ( $_POST['user'] )
{
	$_SESSION['user'] = $_POST['user'];
	header('Location: /'); exit;
}

$user = $_SESSION['user'];

?>

&lt;? if ( $user ) { ?>
	&lt;div>Привет, &lt;b>&lt;?=$user?>&lt;/b>!&lt;/div>
&lt;? } else { ?>
	&lt;form method="post" action="/app/auth.php">
		Войдите в систему
		&lt;input type="text" name="user" />
		&lt;input type="submit" name="Войти">
	&lt;/form>
&lt;? } ?>
</pre>
<p>
<b>Скрипт меню</b></p>
<pre>
&lt;? session_start(); ?&gt;

&lt;ul&gt;
	&lt;? if ( $_SESSION['user'] ) { ?&gt;
		&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Пункт меню только для пользователей&lt;/a&gt;&lt;/li&gt;
	&lt;? } ?&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Публичный пункт меню&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>
<b>Скрипт новостей</b></p>
<pre>
&lt;?

$rss = file_get_contents('http://feeds.nytimes.com/nyt/rss/HomePage');
$xml = simplexml_load_string($rss);

echo &quot;&lt;ul&gt;&quot;;
foreach ( $xml-&gt;channel-&gt;item as $item )
{
	echo &quot;&lt;li&gt;&lt;a href=\&quot;{$item-&gt;link}\&quot;&gt;{$item-&gt;title}&lt;/a&gt;&quot;;
}
echo &quot;&lt;/ul&gt;&quot;;
</pre>
<p>Вся логика крайне упрощена, но тем не менее сохраняет суть стандартных задач подобного рода.</p>
<h5>Настройка Nginx</h5>
<p>Для обслуживания будем использовать <a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >Nginx</a>. Конфигурация включает два виртуальных сервера. Первый (80 порт) принимает и обрабатывает запросы от клиента. Все запросы проксирует на <a href="http://highload.com.ua/index.php/2009/04/21/varnish/" >Varnish</a>. Второй сервер (порт 8090) нужен для запросов от <a href="http://highload.com.ua/index.php/2009/04/21/varnish/" >Varnish</a>&#8217;a:</p>
<pre>
server {
    listen 80;
    server_name esi.dev;
}

server {
    listen 8090;

    root /home/golotyuk/www/localhost/esi;

    # Если включен gzip, обязательно нужно выключить!
    gzip off;

    location / {
        index index.php;
    }

    location ~* \.(php)$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME  /home/golotyuk/www/localhost/esi/$fastcgi_script_name;
    }
}
</pre>
<h5>Настройка varnish + esi</h5>
<p>Перед конфигурацией <a href="http://highload.com.ua/index.php/2009/04/21/varnish/" >varnish</a>&#8217;a определяем логику кеширования:</p>
<ul>
<li>Главную страницу кешируем на 24 часа, блоки - на 1 час</li>
<li>Кешировать будем все запросы кроме POST</li>
<li>Для кеширования персонального блока будем использовать значение сессионных cookie (PHPSESSID) - для установки ключа кеширования</li>
<li>Для разделения персонализированных блоков от обычных блоков для авторизированных пользователей будем использовать соотв. приставки к запросам: UID (персонализированные блоки) и AUTH (обычные блоки, учитывающие только статус пользователя)</li>
</ul>
<p>Конфигурация:</p>
<pre>
# Бекенд сервер - виртуальный сервер <a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >Nginx</a>
backend default { .host = "127.0.0.1"; .port = "8090"; }

# Процедура формирования ключа для кеширования
sub vcl_hash {
       # Стандартные параметры - имя сервера и URL
        set req.hash += req.url;
        set req.hash += req.http.host;

       # Если установлена сессионная кука, сохраняем ее значение в переменную
        if( req.http.cookie ~ "PHPSESSID" ) {
            set req.http.X-<a href="http://highload.com.ua/index.php/2009/04/21/varnish/" >Varnish</a>-Hashed-On =
                regsub( req.http.cookie, "^.*?PHPSESSID=([^;]*?);*.*$", "\1" );
        }

        # Если в строке запроса мы находим "UID", то необходимо добавить
        # значение сессии в параметры кеширования
        if( req.url ~ "/app/.*UID" &#038;&#038; req.http.X-<a href="http://highload.com.ua/index.php/2009/04/21/varnish/" >Varnish</a>-Hashed-On ) {
             set req.hash += req.http.X-<a href="http://highload.com.ua/index.php/2009/04/21/varnish/" >Varnish</a>-Hashed-On;
        }

        # Если в строке запроса мы находим "AUTH", то необходимо добавить
        # флаг статуса (logged in) в параметры кеширования
        if( req.url ~ "/app/.*AUTH" &#038;&#038; req.http.X-<a href="http://highload.com.ua/index.php/2009/04/21/varnish/" >Varnish</a>-Hashed-On ) {
            set req.hash += "logged in";
        }

        hash;
}

sub vcl_recv {
        # Если тип запрос не POST, то ищем объект в кеше
        if ( req.request != "POST" )
        {
                lookup;
        }
}

sub vcl_fetch {
    # Для запроса "/" используем обработку esi и кешируем на 1 сутки
    if (req.url == "/") {
        esi;
        set obj.ttl = 24h;
    }
    # Для запросов "/app" (ESI вызовы) кешируем результат на 1 час
    elseif (req.url ~ "^/app/") {
        set obj.ttl = 1h;
    }

    deliver;
}
</pre>
<p>После конфигурации и запуска, получим приблизительно следующее:<br />
<br />
<img src="http://highload.com.ua/wp-content/uploads/2010/01/esi-screen-shot.png" alt="esi-screen-shot" title="esi-screen-shot" width="479" height="538" class="aligncenter size-full wp-image-925" /></p>
<p>Для анализа <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> воспользуемся утилитой <b>ab</b> (из пакета apache2-utils):</p>
<pre>ab -n 100 -c 5 http://esi.dev/</pre>
<p>Результат:</p>
<pre>

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       0
Processing:     2    5   3.8      3      18
Waiting:        2    5   3.8      3      18
Total:          2    5   3.8      4      19

Percentage of the requests served within a certain time (ms)
  50%      4
  66%      4
  75%      5
  80%      8
  90%     12
  95%     15
  98%     17
  99%     19
 100%     19 (longest request)
</pre>
<p>Для сравнения запустим тест на аналогичном скрипте без ESI, который содержит всю туже логику внутри и каждый раз вызывает PHP:</p>
<pre>ab -n 100 -c 5 http://127.0.0.1:8090/index_standard.php</pre>
<p>Результаты:</p>
<pre>
Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.0      0       0
Processing:   354  579 666.2    458    5484
Waiting:      354  579 666.2    458    5483
Total:        354  579 666.2    458    5484

Percentage of the requests served within a certain time (ms)
  50%    458
  66%    492
  75%    517
  80%    539
  90%    602
  95%    667
  98%   3572
  99%   5484
 100%   5484 (longest request)
</pre>
<p>Как видим скорость обслуживания отличается в <b>100 раз</b>!</p>
<p>Возможно тесты покажуться слишком <em>хитрыми</em> (новости мы получаем из внешнего источника, что очень медленно). Но следует понимать, что пример содержит очень мало логики и для симуляции реального примера был использован 1 внешний запрос. По существу это тоже самое, что несколько десятков запросов к MySQL + несколько сотен запросов к <a href="http://highload.com.ua/index.php/2009/04/21/memcached/" >memcached</a> + логика приложения + логика отображения.</p>
<h4>Итог</h4>
<p>Применение принципа частичного кеширования страниц позволяет кешировать страницы с динамическими и персональными данными с нетривиальной логикой. Плюсы такого подхода:</p>
<ol>
<li>Существенно увеличивается скорость отдачи страниц</li>
<li>Сильно разгружаются бекенд сервера от повторяющейся логики</li>
</ol>
<h5>Текущие проблемы</h5>
<ul>
<li>Применение подобного подхода требует достаточно серъезных изменений в структуре приложения</li>
<li>Очень большая персонализация страниц на больших объемах будет требовать больших объемов оперативной памяти</li>
<li>Данный подход требует редко изменяющейся разметки данных, т.к. частое ее изменение будет приводить к постоянному сбросу кеша, что малоэффективно</li>
</ul>
<p>В качестве альтернативных решений следует привести связку <a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >Nginx</a> + SSI + Memcache, которая будет рассмотрена в будущих статьях.</p>
<h4>Ссылки</h4>
<p><a href="http://varnish.projects.linpro.no/wiki/ESIfeatures" target="_blank">Описание работы ESI в Varnish</a><br />
<a href="http://highload.com.ua/wp-content/uploads/esi.tar.gz">Исходники примеров</a></p>
<p>Какие еще есть решения частичного кеширования страниц?</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/&title=%D0%9A%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC+%D1%81%D0%B0%D0%B9%D1%82+%D0%B2+100+%D1%80%D0%B0%D0%B7+%28Varnish+%2B+ESI%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/&title=%D0%9A%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC+%D1%81%D0%B0%D0%B9%D1%82+%D0%B2+100+%D1%80%D0%B0%D0%B7+%28Varnish+%2B+ESI%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/&title=%D0%9A%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC+%D1%81%D0%B0%D0%B9%D1%82+%D0%B2+100+%D1%80%D0%B0%D0%B7+%28Varnish+%2B+ESI%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/&t=%D0%9A%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC+%D1%81%D0%B0%D0%B9%D1%82+%D0%B2+100+%D1%80%D0%B0%D0%B7+%28Varnish+%2B+ESI%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/&title=%D0%9A%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC+%D1%81%D0%B0%D0%B9%D1%82+%D0%B2+100+%D1%80%D0%B0%D0%B7+%28Varnish+%2B+ESI%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/&u_data[name]=%D0%9A%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC+%D1%81%D0%B0%D0%B9%D1%82+%D0%B2+100+%D1%80%D0%B0%D0%B7+%28Varnish+%2B+ESI%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/&title=%D0%9A%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+%D1%83%D1%81%D0%BA%D0%BE%D1%80%D1%8F%D0%B5%D0%BC+%D1%81%D0%B0%D0%B9%D1%82+%D0%B2+100+%D1%80%D0%B0%D0%B7+%28Varnish+%2B+ESI%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2009/04/21/varnish-%d0%b1%d1%8b%d1%81%d1%82%d1%80%d1%8b%d0%b9-%d1%81%d1%82%d0%b0%d1%80%d1%82/' rel='bookmark' title='Permanent Link: Varnish - быстрый старт'>Varnish - быстрый старт</a></li><li><a href='http://highload.com.ua/index.php/2009/12/02/keshyrovanie-tyajelyh-zaprosov-memcache/' rel='bookmark' title='Permanent Link: Кеширование тяжелых запросов (на примере memcache)'>Кеширование тяжелых запросов (на примере memcache)</a></li><li><a href='http://highload.com.ua/index.php/2009/04/21/varnish/' rel='bookmark' title='Permanent Link: Varnish'>Varnish</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/01/22/%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d1%83%d1%81%d0%ba%d0%be%d1%80%d1%8f%d0%b5%d0%bc-%d1%81%d0%b0%d0%b9%d1%82-%d0%b2-100/feed/</wfw:commentRss>
		</item>
		<item>
		<title>За кулисами Hotmail</title>
		<link>http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/</link>
		<comments>http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 07:37:37 +0000</pubDate>
		<dc:creator>Sergey Shkolin</dc:creator>
		
		<category><![CDATA[Опыт]]></category>

		<category><![CDATA[Технологии]]></category>

		<category><![CDATA[перевод]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=887</guid>
		<description><![CDATA[Привет, меня зовут Артур де Хаан, и я отвечаю за тестирование и системное проектирование в Windows Live. Я бы хотел дать вам заглянуть за кулисы Hotmail, и рассказать вам больше о том, что необходимо для создания, развертывания и запуска Windows Live Hotmail в таких глобальных масштабах.

Хранение вашей почты и данных (и наших собственных данных) на наших [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-888" src="http://highload.com.ua/wp-content/uploads/2010/01/hotmail.gif" alt="hotmail" width="199" height="60" />Привет, меня зовут Артур де Хаан, и я отвечаю за тестирование и системное проектирование в Windows Live. Я бы хотел дать вам заглянуть за кулисы Hotmail, и рассказать вам больше о том, что необходимо для создания, развертывания и запуска <a href="http://mail.live.com/">Windows Live Hotmail</a> в таких глобальных масштабах.<a name="habracut"></a></p>
<p><span id="more-887"></span><br />
Хранение вашей почты и данных (и наших собственных данных) на наших серверах это большая ответственность и мы очень большое внимание уделяем качеству, <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> и надежности. Мы делаем значительные инвестиции в область инженерии и инфраструктуры для того, чтобы Hotmail работал 24 часа в сутки, изо дня в день, из года в год. Вы редко будете слышать об этих усилиях, вы будете слышать о них в тех редких случаях, когда что-то пойдет не так, и наш сервис столкнётся с проблемой.</p>
<p>Hotmail представляет собой гигантскую службу во всех измерениях. Вот некоторые из основных:</p>
<ul>
<li>Наш сервис присутствует по всему миру. Hotmail поставляется на 59 региональных рынка, на 36 языках</li>
<li>Мы предоставляем свыше 1.3 миллиарда почтовых ящиков (некоторые пользователи имеют несколько ящиков)</li>
<li>Более 350 миллионов людей активно используют Hotmail ежемесячно (по данным comScore, август 2009)</li>
<li>Мы обрабатываем свыше 3 миллиардов сообщений в день и фильтруем более 1 миллиарда спамерских писем</li>
<li>Объем данных растет на 2 петабайта в месяц</li>
<li>В настоящий момент у нас хранится свыше 155 петабайт данных(70% этого объема вложения, обычно фотографии)</li>
<li>У нас крупнейшая в мире база данных SQL Server 2008, мы контролируем и управляем многими тысячами Sql серверов</li>
</ul>
<p>Вы можете представить, что пользовательских интерфейс Hotmail это лишь верхушка айсберга, большинство инноваций происходят внутри и не видны для пользователя. В этой заметке я дам высокоуровневый обзор архитектуры всей системы. Мы сделаем более глубокое погружение в некоторые особенности в последующих постах (от переводчика: если данная статья понравится сообществу, я могу перевести эти последующие посты)</p>
<h2>Архитектура</h2>
<p>Hotmail и другие сервисы Windows Live размещены в нескольких дата центрах по всему миру. Hotmail организуется в логические масштабируемые элементы – кластеры. Кроме того, у нас есть инфраструктура, которая распределяет нагрузку между кластерами в каждом дата центре:</p>
<ul>
<li>Сервера для обработки входящей и исходящей почты</li>
<li>Спам фильтры (от переводчика: если данная статья понравится сообществу, я могу перевести блог пост о спам фильтрах в Hotmail)</li>
<li>Хранилище пользовательских данных и данных полученных с наших мониторинговых систем</li>
<li>Инфраструктура мониторинга и реагирования на инциденты</li>
<li>Инфраструктура для управления автоматизированным развертыванием кода и настройки обновлений</li>
</ul>
<p>На одном кластере расположено несколько миллионов пользователей (как много зависит от возраста аппаратного обеспечения) и автономный набор серверов, включая:</p>
<ul>
<li>Frontend серверы – серверы, которые проверяют сообщение на наличие вирусов и размещают код, который отвечает за общение с вашим браузером или почтовым клиентом, используя такие протоколы как POP3 и DeltaSync</li>
<li>Backend серверы – SQL серверы, файловые серверы, фильтры спама, хранилище данных мониторинга и спам фильтров, каталог агентов и серверов, обработка входящей и исходящей почты</li>
<li>Балансировщик нагрузки – аппаратное и программное обеспечение, используемое для равномерного распределения нагрузки для повышения общей <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a>.</li>
</ul>
<p>Предотвращение сбоев в работе и потери данных, является нашим наивысшим приоритетом, и мы принимаем все меры предосторожности, чтобы этого не случилось. Мы спроектировали наш сервис так, чтобы эффективно обрабатывать сбои, учитывая наше предположение о том, что все, что может дать сбой сделает это со временем. Мы сталкиваемся со сбоями в оборудовании, среди сотен тысяч жестких дисков, которые мы используем, находятся те, которые дают сбой. К счастью, из-за особенностей архитектуры и своевременной обработки сбоев, клиенты редко заметят такого рода сбой.</p>
<p>Вот несколько способов предотвращения сбоев:</p>
<ul>
<li>Избыточность – мы используем сочетание массивов хранилищ SQL Server для сохранности ваших данных. Мы пользуемся активной и пассивной отказоустойчивой технологией. Это необычный способ сказать, что у нас есть много серверов и копии ваших данных, которые постоянно синхронизируются. В целом мы храним 4 копии ваших данных на разных дисках и серверах, чтобы минимизировать вероятность потери данных в случае ошибки оборудования.</li>
<li>Еще одно преимущество данной архитектуры в том, что мы можем производить плановое обслуживание, такое как развертывание обновлений или исправление безопасности, без простоя.</li>
<li>Мониторинг — у нас есть разветвленная система мониторинга программного и аппаратного обеспечения. Тысячи серверов наблюдают за состоянием “здоровья” сервиса, транзакциями, общей производительностью системы. Поскольку наш сервис настолько огромен, мы отслеживаем <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительность</a> и uptime в совокупности, а также на уровне кластера и по географическому положению. Мы хотим быть уверены, что ваш персональный опыт вернется назад к нам и не потеряется, когда мы будем смотреть общие показатели системы. Мы заботимся о каждом из пользователей. В будущих постах мы поговорим больше о мониторинге и <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a>.</li>
<li>Группа реагирования – у нас есть круглосуточная группа реагирования, которая следит за нашей глобальной системой мониторинга и принимает меры всякий раз, когда есть проблема. У нас есть процесс расширения, которым могут заниматься наши инженеры в течение нескольких минут в случае необходимости.</li>
</ul>
<h2>Технологический процесс</h2>
<p>Я рассказал немного о нашей архитектуре, и тех шагах, которые мы предпринимаем, чтобы обеспечить бесперебойное обслуживание. Однако наш сервис не статичен; помимо роста за счет использования, мы регулярно вносим обновления. Таким образом, наши технологические процессы также важны, как и архитектура, чтобы обеспечить вас бесперебойной услугой. Мы соблюдаем определенные меры предосторожности при развертывании нового кода, от патчей и небольших обновлений до крупных релизов.</p>
<p><strong>Тестирование и развертывание.</strong> Для каждого разработчика у нас есть инженер по тестированию, который работает рука об руку с разработчиком, что бы внести свой вклад разработку и написание спецификаций, создание инфраструктуры тестирования, написание автоматических тестов для проверки новых возможностей, обеспечение качества. Когда мы говорим о качестве, мы говорим не просто о стабильности и надежности, а также о простоте использования, <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a>, безопасности, доступности (для пользователей с ограниченными возможностями), конфиденциальности, масштабируемости и функциональности во всех браузерах.</p>
<p>Так как мы являемся бесплатной службой, финансируемой за счет рекламы, мы должны быть высокоэффективными. Поэтому развертывание, настройка и сопровождение наших систем является высоко автоматизированным процессом. Автоматизация также снижает риск человеческой ошибки.</p>
<p><strong>Развертывание кода и изменение управления.</strong> У нас тысячи серверов в тестовой лаборатории, где мы развертываем и тестируем код, задолго до того, как он попадет клиенту. В дата центрах у нас так же есть кластеры, специально зарезервированные для тестирования “dogfood” и бета версий на заключительном этапе разработки. Мы проверяем все изменения в наших лабораториях, будь то обновление аппаратного или программного обеспечения, или исправление безопасности.</p>
<p>Когда все инженерные группы подпишут релиз (включая тестеров и инженеров), мы начинаем постепенное развертывание обновлений на кластерах по всему миру. Обычно мы это делаем в течение нескольких месяцев, не только потому, что это занимает много времени, но и чтобы убедится, что это не влияет на качество и <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительность</a> службы.</p>
<p>Также мы можем включать или выключать некоторые возможности по-отдельности. Иногда мы развертываем обновления, но откладываем их включение. В редких случаях мы блокируем некоторые возможности по соображениям безопасности или <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a>.</p>
<h2>Заключение</h2>
<p>Этот топик должен дать вам понимание тех масштабов разработки, которые подразумевает развитие Hotmail. Мы посвящаем себя техническому превосходству и непрерывным усовершенствованиям наших служб для вас. Мы продолжаем изучать, как растет служба, и прислушиваемся к вашим отзывам, серьезно, вы можете оставить мне <a href="http://windowsteamblog.com/blogs/windowslive/archive/2009/12/22/a-peek-behind-the-scenes-at-hotmail.aspx">здесь</a> комментарии с вашими мыслями и вопросами. Я страстный поклонник наших сервисов, как и вся команда Windows Live – мы можем быть инженерами, но мы используем службы сами, наряду с миллионами наших пользователей.</p>
<p>→ <a href="http://windowsteamblog.com/blogs/windowslive/archive/2009/12/22/a-peek-behind-the-scenes-at-hotmail.aspx" target="_blank">Оригинал статьи</a> / → <a href="http://habrahabr.ru/blogs/microsoft/80823/" target="_blank">Перевод на Хабре</a></p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/&title=%D0%97%D0%B0+%D0%BA%D1%83%D0%BB%D0%B8%D1%81%D0%B0%D0%BC%D0%B8+Hotmail+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/&title=%D0%97%D0%B0+%D0%BA%D1%83%D0%BB%D0%B8%D1%81%D0%B0%D0%BC%D0%B8+Hotmail+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/&title=%D0%97%D0%B0+%D0%BA%D1%83%D0%BB%D0%B8%D1%81%D0%B0%D0%BC%D0%B8+Hotmail+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/&t=%D0%97%D0%B0+%D0%BA%D1%83%D0%BB%D0%B8%D1%81%D0%B0%D0%BC%D0%B8+Hotmail+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/&title=%D0%97%D0%B0+%D0%BA%D1%83%D0%BB%D0%B8%D1%81%D0%B0%D0%BC%D0%B8+Hotmail+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/&u_data[name]=%D0%97%D0%B0+%D0%BA%D1%83%D0%BB%D0%B8%D1%81%D0%B0%D0%BC%D0%B8+Hotmail+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/&title=%D0%97%D0%B0+%D0%BA%D1%83%D0%BB%D0%B8%D1%81%D0%B0%D0%BC%D0%B8+Hotmail+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/01/18/%d0%b7%d0%b0-%d0%ba%d1%83%d0%bb%d0%b8%d1%81%d0%b0%d0%bc%d0%b8-hotmail/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Solr - полнотекстовый поиск от Apache (на основе Lucene)</title>
		<link>http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/</link>
		<comments>http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 17:24:00 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Технологии]]></category>

		<category><![CDATA[lucene]]></category>

		<category><![CDATA[solr]]></category>

		<category><![CDATA[sphinx]]></category>

		<category><![CDATA[поиск]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=871</guid>
		<description><![CDATA[
Apache Solr - это расширяемая поисковая платформа от Apache. Система основана на библиотеке Apache Lucene и разработана на Java. Особенности ее в том, что она представляет из себя не просто техническое решение для поиска а именно платформу, поведение которой можно легко расширять/менять/настраивать под любые нужды - от обычного полнотекстового поиска на сайте до распределенной системы [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://highload.com.ua/index.php/2010/01/13/solr-полнотекстовый-поиск-от-apache-на-основе-lucene/" title="Solr - полнотекстовый поиск от Apache (на основе Lucene)"><img src="http://highload.com.ua/wp-content/uploads/2010/01/solr.jpg" alt="solr" title="solr" width="200" height="110" class="alignleft size-full wp-image-879" /></a></p>
<p><strong>Apache Solr</strong> - это расширяемая поисковая платформа от Apache. Система основана на библиотеке Apache Lucene и разработана на Java. Особенности ее в том, что она представляет из себя не просто техническое решение для поиска а именно <em>платформу</em>, поведение которой можно легко расширять/менять/настраивать под любые нужды - от обычного полнотекстового поиска на сайте до распределенной системы хранения/получения/аналитики текстовых и других данных с мощным языком запросов.</p>
<p><span id="more-871"></span></p>
<h4>Основные особенности</h4>
<ul>
<li>Расширенные возможности полнотекстового поиска
<li>Оптимизирован под Web системы с большой нагрузкой
<li>Стандартные интерфейсы протокола - XML, JSON, HTTP
<li>Web панель администрирования (интерфейс для тестовых запросов, статус сервера и компонент, отладка и <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизация</a> анализатора&#8230;)
<li>JMX статистика
<li>Масштабирование - репликация и шардинг в составе платформы
<li>Огромная гибкость благодаря мощной системе конфигурации
<li>Расширяемость благодаря поддержке плагинов
<li>Индексация в реальном времени
<li>Текстовый анализ (разнообразные текстовые фильтры)
<li>Кеширование
<li>Мощный язык запросов (фильтры, сортировки, работа с датой/временем, функциональные запросы и многое другое)
<li>Готовые клиенты для множества языков разработки (в том числе PHP)
<li>Приблизительный поиск (неточные совпадения) и проверка запросов на ошибки (подсказки вариантов)
</ul>
<h4>Lucene</h4>
<p>Платформа <b>Solr</b> основана на библиотеке полнотекстового поиска <a href="http://lucene.apache.org/" target="_blank">Apache Lucene</a>. Библиотека предоставляет большой и гибкий набор функционала для реализации полнотекстового поиска. Поскольку Lucene является библиотекой, то Вам самим необходимо заботиться о всем, что не входит в ее функционал (установка, администрирование, протокол обмена данными с приложением, приложение индексирования, <a href="http://highload.com.ua/index.php/tag/%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/" >масштабирование</a> и т.п.). Solr представляет как раз тот продукт, который нужен в этом случае, обеспечивая разработчиков отличным набором всех необходимых инструментов.</p>
<p>Следует обратить внимание на то, что <b>Solr</b> предоставляет готовые решения для <a href="http://highload.com.ua/index.php/tag/%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/" >масштабирования</a> будующего приложения. Ко всему прочему, будучи разработанным на Java он не привносит дополнительных языковых оверхедов в фукнцианальность Lucene (таких, например, как невероятно медленный Zend_Search_Lucene).</p>
<h4>Полезные ссылки</h4>
<ul>
<li><a href="http://lucene.apache.org/solr/" target="_blank">Официальный сайт Apache Solr</a>
<li><a href="http://lucene.apache.org/solr/tutorial.html" target="_blank">Быстрый старт</a>
<li><a href="http://wiki.apache.org/solr/SolPHP">PHP клиенты</a>
</ul>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/&title=Solr+-+%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%BE%D1%82+Apache+%28%D0%BD%D0%B0+%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5+Lucene%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/&title=Solr+-+%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%BE%D1%82+Apache+%28%D0%BD%D0%B0+%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5+Lucene%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/&title=Solr+-+%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%BE%D1%82+Apache+%28%D0%BD%D0%B0+%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5+Lucene%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/&t=Solr+-+%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%BE%D1%82+Apache+%28%D0%BD%D0%B0+%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5+Lucene%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/&title=Solr+-+%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%BE%D1%82+Apache+%28%D0%BD%D0%B0+%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5+Lucene%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/&u_data[name]=Solr+-+%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%BE%D1%82+Apache+%28%D0%BD%D0%B0+%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5+Lucene%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/&title=Solr+-+%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%BE%D1%82+Apache+%28%D0%BD%D0%B0+%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5+Lucene%29+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Cистема хостинга медиа</title>
		<link>http://highload.com.ua/index.php/2009/12/23/media-hosting-system/</link>
		<comments>http://highload.com.ua/index.php/2009/12/23/media-hosting-system/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 21:44:32 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Теория и практика]]></category>

		<category><![CDATA[масштабирование]]></category>

		<category><![CDATA[медиа]]></category>

		<category><![CDATA[отдача]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=857</guid>
		<description><![CDATA[
После статьи об архитектуре connect.ua многие спрашивали о подсистеме обслуживания медиа файлов, поэтому в этой статье речь пойдет о масштабируемых и производительных системах обслуживания медиа.
Что такое подсистема хостинга медиа вообще? Это часть системы, которая отвечает за загрузку, сохранение, преобразование (транскодирование) и отдачу медиа файлов. Зачастую эта система является наиболее ресурсоемкой ввиду больших объемов данных и [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2009/12/flash_logo.png" alt="flash_logo" title="flash_logo" width="250" height="213" class="alignleft size-full wp-image-858" /></p>
<p>После статьи об <a href="http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/">архитектуре connect.ua</a> многие спрашивали о подсистеме обслуживания медиа файлов, поэтому в этой статье речь пойдет о масштабируемых и производительных системах обслуживания медиа.</p>
<p>Что такое подсистема хостинга медиа вообще? Это часть системы, которая отвечает за загрузку, сохранение, преобразование (транскодирование) и отдачу медиа файлов. Зачастую эта система является наиболее ресурсоемкой ввиду больших объемов данных и процессорных затрат.</p>
<p><span id="more-857"></span></p>
<h4>Самое главное</h4>
<p>Обязательно изолируйте подсистему отдачи медиа от основной части Вашей системы, иначе любые затычки в этой подсистеме (которых обычно очень много) будут непосредственно влиять на все остальные части Вашего сайта.</p>
<h4>Оборудование</h4>
<p>Как всегда перед Вами выбор - покупать дорогой комплекс (файловый супер сервер) либо строить систему из дешевых серверов. Как всегда выбор падает на второй вариант, так как:</p>
<ul>
<li>Решение обладает <strong>бесконечной</strong> масштабируемостью</li>
<li>Отсутствует единая точка сбоя (SPOF), делая это решение очень устойчивым к сбоям</li>
<li>Динамику наращивания железа легко контролировать</li>
<li>Дешевое оборудование - дешевое все остальное (коммутаторы, поддержка, замена и т.п.)</li>
</ul>
<p>По сравнению с дорогостоящим комплексом, такое решение обладает единственным недостатком: реализацию самой подсистемы распределения файлов придется разрабатывать самим. При грамотном подходе это вовсе не большой кусок работы. На connect.ua переход на такое решение занял около недели (на тот момент у нас было 2.5 Тб данных).</p>
<p>Система репликации позволяет избежать установки дорогостоящих RAID контроллеров и уменьшает вероятность сбоя системы практически до нуля.</p>
<h4>Архитектура</h4>
<p>Перед нами стоят следующие задачи:</p>
<ul>
<li>Загрузка файлов</li>
<li>Траскодирование файлов</li>
<li>Распредение файлов по серверам</li>
<li>Выдача файлов</li>
</ul>
<p>В общем плане схема работы подсистемы такова:</p>
<p>
<img src="http://highload.com.ua/wp-content/uploads/2009/12/media-hosting.png" alt="media-hosting" title="media-hosting" width="587" height="403" class="aligncenter size-full wp-image-863" /><br />
</p>
<p>Теперь детальнее. У нас есть ряд серверов-хранилищ, каждый из которых ничего не знает о всех остальных. Все они доступны извне под определенным адресом (например, m1.connect.ua, m2.connect.ua и т.п.). После получения файла (загрузка пользователя) на бекенд, мы выбираем из набора серверов тот, на который мы сохраним файл. Выбор делается на основе предпочитаемого критерия (<strong>случано</strong>; учитывая свободное место; учитывая загрузку процессора и т.п.).</p>
<p>Если на каком либо сервере заканчивается место, его можно просто исключить из набора. Поскольку система хранения и выдачи файлов очень не критична к процессору, то его можно хорошо утилизировать процедурой транскодирования. В этом случае все загруженные файлы будут попадать на транскодеры, после чего будут перемещены на финальные сервера.</p>
<h5>Репликация</h5>
<p>Для обеспечения стабильной работы применяется репликация на уровне приложения.<br />
В этом случае все файлы сохраняются не на один, а на несколько серверов. При выходе одного сервера из строя, файл все равно будет доступен с другого. Имеет смысл копировать все файлы на два сервера, т.к. возможность выхода из строя сразу двух серверов очень мала. Выбирать более чем два сервера для копирования не обосновано в терминах затрат на объем хранилища.</p>
<h5>Распределенные файловые системы</h5>
<p>Обычно медиа-подсистемы характеризуются огромными объемами отдачи данных. Минус использования распределенных файловых систем в нашем случае в том, что Вы получаете огромный внутрисетевой трафик, и это выливается в малую эффективность при отдаче файлов. После ухода от GlusterFS на connect.ua наш исходящий медиа трафик вырос со 150 до 800 Мб/с.</p>
<h5>Изоляция крупных и мелких файлов</h5>
<p>Обязательно разносите мелкие и крупные файлы на разные физические хранилища (например, нужно разнести видео ролики и скриншоты к видео). Если они будут обслуживаться на одном сервере, то Ваша система будет медленнее черепахи. Это происходит потому, что чтение больших файлов не дает эффективно использовать дисковый кеш для мелких, и поэтому у Вас будет огромное количество рандомных чтений с диска. А это выльется в очень медленную отдачу файлов.</p>
<h4>Cloud hosting</h4>
<p>Сегодня большую популярность набирают cloud хостинги. Это решение имеет смысл, когда Вы планируете разработать и вывести прототипное решение.</p>
<p>Поскольку наращивание мощностей на таком хостинге экспоненциально влияет на его стоимость, то на определенном этапе следует делать выбор в сторону своей системы хранения. Но следует отметить, что cloud хостинги также обеспечивают высокую надежность и доступность (за что собственно и нужно платить), а это иногда немаловажный фактор.</p>
<p>Какие технологии Вы используете для обмена файлами между серверами? Используете ли распределенные файловые системы?</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2009/12/23/media-hosting-system/&title=C%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0+%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%B0+%D0%BC%D0%B5%D0%B4%D0%B8%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2009/12/23/media-hosting-system/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2009/12/23/media-hosting-system/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2009/12/23/media-hosting-system/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2009/12/23/media-hosting-system/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2009/12/23/media-hosting-system/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2009/12/23/media-hosting-system/&title=C%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0+%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%B0+%D0%BC%D0%B5%D0%B4%D0%B8%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2009/12/23/media-hosting-system/&title=C%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0+%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%B0+%D0%BC%D0%B5%D0%B4%D0%B8%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2009/12/23/media-hosting-system/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2009/12/23/media-hosting-system/&t=C%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0+%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%B0+%D0%BC%D0%B5%D0%B4%D0%B8%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2009/12/23/media-hosting-system/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2009/12/23/media-hosting-system/&title=C%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0+%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%B0+%D0%BC%D0%B5%D0%B4%D0%B8%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2009/12/23/media-hosting-system/&u_data[name]=C%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0+%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%B0+%D0%BC%D0%B5%D0%B4%D0%B8%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2009/12/23/media-hosting-system/&title=C%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0+%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%B0+%D0%BC%D0%B5%D0%B4%D0%B8%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2009/04/22/%d0%be%d1%82%d0%b4%d0%b0%d1%87%d0%b0-%d0%b8-%d1%80%d0%b5%d1%81%d0%b0%d0%b9%d0%b7%d0%b8%d0%bd%d0%b3-%d1%84%d0%be%d1%82%d0%be%d0%b3%d1%80%d0%b0%d1%84%d0%b8%d0%b9/' rel='bookmark' title='Permanent Link: Отдача и ресайзинг фотографий'>Отдача и ресайзинг фотографий</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2009/12/23/media-hosting-system/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Оптимизация баннерной рекламы</title>
		<link>http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/</link>
		<comments>http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 22:02:03 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Теория и практика]]></category>

		<category><![CDATA[клиентская оптимизация]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=834</guid>
		<description><![CDATA[
Рекламной моделью сегодня пользуется большинство интернет проектов, тем более крупных. А это значит, что практически все пользуются баннерными системами.
Любая баннерная система оказывает влияние на скорость работы Вашего сайта для посетителей. При использовании стандартных механизмов открутки рекламы, которые обычно нацелены на максимальную скорость установки (но не работы!), Вы можете очень сильно снизить скорость загрузки Ваших страниц, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2009/12/new-banners.jpg" alt="new-banners" title="new-banners" width="250" height="312" class="alignleft size-full wp-image-837" /><br />
Рекламной моделью сегодня пользуется большинство интернет проектов, тем более крупных. А это значит, что практически все пользуются баннерными системами.</p>
<p>Любая баннерная система оказывает влияние на скорость работы Вашего сайта для посетителей. При использовании стандартных механизмов открутки рекламы, которые обычно нацелены на максимальную скорость установки (но не работы!), Вы можете очень сильно снизить скорость загрузки Ваших страниц, тем самым подорвать лояльность аудитории.</p>
<p>Почему так происходит и что делать?</p>
<p><span id="more-834"></span></p>
<p><br clear="all" /></p>
<h4>Почему баннеры делают сайт медленнее</h4>
<p>Как обычно работают системы открутки баннерной рекламы? Зачастую это просто JavaScript код, который вставляется в нужное место на странице (туда где баннер будет). Далее по мере загрузки страницы, выполняется этот самый код, который делает запрос к баннерной системе. Далее она (баннерная система) генерирует код баннера, который и отрисовывается на страничке. Только после этого продолжается загрузка страницы.</p>
<p>
Зачастую отрисовка баннера проходит не через одну баннерную систему, а через несколько. Это еще больше замедляет загрузку страницы, т.к. все время, пока не отрисутеся баннер, страница дальше не грузится.</p>
<p>
Учитывая это, а также то, что баннеров на странице обычно несколько, эффект от влияния рекламы на скорость загрузки страницы может быть очень негативным.</p>
<p>
Для <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизации</a> нужно сделать следующее:</p>
<ol>
<li>Выбрать быструю и стабильную баннерную систему (!)</li>
<li>Отсрочить загрузку баннеров до окончания загрузки всей страницы</li>
<li>Оптимизировать загрузку самих баннеров</li>
</ol>
<p>Далее - подробнее.</p>
<h4>Баннерные системы</h4>
<p>В качестве системы открутки баннерной рекламы есть выбор из двух вариантов: ставить свою собственную и использовать hosted (внешнее) решение.<br />
<Br /></p>
<p>Ставить свою собственную систему открутки крайне не выгодно. Ни одно из современных решений не является эффективным, а проблем с производительностью будет масса. Мы когда-то использовали OpenX, которая хорошо масштабируется, но для этого ей нужны &#8220;хорошие масштабы железа&#8221;.<br />
<Br /></p>
<p>В качестве внешних решений, есть целый ряд предложений. Мы в качестве такого решения используем <a href="https://www.google.com/admanager" target="_blank">Google Ad Manager</a>. Продукты компании Google - это хороший выбор в терминах надежности и стабильности, как и в быстродействии.<br />
<Br /><br />
Настоятельно рекомендую выбирать внешнее (но надежное) решение. Исключение могут составлять ситуации, когда рынок проекта накладывает ограничения на такой выбор (например, слабое развитие услуг доступа к Интернет, дорогие зарубежные каналы и т.п.).</p>
<h4>Отложенная загрузка баннерной рекламы</h4>
<p>Это наиболее важная часть, которая позволяет достичь максимального эффекта. Смысл отложенной загрузки в том, чтобы сначала полностью отрисовать страницу, а уже потом показать баннеры.<br />
<Br /><br />
Большинство баннерных кодов используют JS вызов document.write(). Это делает невозможным прямой запуск такого кода на событии body.onLoad().</p>
<p><Br /><br />
Тем не менее есть два варианта откладывания загрузки баннеров до полной загрузки страницы:</p>
<ol>
<li>Все баннерные коды нужно вставлять в скрытые блоки (со стилем style=&#8221;display: none&#8221;). Современные браузеры имеют встроенные механизмы <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизации</a>, поэтому всё, что находится в скрытых элементах не отрисовывается вообще. Далее на событие body.onload() нужно повесить вызов, который покажет все скрытые баннерные блоки. Пример с использование jQuery:
<pre>
...
Баннерный блок:
&lt;div style="display: none;" class="banner">&lt;script>Тут баннерный код&lt;/script>&lt;/div>
...
&lt;script>$(document).ready(function() { $('.banner').show(); });&lt;/script>
...
</pre>
</li>
<li>Выносите баннеры в iframe. Формально это не отложит загрузку, но баннеры будут грузится параллельно с загрузкой страницы, а не последовательно. Это позволяет добиться максимального эффекта. В этом случае единственное неудобство - фиксированный размер фрейма.</li>
</ol>
<h4>Оптимизация загрузки баннеров</h4>
<p>Очень часто рекламные кампании предусматривают показ одного рекламного сообщения по несколько раз каждому посетителю. Это значит, что не следует пренебрегать клиентской оптимизацией самих баннеров (сжатие, HTPP заголовки управления кешом и .т.п) - детальнее в статье &#8220;<a href="http://highload.com.ua/index.php/2009/06/07/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%81%D0%BA%D0%BE%D0%B9-%D1%87%D0%B0%D1%81%D1%82%D0%B8/">Оптимизация клиентской части</a>&#8220;.</p>
<p>Сталкивались ли Вы с проблемами <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> баннерной рекламы, и как их решали?</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/&title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BD%D0%BE%D0%B9+%D1%80%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/&title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BD%D0%BE%D0%B9+%D1%80%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/&title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BD%D0%BE%D0%B9+%D1%80%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/&t=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BD%D0%BE%D0%B9+%D1%80%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/&title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BD%D0%BE%D0%B9+%D1%80%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/&u_data[name]=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BD%D0%BE%D0%B9+%D1%80%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/&title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BD%D0%BE%D0%B9+%D1%80%D0%B5%D0%BA%D0%BB%D0%B0%D0%BC%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2009/07/03/%d0%be%d0%bf%d1%82%d0%b8%d0%bc%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%ba%d0%b0%d1%80%d1%82%d0%b8%d0%bd%d0%be%d0%ba-%d0%b4%d0%bb%d1%8f-web/' rel='bookmark' title='Permanent Link: Оптимизация картинок для Web'>Оптимизация картинок для Web</a></li><li><a href='http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/' rel='bookmark' title='Permanent Link: Google analytics - отслеживание скорости загрузки страниц'>Google analytics - отслеживание скорости загрузки страниц</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2009/12/16/optimizaciya-banernoy-reklamy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Connect.ua - история роста</title>
		<link>http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/</link>
		<comments>http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 22:00:39 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Опыт]]></category>

		<category><![CDATA[масштабирование]]></category>

		<category><![CDATA[производительность]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=804</guid>
		<description><![CDATA[
Connect.ua - это первый украинский социальный сервис. За два года проект вырос в достаточно крупный, а следовательно имеет свою собственную историю масштабирования и роста.
Во время роста мы перепробовали большое количество технологий и подходов, которыми я и хочу поделиться в этой статье.

Наши показатели и цифры
Некоторые цифры проекта

720 тыс. пользователей
2 миллиона фотографий
400 тысяч видео роликов
20 миллионов личных [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2009/12/connectua_logo.jpg" alt="connectua_logo" title="connectua_logo" width="218" height="88" class="alignleft size-full wp-image-805" /></p>
<p>Connect.ua - это первый украинский социальный сервис. За два года проект вырос в достаточно крупный, а следовательно имеет свою собственную историю <a href="http://highload.com.ua/index.php/tag/%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/" >масштабирования</a> и роста.</p>
<p>Во время роста мы перепробовали большое количество технологий и подходов, которыми я и хочу поделиться в этой статье.<br />
<span id="more-804"></span></p>
<h4>Наши показатели и цифры</h4>
<h5>Некоторые цифры проекта</h5>
<ul>
<li>720 тыс. пользователей</li>
<li>2 миллиона фотографий</li>
<li>400 тысяч видео роликов</li>
<li>20 миллионов личных сообщений</li>
<li>50 миллионов оценок в ЖЖОТ</li>
<li>25 миллионов событий в ленте новостей</li>
<li>40 миллионов отправленных &#8220;Подмигнуть&#8221;</li>
</ul>
<h5>Технические показатели</h5>
<ul>
<li>500 запросов в секунду на MySQL</li>
<li>300 активных соединений на фронте + 200 активных соединений на медиа серверах (HTTP)</li>
<li>1.5 тысячи запросов в секунду на каждом из бекендов</li>
<li>8 миллионов запросов к бекендам в день</li>
<li>7 Тб медиа (видео + аудио + фото)</li>
<li>3 сервера баз данных</li>
<li>4 бекенд сервера</li>
<li>1 фротенд</li>
<li>4 медиа сервера</li>
<li>2 сервера транскодирования</li>
<li>20 Гб памяти под <a href="http://highload.com.ua/index.php/2009/04/21/memcached/" >Memcached</a></li>
</ul>
<h4>Технологии</h4>
<p>Технологий используется огромное множество, причем динамика использования новых технологий очень высокая. За год на проекте появилось множество улучшений, связанных с новыми техническими решениями.</p>
<ul>
<li>MySQL</li>
<li>Sphinxsearch</li>
<li><a href="http://highload.com.ua/index.php/2009/04/21/memcached/" >Memcached</a></li>
<li><a href="http://highload.com.ua/index.php/2009/04/27/memcachedb/" >MemcacheDB</a></li>
<li>PHP</li>
<li>PHP-FPM</li>
<li>Eaccelerator</li>
<li><a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >Nginx</a></li>
<li>Imagemagick</li>
<li>FFmpeg</li>
<li>Mencoder</li>
<li>Flvtools</li>
<li><a href="http://highload.com.ua/index.php/2009/04/21/varnish/" >Varnish</a></li>
<li>GFS</li>
<li>Munin</li>
<li>Nagios</li>
<li>Xhprof</li>
<li>Minify (библиотека сжатия статики)</li>
<li>Linux shell <img src='http://highload.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>Далее наш опыт, архитектура, решения, ошибки и выводы:</p>
<h4>Мониторинг и статистика</h4>
<p>Как только появляются первые признаки тормозов или отказов на сайте, первым делом устанавливайте систему статистики. Мы поставили Munin и очень довольны. Множество плагинов, практически для любых технических решений. Очень просто писать свои плагины на любом интерпретируемом языке (мы пишем на PHP).</p>
<p>Для мониторинга используем Nagios.</p>
<p>Система статистики не только помагает обнаруживать проблемы, но и прогнозировать расширение.</p>
<h4>Оборудование</h4>
<p>Мы используем подход горизонтального расширения, а не вертикального. Поэтому мы делаем выбор в сторону недорого оборудования. Что это дает:</p>
<ul>
<li>Избавляет от SPOF (единых узлов падения)</li>
<li>Покупая дорогое и мощное оборудование, Вам нужно больше платить и за все остальное (коммутаторы, сеть, поддержка и т.п.)</li>
<li>Стоимость вертикального роста имеет экспоненциальный характер</li>
<li>В любом случае вертикальный рост ограничен</li>
</ul>
<h4>СУБД: не в MySQL проблема, проблема в эффективности</h4>
<p>Для начала, мы отказались от использования классической схемы репликации &#8220;запись на мастер&#8221; + &#8220;чтение с реплики&#8221;. При асинхронной репликации время отставания реплики неконтролируемо, что очень усложняет логику приложения. На реплику идут только агрегатные запросы, которые не чувствительны к небольшим задержкам (лучшее видео и т.п.).</p>
<p>В качестве архитектурного решения мы используем федерацию (вертикальное разделение СУБД по таблицам). Часть таблиц работает на одном сервере, часть на другом. Необходимость федерации появилась, когда некоторые особо большие таблицы препятствовали эффективной работе буфера MySQL.</p>
<p>Движки таблиц - InnoDB для всех таблиц, кроме случаев с полностью статическими таблицами (города, страны и т.п.) - для них MyISAM.</p>
<p>Для полнотекстового поиска используем Sphinx. Работает по схеме дельта индексации. Самая тяжелая часть - полная переиндексация, поэтому запускаем ее раз в неделю. Планируем внедрить объединения индексов (index merging).</p>
<p>Наиболее тяжелые функциональные части для СУБД - это личные сообщения и лента новостей. Ленту новостей недавно перевели на <a href="http://highload.com.ua/index.php/2009/04/27/memcachedb/" >MemcacheDB</a>. Стратегию выбрали масштабируемую, у каждого пользователя есть свой личный список событий, который обновляется, когда генерируется новое событие. Это позволит очень легко масштабировать этот функционал.</p>
<h5>Что мы делали для оптимизации нагрузки</h5>
<ul>
<li>Кеширование (подробнее - ниже)</li>
<li>Тюнинг настроек сервера MySQL - никогда не используйте настройки по умолчанию</li>
<li>Оптимизировали (и все еще продолжаем) запросы. EXPLAIN + maatkit - это наш набор оптимизатора.</li>
<li>Тяжелые запросы зачастую можно упростить на порядки выкинув малозначимые части логики</li>
<li>Для особо тяжелых и не поддающихся ускорению запросов есть слейв</li>
<li>Денормализация + индексация - постоянные задачи</li>
</ul>
<h4>Кеширование: кешируйте все и еще немножко</h4>
<p>Кеширование - первое, что мы начали делать для <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизации</a> приложения. <a href="http://highload.com.ua/index.php/2009/04/21/memcached/" >Memcached</a> выбрали по нескольким причинам: простой и эффективный, поддержка распределенного кеширования, встроенный алгоритм консистентного хеширования (необходимо при добавлении новых серверов), поддержка сессий PHP.</p>
<p>Сейчас хитрейт доходит до 95%, показатели вынужденного вытеснения из памяти стремятся к нулю.</p>
<p>Стратегию кеширования используем довольно простую. Для списков кешируем только первичные ключи. Для тяжелых запросов используем дубликаты с разным временем жизни. Ввиду большого количества персональных выборок, пришлось реализовать собственный механизм пространств имен для того, чтобы иметь возможность обновлять несколько объектов одновременно.</p>
<p>Система кеширования носит двухслойных характер: кеш приложения => <a href="http://highload.com.ua/index.php/2009/04/21/memcached/" >memcached</a>.</p>
<h4>Клиентская оптимизация</h4>
<p>Клиентская <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизация</a> - это второе, что мы начали делать для <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизации</a> <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a>. Клиентская <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизация</a> позволила увеличить скорость загрузки страниц в несколько раз. После базовой <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизации</a> клиентской части, удалось повысить показатель просмотров страниц в <strong>полтора</strong> раза. Кроме всего прочего клиентская <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизация</a> позволяет сэкономить канал.</p>
<p>Что мы делали:</p>
<ul>
<li>Gzip всего</li>
<li>Склеивание и сжатие статики</li>
<li>Вынос статики на другой домен</li>
<li>Установка необходимых заголовков для кеширования на клиентах</li>
</ul>
<p>Сейчас наиболее медленное место в клиентской части - это система управления банерными показами.</p>
<h4>Медиа</h4>
<p>Наиболее ресурсоемкой частью проекта является то, что относится к медиа. Поэтому все медиа ресурсы изолированы от основной части системы. В качестве стратегии роста используем разделение по серверам. Каждый сервер работает независимо от других, что делает всю систему устойчивой к сбоям.</p>
<h4>PHP</h4>
<p>С PHP было меньше всего проблем. Единственным шагом, который привел к ощутимому росту скорости работы, стала установка eAccelerator&#8217;a. Большинство изменений в коде были связаны с архитектурными изменениями.</p>
<p>Для профилирования используем XhProf - хорошо подходит для работы в продуктивных условиях.</p>
<h4>Что мы планируем</h4>
<ul>
<li>Переводить часть логики с MySQL на key=value базы данных</li>
<li>Внедрить систему очередей сообщений</li>
<li>Оптимизировать клиентскую часть дальше</li>
<li>Искать затычки и исправлять их <img src='http://highload.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<h4>В качестве итога</h4>
<p>После проделанной работы мы пришли к нескольким простым правилами, которыми пользуемся и сейчас:</p>
<ul>
<li>Если решение работает у кого-то, это еще не значит, что оно будет работать для Вас</li>
<li>Во многих случаях приходиться экспериментировать. Нужно позаботиться о том, чтобы небольшие изменения в системе не вызывали огромных трудностей</li>
<li>Думайте о росте заранее, но не решайте не существующих проблем</li>
<li>Многие технологии умеют гораздо больше, чем кажется - гораздо больше</li>
<li>Творчество Ваш самый необходимый инструмент</li>
<li>Не делайте того, о чем ничего не знаете <img src='http://highload.com.ua/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>Надеюсь будет полезно!</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/&title=Connect.ua+-+%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F+%D1%80%D0%BE%D1%81%D1%82%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/&title=Connect.ua+-+%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F+%D1%80%D0%BE%D1%81%D1%82%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/&title=Connect.ua+-+%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F+%D1%80%D0%BE%D1%81%D1%82%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/&t=Connect.ua+-+%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F+%D1%80%D0%BE%D1%81%D1%82%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/&title=Connect.ua+-+%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F+%D1%80%D0%BE%D1%81%D1%82%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/&u_data[name]=Connect.ua+-+%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F+%D1%80%D0%BE%D1%81%D1%82%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/&title=Connect.ua+-+%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F+%D1%80%D0%BE%D1%81%D1%82%D0%B0+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2009/12/10/connectua-scaling-history/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google analytics - отслеживание скорости загрузки страниц</title>
		<link>http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/</link>
		<comments>http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 21:28:55 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Tips and tricks]]></category>

		<category><![CDATA[аналитика]]></category>

		<category><![CDATA[производительность]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=791</guid>
		<description><![CDATA[
Google analytics имеет расширенные возможности, которые далеко не ограничиваются подсчетом количества просмотров страниц Web сайтов. В GA есть возможность собирать статистику пользовательских событий. На основе этой статистики можно собирать практически любую информацию о пользователях и их действиях.
Рассмотрим, как использовать Google Analytics, чтобы отслеживать скорость загрузки страниц Вашего Web сайта у пользователей.

Event Tracking
В GA есть раздел [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2009/12/google-analytics-logo.png" alt="google-analytics-logo" title="google-analytics-logo" width="362" height="73" class="alignleft size-full wp-image-792" /></p>
<p><strong>Google analytics</strong> имеет расширенные возможности, которые далеко не ограничиваются подсчетом количества просмотров страниц Web сайтов. В GA есть возможность собирать статистику пользовательских событий. На основе этой статистики можно собирать практически любую информацию о пользователях и их действиях.</p>
<p>Рассмотрим, как использовать Google Analytics, чтобы отслеживать скорость загрузки страниц Вашего Web сайта у пользователей.<br />
<span id="more-791"></span></p>
<h4>Event Tracking</h4>
<p>В GA есть раздел Event Tracking, который и позволяет отслеживать статистику пользовательских событий. Для использования этой возможности Вы должны установить новую версию скрипта статистики (ga.js).</p>
<p>Стандартный код счетчика выглядит так:</p>
<pre>
<script type="text/javascript"> 
try {
var pageTracker = _gat._getTracker("UA-8477336-1");
pageTracker._trackPageview();
} catch(err) {}</script>
</pre>
<p>Для отправки пользовательских событий, нужно воспользоваться методом _trackEvent():</p>
<pre>
pageTracker._trackEvent('category', 'action', 'label', value);
</pre>
<ul>
<li>category - Категория события</li>
<li>action - Тип события</li>
<li>label - Название события (необязательно)</li>
<li>value - Значение события (необязательно, числовой параметр)</li>
</ul>
<p>После этого, в разделе Content (Содержание) -> Event Tracking (Отслеживание событий) можно смотреть статистику, пользуясь удобным и мощным инструментом.</p>
<h4>Скорость загрузки страниц</h4>
<p>Для начала, необходимо установить переменную, которая будет содержать в себе значение скорости загрузки страницы. Пример на PHP:</p>
<pre>
define('TS_START', microtime(true));

# Тут много много кода - вся логика страницы

define('TS_SPEED', microtime(true) - TS_START);
</pre>
<p>После этого в константе TS_SPEED будет доступно время выполнения скрипта в долях секунды.</p>
<p>Далее в шаблоне страницы необходимо зарегистрировать событие при помощи _trackEvent():</p>
<pre>
...
&lt;? $uri = $_SERVER['REQUEST_URI']; $speed = (int)(TS_SPEED*1000); ?>
&lt;script>
pageTracker._trackEvent('Response time (ms)', '<?=$uri?>', '<?=$uri?>', <?=$speed?>);
&lt;/script>
...
</pre>
<p>Несколько моментов:</p>
<ul>
<li>_trackEvent() нужно вызывать после объявления счетчика (частая ошибка)</li>
<li>Последний аргумент должен быть только целым числом, поэтому мы умножили его на 1000 (будем отслеживать скорость загрузки в миллисекундах)</li>
<li>Первые три аргумента всегда должны быть строчками, иначе событие будет проигнорировано</li>
</ul>
<p>После установки кода и спустя некоторое время в GA будет доступен отчет приблизительно такого вида:</p>
<p><a href="http://highload.com.ua/wp-content/uploads/2009/12/ga-statistics.png" target="_blank"><img src="http://highload.com.ua/wp-content/uploads/2009/12/ga-statistics-300x78.png" alt="ga-statistics" title="ga-statistics" width="300" height="78" class="aligncenter size-medium wp-image-796" /></a></p>
<p><em>Небольшое пояснение:</em> ввиду очень широкого спектра возможных применений, не обращайте внимания на названия столбцов, их следует понимать только функционально, а именно:</p>
<ul>
<li><strong>Всего событий</strong> - количество вызовов конкретного события (action)</li>
<li><strong>Уникальных событий</strong> - количество уникальных вызовов конкретного события</li>
<li><strong>Полезность события</strong> - сумма всех value данного события. В нашем случае это суммарное время генерации конкретной страницы</li>
<li><strong>Среднее значение</strong> - среднее значение value данного события. В нашем случае это среднее время генерации конкретной страницы</li>
</ul>
<p>Детальное описание <a href="http://code.google.com/intl/ru-RU/apis/analytics/docs/tracking/eventTrackerGuide.html" target="_blank" rel="nofollow">Google Analytics Event Tracking</a> (англ.).</p>
<p>А Вы пользуетесь Event Tracking в GA, в каких целях?</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/&title=Google+analytics+-+%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D0%BA%D0%BE%D1%80%D0%BE%D1%81%D1%82%D0%B8+%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/&title=Google+analytics+-+%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D0%BA%D0%BE%D1%80%D0%BE%D1%81%D1%82%D0%B8+%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/&title=Google+analytics+-+%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D0%BA%D0%BE%D1%80%D0%BE%D1%81%D1%82%D0%B8+%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/&t=Google+analytics+-+%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D0%BA%D0%BE%D1%80%D0%BE%D1%81%D1%82%D0%B8+%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/&title=Google+analytics+-+%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D0%BA%D0%BE%D1%80%D0%BE%D1%81%D1%82%D0%B8+%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/&u_data[name]=Google+analytics+-+%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D0%BA%D0%BE%D1%80%D0%BE%D1%81%D1%82%D0%B8+%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/&title=Google+analytics+-+%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D0%BA%D0%BE%D1%80%D0%BE%D1%81%D1%82%D0%B8+%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8+%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2009/07/25/%d0%be%d0%bf%d1%82%d0%b8%d0%bc%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%81%d0%ba%d0%be%d0%b9-%d1%87%d0%b0%d1%81%d1%82%d0%b8-%d1%81-google-page-speed/' rel='bookmark' title='Permanent Link: Оптимизация клиентской части с Google Page Speed'>Оптимизация клиентской части с Google Page Speed</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2009/12/08/google-analytics-skorost-zagruzki-stranic/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.800 seconds -->
<!-- Cached page served by WP-Cache -->
