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

<channel>
	<title>Insight IT &#187; Иван Блинков</title>
	<atom:link href="http://www.insight-it.ru/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.insight-it.ru</link>
	<description>Информационные технологии</description>
	<lastBuildDate>Tue, 31 Jan 2012 09:34:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Вакансия: высокооплачиваемый технический директор</title>
		<link>http://www.insight-it.ru/life/vakansii/vakansiya-visokooplachivaemi-tekhnicheskiy-director/</link>
		<comments>http://www.insight-it.ru/life/vakansii/vakansiya-visokooplachivaemi-tekhnicheskiy-director/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 09:35:59 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Вакансии]]></category>
		<category><![CDATA[вакансия]]></category>
		<category><![CDATA[технический директор]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1499</guid>
		<description><![CDATA[В новый высоконагружённый проект CityPatrol, связаный с мобильными технологиями и геопозиционированием, требуется талантливый технический директор. Требования 5+ лет опыта работы в технологических компаниях, предпочтительно интернет-проекты и/или разработка под мобильные платформы Высшее управленческое или техническое образование Навыки проектирования архитектуры комплексных программно-аппаратных решений, обладающих свойствами горизонтальной масштабируемости, отказоустойчивости и информационной безопасности Способность организовать и стандартизировать процессы разработки [...]]]></description>
			<content:encoded><![CDATA[<p>В новый высоконагружённый проект <a target="_blank" href="http://www.citypatrol.ru">CityPatrol</a>, связаный с мобильными технологиями и геопозиционированием, требуется талантливый технический директор.<br />
<span id="more-1499"></span></p>
<h2>Требования</h2>
<ul>
<li>
5+ лет опыта работы в технологических компаниях, предпочтительно интернет-проекты и/или разработка под мобильные платформы
</li>
<li>
Высшее управленческое или техническое образование
</li>
<li>
Навыки проектирования архитектуры комплексных программно-аппаратных решений, обладающих свойствами горизонтальной масштабируемости, отказоустойчивости и информационной безопасности
</li>
<li>
Способность организовать и стандартизировать процессы разработки серверной и клиентской частей проектов, а также функционального, интеграционного и нагрузочного тестирования
</li>
<li>
Умение координировать работу команды технических специалистов; транслировать бизнес-задачи в конкретные технологические подпроекты/решения и делегировать их реализацию подчиненным; формулировка и контроль исполнения технических задач
</li>
<li>
Умение адекватно оценивать текущие и возможные технические риски и вовремя (заранее) информировать о них других топ-менеджеров проекта, а также о текущих достижениях и проблемах технической команды
</li>
<li>
Способность принимать взвешенные и обоснованные технические решения с учетом текущих потребностей бизнеса и аудитории, финансовой эффективности, а также уровня способностей и загруженности команды
</li>
<li>
Стремление делиться опытом с коллегами, помогать в решении нетривиальных задач, возможно проводить небольшие тренинги
</li>
<li>
Опыт разработки серверных приложений на одном из следующих языков программирования от 2 лет: C/C++, Python, Java, JavaScript; участие в разработке opensource проектов &#8212; большой плюс
</li>
<li>
Представление об основных принципах работы и особенностях современных мобильных платформ, в первую очередь iOS, Android, J2ME, Symbian, WP7; опыт разработки под одну или некоторые &#8212; большой плюс
</li>
<li>
Навыки системного администрирования Linux, настройка основных компонентов, оптимизация производительности (в первую очередь сетевого стека, файловых систем и баз данных) </li>
</ul>
<h2>Условия</h2>
<ul>
<li>Заработная плата от <strong>200000 рублей в месяц</strong> + бонусы
</li>
<li>
Полный рабочий день, офис в районе метро Полежаевская
</li>
</ul>
<h3>Резюме присылать на <a href="mailto:grishin@citypatrol.ru">grishin@citypatrol.ru</a></h3>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/life/vakansii/vakansiya-visokooplachivaemi-tekhnicheskiy-director/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Архитектура Google 2011</title>
		<link>http://www.insight-it.ru/masshtabiruemost/arkhitektura-google-2011/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/arkhitektura-google-2011/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 22:32:04 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[highload]]></category>
		<category><![CDATA[архитектура Google]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1426</guid>
		<description><![CDATA[Архитектура Google была одной из первых статьей на Insight IT. Именно она дала толчок развитию проекта: после её публикации посещаемость блога увеличилась в десятки раз и появились первые сотни подписчиков. Прошли годы, информация устаревает стремительно, так что пришло время взглянуть на Google еще раз, теперь уже с позиции конца 2011 года. Что мы увидим нового [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-1428" title="Архитектура Google" src="http://www.insight-it.ru/wp-content/uploads/2011/11/google-logo.jpg" alt="Архитектура Google" width="630" height="244" /><br />
<a href="http://www.insight-it.ru/masshtabiruemost/arkhitektura-google/">Архитектура Google</a> была одной из первых статьей на <strong>Insight IT</strong>. Именно она дала толчок развитию проекта: после её публикации посещаемость блога увеличилась в десятки раз и появились первые сотни подписчиков. Прошли годы, информация устаревает стремительно, так что пришло время взглянуть на Google еще раз, теперь уже с позиции конца 2011 года. Что мы увидим нового в архитектуре интернет-гиганта?<span id="more-1426"></span></p>
<h2>Статистика</h2>
<ul>
<li><strong>Общее</strong>
<ul>
<li><em>Ежедневная аудитория Google составляет около 1 миллиарда человек</em>
<ul>
<li>По данным Alexa больше половины каждый день Google пользуются более половины аудитории интернета</li>
<li>По данным IWS аудитория интернета составляет 2.1 миллиарда человек</li>
</ul>
</li>
<li><em>Используется более 900 тысяч серверов</em>
<ul>
<li>Планируется расширение до 10 миллионов серверов в обозримом будущем</li>
</ul>
</li>
<li><a href="http://www.google.com/about/datacenters/locations/index.html" target="_blank">12 основных датацентров в США</a>, присутствие в большом количестве точек по всему миру (более 38)</li>
<li>Около 32 тысяч сотрудников в 76 офисах по всему миру</li>
</ul>
</li>
<li><strong>Поиск</strong>
<ul>
<li>За последние 14 лет среднее время обработки одного поискового запроса уменьшилось с 3 секунд до менее 100 миллисекунд, то есть в 30 раз</li>
<li>Более 40 миллиардов страниц в индексе, если приравнять каждую к листу А4 они бы покрыли территорию США в 5 слоев</li>
<li>Более 1 квинтиллиона уникальных URL (10 в 18 степени); если распечатать их в одну строку, её длина составит 51 миллион километров, треть расстояния от Земли до Солнца</li>
<li>В интернете встречается примерно 100 квинтиллионов слов, чтобы набрать их на клавиатуре одному человеку потребовалось бы примерно 5 миллионов лет</li>
<li>Проиндексировано более 1.5 миллиардов изображений, чтобы их сохранить потребовалось бы 112 миллионов дискет, которые можно сложить в стопку высотой 391 километр</li>
</ul>
</li>
<li><strong>Gmail</strong>
<ul>
<li>Активных пользователей более 170 миллионов</li>
<li>Второй по популярности почтовый сервис в США, третий в мире (по данным comScore)</li>
<li>При текущем темпе роста аудтории GMail и конкурентов, он станет лидером рынка через 2-3 года</li>
</ul>
</li>
<li><strong>Google+</strong>
<ul>
<li>Более 40 миллионов пользователей на октябрь 2011, при запуске в июне 2011</li>
<li>25 миллионов пользователей за первый месяц</li>
<li>70:30 примерное соотношение мужчин и женщин</li>
<li>Себестоимость разработки больше полумиллиарда долларов</li>
</ul>
</li>
<li><strong>YouTube</strong>
<ul>
<li>Загружается более 13 миллионов часов видео в год</li>
<li>Каждую минуту загружается 48 часов видео, что соответствует почти 8 годам контента или 52 тысячам полнометражных фильмов в день</li>
<li>Более 700 миллиардов просмотров видео в год</li>
<li>Месячная аудитория составляет 800 миллионов уникальных посетителей</li>
<li>Несколько тысяч полнометражных фильмов в <a href="http://www.youtube.com/movies" target="_blank">YouTube Movies</a></li>
<li>Более 10% всех видео в формате HD</li>
<li>13% просмотров (400 миллионов в день) происходит с мобильных устройств</li>
<li>До сих пор работает в убыток, лишь 14% просмотров видео приносят выручку с рекламы</li>
</ul>
</li>
<li><strong>Финансы</strong>
<ul>
<li>Выручка порядка 36 миллиардов долларов в год</li>
<li>Прибыль после налогов порядка 10 миллиардов долларов в год</li>
<li>Капитализация порядка 55 миллиардов долларов</li>
</ul>
</li>
</ul>
<h2>Архитектура</h2>
<p><strong>Google</strong> &#8212; огромная интернет-компания, неоспоримый лидер на рынке поиска в Интернет и владелец большого количества продуктов, многие из которых также добились определенного успеха в своей нише.</p>
<p>В отличии от большинства интернет-компаний, которые занимаются лишь одним продуктом (проектом), архитектура Google не может быть представлена как единое конкретное техническое решение. Сегодня мы скорее будем рассматривать общую стратегию технической реализации интернет-проектов в Google, возможно слегка затрагивая и другие аспекты ведения бизнеса в Интернет.</p>
<p>Все продукты Google основываются на постоянно развивающейся программной платформе, которая спроектирована с учетом работы на миллионах серверов, находящихся в разных датацентрах по всему миру.</p>
<h3>Оборудование</h3>
<p>Обеспечение работы миллиона серверов и расширение их парка &#8212; одна из ключевых статей расходов Google. Для минимизации этих издержек очень большое внимание уделяется эффективности используемого серверного, сетевого и инфраструктурного оборудования.</p>
<div class="frame alignright"><img class="alignnone size-medium wp-image-1435" title="dc-home-energy-use" src="http://www.insight-it.ru/wp-content/uploads/2011/11/dc-home-energy-use-300x211.png" alt="" width="300" height="211" /></div>
<p>В традиционных датацентрах потребление электричества серверами примерно равно его потреблению остальной инфраструктурой, Google же удалось снизить процент использования дополнительной электроэнергии до 14%. Таким образом суммарное энергопотребление датацентром Google сравнимо с потреблением только серверов в типичном датацентре и вдвое меньше его общего энергопотребления. Основные концепции, которые используются для достижения этого результата:</p>
<ul>
<li>Точное измерение потребления электроэнергии всеми компонентами позволяет определить возможности по его уменьшению;</li>
<li>В датацентрах Google тепло, что позволяет экономить на охлаждении;</li>
<li>При проектировании датацентра уделяется внимание даже незначительным деталям, позволяющим сэкономить даже немного &#8212; при таком масштабе это окупается;</li>
<li>Google умеет охлаждать датацентры практически без кондиционеров, с использованием воды и её испарения<em> (см.<a href="http://www.youtube.com/watch?v=VChOEvKicQQ" target="_blank"> как это реализовано</a> в Финляндии)</em>.</li>
</ul>
<p>В Google активно пропагандируют максимальное использование возобновляемой энергии. Для этогоe заключаются долгосрочные соглашения с её поставщиками (на 20 и более лет), что позволяет отрасли активно развиваться и наращивать мощности. Проекты по генерации возобновляемой энергии, спонсируемые Google, имеют суммарную мощность более 1.7 гигаватт, что существенно больше, чем используется для работы Google. Этой мощности хватило бы для обеспечения электричеством 350 тысяч домов.</p>
<p>Если говорить о жизненном цикле оборудования, то используются следующие принципы:</p>
<ul>
<li><strong>Уменьшение транспортировки:</strong> там, где это возможно, тяжелые компоненты (вроде серверных стоек) закупаются у местных поставщиков, даже если в других местах аналогичный товар можно было бы купить дешевле.</li>
<li><strong>Повторное использование: </strong> прежде, чем покупать новое оборудование и материалы, рассматриваются возможности по использованию уже имеющихся. Этот принцип помог избежать покупки более 90 тысяч новых серверов.</li>
<li><strong>Утилизация</strong>: в тех случаях, когда повторное использование невозможно, оборудование полностью очищается от данных и продается на вторичном рынке. То, что не удается продать, разбирается на материалы (медь, сталь, алюминий, пластик и.т.п.) для последующей правильной утилизации специализированными компаниями.</li>
</ul>
<p>Google известны за свои эксперименты и необычные решения в области серверного оборудования и инфраструктуры. Некоторые запатентованы; какие-то прижились, какие-то &#8212; нет. Подробно останавливаться на них не буду, лишь вкратце о некоторых:</p>
<ul>
<li>Резервное питание, интегрированное в блок питания <a href="http://www.youtube.com/watch?v=xgRWURIxgbU" target="_blank">сервера</a>, обеспеченное стандартными 12V батарейками;</li>
<li><a href="http://www.datacenterknowledge.com/closer-look-googles-server-sandwich-design/" target="_blank">&#171;Серверный сендвич&#187;</a>, где материнские платы с двух сторон окружают водяную систему теплоотвода в центре стойки;</li>
<li><a href="http://www.youtube.com/watch?v=zRwPSFpLX8I" target="_blank">Датацентр из контейнеров</a>.</li>
</ul>
<p>В заключении этого раздела хотелось бы взглянуть правде в глаза: <strong>идеального оборудования не бывает</strong>. У любого современного устройства, будь то сервер, коммутатор или маршрутизатор, есть шанс прийти в негодность из-за производственного брака, случайного стечения обстоятельств или других внешних факторов. Если умножить этот, казалось бы, небольшой шанс на количество оборудования, которое используется в Google, то окажется, что чуть ли не каждую минуту из строя выходит одно, или несколько, устройств в системе. На оборудование полагаться нельзя, по-этому вопрос отказоустойчивости переносится на плечи программной платформы, которую мы сейчас и рассмотрим.</p>
<h3>Платформа</h3>
<p>В Google очень рано столкнулись с проблемами ненадежности оборудования и работы с огромными массивами данных. Программная платформа, спроектированная для работы на многих недорогих серверах, позволила им абстрагироваться от сбоев и ограничений одного сервера.</p>
<p>Основными задачами в ранние годы была минимизация точек отказа и обработка больших объемов слабоструктурированных данных. Решением этих задач стали три основных слоя платформы Google, работающие один поверх другого:</p>
<ul>
<li><strong><a href="http://research.google.com/archive/gfs.html" target="_blank">Google File System</a>: </strong>распределенная файловая система, состоящая из сервера с метаданными и теоретически неограниченного количества серверов, хранящих произвольные данные в блоках фиксированного размера.</li>
<li><strong><a href="http://research.google.com/archive/bigtable.html" target="_blank">BigTable</a>: </strong>распределенная база данных, использующая для доступа к данным две произвольных байтовых строки-ключа (обозначающие строку и столбец) и дату/время (обеспечивающие версионность).</li>
<li><strong><a href="http://research.google.com/archive/mapreduce.html" target="_blank">MapReduce</a>: </strong>механизм распределенной обработки больших объемов данных, оперирующий парами ключ-значение для получения требуемой информации.</li>
</ul>
<p>Такая комбинация, дополненная другими технологиями, довольно долгое время позволяла справляться с индексацией Интернета, пока&#8230; скорость появления информации в Интернете не начала расти огромными темпами из-за &#171;бума социальных сетей&#187;. Информация, добавленная в индекс даже через полчаса, уже зачастую становилась устаревшей. В дополнение к этому в рамках самого Google стало появляться все больше продуктов, предназначенных для работы в реальном времени.</p>
<p>Спроектированные с учетом совершенно других требований Интернета пятилетней давности компоненты, составляющие ядро платформы Google, потребовали фундаментальной смены архитектуры индексации и поиска, который около года назад был представлен публике под кодовым названием <strong>Google Caffeine</strong>. Новые, переработанные, версии старых &#171;слоев&#187; также окрестили броскими именами, но резонанса у технической публики они вызвали намного меньше, чем новый поисковый алгоритм в SEO-индустрии.</p>
<h4>Google Colossus</h4>
<p>Новая архитектура GFS была спроектирована для минимизации задержек при доступе к данным (что критично для приложений вроде GMail и YouTube), не в ущерб основным свойствам старой версии: отказоустойчивости и прозрачной масштабируемости.</p>
<p>В оригинальной же реализации упор был сделан на повышение общей пропускной способности: операции объединялись в очереди и выполнялись разом, при таком подходе можно было прождать пару секунд еще до того, как первая операция в очереди начнет выполняться. Помимо этого в старой версии было большое слабое место в виде единственно мастер-сервера с метаданными, сбой в котором грозил недоступностью всей файловой системы в течении небольшого промежутка времени (пока другой сервер не подхватит его функции, изначально это занимало около 5 минут, в последних версиях порядка 10 секунд) &#8212; это также было вполне допустимо при отсутствии требования работы в реальном времени, но для приложений, напрямую взаимодействующих с пользователями, это было неприемлемо с точки зрения возможных задержек.</p>
<p>Основным нововведением в Colossus стали распределенные мастер-сервера, что позволило избавиться не только от единственной точки отказа, но и существенно уменьшить размер одного блока с данными (с 64 до 1 мегабайта), что в целом очень положительно сказалось на работе с небольшими объемами данных. В качестве бонуса исчез теоретический предел количества файлов в одной системе.</p>
<p>Детали распределения ответственности между мастер-серверами, сценариев реакции на сбои, а также сравнение  по задержкам и пропускной способности обоих версий, к сожалению, по-прежнему конфиденциальны. Могу предположить, что используется вариация на тему хэш-кольца с репликацией метаданных на ~3 мастер-серверах, с созданием дополнительной копии на следующем по кругу сервере в случае в случае сбоев, но это лишь догадки. Если у кого-то есть относительно официальная информация на этот счет &#8212; буду рад увидеть в комментариях.</p>
<p>По прогнозам Google текущий вариант реализации распределенной файловой системы &#171;уйдет на пенсию&#187; в 2014 году из-за популяризации твердотельных накопителей и существенного скачка в области вычислительных технологий (процессоров).</p>
<h4>Google Percolator</h4>
<p>MapReduce отлично справлялся с задачей полной перестройки поискового индекса, но не предусматривал небольшие изменения, затрагивающие лишь часть страниц. Из-за потоковой, последовательной природы MapReduce для внесения изменений в небольшую часть документов все равно пришлось бы обновлять весь индекс, так как новые страницы непременно будут каким-то образом связаны со старыми. Таким образом задержка между появлением страницы в Интернете и в поисковом индексе при использовании MapReduce была пропорциональна общему размеру индекса (а значит и Интернета, который постоянно растет), а не размеру набора измененных документов.</p>
<p>Ключевые архитектурные решения, лежащие в основе MapReduce, не позволяли повлиять на эту особенность и в итоге система индексации была построена заново с нуля, а MapReduce продолжает использоваться в других проектах Google для аналитики и прочих задач, по прежнему не связанных с реальным временем.</p>
<p>Новая система получила довольно своеобразное название <strong>Percolator</strong>, попытки узнать что оно значит приводит к различным устройствам по фильтрации дыма, кофеваркам и непойми чему еще. Но наиболее адекватное объяснение мне пришло в голову, когда я прочитал его по слогам: per col &#8212; <em>по колонкам</em>.</p>
<p>Percolator представляет собой надстройку над BigTable, позволяющую выполнять комплексные вычисления на основе имеющихся данных, затрагивающие много строк и даже таблиц одновременно (в стандартном API BigTable это не предусмотрено).</p>
<p>Веб-документы или любые другие данные изменяются/добавляются в систему посредством модифицированного API BigTable, а дальнейшие изменения  в остальной базе осуществляются посредством механизма &#187;обозревателей&#187;. Если говорить в терминах реляционных СУБД, то обозреватели &#8212; что-то среднее между триггерами и хранимыми процедурами. Обозреватели представляют собой подключаемый к базе данных код (на <a href="/tag/c/" target="_blank">C++</a>), который исполняется в случае возникновении изменений в определенных <em>колонках</em> BigTable (откуда, видимо, и пошло название). Все используемые системой метаданные также хранятся в специальных колонках BigTable. При использовании Percolator все изменения происходят в транзакциях, удовлетворяющих принципу ACID, каждая из которых затрагивает именно те сервера в кластере, на которых необходимо внести изменения. Механизм транзакций на основе BigTable разрабатывался в рамках отдельного проекта под названием <a href="http://www.insight-it.ru/masshtabiruemost/google-megastore/" target="_blank">Google Megastore</a>.</p>
<p>Таким образом, при добавлении нового документа (или его версии) в поисковый индекс, вызывается цепная реакция изменений в старых документах, скорее всего ограниченная по своей рекурсивности. Эта система при осуществлении случайного доступа поддерживает индекс в актуальном состоянии.</p>
<p>В качестве бонуса в этой схеме удалось избежать еще двух недостатков MapReduce:</p>
<ul>
<li><strong>Проблемы &#171;отстающих&#187;:</strong> когда один из серверов (или одна из конкретных подзадач) оказывался существенно медленнее остальных, что также значительно задерживало общее время завершения работы кластера.</li>
<li><strong>Пиковая нагрузка:</strong> MapReduce не является непрерывным процессом, а разделяется на работы с ограниченной целью и временем исполнения. Таким образом помимо необходимости ручной настройки работ и их типов, кластер имеет очевидные периоды простоя и пиковой нагрузки, что ведет к неэффективному использованию вычислительных ресурсов.</li>
</ul>
<p>Но все это оказалось не бесплатно: при переходе на новую систему удалось достичь той же скорости индексации, но при этом использовалось <em>вдвое</em> больше вычислительных ресурсов. Производительность Percolator находится где-то между производительностью MapReduce и производительностью традиционных СУБД. Так как Percolator является распределенной системой, для обработки фиксированного небольшого количества данных ей приходится использовать существенно больше ресурсов, чем традиционной СУБД; такова цена масштабируемости. По сравнению с MapReduce также пришлось платить дополнительными потребляемыми вычислительными ресурсами за возможность случайного доступа с низкой задержкой.</p>
<p><img class="alignnone size-full wp-image-1473" title="google_percolator_benchmark" src="http://www.insight-it.ru/wp-content/uploads/2011/11/google_percolator_benchmark.png" alt="" width="546" height="335" /></p>
<p>Тем не менее, при выбранной архитектуре Google удалось достичь практически линейного масштабирования при увеличении вычислительных мощностей на много порядков <em>(см. график, основан на тесте TPC-E)</em>. Дополнительные накладные расходы, связанные с распределенной природой решения, в некоторых случаях до 30 раз превосходят аналогичный показатель традиционных СУБД, но у данной системы есть солидный простор для оптимизации в этом направлении, чем Google активно и занимается.</p>
<h4>Google Spanner</h4>
<p>Spanner представляет собой единую систему автоматического управления ресурсами<strong> всего парка серверов </strong>Google.</p>
<p>Основные особенности:</p>
<ul>
<li>Единое пространство имен:
<ul>
<li>Иерархия каталогов</li>
<li>Независимость от физического расположения данных</li>
</ul>
</li>
<li>Поддержка слабой и сильной целостности данных между датацентрами</li>
<li>Автоматизация:
<ul>
<li>Перемещение и добавление реплик данных</li>
<li>Выполнение вычислений с учетом ограничений и способов использования</li>
<li>Выделение ресурсов на всех доступных серверах</li>
</ul>
</li>
<li>Зоны полу-автономного управления</li>
<li>Восстановление целостности после потерь соединения между датацентрами</li>
<li>Возможность указания пользователями высокоуровневых требований, например:
<ul>
<li>99% задержек при доступе к этим данным должны быть до 50 мс</li>
<li>Расположи эти данные на как минимум 2 жестких дисках в Европе, 2 в США и 1 в Азии</li>
</ul>
</li>
<li>Интеграция не только с серверами, но и с сетевым оборудованием, а также системами охлаждения в датацентрах</li>
</ul>
<p>Проектировалась из расчета на:</p>
<ul>
<li>1-10 миллионов серверов</li>
<li>~10 триллионов директорий</li>
<li>~1000 петабайт данных</li>
<li>100-1000 датацентров по всему миру</li>
<li>~1 миллиард клиентских машин</li>
</ul>
<p>Об этом проекте Google известно очень мало, официально он был представлен публике лишь однажды в 2009 году, с тех пор лишь местами упоминался сотрудниками без особой конкретики. Точно не известно развернута ли эта система на сегодняшний день и если да, то в какой части датацентров, а также каков статус реализации заявленного функционала.</p>
<h4>Прочие компоненты платформы</h4>
<p>Платформа Google в конечном итоге сводится к набору сетевых сервисов и библиотек для доступа к ним из различных языков программирования (в основном используются <a href="/tag/c/" target="_blank">C/C++</a>, <a href="/tag/java/" target="_blank">Java</a>, <a href="/tag/python/" target="_blank">Python</a> и <a href="/tag/perl/" target="_blank">Perl</a>). Каждый продукт, разрабатываемый Google, в большинстве случаев использует эти библиотеки для осуществления доступа к данным, выполнения комплексных вычислений и других задач, вместо стандартных механизмов, предоставляемых операционной системой, языком программирования или opensource библиотеками.</p>
<p>Вышеизложенные проекты составляют лишь основу платформы Google, хотя она включает в себя куда больше готовых решений и библиотек, несколько примеров из публично доступных проектов:</p>
<ul>
<li><a href="http://code.google.com/webtoolkit/" target="_blank">GWT</a> для реализации пользовательских интерфейсов на <a href="/tag/java/" target="_blank">Java</a>;</li>
<li><a href="http://code.google.com/closure/" target="_blank">Closure</a> &#8212; набор инструментов для работы с <a href="/tag/javascript/" target="_blank">JavaScript</a>;</li>
<li><a href="http://code.google.com/apis/protocolbuffers/" target="_blank">Protocol Buffers</a> &#8212; не зависящий от языка программирования и платформы формат бинарной сериализации структурированных данных, используется при взаимодействии большинства компонентов системы внутри Google;</li>
<li><a href="http://code.google.com/p/snappy/" target="_blank">Snappy</a> &#8212; быстрая компрессия данных, используется при хранении данных в GFS.</li>
</ul>
<h2>Подводим итоги</h2>
<ul>
<li><strong>Стабильные, проработанные и повторно используемые базовые компоненты проекта</strong><em> &#8212; залог её стремительного развития, а также создания новых проектов на той же кодовой базе</em>.</li>
<li>Если задачи и обстоятельства, с учетом которых проектировалась система, существенно изменились <em>- не бойтесь вернуться на стадию проектирования и реализовать новое решение</em>.</li>
<li><em>Используйте инструменты, подходящие для решения каждой конкретной задачи</em>, а не те, которые навязывает мода или привычки участников команды.</li>
<li>Даже, казалось бы, незначительные недоработки и допущения на большом масштабе могут вылиться в огромные потери <em>- уделяйте максимум внимания деталям при реализации проекта.</em></li>
<li>Нельзя полагаться даже на очень дорогое оборудование <em>- все ключевые сервисы должны работать минимум на двух серверах, в том числе и базы данных.</em></li>
<li>Распределенная платформа, общая для всех проектов, позволит новым разработчикам легко вливаться в работу над конкретными продуктами, с минимумом представления о внутренней архитектуре компонентов платформы.</li>
<li>Прозрачная работа приложений в нескольких датацентрах &#8212; одна из самых тяжелых задач, с которыми сталкиваются интернет-компании. Сегодня каждая из них решает её по-своему и держит подробности в секрете, что сильно замедляет развитие opensource решений.</li>
</ul>
<h2>Источники информации</h2>
<p>Не гарантирую достоверность всех нижеизложенных источников информации, ставших основой для данной статьи, но ввиду конфиденциальности подобной информации на большее рассчитывать не приходится.</p>
<p>Поправки и уточнения приветствуются <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ul>
<li><em><a href="http://www.google.com/about/datacenters/index.html" target="_blank">Official Google Data Centers Site</a></em></li>
<li><a href="http://research.google.com/people/jeff/WSDM09-keynote.pdf" target="_blank">Challenges in Building Large-Scale Information Retrieval Systems</a> (Jeff Dean, WCDMA &#8217;09)</li>
<li><a href="http://www.odbms.org/download/dean-keynote-ladis2009.pdf" target="_blank">Designs, Lessons and Advice from Building Large Distributed Systems</a> (Jeff Dean, Ladis &#8217;09)</li>
<li><em><a href="http://research.google.com/pubs/pub36726.html" target="_blank">Google Percolator official paper</a></em></li>
<li><a href="http://research.google.com/pubs/pub36971.html" target="_blank"><em>Google Megastore official paper</em></a></li>
<li><em><a href="http://www.theregister.co.uk/2010/09/24/google_percolator/" target="_blank">Google Percolator</a> </em></li>
<li><em><a href="http://www.theregister.co.uk/2010/09/09/google_caffeine_explained/" target="_blank">Google Caffeine Explained</a></em></li>
<li><a href="http://www.theregister.co.uk/2009/10/23/google_spanner/" target="_blank">Google Spanner</a></li>
<li><a href="http://www.theregister.co.uk/2011/06/08/google_software_infrastructure_dubbed_obsolete_by_ex_employee/" target="_blank">Google Software Infrastructure Dubbed Obsolete by ex-Employee</a></li>
<li><em><a href="http://www.theregister.co.uk/2011/06/23/google_moves_off_the_google_file_system/" target="_blank">Google Moves Off the Google File System</a></em></li>
<li><em><a href="http://www.google.co.uk/intl/en/landing/internetstats/" target="_blank">Google Internet Stats</a></em></li>
<li><em><a href="http://www.businessblogshub.com/2010/10/google-statistics-yes-they-are-very-big/" target="_blank">Google Statistics</a></em></li>
<li><em><a href="http://www.splashnology.com/article/google-plus-killer-facts-and-statistics-inforgaphics/2689/" target="_blank">Google Plus &#8212; Killer Facts and Statistics</a></em></li>
<li><em><a href="http://www.youtube.com/t/press_statistics" target="_blank">YouTube statistics</a></em></li>
<li><a href="http://www.alexa.com/siteinfo/google.com" target="_blank"><em>Alexa on Google</em></a></li>
<li><a href="http://www.internetworldstats.com/stats.htm" target="_blank"><em>Internet World Stats</em></a></li>
<li><em><a href="http://www.google.com/finance?fstype=bi&amp;cid=694653" target="_blank">Google Inc. financials</a></em></li>
<li><em><a href="http://www.geekwire.com/2011/stats-hotmail-top-worldwide-gmail-posts-big-gains" target="_blank">Hotmail still on top worldwide; Gmail gets bigger</a></em></li>
<li><a href="http://www.datacenterknowledge.com/archives/2011/08/01/report-google-uses-about-900000-servers/" target="_blank"><em>Google Server Count</em></a></li>
<li><em><a href="http://www.datacenterknowledge.com/archives/2009/10/20/google-envisions-10-million-servers/" target="_blank">Google Envisions 10 Million Servers</a></em></li>
<li><a href="http://www.datacenterknowledge.com/archives/2008/03/27/google-data-center-faq/" target="_blank"><em>Google Data Center FAQ</em></a></li>
</ul>
<h3>Бонус: типичный первый год кластера в Google</h3>
<ul>
<li>~1/2 перегрева (большинство серверов выключаются в течении 5 минут, 1-2 дня на восстановление)</li>
<li>~1 отказ распределителя питания (~500-1000 резко пропадают, ~6 часов на восстановление)</li>
<li>~1 передвижение стойки (много передвижений, 500-100 машин, 6 часов)</li>
<li>~1 перепрокладка сети (последовательной отключение ~5% серверов на протяжении 2 дней)</li>
<li>~20 отказов стоек (40-80 машин мгновенно исчезают, 1-6 часов на восстановление)</li>
<li>~5 стоек становится нестабильными (40-80 машин сталкиваются с 50% потерей пакетов)</li>
<li>~8 запланированных технических работ с сетью (при четырех могут случаться случайные получасовые потери соединения)</li>
<li>~12 перезагрузок маршрутизаторов (потеря DNS и внешних виртуальных IP на несколько минут)</li>
<li>~3 сбоя маршрутизаторов (восстановление в течении часа)</li>
<li>Десятки небольших 30-секундных пропаданий DNS</li>
<li>~1000 сбоев конкретных серверов (~3 в день)</li>
<li>Много тысяч сбоев жестких дисков, проблем с памятью, ошибок конфигурации и т.п.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/arkhitektura-google-2011/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Есть вопросы?</title>
		<link>http://www.insight-it.ru/masshtabiruemost/est-voprosy/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/est-voprosy/#comments</comments>
		<pubDate>Fri, 25 Nov 2011 22:54:10 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[FAQ]]></category>
		<category><![CDATA[highload]]></category>
		<category><![CDATA[Вопросы и ответы]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1453</guid>
		<description><![CDATA[Недавно несколько человек довольно независимо друг от друга подтолкнули меня к новой странице-рубрике на Insight IT. Как не трудно догадаться по заголовку, это F.A.Q. по высоконагруженным проектам и связанным темам. Я не считаю себя истиной в последней инстанции, так что публикую этот анонс, чтобы попросить Вас, лояльных читателей, помочь мне в составлении данного несомненно полезного [...]]]></description>
			<content:encoded><![CDATA[<div class="frame"><img class="alignnone size-full wp-image-1463" title="FAQ" src="http://www.insight-it.ru/wp-content/uploads/2011/11/FAQ.jpg" alt="" width="630" height="208" /></div>
<p>Недавно несколько человек довольно независимо друг от друга подтолкнули меня к новой странице-рубрике на Insight IT. Как не трудно догадаться по заголовку, это <strong><a href="http://www.insight-it.ru/highload/voprosy-i-otvety/">F.A.Q. по высоконагруженным проектам</a></strong> и связанным темам.</p>
<p><em>Я не считаю себя истиной в последней инстанции, так что публикую этот анонс, чтобы попросить Вас, лояльных читателей, помочь мне в составлении данного несомненно полезного для общества материала. Очень хотелось бы увидеть дополнения, поправки и комментарии к моим ответам, а также предложения по поводу новых вопросов и под-тем, которые стоило бы осветить.</em></p>
<p>Текущая версия состоит из тех вопросов, которые мне задавали в последнее время. В дальнейшем я постараюсь дополнить её более старыми вопросами от читателей и клиентов, но в большей степени я все же надеюсь на вашу поддержку <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="frame">Еще раз ссылка на основной материал: <strong><a href="http://www.insight-it.ru/highload/voprosy-i-otvety/" target="_blank">Вопросы и ответы</a></strong></p>
<p>Комментарии здесь закрываю, все обсуждение этой темы по ссылке.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/est-voprosy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 известных масштабируемых архитектурных шаблонов</title>
		<link>http://www.insight-it.ru/masshtabiruemost/10-izvestnykh-masshtabiruemykh-arkhitekturnykh-shablonov/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/10-izvestnykh-masshtabiruemykh-arkhitekturnykh-shablonov/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 20:42:22 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1410</guid>
		<description><![CDATA[&#171;Масштабируемость&#187; &#8212; одна из самых трудно достижимых характеристик при построении архитектуры современных программных продуктов. Что не удивительно, ведь не существует единого рецепта масштабируемости, который работал бы для всех возможных сценариев. Как же быть? Тем не менее, список наиболее распространенных рецептов или &#171;шаблонов&#187;, применяемых на практике, вполне реалистичен. Пост написан на основе списка из статьи Srinath, помимо простого [...]]]></description>
			<content:encoded><![CDATA[<p><strong>&#171;Масштабируемость&#187;</strong> &#8212; одна из самых трудно достижимых характеристик при построении архитектуры современных программных продуктов. Что не удивительно, ведь не существует единого рецепта масштабируемости, который работал бы для всех возможных сценариев. Как же быть?</p>
<p><span id="more-1410"></span> Тем не менее, список наиболее распространенных рецептов или &#171;шаблонов&#187;, применяемых на практике, вполне реалистичен. Пост написан на основе списка из <a href="http://srinathsview.blogspot.com/2011/10/list-of-known-scalable-architecture.html">статьи Srinath</a>, помимо простого перевода названий я постараюсь своими словами изложить &#171;на пальцах&#187; в чем заключается каждый подход и с чем его едят. В оригинале можно найти ссылки на большие многостраничные работы на английском по практически каждому из шаблонов.</p>
<p>Все нижеизложенные подходы основываются на трех основных принципах: распределении задач, кэшировании промежуточных результатов и отложенном (асинхронном) выполнении части работы.  Пройдемся по порядку:</p>
<ol>
<li><strong>Балансировщики нагрузки + не имеющие ничего общего исполнители:</strong> в данной модели существует некий входящий поток запросов или заявок, которые поступают через балансировщик(и) нагрузки на один из ряда равноправных узлов-исполнителей, которые каким-то образом генерируют результат запроса и отправляют обратно через балансировщик нагрузки или напрямую. В роли балансировщика нагрузки может использоваться DNS round-robin, различные программные или аппаратные решения, а также их комбинации (иерархии).</li>
<li><strong>Балансировщики нагрузки + узлы без состояний + масштабируемое хранилище:</strong> для большинства веб-приложений необходимо сохранять некое состояние, и тогда по сравнению с предыдущей моделью вводят в действие систему хранения данных, также приспособленную для горизонтального масштабирования, зачастую ценой отказа от реляционных и прочих комплексных операций, что сводит её интерфейс к простому взять-положить.</li>
<li><strong>Принцип &#171;равный-равному&#187; (<a href="http://en.wikipedia.org/wiki/Peer-to-peer" target="_blank">P2P</a>):</strong> заключается в самостоятельном распределении данных и/или задач между равнозначными узлами на основе заранее определенного алгоритма; причем клиент зачастую сам является узлом системы (<a href="http://ru.wikipedia.org/wiki/BitTorrent" target="_blank">BitTorrent</a>), либо обращается к произвольному узлу, который становится &#171;агентом&#187; для поиска и делегации конкретного запроса исполнителю (<a href="/tag/cassandra/" target="_blank">Cassandra</a>).</li>
<li><strong>Распределенные очереди:</strong> эта модель основывается на выделении очередей, как отдельных сетевых сервисов; используются либо для передачи произвольных данных между компонентами системы, либо для создания очереди выполнения длительных операций (например конвертации фото/видео/аудио).</li>
<li><strong>Парадигма подписка/публикация:</strong> в системе определяется набор типов событий, одни компоненты системы создают эти события (публикуют сообщения), а другие &#8212; хотят узнавать когда произошло событие определенного типа (подписка на сообщения) и каким-то образом реагировать; реализуется обычно в виде отдельного сетевого сервиса, иногда совмещенного с распределенными очередями.</li>
<li><strong>&#171;Молва&#187; и прочие похожие на жизнь архитектуры:</strong> основная идея заключается в том, что компонентам системы не нужно знать об общей структуре всей сети; узлу достаточно лишь знать о нескольких &#171;соседях&#187;, с которыми он будет напрямую взаимодействовать, а распространение информации внутри системы возможно по принципу &#171;молвы&#187;, то есть цепного распространения через &#171;соседей&#187;; используется, например, для развертывания кода или упрощения конфигурации в больших кластерах.</li>
<li><strong>MapReduce и потоки данных:</strong> изначально MapReduce был предложен <a href="/tag/google/">Google</a> для обработки огромных массивов данных, с которыми они сталкиваются, алгоритм вкратце следующий:
<ul>
<li>Каждый узел в системе считывает с дисков свою часть данных и образует из них пары &#171;ключ-значение&#187;;</li>
<li>Эти пары преобразуются в новые промежуточные пары &#171;ключ-значение&#187; по определенному алгоритму (стадия Map);</li>
<li>Промежуточные пары сортируются и группируются по ключу и для каждого ключа вычисляется новое значение на основе группы промежуточных значений (стадия Reduce);</li>
<li>Результат стадии Reduce обычно и является желаемой информацией, полученной из массива данных, и обычно сохраняется в распределенную файловую систему, либо каким-то образом импортируется в другое хранилище.</li>
</ul>
<p>MapReduce по сути лишь распространенный частный случай обработки потоков данных, который способен решить большую часть аналитических задач. В общем случае процесс обработки потоков данных может иметь любое количество этапов, преобразований и сортировок данных, необходимых для получения результата.</li>
<li><strong>Дерево ответственности:</strong> заключается в разложение общей задачи на подзадачи и рекурсивной делегации их выполнения другим узлам системы, что в итоге и образует дерево; используется как часть некоторых других моделей.</li>
<li><strong>Обработка входящих потоков:</strong> скорее класс задач, чем шаблон, но тем не менее&#8230; есть некие внешние события (например сбои в клиентском ПО), обладающие какими-то характеристиками, информация о которых постоянно и непрерывно поступает в систему, которая должна в реальном времени обрабатывать события и получать на основе этих данных требуемую информацию. Реализуется посредством сети обрабатывающих узлов с общем хранилищем информации.</li>
<li><strong>Масштабируемое хранилище:</strong> их можно рассматривать как отдельный субъект, обладающий свойством масштабируемости; по типам можно выделить базы данных (зачастую не структурированных) и файловые системы.</li>
<li><strong>Разделение ответственности запросов на чтение и на запись (<a href="http://martinfowler.com/bliki/CQRS.html">СQRS</a>):</strong> звучит страшно, на деле еще страшнее, если по-простому, то&#8230; модель основывается на обмене сообщениями между равноправными компонентами, хранении, обработке данных в оперативной памяти, асинхронном масштабируемом хранилище данных для их сохранности и репликации компонент для надежности и отказоустойчивости.</li>
</ol>
<p>Хотелось бы обсудить в комментариях какие из перечисленных моделей Вы чаще всего используете на практике и почему? В чем видите перспективы, преимущества и недостатки каждого? Может быть вспомните еще шаблоны, которые не попали в список?</p>
<p><em>P.S.: Я недавно участвовал в <a href="http://www.igoreremenko.com/vysokonagruzhennye-internet-sajty-voprosy-i-otvety.html" target="_blank">сессии вопросов-ответов</a> про высоконагруженные и не очень интернет проекты, возможно Вам будет интересно почитать. </em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/10-izvestnykh-masshtabiruemykh-arkhitekturnykh-shablonov/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Google Developer Day и Oracle Day 2011</title>
		<link>http://www.insight-it.ru/life/google-developer-day-i-oracle-day-2011/</link>
		<comments>http://www.insight-it.ru/life/google-developer-day-i-oracle-day-2011/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 21:34:23 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[GDD]]></category>
		<category><![CDATA[Google Developer Day]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Oracle Day]]></category>
		<category><![CDATA[конференции]]></category>
		<category><![CDATA[мероприятия]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1398</guid>
		<description><![CDATA[Хоть сезон конференций в Москве и подходит к своему завершению, на около-ИТ мероприятия я все еще продолжаю заглядывать. В этом &#171;выпуске&#187; моих отчетов по конференции я пробегусь сразу по двум мероприятиям, обозначенным в заголовке. Не так уж и много у меня нашлось что сказать о каждом, чтобы выделять под каждое отдельный пост. Итак&#8230; Google Developer [...]]]></description>
			<content:encoded><![CDATA[<p><div class="frame"><img title="google-oracle" src="http://www.insight-it.ru/wp-content/uploads/2011/11/google-oracle.jpg" alt="Google Day and Oracle Day" width="630" height="208" /></div><!-- .frame (end) --></p>
<p>Хоть сезон конференций в Москве и подходит к своему завершению, на около-ИТ мероприятия я все еще продолжаю заглядывать. В этом &#171;выпуске&#187; моих отчетов по конференции я пробегусь сразу по двум мероприятиям, обозначенным в заголовке. Не так уж и много у меня нашлось что сказать о каждом, чтобы выделять под каждое отдельный пост. Итак&#8230;<br />
<span id="more-1398"></span></p>
<h2>Google Developer Day</h2>
<p>Для интернет-гиганта формат, размах и уровень мероприятия были на стандартном уровне: большой павильон в Крокус Экспо, много обслуживающего персонала, почти 2000 участников и 6 параллельных секций. Практически не работающим WiFi и некоторым дефицитом еды сегодня никого не удивишь, а вот необычным моментом оказались раскиданные по павильону холодильники с газировкой на подобии безалкогольного мохито и холодным чаем, вместо традиционной простой воды. Доступ к сидениям-грушам &#8212; отличное решение для создания &#171;нулевого&#187; ряда в переполненных залах, активно пользовался.</p>
<p>Открытие было традиционной цепочкой рассуждений об истории и судьбе индустрии, как все здорово растет и развивается. Запомнилось, что привели какие-то фантастические цифры по соотношению использования браузеров в России, невероятно низкая доля использования IE (жаль не помню точно, кажется меньше 20%) &#8212; судя по всему собирали с google.ru, когда все, для кого IE и Интернет являются синонимами, поголовно пользуются Яндексом <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Помимо прочего на вступлении показывали трейлер четвертого Ледникового Периода в анаглифе (как демонстрацию тега &lt;video /&gt;) и выступали Zeptolab на правах авторов самой популярной Android-игры.</p>
<p>Секции были разделены по тематикам: HTML5/Chrome, Android, AppEngine, Google+ и Tech Talks. Самый большой зал, одновременно являющийся холлом, довольно неудачно отдали в распоряжение GTUG&#8217;ов &#8212; тусовки проектов, основанных на технологиях Google, практически пустовал все время, кроме кофе-брейков и обеда.</p>
<p>Выбрать секцию для посещения было непросто: заранее было ясно, что все будет довольно поверхностно, да и технологиями Google как разработчик я пользуюсь довольно условно, максимум иногда <a href="http://code.google.com/closure/compiler/">Closure Compiler</a> для минимизации JS, CDN для jQuery, как-то пару раз с почтой ленился возиться &#8212; у них хостил и.т.п. Как я уже часто последнее время делаю &#8212; пошел туда, где меньше всего актуально, чтобы хотя бы кругозор расширить.</p>
<p>В конечном итоге большую часть дня провел в зале с HTML5. <strong>Sam Dutton</strong>, пожалуй, больше коллег рассказал толковых вещей, в частности довольно интересно было послушать про создание веб-приложний, пригодных для использования людьми с ограниченными физическими возможности, которых по их данным порядка 5% от пользователей Интернета. Много внимания было уделено читалкам текста (на примере их решения ChromeVox) и навигации по DOM без мыши. Еще он показал как решать основные задачи по дебаггингу веб-приложений с помощью Chrome Developer Tools &#8212; я как-то по старинке привык Firebug для этого пользоваться, а после того доклада вроде даже как-будто и почти полностью пересел на решение от Google, функционал на самом деле не уступает, просто с юзабилити у них не очень гладко, да и дело привычки.</p>
<p>Остальные доклады были о HTML5 в различных его проявлениях: работа с сайтами при отсутствии доступа к Интернет, отрисовка всего что только можно в canvas, разные совсем не поддерживаемые браузерами штуки и прочее. Интересно послушать, но по сути далеко не в каждом проекте хоть как-либо применимо, хотя за History API и хранением данных на клиенте, определенно, будущее.</p>
<p>С последнего доклада секции о повышении быстродействия сайтов пришлось сбежать из-за перспективы простоять часа 2 в традиционных московских вечерних пробках, но судя по всему не много потерял &#8212; речь шла просто об их продукте Google PageSpeed, о котором и так полно информации на <a href="http://code.google.com/intl/ru/speed/page-speed/" target="_blank">официальном сайте</a>.</p>
<h2>Oracle Day</h2>
<p>В то время как GDD для меня является традиционным мероприятием, вылазка на Oracle Day оказалась довольно спонтанным экспериментом. Не смотря на то, что Oracle считают себя королями баз данных, прецедентов применения их в успешных интернет-проектах практически нет. Собственно, так как в традиционных компаниях я никогда не работал и пока не планирую, то и мои пути с продукцией известного ИТ-гиганта толком и не пересекались, так что меня давненько интересовал вопрос чем обусловлен ценник с невообразимым количеством нулей на практически весь ассортимент их продукции.</p>
<p>С точки зрения организации от интернет-конференций все отличалось слабо: довольно пафосное место (Редиссонс Славянская), много участников, мини-выставка и пр. Из откровенных промахов: полное отсутствие WiFi в залах &#8212; хоть в отеле и есть своя качественная сеть, но доступа к ней не дали, а единственная точка от организаторов была в холле и естественно была ни к селу ни к городу. Плюс странно что воду раздавали в здоровенных полуторалитровых бутылках &#8212; иметь доступ к воде во время секций было проблематично.</p>
<p>Повода самостоятельно поизучать данный вопрос у меня как-то не было, а вот анонс мероприятия под руку подвернулся вовремя &#8212; и вот я там <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Любопытство я свое удовлетворил сполна: мероприятие было на 100% посвящено саморекламе, еще более открыто, чем на бесплатных конференциях от интернет-компаний &#8212; сотрудники активно пытались продавать со сцены. Как и предполагалось, вопрос о ценах полностью оставался &#171;за кадром&#187;, а речь шла о сравнении различных технических параметров с &#171;конкурентами&#187;, причем конкуренты подбирались специально чтобы представить все в лучшем свете, а тот факт, что за решение от &#171;конкурентов&#187; придется выложить намного меньше, а то и вообще ничего (opensource), и вовсе умалчивался.</p>
<p>Из практически полезных докладов для меня оказалось выступление об Oracle Firewall о безопасности в разрезе СУБД. Ничего кардинально нового, но докладчик толково разложил по полочкам основные риски (человеческий фактор, SQL-инъекции, кейлоггеры на компьютерах администраторов, уязвимости в ПО и.т.п.) и способы их уменьшения.</p>
<p>Наглядным примером (по крайней мере для меня) оказался Oracle Big Data Appliance, который, как оказалось, является просто <a href="/tag/hadoop/" target="_blank">Apache Hadoop</a> с блекджеком и прочими плюшками от Oracle &#8212; каков ценник на эти самые &#171;плюшки&#187; можно лишь догадываться.</p>
<p>Общее впечатление в целом подтвердило мои догадки: продукция Oracle создана для ИТ-директоров и топ-менеджеров крупных не-ИТ компаний, чтобы позволить им снять с себя части ответственности и сократить число ИТ-специалистов в штате, что в целом может положительно отразиться и на финансовых показателях компаний-клиентов. В других ситуациях представить коммерческую целесообразность покупки проприетарного ПО подобного уровня, особенно для интернет-компаний, мне достаточно сложно.</p>
<h2>Финальная черта</h2>
<p>Хоть я и не могу похвастаться очень эффективно проведенным временем на освященных в этом посте мероприятиях, оно того в целом стоило: глубокие знания все равно приобретаются лишь на практике, а конференции как раз и созданы для того, чтобы дать возможность посмотреть что же еще происходит в мире.</p>
<p>Сейчас вроде по-свободнее стало с временем, в связи с закрытием одного из проектов, так что постараюсь вновь вернуться к написанию постов &#171;по делу&#187;, так что очень рекомендую <a href="/feed/" target="_blank">подписываться на RSS</a>, если еще не успели <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  До новых встреч!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/life/google-developer-day-i-oracle-day-2011/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>HighLoad++ 2011</title>
		<link>http://www.insight-it.ru/life/highload-2011/</link>
		<comments>http://www.insight-it.ru/life/highload-2011/#comments</comments>
		<pubDate>Thu, 20 Oct 2011 11:16:46 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[highload]]></category>
		<category><![CDATA[конференции]]></category>
		<category><![CDATA[мероприятия]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1375</guid>
		<description><![CDATA[В этом году я почти до последнего момента не знал попаду ли на HighLoad++, но благодаря поговорке &#171;не имей сто рублей, а имей сто друзей&#187; все же попал в список участников (огромное спасибо Аксане и ВШБИ). По ходу мероприятия написать традиционный отчет не получилось, но лучше поздно, чем никогда Начну, как обычно, с организационных моментов [...]]]></description>
			<content:encoded><![CDATA[<p><div class="frame"><img src="http://www.insight-it.ru/wp-content/uploads/2011/10/highload.jpg" alt="HighLoad++" title="HighLoad++" width="630" height="208" class="alignnone size-full wp-image-1353" /></div><!-- .frame (end) --></p>
<p>В этом году я почти до последнего момента не знал попаду ли на <a href="http://www.highload.ru" target="_blank">HighLoad++</a>, но благодаря поговорке &#171;не имей сто рублей, а имей сто друзей&#187; все же попал в список участников (огромное спасибо <a href="http://www.facebook.com/pruttskova">Аксане</a> и <a href="http://hsbi.ru" target="_blank">ВШБИ</a>). По ходу мероприятия написать традиционный отчет не получилось, но лучше поздно, чем никогда <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <span id="more-1375"></span></p>
<p>Начну, как обычно, с организационных моментов и прочих вещей не по делу. Регистрация заняла ровно 30 секунд, никаких очередей. Удивило, что поленились хоть капельку поменять раздаточные материалы и их дизайн с прошлого года &#8212; выдали абсолютно идентичные прошлогодним пакетик, блокнот и ручку. На входе стоял стенд с ходящей по беговой дорожке топлесс девушкой с бодиартом, которую потом все кому не лень выкладывали в твиттер с соответствующим хэштегом. На том же стенде разыгрывали Mac Pro между теми, кто оставит контакты. К слову, владельцы стенда оказались разработчиками ужасно работающего под Android 3.1 покерного сервиса, ничего более примечательного о них сказать не могу. Стендов, как обычно, было по пальцам пересчитать: пару хостинг-провайдеров и Битрикс ничем особым не выделались, а в Google тоже разыгрывали технику, один из последних смартфонов Samsung, а еще за прохождение теста в Google Docs дарили футболки с надписью <em>&#171;I&#8217;m&nbsp;feeling&nbsp;lucky&#187; </em>на спине &#8212; очень актуально на экзаменах и в казино <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>С WiFi традиционные проблемы почти весь первый день, планшет с 3G спасал ситуацию. Кормили вполне приемлемо, правда ассортимент скудный &#8212; я, наверное, за весь год меньше жареной рыбы съел, чем за эти два дня. Первые три ряда мест в залах были &#171;только для VIP&#187;, которые, как я понял, включали в себя докладчиков и возможно личных знакомых организаторов, причем таких человек было на вскидку меньше 5% участников и в итоге 95% мест пустовали до тех пор, пока все не забили на эту схему. Определенно не самый удачный ход, если уж и бронировать места, то не в таком количестве. Трансляция одного из залов в коридоре &#8212; спорное решение, с одной стороны можно послушать пока ешь, с другой &#8212; общаться мешает капитально, особенно когда собираются &#171;тусовки&#187; вокруг докладчика, например во второй день нужно было сильно напрягаться, чтобы услышать Олега Илларионова в кулуарах.</p>
<p>Перейдем, собственно, к основной тематике конференции, то есть к докладам. В первый день один зал практически полностью был выделен для англоязычных спикеров, что в целом хорошая тенденция. Если бы такое было возможно, то вообще всю конференцию стоило бы перевести на английский &#8212; терминология в родном её варианте звучит намного приятнее и лаконичнее. Оба русскоговорящих докладчика, выступавших в &#171;англоязычном&#187; зале, были тихим ужасом &#8212; даже комментировать их не хочу, просто двум не заслуживающим этого людям дали покрасоваться перед публикой. Английские же доклады были в основном на достаточно высоком уровне.</p>
<p>Швейцарец <strong>Alvaro Videla</strong> делился своим опытом работы с RabbitMQ, я, признаюсь, не особо следил за этим проектом, но подал он его достаточно вкусно и судя по обозначенным векторам развития внимания RabbitMQ все же стоит.</p>
<p>Второй докладчик, <strong>Buddy Brewer</strong>, повествовал о тестировании скорости отрисовки страниц в браузерах как искусственно (посредством диаграммы загрузки компонентов страницы в виде водопада), так и вживую на пользователях (посредством window.performance.timing, о котором я почему-то раньше не слышал, и различных Javascript-библиотек). </p>
<p><strong>Robert Treat</strong> из OmniTI выступил намного хуже, чем в прошлом году, довольно скучно рассказывал про PostgreSQL и мало кому нужные ньюансы работы с ним, хотя доклад назывался совсем по-другому.</p>
<p>После обеда шел доклад <strong>Domas Mituzas</strong>, простого DBA из Facebook, хотя в прошлом году выступал более высокопоставленный представитель. Речь шла на этот раз про MySQL, в частности про основные проблемы и доработки, сделанные в форке от Facebook, также затрагивался вопрос грядущего в следующем году MySQL 5.6.</p>
<div class="frame alignleft"><img src="http://www.insight-it.ru/wp-content/uploads/2011/10/berkus.jpg" alt="Josh Berkus" title="Josh Berkus" width="150" height="150" class="alignnone size-full wp-image-1359" /></div>
<p><strong>Josh Berkus</strong> в этом году выступил более удачно, не зря ему дали выступить дважды. Первый был довольно специфичным, но от этого не менее интересным, основной темой был довольно узкий класс приложений, который он называл firehose applications (пожарный шланг). Они представляют собой сборщики данных в реальном времени для последующей аналитики, было два примера: обработчик отчетов о критических сбоях в Mozilla Firefox и анализ работы ферм ветряных мельниц. Забавно оказалось их сравнение с традиционными сайтами:</p>
<ul>
<li>в сайтах главное, чтобы данные из базы всегда можно было хотя бы прочитать, и в случае сбоев или плановых работ её делают доступной только для чтения;</li>
<li>в обсуждаемых же приложениех главное записать все поступающие данные, а пользовательский интерфейс в целом можно запланированно и не очень отключать &#8212; кому какое дело, если интерфейс для аналитических отчетов не работал 8 часов в ночь с субботы на воскресенье?</li>
</ul>
<p>В его решениях обычно использовался та или иная форма NoSQL хранилищ, для сбора текущих данных и PostgreSQL для хранения уже обработанных отчетов и предоставления их пользователям. Второй доклад Josh&#8217;а был менее формальным и был посвящен вопросам SQL vs NoSQL, что по сути свелось к тому, что наличие SQL-интерфейса &#8212; дело десятое при выборе СУБД для конкретного проекта, важнее понимать другие особенности каждого конкретного хранилища данных.</p>
<p>Mi***ft в этом году, как и Facebook, сменил докладчика, но это не уберегло их от очередного провала. Хоть и после доклада появилось-таки несколько вопросов от аудитории, но разработчиков по-прежнему в целом мало интересует тематика проприетарного ПО, даже при поддержке PHP и Hyper-V. Продавать простым смертным у них получается намного лучше, чем продавать специалистам.</p>
<div class="frame alignright"><img src="http://www.insight-it.ru/wp-content/uploads/2011/10/virding.jpg" alt="Robert Virding" title="Robert Virding" width="150" height="150" class="alignnone size-full wp-image-1357" /></div>
<p><strong>Robert Virding</strong> был, пожалуй, одним из лучших докладчиков первого дня. Хоть я и неплохо знаком с Erlang, но послушать о нем из уст одного из создателей &#8212; невероятно увлекательно, как-будто переживаешь на своей шкуре историю целого языка программирования. Robert очень подробно объяснил чуть ли не каждое ключевое решение, принятое при проектировании и разработке Beam, основной реализации виртуальной машины Erlang, а также освятил несколько альтернативных воплощений этого языка в жизнь.</p>
<p>После чего были как раз два русских доклада, о которых я решил не рассказывать и второй доклад Josh&#8217;а, о котором я уже написал чуть выше. Первый день завершал фуршет от одного из спонсоров конференции: пиво я принципиально не пью, а на виски настроения особо не было, так что слегка перекусил и даже не стал дожидаться выступления приглашенной группы.</p>
<p>Второй день был полностью &#171;на русском&#187;. Первый зал на 100% состоял из размусоливаний различных систем хранения данных &#8212; не знаю хорошо это или плоха, вопрос актуальный, но то что очень однообразно и об одном и том же &#8212; факт. Второй зал был по-разнообразнее, но я там был всего на двух с половиной докладах.</p>
<p>Я немного опоздал на первый доклад от <strong>mail.ru</strong>, но, судя по всему, не много потерял &#8212; они снова пропагандировали свое детище, Tarantool, на этот раз в сравнении с Redis. Штука довольно интересная, но каких-то особых преимуществ перед последним я так и не увидел или, может быть, не хотел увидеть.</p>
<p>Представители <strong>Skype</strong> рассказывали о своем опыте работы с Redis и, в частности, о конкретном кейсе с решардингом &#171;на живую&#187; &#8212; довольно увлекательно, красивое решение с фильтрующим replication proxy, которое правда скорее всего скоро потеряет актуальность при текущем направлении развития проекта Redis. Сам активно им пользуюсь, но что-то подобное проделывать пока не приходилось.</p>
<p><strong>Владимир Климонтович</strong> рассказал довольно подробно о проекте Apache Cassandra, правда ничего нового я не услышал &#8212; все что было сказано легко можно найти на официальном сайте проекта, что я в свое время и сделал.</p>
<p>На докладе <strong>OpenStat</strong> я тупо сидел в Интернете, особо не вслушиваясь &#8212; после их же доклада в прошлом году слушать еще раз примерно о тех же заморочках с Apache Hadoop было не особо интересно, особенно если учесть, что я в 2008-м с ним очень плотно работал.</p>
<p>После обеда произошел мой &#171;трансфер&#187; во второй зал. <strong>Комсомольская правда</strong> прямо-таки ужаснула совковостью своей реализации и служила скорее анти-примером, а упоминавшиеся проблемы и их решения были очень спорными.</p>
<p><div class="frame alignleft"><img src="http://www.insight-it.ru/wp-content/uploads/2011/10/illarionov.jpg" alt="Олег Илларионов" title="Олег Илларионов" width="150" height="150" class="alignnone size-full wp-image-1358" /></div><!-- .frame (end) -->Выступление <strong>Вконтакте</strong> стало снова лучшим на конференции, не смотря на отсутствие Павла Дурова. <strong>Олег Илларионов</strong>, хоть и является, как я понял, просто разработчиком, но хорошо ориентируется в технической реализации проекта и очень доходчиво рассказывает &#8212; представлять компанию на HL++ его отправляют совершенно оправданно. Основная тема доклада звучала как <strong>AJAX Layout</strong> и по сути отражала основное техническое изменение на Вконтакте за последний год: навигация через # плюс обновления и чат в реальном времени. Опять же, не могу похвастаться реализацией чего-то подобного на своей практике, как-то не приходилось, но давно хотелось выделить на это время, так что информация оказалась невероятно актуальной. Про серверную часть было сказано очень мало: чистый C и epoll, мол при их нагрузках по-другому никак. Хотя мне кажется Erlang справился бы лучше, правда не факт, что у них есть соответствующие разработчики. Основной ад данной задачи находится на клиентской стороне:
<ul>
<li>кроссбраузерное сохранение работы кнопок вперед/назад/перезагрузить без полной перезагрузки страниц,</li>
<li>кроссбраузерное же постоянное соединение браузера с сервером (используют long polling, websocket по очевидным причинам пока практически не применим),</li>
<li>сохранение корректной работы с выключенным JavaScript и в &#171;необычных&#187; браузерах,</li>
<li>выдача нового контента частями через скрытый iframe для улучшения визуальной скорости загрузки страницы,</li>
<li>эмуляция процесса загрузки страницы через динамический favicon,</li>
<li>очистка памяти при переходах между страницами,</li>
<li>использование одного постоянного соединения для нескольких вкладок посредством локального хранилища из HTML5</li>
</ul>
<p>&#8230;и многие другие проблемы и задачи &#8212; все это довольно подробно Олег разложил по полочкам. Помимо этого он рассказал как реализован поиск по друзьям внутри браузера через выгрузку списка друзей в JSON, а также целая куча вопросов о том о сем, например про почту и все ту же &#171;волшебную&#187; базу данных на C. Новую <a href="/masshtabiruemost/arkhitektura-vkontakte/">статью про Вконтакте</a> я в этом году не планировал, так что особо не записывал, хотя возможно и зря. Выступление Олега слегка продлили, так как следующий докладчик куда-то пропал, но по факту когда он нашелся выступление про новомодный Node.js оказалось не очень и большая часть зала перекочевала &#171;в кулуары&#187; дальше слушать Олега и задавать ему вопросы.</p>
<p>После кофе-брейка я вернулся в первый зал, где продолжалась эпопея с хранением данных. <strong>Одноклассники</strong> наконец-то поняли, что их старинное решение на BerkleyDB + Java RMI &#8212; не панацея от всех болезней, и перешли на другое решение для одной из задач, хранения изображений, не менее самопальное. Задумка была в основном в замене BerkleyDB на традиционные блобы фиксированного размера, аналогично решению в Facebook, при этом остальная схема работы изменилась не сильно &#8212; доступ к системе через HTTP посредствам Tomcat, внутри правда отказались от RMI в пользу сокетов и собственного протокола, для хранения конфигурации &#8212; Apache Zookeper, типичный для Java-мира наборчик. Из интересных решений &#8212; использование JBOD с созданием уникального идентификатора винчестера и возможностью переткнуть любой из них в другой сервер. В остальном ничего особенного: лог транзакций, репликация, индекс в памяти посредством собственной реализации HashMap и т.п.</p>
<p>Последний доклад, который я послушал, был слегка похож на предыдущий, с той лишь разницей, что хостинг-провайдер <strong>Clodo</strong> не стал изобретать велосипед и воспользовался &#171;полуфабрикатом&#187; под названием Openstack Swift &#8212; хранилище бинарных объектов с HTTP интерфейсом, которыми вполне могут быть и изображения. Доклад был о том как они его допиливали, в основном посредством использования nginx и его модулей. К слову, посмотрел их цены (возможно скоро <strong>Insight IT</strong> придется снова переезжать, приглядываюсь к вариантам) и был разочарован, очень существенно выше рынка не смотря на неизвестность компании, в такой ситуации наоборот логичнее было бы демпинговать&#8230;</p>
<p>В целом впечатления от конференции положительные, процент стоящих докладов близок к 20-30%, что для технических конференций очень прилично. Организация и контингент тоже на уровне. Но нельзя не сказать про ценник (21к за живое участие и 11к за онлайн-трансляцию) &#8212; он явно рассчитан на оплату работодателями и посещение конференции за собственный счет определенно того не стоит. Альтернативные варианты попасть на мероприятие хоть и есть, но довольно ограничены &#8212; каждый раз приходится изворачиваться, чтобы попасть бесплатно при отсутствии работодателя. Хотя может быть надо было просто заморочиться и попасть в список &#171;информационной поддержки&#187;&#8230;</p>
<p><em>Кстати, в этом году в первый раз ко мне начали подходить незнакомые люди и благодарить за блог &#8212; очень приятно <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<p>До встречи на GDD через пару дней!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/life/highload-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yet Another Conference 2011</title>
		<link>http://www.insight-it.ru/life/yet-another-conference-2011/</link>
		<comments>http://www.insight-it.ru/life/yet-another-conference-2011/#comments</comments>
		<pubDate>Mon, 19 Sep 2011 17:11:22 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[YAC]]></category>
		<category><![CDATA[Yandex]]></category>
		<category><![CDATA[конференция]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1343</guid>
		<description><![CDATA[Осень, сезон конференций, подкралась незаметно. Не знаю, попаду ли я на все технические мероприятия в Москве, которые будут проходить в ближайшие несколько месяцев (особенно HL++ под вопросом), но на конференцию Яндекса, YaC 2011, я все же выбрался Пишу прямо из WTC, где проходит это мероприятие, благо обзавелся-таки недавно планшетом на Android 3.1. На входе вручили [...]]]></description>
			<content:encoded><![CDATA[<p>Осень, сезон конференций, подкралась незаметно. Не знаю, попаду ли я на все технические мероприятия в Москве, которые будут проходить в ближайшие несколько месяцев (особенно HL++ под вопросом), но на конференцию Яндекса, YaC 2011, я все же выбрался <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Пишу прямо из WTC, где проходит это мероприятие, благо обзавелся-таки недавно планшетом на Android 3.1. <span id="more-1343"></span></p>
<p>На входе вручили забавный сворачивающийся браслетик с написанным IP-адресом Яндекса и пакет с сувениркой, причем размер футболки угадали не спрашивая, что радует. Здоровенный принтер, превращающий QR-код с хэшем в пластиковый бейдж &#8212; как минимум необычное решение). Это первая на моей памяти бесплатная конференция, где в обед было адекватное количество еды, но промах все же допустили &#8212; на этот раз это был дефицит <strong>вилок</strong>, сплошные ножи на столах, искал минут 20, наверное, если не считать многочисленные встречи и общение с знакомыми и не очень людьми на территорией столовой <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  А еще на воде сэкономили &#8212; подмосковного производства, видимо из-под крана, на вкус ужас и кончилась к середине дня. Вай-фай приемлимо работал тоже только до обеда. А в остальном организация конференции &#8212; <em>на достойном уровне</em>.</p>
<p><div class="frame"><img src="http://www.insight-it.ru/wp-content/uploads/2011/09/DSC03441.jpg" alt="" title="DSC03441" width="630" height="293" class="alignnone size-full wp-image-1349" /></div><!-- .frame (end) --></p>
<p>В холле помимо самого Яндекса, который проводил различные конкурсы для сисадминов (например, конфигурирование <a href="/tag/nginx/" target="_blank">nginx</a> за 10 минут для достижения обработки максимального количества запросов в секунду), были представлены HTC и Samsung. У HTC снова какой-то конкурс, телефон в Твиттере разыгрывали, кажется он как-то связан с роботом, который тусовался около их стенда. А Samsung притащили два здоровенных телевизора, которые наверняка стоят в магазинах под 200к каждый. И помимо этого, естественно, у обоих были представлены линейка последних телефонов и планшетов, HTC Flyer правда скорее большой КПК напоминает, чем планшет, но не суть. Необычно было, что техника вся без &#171;привязи&#187; была &#8212; неужели там все настолько хорошо с охраной и адекватностью публики? Еще писали, что где-то показывают планшет с Wi***ows 8, но я не наткнулся.</p>
<p>По поводу, собственно, самих докладов и выступлений, постараюсь быть краток, не хочу все пересказывать &#8212; видео и презентации организаторы обещали опубликовать. Сегодня я решил не бегать по залам и 90% времени провел во втором зале. Оставшиеся 10% пришлись на первое выступление о текущих проблемах, задачах и решениях в поисковых алгоритмах Яндекса и перед уходом заглянул на доклад русскоговорящего сотрудника Facebook об их опыте использования <a href="/tag/hadoop/">Hadoop</a>. История о том, с какими проблемами сталкивается Яндекс, была любознательной, но не несла особой практической ценности даже SEO-специалистам. Пару лет уже практически не работал с Hadoop, но текущая ситуация с ним меня нисколько не удивила: проект успешно растет и развивается, активно решаются основные проблемы с надежностью (децентрализация мастер-узлов, failover в диапазоне 5-10 секунд), стабильностью, потреблением ресурсов (дополнительный узел &#8212; менеджер ресурсов), производительностью и эффективностью использования дискового пространства (за счет техник, схожих с RAID: XOR и Reed-Solomon, позволяющих восстанавливать утерянные реплики при экономии дискового пространства до 50% по сравнению со стандартной тройной репликацией). На другой доклад по Hadoop, от Cloudera, я не пошел, так как подумал что врядли что-то новое на нем услышу.</p>
<p>Во втором зале было аж четыре секции, обо всем по-порядку:</p>
<ul>
<li><strong>Мобильная разработка</strong> &#8212; если в двух словах, то в этой области сейчас основной проблемой является гетерогенность устройств, что делает кроссплатформенность очень желательной, но практически недостижимой в боевых условиях. Все доклады были исключительно про C++ под тем или иным соусом: в Яндекс.Панорамах используют OpenKode с кучей своих костылей, а навигаторы Shturmann под Android пишут с использованием NDK. Для тех, кто занимается подобными извращениями, возможно актуально, да и для общего развития полезно.</li>
<li><strong>Веб-разработка</strong> &#8212; секция началась печально, с очередного само-рекламного выступления одного стартапа, получившего приличные инвестиции &#8212; Cloud9. Если закрыть глаза на попытки докладчика &#171;впарить&#187; аудитории свой сервис, то у них классная задумка &#8212; написать на чистом JavaScript (V8+NodeJS) IDE для разработки на JavaScript, что судя по слайду с архитектурой и демками у них вполне получилось. После обеда секцию продолжили истории про клиентскую разработку в Yandex &#8212; душещипательные истории о стратегии использования селекторов, конвертации статического HTML в шаблоны, повторном использовании кода (блоков) и прочих прелестей жизни команды верстальщиков в большом проекте. Закрывал секцию обаятельный гость по имени Chaals из компании Opera Software, ранее работавший в W3C, который на хорошем английском повествовал о веб-стандартах, о том что же такое на самом деле HTML5 и многих других аспектах морали ведения веб-бизнеса; в итоге правда доклад получился сильно философским (по образованию он оказался историком <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ), да и видно было, что далеко не все его адекватно понимали.</li>
<li><strong>Администрирование</strong> &#8212; по большей части секция сводилась к мониторингу и реакцию на ЧП в Яндекс, причем первым докладчиком был рядовой сисадмин, а второй &#8212; руководителем группы системных администраторов ряда сервисов, что очень сильно повлияло на их точку зрения на в целом одну и ту же ситуацию в одной и той же компании. Алексей явно весь на нервах и акцентировал внимание на фишках системы мониторинга, чтобы она работала &#171;как часы&#187;, а Роман обращал внимание на то, что залог успеха &#8212; унификация, автоматизация и отсутствие лишних тревог по ночам, а что собственно и как делается и чинится &#8212; дело десятое, да и вещал он спокойным и размеренным голосом, почти как у диктора.</li>
<li><strong>Тестирование</strong> &#8212; эта секция состояла из двух докладов, но я, каюсь, сбежал через 10 минут после начала первого. Выступал солидный мужчина сильно пожилого возраста и выступал он от имени Российской Академии Наук, начал он свое повествование с истории тестирования, на первом же слайде значились года что-то в районе 1974, сопровождавшиеся историями о тестировании каких-то секретных систем для Советского Союза и так и не понял какого компилятора. Сначала я подумал, что это он так представляется, но когда стало понятно, что в целом это и есть основная тема доклада &#8212; я решил, что с меня хватит, так как мой мозг подобные истории практически не воспринимает&#8230;</li>
</ul>
<p>В целом от конференции остались положительные впечатления, давненько не выбирался &#171;в люди&#187;. Последнее время моя работа стала носить несколько гибридный характер и касается она IT лишь отчасти, но занимает адское количество времени, возможно из-за этого снова стал редко обновлять Insight IT <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>До новых встреч! Как оффлайн, так и онлайн <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/life/yet-another-conference-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java-программист (вакансия закрыта)</title>
		<link>http://www.insight-it.ru/life/vakansii/java-programmist-vakansiya/</link>
		<comments>http://www.insight-it.ru/life/vakansii/java-programmist-vakansiya/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 14:33:32 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Вакансии]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1331</guid>
		<description><![CDATA[В крупный тур-оператор Библио-Глобус нужен ответственный порядочный человек, умеющий работать в команде. Бизнес динамичен, крупная компания, задачи постоянно меняются. Что надо будет делать? ﻿﻿Надо будет писать на Java сервлеты и просто программы. Есть собственное API доступа к данным, через которые надо работать. В компании используются: Linux (RHEL6/CentOS5), ﻿nginx, Java, Oracle Требования к кандидату Опыт программирования от [...]]]></description>
			<content:encoded><![CDATA[<p>В крупный тур-оператор <a href="Надо будет писать на java сервлеты и просто программы. Есть собственное api доступа к данным, через которые надо работать" target="_blank">Библио-Глобус</a> нужен ответственный порядочный человек, умеющий работать в команде. Бизнес динамичен, крупная компания, задачи постоянно меняются.</p>
<h2>Что надо будет делать?</h2>
<ul>
<li>﻿﻿Надо будет писать на Java сервлеты и просто программы.</li>
<li>Есть собственное API доступа к данным, через которые надо работать.</li>
<li>В компании используются: Linux (RHEL6/CentOS5), ﻿nginx, Java, Oracle</li>
</ul>
<h2>Требования к кандидату</h2>
<ul>
<li>Опыт программирования от 3-х лет. На чем &#8212; не важно.</li>
<li>Порядочность</li>
<li>Ответственность</li>
<li>Заинтересованность в результате</li>
</ul>
<h2>Условия работы</h2>
<ul>
<li>Зарплата: 90000р. в месяц</li>
<li>Москва, офис</li>
<li>Полный рабочий день</li>
</ul>
<h2>Куда отправлять резюме?</h2>
<ul>
<li>Антонов Игорь Константинович, IT Директор</li>
</ul>
<h1>Вы опоздали, вакансия закрыта!</h1>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/life/vakansii/java-programmist-vakansiya/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>6 способов порадовать инвестора</title>
		<link>http://www.insight-it.ru/masshtabiruemost/6-sposobov-poradovat-investora/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/6-sposobov-poradovat-investora/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 21:27:00 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1310</guid>
		<description><![CDATA[&#8230;или как не надо масштабировать интернет-проекты Недавно наткнулся на полу-поучительный и полу-юмористический материал по масштабируемости интернет-проектов. Кому-то он может показаться, как и мне, забавным, а кому-то &#8212; в таком формате может оказаться легче воспринимать информацию. Надеюсь тебе тоже понравится, так что спешу поделиться как переводом, так и оригинальным видео =) На конференции O&#8217;Reilly MySQL CE 2011 [...]]]></description>
			<content:encoded><![CDATA[<h2 style="text-align: right;">&#8230;или как не надо масштабировать интернет-проекты</h2>
<p>Недавно наткнулся на полу-поучительный и полу-юмористический материал по масштабируемости интернет-проектов. Кому-то он может показаться, как и мне, забавным, а кому-то &#8212; в таком формате может оказаться легче воспринимать информацию. Надеюсь тебе тоже понравится, так что спешу поделиться как переводом, так и оригинальным видео =)<span id="more-1310"></span></p>
<p><div class="frame"><img src="http://www.insight-it.ru/wp-content/uploads/2011/04/scale-fails.jpeg" alt="" title="Scale Fails" width="628" height="250" class="alignnone size-full wp-image-1318" /></div><!-- .frame (end) --></p>
<p>На конференции <a href="http://en.oreilly.com/mysql2011/" target="_blank">O&#8217;Reilly MySQL CE 2011</a> выступил <a href="http://it.toolbox.com/people/josh_berkus/">Josh Berkus</a> c пламенной речью о том, как быть уважаемым и известным, при этом не уделяя ни капли внимания масштабируемости. Его очень сильно удивляет, почему самыми популярными, известными и инвестиционно-привлекательными интернет-компаниями становятся именно те, чей интерфейс неработающего состояния (в частности &#171;киты&#187; и &#171;роботы&#187; у <a href="/tag/twitter/" target="_blank">Twitter</a>), известен больше, чем когда они работают. Так что Josh предлагает всем придерживаться следующей стратегии:</p>
<ul>
<li><strong>Всегда следуй трендам:</strong> используй только те технологии, которые навели больше всего шумихи в Интернете: NoSQL, &#171;облака&#187;, MapReduce,Rails,RabbitMQ. Основным инструментом для выбора технологий должен быть Reddit (или Хабр, если адаптировать к российским реалиям). За что больше голосуют &#8212; то и используйте.</li>
<li><strong>Не следите за текущей ситуацией:</strong> математика и статистика &#8212; абсолютно бесполезны. Мониторинг использования ресурсов, нагрузочное тестирование, отслеживание трафика, тестирование производительности и тонкая настройка &#8212; да кому оно надо? Лучше доверять интуиции &#8212; с какими проблемами мы сталкивались на предыдущей работе, с такими же столкнемся и в этот раз</li>
<li><strong>Ни о чем не беспокойтесь:</strong> параллельное программирование не в моде, даже не смотря на то, что <a href="/tag/erlang/" target="_blank">Erlang</a> позволяет приложениям работать на кластере из тысяч серверов. Крутые ребята не заботятся об оперативной памяти и управлении потоками. Нужно не париться и использовать однопоточные приложения с кучей блокировок, игнорируя области видимости и контексты памяти. Часто обновляющиеся таблицы из одной строки и мастер-очередь, в которую попадают все задания &#8212; лучшие паттерны из всех существующих.</li>
<li><strong>Каждый запрос должен попадать напрямик в базу данных:</strong> кэширование &#8212; твой смертный враг. Каждый запрос должен идти напрямую к СУБД, ни шага в сторону!</li>
<li><strong>Масштабировать нужно невозможные вещи:</strong> масштабирование простых и очевидных вещей &#8212; для слабаков! Это совершенно не круто заниматься масштабированием веб-серверов, кэшей (хотя ими пользоваться и так категорически запрещено) и серверов предложений.</li>
<li><strong>Создавайте точки отказа:</strong> вне зависимости от того, насколько большой ваш проект, в нем обязательно должно быть место, при отказе которого перестанет работать вся система. Лучшие кандидаты на эту роль: балансировщик нагрузки, очередь задач и мастер база данных.</li>
</ul>
<p>Если следовать этим правилам, то ты станешь самым крутым и уважаемым техническим специалистом в команде: ведь у тебя всегда будут истории, где ты как настоящий герой, несмотря на все преграды, проработав все выходные напролет решил-таки поставленную задачу! В противном же случае, если твой код всегда работает и позволяет легко масштабироваться, то, парадоксально, ты будешь просто старым-добрым Васей или Петей, который просто работает и на которого никто не обращает внимания до тех пор, пока он в один прекрасный день не уволится.</p>
<p>Если все нормально с устным восприятием английского, очень рекомендую посмотреть видео &#8212; с эмоциями и более лаконичным техническим английским выглядит намного более впечатляюще:<br />
<object style="height: 390px; width: 640px"><param name="movie" value="http://www.youtube.com/v/nPG4sK_glls?version=3"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><embed src="http://www.youtube.com/v/nPG4sK_glls?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="390"></object></p>
<p><strong>Если вы еще не читаете Insight IT регулярно, настоятельно <a href="/feed" target="_blank">рекомендую подписаться на RSS</a>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/6-sposobov-poradovat-investora/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Является ли использование продукции Microsoft причиной провала MySpace?</title>
		<link>http://www.insight-it.ru/tekhnologii/yavlyaetsya-li-ispolzovanie-produkcii-microsoft-prichinojj-provala-myspace/</link>
		<comments>http://www.insight-it.ru/tekhnologii/yavlyaetsya-li-ispolzovanie-produkcii-microsoft-prichinojj-provala-myspace/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 08:37:34 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Технологии]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MySpace]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1247</guid>
		<description><![CDATA[Как известно, MySpace появилась на рынке даже несколько раньше, чем Facebook, с практически аналогичным продуктом. Но при этом на сегодняшний день Facebook &#8212; общепризнанный лидер рынка социальных сетей, а MySpace даже далеко не все слышали название. С технической точки зрения у проектов совершенно разные подходы: Facebook построен на opensource технологиях, типичный LAMP, MySpace же полностью [...]]]></description>
			<content:encoded><![CDATA[<p><div class="frame"><img class="alignnone size-full wp-image-1249" title="MySpace" src="http://www.insight-it.ru/wp-content/uploads/2011/04/myspace.jpeg" alt="" width="628" height="252" /></div><!-- .frame (end) --></p>
<p>Как известно, <a href="/tag/myspace/" target="_blank">MySpace</a> появилась на рынке даже несколько раньше, чем <a href="/tag/facebook/" target="_blank">Facebook</a>, с практически аналогичным продуктом. Но при этом на сегодняшний день Facebook &#8212; общепризнанный лидер рынка социальных сетей, а MySpace даже далеко не все слышали название. С технической точки зрения у проектов совершенно разные подходы: Facebook построен на opensource технологиях, типичный LAMP, MySpace же полностью использует стек от <a href="/tag/microsoft/" target="_blank">Microsoft</a>. Некоторое время назад в зарубежной блогосфере зародилась оживленная дискуссия на тему: а не выбор ли закрытых технологий стал основной причиной проигранной MySpace &#171;гонки&#187;  социальных сетей?<span id="more-1247"></span></p>
<p>Вопрос и правда противоречивый: с одной стороны большая часть успеха зависит от позиционирования продукта и маркетинга, с другой &#8212; техническая неповоротливость, вызванная использованием проприетарных продуктов, не позволяла развиваться так же быстро, как конкуренты. Приведу ссылки на основные &#171;очаги&#187; дискуссии на данную тему:</p>
<ul>
<li><a href="http://scobleizer.com/2011/03/24/myspaces-death-spiral-due-to-bets-on-los-angeles-and-microsoft/" target="_blank">MySpace&#8217;s Death Spiral</a></li>
<li><a href="http://highscalability.com/blog/2011/3/25/did-the-microsoft-stack-kill-myspace.html">Did The Microsoft Stack Kill MySpace?</a></li>
<li><a href="http://highscalability.com/blog/2011/3/31/8-lessons-we-can-learn-from-the-myspace-incident-balance-vis.html">8 Lessons We Can Learn From The MySpace Incident &#8212; Balance, Vision, Fearlessness</a></li>
<li><a href="http://www.intelligentspeculator.net/investment-talking/why-facebook-is-succeeding-where-myspace-has-failed/" target="_blank">Why Facebook is succeeding where Myspace has failed</a></li>
<li>HackerNews: <a href="http://news.ycombinator.com/item?id=2369271" target="_blank">раз</a> и <a href="http://apps.ycombinator.com/item?id=2369343" target="_blank">два</a></li>
</ul>
<p>Некоторые ключевые точки зрения:</p>
<ul>
<li><strong>Все интернет-компании в первую очередь технологические.</strong> Даже если основной тематикой является развлечение,  все равно оно предоставляются посредством технологий.</li>
<li><strong>Все неудачи в бизнесе не связаны с технологиями. </strong>Если менеджмент не понимает ценность каждого разработчика и не может делегировать полномочия и ответственность &#8212; проект не станет успешным. С другой стороны если разработчики не знают какие вещи являются важными для бизнеса, так как их просто не держат в курсе &#8212; это так же ничем хорошим не заканчивается.</li>
<li><strong>Нельзя мотивировать разрушение инновации.</strong> В MySpace основным источником дохода являлась рекламе Google, доход с которой напрямую зависел от количества просмотров страниц и кликов, что в результате подтолкнуло MySpace добавить дополнительные не нужные страницы ко всем действиям пользователей, что абсолютно уничтожило все юзабилити.</li>
<li><strong>Корпоративная разработка и веб-разработка &#8212; совершенно разные вещи. </strong>Не смотря на тот факт, что большинство сошлось во мнении, что ни продукция Microsoft, ни разработчики MySpace не виноваты в провале проекта,  тот факт, что между инструментами, подходами и технологиями для разработки масштабируемых интернет-проектов и корпоративных приложений имеется очень большой разрыв, очевиден. Технологии, разработанные для корпоративного рынка, не могут быть без серьезной настройки и доработки использованы в мире крупных интернет-проектов.</li>
<li><strong>Нельзя позволять обратной совместимости останавливать развитие. </strong>В MySpace этот вопрос касается в большей степени пользовательского интерфейса: пользователи сами могут его настраивать. В итоге при введении каждой новой кнопочки или технологии типа AJAX им приходилось задумываться: &#171;а не сломает ли это страницу при настройках какого-нибудь пользователя?&#187;</li>
<li><strong>Успех не вечен. </strong>Изменения нужно вводить в эксплуатацию без страха ошибиться.</li>
<li><strong>Не полагайтесь на единственного клиента. </strong>Нужно иметь набор различных источников дохода, чтобы быть от них независимыми и продолжать развиваться даже  если один из них иссяк.</li>
<li><strong>Определитесь кем вы являетесь.</strong> Когда битва проиграна, можно переключить фокус на другую нишу, где меньше конкуренции &#8212; так новый генеральный директор MySpace переориентировал проект с социальной сети на сервис по открытию для себя новой музыки. Такие решения могут сработать, а могут и нет &#8212; но в любом случае это лучше, чем просто закрыть проект.</li>
</ul>
<p>С моей точки зрения основной минус закрытых технологий &#8212; отсутствие полного контроля над всем кодом проекта, если проблемы начинаются в &#171;закрытых&#187; компонентах, то их исправление занимает нереальное количество времени, так как требует взаимодействия со сторонней компанией, которая? скорее всего? не будет торопиться решать каждую конкретную проблему и в лучшем случае её исправление будет доступно лишь в следующем релизе используемого продукта. Помимо этого, при использовании проприетарных технологий у разработчиков меньше понимания того, как работают внутри используемые технологии &#8212; никакая документация не заменит возможность &#171;залезть под капот&#187;. В случае же с Microsoft проект совсем связывает себя по рукам и ногам, так как воспользовавшись монолитным стеком чаще всего нельзя постепенно перейти на другую технологическую базу, так как это по сути сводится к полному переписыванию кода проекта, что на подобном уровне очень затруднительно. Эти и подобные вещи замедляют процесс разработки, а значит и развитие проекта &#8212; этот фактор очень важен в современном интернет-сообществе, так как, если не двигаться вперед, конкуренты догонят и перегонят очень стремительно, как в целом и случилось с MySpace.</p>
<p><strong>А какова твоя точка зрения на данную ситуацию? Может ли неудачное технологическое решение столь кардинально повлиять на успех бизнеса?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/tekhnologii/yavlyaetsya-li-ispolzovanie-produkcii-microsoft-prichinojj-provala-myspace/feed/</wfw:commentRss>
		<slash:comments>62</slash:comments>
		</item>
		<item>
		<title>Кардинальный переворот в архитектуре поиска Twitter</title>
		<link>http://www.insight-it.ru/masshtabiruemost/kardinalnyjj-perevorot-v-arkhitekture-poiska-twitter/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/kardinalnyjj-perevorot-v-arkhitekture-poiska-twitter/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 19:03:13 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[Blender]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[netty]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1149</guid>
		<description><![CDATA[Не успел я опубликовать обновление об архитектуре Twitter, как они снова перекроили половину проекта =) На этот раз к паре Ruby+Scala активно вплелись технологии из мира Java. Наибольшим изменениям подверглась подсистема поиска твитов , о которой сегодня и пойдет речь. Новая архитектура поиска твитов Backend Поиск осуществляется теперь не с помощью MySQL-кластера, а посредством версии Lucene, [...]]]></description>
			<content:encoded><![CDATA[<p>Не успел я опубликовать <a href="/masshtabiruemost/arkhitektura-twitter-dva-goda-spustya/" target="_blank">обновление об архитектуре Twitter</a>, как они снова перекроили половину проекта =) На этот раз к паре <a href="/tag/ruby/" target="_blank">Ruby</a>+<a href="/tag/scala/" target="_blank">Scala</a> активно вплелись технологии из мира <a href="/tag/java/" target="_blank">Java</a>. Наибольшим изменениям подверглась подсистема поиска твитов , о которой сегодня и пойдет речь.<span id="more-1149"></span><br />
<div class="frame"><a href="http://www.insight-it.ru/wp-content/uploads/2011/04/twits.jpg"><img title="twits" src="http://www.insight-it.ru/wp-content/uploads/2011/04/twits.jpg" alt="Twitter" width="628" height="350" /></a></div><!-- .frame (end) --></p>
<h2>Новая архитектура поиска твитов</h2>
<h3>Backend</h3>
<h2><span style="font-size: 13px; font-weight: normal;">Поиск осуществляется теперь не с помощью <a href="/tag/mysql/" target="_blank">MySQL</a>-кластера, а посредством версии <a href="/tag/lucene/" target="_blank">Lucene</a>, адаптированной для работы в реальном времени.  Разработка этой подсистемы началась весной прошлого года, но полноценно использоваться она начала лишь недавно. </span></h2>
<p><span style="font-size: 13px; font-weight: normal;">Так как поиск в Twitter является одной из самых часто используемых поисковых систем в мире (более миллиарда поисковых запросов в день), то требования к новой системе поиска были сопоставимо строгими:</span></p>
<ul>
<li>Обработка более 12000 запросов в секунду</li>
<li>Индексация потока в 1000 новых твитов в секунду</li>
<li>Задержка между написанием твита и его появлением в индексе должна быть менее 10 секунд</li>
</ul>
<p>Lucene была взята за основу, так как на сегодняшний день это одно из лучших решений для реализации поиска в мире opensource. Но в текущей ее реализации она не была приспособлена к поиску в реальном времени. Команде Twitter пришлось переписать существенную часть основных структур в памяти, особенно списки записей. При этом внешний API Lucene остался неизменным, что позволило использовать поисковые алгоритмы в практически неизменном виде. Среди основных изменений в Lucene можно выделить:</p>
<ul>
<li>значительно улучшена производительность сбора мусора;</li>
<li>структуры и алгоритмы более не используют блокировки;</li>
<li>списки записей с поддержкой обхода в обратном направлении;</li>
<li>эффективное раннее прекращение обработки запроса.</li>
</ul>
<p>Все вышеперечисленные изменения находятся в процессе публикации обратно в Lucene, какие-то прямо в основную ветку, какие-то в отдельную для поиска в реальном времени.</p>
<p>После внедрения этой системы поиск стал потреблять лишь 5% доступных ему ресурсов, что оставило приличный запас для роста даже по меркам невероятно быстро развивающегося Twitter. Новая подсистема индексации способна обрабатывать в 50 раз больше твитов в секунду, чем они получали на момент запуска, что также является очень позитивным показателем. Помимо улучшения производительности, Lucene повысила и качество поиска,  а также открыла простор для новых улучшений в этом направлении.</p>
<h3>Frontend</h3>
<p>Кардинальный переворот в этой части системы можно описать одной фразой: <a href="/tag/ror/" target="_blank">Ruby on Rails</a> заменен на Java-сервер, который они назвали <a href="/tag/blender/" target="_blank">Blender</a>.</p>
<p>За неделю до развертывания Blender, количество поисков по твитам существенно возрасло из-за #tsunami в Японии. Среднее время поиска достигало 800-900мс.</p>
<p><div class="frame alignleft"><img class="alignnone size-full wp-image-1173" title="Blender_Tsunami" src="http://www.insight-it.ru/wp-content/uploads/2011/04/Blender_Tsunami.jpg" alt="" width="400" height="234" /></div><!-- .frame (end) --></p>
<p>После введения Blender в эксплуатацию среднее время отклика 95% запросов упало втрое: до 250мс, при этом уровень использования вычислительных ресурсов на frontend серверах упал вдвое. Тот же поток запросов стало возможным обрабатывать меньшим количеством серверов.</p>
<p>Чтобы понять, откуда взялся такой прирост производительности, необходимо показать в чем были слабые стороны старого поиска на Ruby on Rails. На каждом frontend сервере было запущено фиксированное количество однопоточных Rails процессов, каждый из которых занимался следующим:<br />
<div class="icon-list icon-crank"></p>
<ul>
<li>обработкой поисковых запросов</li>
<li>синхронным обращением к серверам с индексами</li>
<li>агрегацией и составлением результатов</li>
</ul>
<p></div><!-- .icon-list (end) --></p>
<p>Они давно понимали, что синхронные запросы ведут к неэффективному использованию вычислительных ресурсов. Со временем накопилось много технически неудачных моментов, что делало все сложнее введение нового функционала и поддержание надежности системы. Blender позволил преодолеть эти функции следующим образом:<br />
<div class="icon-list icon-check"></p>
<ul>
<li><strong>Создание полностью асинхронного сервиса агрегации.</strong> Ни один поток не ждет пока осуществятся сетевые операции.</li>
<li><strong>Агрегация результатов с различных сервисов:</strong> индексы поиска в реальном времени, топа твитов и гео-информации, а также базы данных пользователей и твитов.</li>
<li><strong>Элегантная работа с зависимостями сервисов. </strong>Алгоритм обработки запросов автоматически обрабатывает зависимости между используемыми сервисами.</li>
</ul>
<p></div><!-- .icon-list (end) --></p>
<p><strong>Что же, собственно, представляет собой Blender?</strong> Это HTTP и <a href="/tag/thrift/" target="_blank">Thrift</a> сервер, разработанный на основе <a href="/tag/netty/" target="_blank">Netty</a>, масштабируемой неблокирующей клиент-серверной библиотеки на Java, позволяющей легко и быстро разрабатывать клиенты и серверы для различных протоколов. Выбор пал именно на неё, а не на аналоги (например Jetty или Mina) из-за более чистого API, детальной документации и, что более важно, так как некоторые другие сервисы в Twitter уже используют её. Интеграции с Thrift у нее не было, но этот вопрос решился написанием простого кодека, обрабатывающего сообщения на низком уровне.</p>
<p>Обработка  поисковых запросов представляет собой цепочку запросов к внутренним сервисами, обработку ответов и генерацию результата. Внутренние сервисы имеют зависимости, которые можно представить в виде ацикличного направленного графа. После топологической сортировки графа Blender получает последовательность выполнения запросов, которые назначаются к выполнению в поток Netty, что в совокупности с обработчиками событий и образует workflow обработки поисковых запросов.</p>
<h2>Заключение</h2>
<p><div class="frame alignleft"><img title="Blender_workflow" src="http://www.insight-it.ru/wp-content/uploads/2011/04/Blender_workflow.jpg" alt="Blender - схема работы" width="400" height="259" /></div><!-- .frame (end) --><br />
Эта диаграмма демонстрирует текущую архитектуру поиска с использованием Blender и Lucene: все входящие поисковые запросы проходят через аппаратный балансировщик нагрузки и попадают в Blender, где они анализируются и перераспределяются между внутренними сервисами с использованием workflow для обработки зависимостей и генерации результатов.</p>
<p>На моей памяти эти нововведения в Twitter &#8212; практически единственный случай, когда крупный успешный проект настолько кардинально поменял основную часть стека используемых технологий. Да, они получили существенный выигрыш в производительности не в ущерб масштабируемости, но не поменяли же они большую часть команды разработчиков с Ruby-программистов на Java-программистов&#8230; Понятно, что это лишь инструменты, но довольно приличная часть людей, особенно те, кто в возрасте, не способны резко переключиться с привычных технологий на что-то совершенно новое. Хотя, скорее всего, в команде Twitter особо не было разработчиков &#171;за 40&#8243;, так что для них это не было особой проблемой.</p>
<h2>Источник информации</h2>
<ul>
<li><a href="http://engineering.twitter.com/2011/04/twitter-search-is-now-3x-faster_1656.html" target="_blank">Twitter Search 3x Faster</a> (cпасибо Сергею Гуляеву за предоставленную ссылку)</li>
<li><a href="http://engineering.twitter.com/2010/10/twitters-new-search-architecture.html" target="_blank">Twitter&#8217;s New Search Architecture</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/kardinalnyjj-perevorot-v-arkhitekture-poiska-twitter/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Архитектура высоконагруженных интернет-проектов, 29 марта</title>
		<link>http://www.insight-it.ru/life/arkhitektura-vysokonagruzhennykh-internet-proektov-29-marta/</link>
		<comments>http://www.insight-it.ru/life/arkhitektura-vysokonagruzhennykh-internet-proektov-29-marta/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 14:12:28 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[highload]]></category>
		<category><![CDATA[Архитектура высоконагруженных интернет-проектов]]></category>
		<category><![CDATA[видео]]></category>
		<category><![CDATA[лекция]]></category>
		<category><![CDATA[МФТИ]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1094</guid>
		<description><![CDATA[Как и обещал выкладываю видео недавней лекции. Качество звука оставляет желать лучшего, так что выкладываю перекодированный в flv вариант и оригинал для тех, кому в онлайн плеере совсем не слышно. Презентация доступна онлайн по адресу bit.ly/highload, рекомендую смотреть на слайды параллельно с просмотром, так как на проекторе видно тоже так себе. Скачать в оригинальном формате [...]]]></description>
			<content:encoded><![CDATA[<p><div class="frame"><img src="http://www.insight-it.ru/wp-content/uploads/2011/04/highload-lecture.jpeg" alt="" title="Highload лекция" width="628" height="300" class="alignnone size-full wp-image-1242" /></div><!-- .frame (end) --><br />
Как и обещал выкладываю видео <a href="/life/otkrytaya-lekciya-o-tom-kak-rabotayut-krupnye-internet-proekty/" target="_blank">недавней лекции</a>. Качество звука оставляет желать лучшего, так что выкладываю перекодированный в flv вариант и оригинал для тех, кому в онлайн плеере совсем не слышно. Презентация доступна онлайн по адресу <a href="http://bit.ly/highload" target="_blank">bit.ly/highload</a>, рекомендую смотреть на слайды параллельно с просмотром, так как на проекторе видно тоже так себе.</p>
<p><div class="themeblvd-video"><script type="text/javascript">
	var flashvars = {};
	flashvars.player_width="628";
	flashvars.player_height="353"
	flashvars.player_id="video-yfaqjcwxkwrnhul";
	flashvars.video_name="/wp-content/uploads/video/highload.flv";
	flashvars.auto_play_on_start="Off";
	flashvars.thumb="/wp-content/uploads/video/highload.jpeg";
	flashvars.controls_color="0x888888";
	flashvars.controls_color_over="0xffffff";
	flashvars.player_color="0x000000";
	flashvars.logo_name="";
	flashvars.logo_width="100";
	flashvars.logo_height="40";
	var params = { "wmode": "transparent" };
	params.wmode = "transparent";
	params.quality = "high";	params.allowFullScreen = "true";
	params.allowScriptAccess = "always";
	params.quality="high";
	var attributes = {};
	attributes.id = "video-yfaqjcwxkwrnhul";
	swfobject.embedSWF("http://www.insight-it.ru/wp-content/themes/stealth/layout/flash/video.swf", "video-yfaqjcwxkwrnhul", "628", "383", "9.0.0", false, flashvars, params, attributes);
</script>

<div id="video-yfaqjcwxkwrnhul">
	<a href="http://www.adobe.com/go/getflashplayer">
		<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
	</a>
</div></div><!-- .themeblvd-video (end) --></p>
<p>Скачать в оригинальном формате можно здесь: <a href="/wp-content/uploads/video/highload.mp4">highload.mp4</a> или <a href="http://bit.ly/highload-video" target="_blank">http://bit.ly/highload-video</a>.</p>
<p><strong>Приятного просмотра!</strong> Если есть какие вопросы или замечания &#8212; с удовольствием готов пообщаться в комментариях к посту <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/life/arkhitektura-vysokonagruzhennykh-internet-proektov-29-marta/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Google в цифрах</title>
		<link>http://www.insight-it.ru/masshtabiruemost/google-v-cifrakh/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/google-v-cifrakh/#comments</comments>
		<pubDate>Sun, 03 Apr 2011 17:59:54 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[инфографика]]></category>
		<category><![CDATA[статистика]]></category>
		<category><![CDATA[цифры]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1087</guid>
		<description><![CDATA[Я уже давно ищу информацию для новой версии статьи про Google, которая была первым успешным постом на Insight IT &#8212; скачок в посещаемости был примерно в 50 раз. Не смотря на устаревшую статистику она по-прежнему представляет собой большую практическую пользу, рекомендую прочитать или перечитать. В процессе перерывания зарубежной части интернета в поисках более свежей информации [...]]]></description>
			<content:encoded><![CDATA[<p>Я уже давно ищу информацию для новой версии <a href="/masshtabiruemost/arkhitektura-google/" target="_blank">статьи про Google</a>, которая была первым успешным постом на <strong>Insight IT</strong> &#8212; скачок в посещаемости был примерно в 50 раз. Не смотря на устаревшую статистику она по-прежнему представляет собой большую практическую пользу, рекомендую прочитать или перечитать.</p>
<p>В процессе перерывания зарубежной части интернета в поисках более свежей информации о том, как устроен Google, наткнулся на любопытную инфографику с цифрами, которой и решил с Вами поделиться, чтобы скрасить ожидание нового поста <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<span id="more-1087"></span></p>
<p><a href="/wp-content/uploads/google-by-the-numbers.jpg" target="_blank"><img src="/wp-content/uploads/google-by-the-numbers.small.jpg" width="660" height="3183" alt="Google в цифрах" title="Google в цифрах" /></a></p>
<p><a href="http://www.infographicsshowcase.com/google-by-the-numbers-infographic/" target="_blank">Оригинал</a></p>
<p>Не забываем подписываться на <a href="/feed" target="_blank">RSS</a> <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/google-v-cifrakh/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Архитектура Stack Exchange Network</title>
		<link>http://www.insight-it.ru/masshtabiruemost/arkhitektura-stack-exchange-network/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/arkhitektura-stack-exchange-network/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 12:05:57 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[ASP .NET]]></category>
		<category><![CDATA[ASP .NET MVC]]></category>
		<category><![CDATA[Bacula]]></category>
		<category><![CDATA[Beyond Compare 3]]></category>
		<category><![CDATA[Bind]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[CruiseControl.NET]]></category>
		<category><![CDATA[DotNetOpenId]]></category>
		<category><![CDATA[Flot]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[HAProxy]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Kiln]]></category>
		<category><![CDATA[LINQ to SQL]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[MarkdownSharp]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[MS SQL Server 2008]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Pingdom]]></category>
		<category><![CDATA[Prettify]]></category>
		<category><![CDATA[Razor]]></category>
		<category><![CDATA[reCAPTCHA]]></category>
		<category><![CDATA[Redis]]></category>
		<category><![CDATA[Splunk]]></category>
		<category><![CDATA[SQL Monitor]]></category>
		<category><![CDATA[Ubuntu Server]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows Server]]></category>
		<category><![CDATA[Windows Server 2008]]></category>
		<category><![CDATA[WMD]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1075</guid>
		<description><![CDATA[Stack Exchange Network представляет собой сеть из 46 сайтов вопросов-ответов на совершенно разные темы от программирования до кулинарии. Проект вырос из известной в узких кругах тусовки программистов Stack Overflow, об архитектуре которой я уже рассказывал чуть больше года назад. Проект активно развивается и уже появилось приличное количество новой информации, которой я и спешу с Вами [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://stackexchange.com/" target="_blank">Stack Exchange Network</a> представляет собой сеть из 46 сайтов вопросов-ответов на совершенно разные темы от программирования до кулинарии. Проект вырос из известной в узких кругах тусовки программистов <a href="http://stackoverflow.com/" target="_blank">Stack Overflow</a>, об архитектуре которой <a href="/masshtabiruemost/arkhitektura-stack-overflow/" target="_blank">я уже рассказывал</a> чуть больше года назад. Проект активно развивается и уже появилось приличное количество новой информации, которой я и спешу с Вами поделиться.<br />
<span id="more-1075"></span></p>
<h2>Статистика</h2>
<ul>
<li>95 миллионов просмотров страниц в месяц</li>
<li>800 HTTP запросов в секунду</li>
<li>180 DNS запросов в секунду</li>
<li>Загруженность интернет-канала в 55 Мбит/с</li>
<li>16 миллионов уникальных пользователей в месяц</li>
</ul>
<h2>Технологии</h2>
<h3>Разработка</h3>
<ul>
<li><a href="/tag/c/" target="_blank">C#</a> &#8212; основной язык программирования</li>
<li><a href="/tag/visual-studio/">Visual Studio 2010 Team Suite</a> - IDE</li>
<li><a href="/tag/asp-net/" target="_blank">Microsoft ASP.NET 4.0</a> &#8212; framework</li>
<li><a href="/tag/asp-net-mvc/" target="_blank">ASP.NET MVC 3</a> - web Framework</li>
<li><a href="/tag/razor/" target="_blank">Razor</a> &#8212; генератор шаблонов</li>
<li><a href="/tag/jquery/" target="_blank">jQuery 1.4.2</a> &#8212; JavaScript framework</li>
<li><a href="/tag/linq-to-sql/" target="_blank">LINQ to SQL</a> и немного чистого SQL &#8212; доступ к данным</li>
<li><a href="/tag/mercurial/" target="_blank">Mercurial</a> и <a href="/tag/kiln/" target="_blank">Kiln</a> &#8212; контроль версий исходного кода</li>
<li><a href="/tag/beyond-compare/" target="_blank">Beyond Compare 3</a> &#8212; инструмент для сравнения</li>
</ul>
<h3>Программное обеспечение</h3>
<ul>
<li><a href="http://stackoverflow.com/questions/177901/what-does-wisc-stack-mean">WISC</a> стек получен условно-бесплатно с помощью <a href="http://blog.stackoverflow.com/2009/03/stack-overflow-and-bizspark/">BizSpark</a></li>
<li><a href="/tag/windows-server/" target="_blank">Windows Server</a><a href="/tag/windows-server-2008/" target="_blank">2008 R2 x64</a> &#8212; основная операционная система</li>
<li><a href="/tag/ms-sql-server-2008/" target="_blank">MS SQL Server 2008 R2</a> на <a href="/tag/windows-server-2008/" target="_blank">Windows Server 2008 Enterprise Edition x64</a> &#8212; база данных</li>
<li><a href="/tag/ubuntu-server/" target="_blank">Ubuntu Server</a></li>
<li><a href="/tag/centos/" target="_blank">CentOS</a></li>
<li><a href="/tag/iis/" target="_blank">IIS 7.0</a> &#8212; веб-сервер</li>
<li><a href="/tag/haproxy/" target="_blank">HAProxy</a> &#8212; балансировка нагрузки</li>
<li><a href="/tag/redis/" target="_blank">Redis</a> &#8212; используется как распределенная система кэширования</li>
<li><a href="/tag/cruisecontrol-net/" target="_blank">CruiseControl.NET</a> &#8212; сборки и автоматическая система развертывания кода</li>
<li><a href="/tag/lucene/" target="_blank">Lucene.NET</a> &#8212; полнотекстный поиск</li>
<li><a href="/tag/bacula/" target="_blank">Bacula</a> &#8212; резервное копирование</li>
<li><a href="/tag/nagios/" target="_blank">Nagios</a> (с плагинами <a href="http://n2rrd.diglinks.com/cgi-bin/trac.fcgi" target="_blank">n2rrd</a> и <a href="http://web.taranis.org/drraw/" target="_blank">drraw</a>) для мониторинга</li>
<li><a href="/tag/splunk/" target="_blank">Splunk</a> &#8212; сбор и агрегация логов</li>
<li><a href="/tag/sql-monitor/" target="_blank">SQL Monitor</a> от Red Gate &#8212; мониторинг SQL Server</li>
<li><a href="/tag/bind/" target="_blank">Bind</a> - DNS</li>
<li><a href="/tag/dotnetopenid/" target="_blank">DotNetOpenId</a> &#8212; реализация OpenID на .NET</li>
<li><a href="/tag/wmd/" target="_blank">WMD</a> &#8212; текстовый редактор</li>
<li><a href="/tag/prettify/" target="_blank">Prettify</a> &#8212; подсветка синтаксиса</li>
<li><a href="/tag/markdownsharp/" target="_blank">MarkdownSharp</a> &#8212; обработчик разметки Markdown на C#</li>
<li><a href="/tag/flot/" target="_blank">Flot</a> &#8212; построение графиков на JavaScript</li>
</ul>
<h3>Внешние сервисы</h3>
<ul>
<li><a href="/tag/recaptcha/" target="_blank">reCAPTCHA</a> &#8212; защита от спама</li>
<li><a href="/tag/google/analytics/" target="_blank">Google Analytics</a> &#8212; веб-аналитика</li>
<li><a href="/tag/kiln/" target="_blank">Kiln</a> &#8212; Mercurial хостинг</li>
<li><a href="/tag/pingdom/" target="_blank">Pingdom</a> &#8212; внешний мониторинг и уведомления</li>
<li>CDN не используется, его роль выполняет <a href="http://sstatic.net/">sstatic.net</a>, отдельный домен для статичных файлов SEN без cookie</li>
</ul>
<h2>Оборудование</h2>
<h3>Датацентры</h3>
<ul>
<li>1 стойка в Peak Internet, штат Орегон (чат и обнаружение данных)</li>
<li>2 стойки в Peer 1, Нью-Йорк (остальная часть SEN)</li>
</ul>
<h3>Серверы</h3>
<ul>
<li>10 веб-серверов:
<ul>
<li>Dell R610</li>
<li>1x Intel Xeon Processor E5640 @ 2.66 GHz</li>
<li>16 GB RAM</li>
<li>Windows Server 2008 R2</li>
<li>IIS</li>
</ul>
</li>
<li>2 сервера баз данных:
<ul>
<li>Dell R710</li>
<li>2x Intel Xeon Processor X5680 @ 3.33 GHz</li>
<li>64 GB RAM</li>
<li>8 жестких дисков</li>
<li>MS SQL Server 2008 R2</li>
</ul>
</li>
<li>2 виртуальных сервера для балансировки нагрузки:
<ul>
<li>1x Intel Xeon Processor E5640 @ 2.66 GHz</li>
<li>4 GB RAM</li>
<li>Ubuntu Server</li>
<li>HAProxy</li>
</ul>
</li>
<li>2 сервера для кэша:
<ul>
<li>Dell R610</li>
<li>2x Intel Xeon Processor E5640 @ 2.66 GHz</li>
<li>16 GB RAM</li>
<li>CentOS</li>
<li>Redis</li>
</ul>
</li>
<li>1 сервер для резервного копирования:
<ul>
<li>Dell R610</li>
<li>1x Intel Xeon Processor E5640 @ 2.66 GHz</li>
<li>32 GB RAM</li>
<li>Linux</li>
<li>Bacula</li>
</ul>
</li>
<li>1 сервер для мониторинга, управления и сбора логов:
<ul>
<li>Dell R610</li>
<li>1x Intel Xeon Processor E5640 @ 2.66 GHz</li>
<li>32 GB RAM</li>
<li>Linux</li>
<li>Nagios</li>
</ul>
</li>
<li>2 сервера для виртуализации:
<ul>
<li>Dell R610</li>
<li>1x Intel Xeon Processor E5640 @ 2.66 GHz</li>
<li>16 GB RAM</li>
<li>VMWare ESXi</li>
</ul>
</li>
</ul>
<h3>Сетевое оборудование</h3>
<ul>
<li>2 маршрутизатора на Linux</li>
<li>5 свитчей  Dell PowerConnect</li>
</ul>
<h3>Прочее</h3>
<ul>
<li><a href="http://www.wowwee.com/en/products/tech/telepresence/rovio/rovio">Rovio</a> &#8212; маленький робот, позволяющий удаленным разработчиком посетить офис &#171;виртуально&#187;</li>
</ul>
<h2>Команда</h2>
<ul>
<li>14 разработчиков</li>
<li>2 системных администратора</li>
</ul>
<h2>Что нового?</h2>
<ul>
<li>HAProxy стал использоваться вместо Windows NLB так как HAProxy является быстрым, нересурсоемким, бесплатным решением, которое работает. Полностью прозрачен для серверов, легче обслуживать по сравнению со старым решением, располагается на виртуальных машинах.</li>
<li>CDN не используется, так как даже &#171;недорогие&#187; решения обходятся в очень приличную сумму по сравнению с тем трафиком, который входит в тарифный план хостинг-провайдера. Самое дешевой решение CDN от Amazon обошлось бы как минимум на тысячу долларов в месяц дороже при текущем уровне использования трафика.</li>
<li>Резервное копирование на диски для быстрого восстановления и на кассеты для &#171;истории&#187;.</li>
<li>Полнотекстный поиск в SQL Server плохо интегрируется, нестабилен и обладает низким качеством результатов, так что они перешли на Lucene.</li>
<li>Все сайты в SEN теперь работают на общей платформе: используется общее оборудование и программное обеспечение.</li>
<li>Проект разделен на разные сайты для разных ниш, чтобы полностью изолировать группы аудитории, специализирующиеся в каждой конкретной области.</li>
<li>Используется агрессивное кэширование, большинство страниц кэшируются в виде HTML для анонимных пользователей средствами IIS.</li>
<li>Используется три уровня кэширования: локальный, относящийся к каждому сайту и глобальный.</li>
<li>Локальный кэш доступен только для каждой пары сайт/сервер:
<ul>
<li>Используется для уменьшения сетевых задержек, по сути просто через HttpRuntime.Cache.</li>
<li>Содержит такие вещи как пользовательские сессии, будущие обновления счетчиков просмотров страниц.</li>
<li>Располагается полностью в оперативной памяти веб-сервера.</li>
</ul>
</li>
<li>Кэш сайта доступен для каждого сервера, обрабатывающий запрос к конкретному сайту:
<ul>
<li>Большинство кэшируемых данных располагаются здесь.</li>
<li>Располагается в Redis.</li>
<li>Redis настолько быстр, что большую часть времени доступа к кэшу занимает передача данных по сети.</li>
<li>Данные сжимаются перед отправкой в Redis, так как большинство данных являются строками и у них есть масса свободных вычислительных ресурсов.</li>
<li>Использование процессорных ресурсов на серверах с Redis стремится к нулю.</li>
</ul>
</li>
<li>Глобальный кэш является общим для всех серверов и сайтов:
<ul>
<li>Личные сообщения, квоты по API и несколько других по-настоящему глобальных вещей располагаются здесь.</li>
<li>Также используется Redis.</li>
</ul>
</li>
<li>Большинство данных в кэше удаляются через заданный период времени (обычно в районе нескольких минут) и практически никогда явно не удаляются.</li>
<li>Когда требуется инвалидация кэша на уровне готовых страниц, используется система подписки внутри Redis для отправки сообщений в соответствующую часть системы кэширования.</li>
<li>Для системы ввода-вывода они выбрали Intel X25 SSD в RAID10. RAID решил многие вопросы с надежностью, а SSD показывают отличную производительностью по сравнению с FusionIO при существенно более низкой цене.</li>
<li>Стоимость лицензий используемых продуктов Microsoft составила бы 242 тысячи долларов. Но так как они используют программу BizSpark, им не пришлось платить большую часть этой суммы.</li>
<li>Сетевые карты от Broadcom заменяются на сетевые карты от Intel на основных production серверах. Это решило большинство проблем с потерями соединений, пакетов и таблицами ARP.</li>
</ul>
<h2>Источники информации</h2>
<ul>
<li><a href="http://highscalability.com/blog/2011/3/3/stack-overflow-architecture-update-now-at-95-million-page-vi.html">Stack Overflow Architecture Update &#8212; Now At 95 Million Page Views A Month</a></li>
<li><a href="http://blog.stackoverflow.com/">Stack Overflow Blog</a></li>
<li><a href="http://blog.serverfault.com/post/1432571770/">Stack Overflow’s New York Data Center</a></li>
<li><a href="http://blog.serverfault.com/post/1097492931/">Designing For Scalability of Management and Fault Tolerance</a></li>
<li><a href="http://blog.stackoverflow.com/2011/01/stack-overflow-search-now-81-less-crappy/">Stack Overflow Search — Now 81% Less Crappy</a></li>
<li><a href="http://blog.stackoverflow.com/2011/01/state-of-the-stack-2010-a-message-from-your-ceo/">State of the Stack 2010 (a message from your CEO)</a></li>
<li><a href="http://blog.stackoverflow.com/2010/01/stack-overflow-network-configuration/">Stack Overflow Network Configuration</a></li>
<li><a href="http://meta.stackoverflow.com/questions/69164/does-stackoverflow-use-caching-and-if-so-how">Does StackOverflow use caching and if so, how?</a></li>
<li><a href="http://meta.stackoverflow.com/questions/6435/how-does-stackoverflow-handle-cache-invalidation">How does StackOverflow handle cache invalidation?</a></li>
<li><a href="http://meta.stackoverflow.com/questions/10369/which-tools-and-technologies-build-the-stack-exchange-network">Which tools and technologies build the Stack Exchange Network?</a></li>
<li><a href="http://meta.stackoverflow.com/questions/2765/how-does-stack-overflow-handle-spam">How does Stack Overflow handle spam?</a></li>
<li><a href="http://blog.serverfault.com/post/our-storage-decision/">Our Storage Decision</a></li>
<li><a href="http://meta.stackoverflow.com/questions/4766/how-are-hot-questions-selected">How are “Hot” Questions Selected?</a></li>
<li><a href="http://blog.stackoverflow.com/2010/04/stack-overflow-and-dvcs/">Stack Overflow and DVCS</a></li>
<li><a href="http://chat.stackexchange.com/rooms/127/the-comms-room">Server Fault Chat Room</a></li>
</ul>
<p><strong>Спасибо за внимание! Для оперативного получения свежей информации о <a href="/highload" target="_blank">высоконагруженных интернет-проектах</a> рекомендую <a href="/feed" target="_blank">подписаться на RSS</a>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/arkhitektura-stack-exchange-network/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Открытая лекция о том, как работают крупные интернет-проекты</title>
		<link>http://www.insight-it.ru/life/otkrytaya-lekciya-o-tom-kak-rabotayut-krupnye-internet-proekty/</link>
		<comments>http://www.insight-it.ru/life/otkrytaya-lekciya-o-tom-kak-rabotayut-krupnye-internet-proekty/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 14:05:20 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1066</guid>
		<description><![CDATA[На следующей неделе во вторник я выступаю в МФТИ с открытой лекцией на тему &#171;Архитектура высоконагруженных интернет-проектов&#187;. Буду рассказывать об общих подходах к построению крупных проектов с примерами из накопившейся у меня информации. Среди запланированных моментов: Балансировка нагрузки Масштабирование: горизонтальное vs вертикальное Разбиение и целостность данных Репликация и резервное копирование Кэширование Если у Вас есть [...]]]></description>
			<content:encoded><![CDATA[<p>На следующей неделе во вторник я выступаю в <a href="http://www.mipt.ru" target="_blank">МФТИ</a> с открытой лекцией на тему <strong>&#171;Архитектура высоконагруженных интернет-проектов&#187;</strong>.</p>
<p>Буду рассказывать об общих подходах к построению крупных проектов с примерами из <a href="/highload" target="_blank">накопившейся у меня информации</a>.</p>
<p>Среди запланированных моментов:</p>
<ul>
<li>Балансировка нагрузки</li>
<li>Масштабирование: горизонтальное vs вертикальное</li>
<li>Разбиение и целостность данных</li>
<li>Репликация и резервное копирование</li>
<li>Кэширование</li>
</ul>
<p>Если у Вас есть свой проект и Вы уже начали сталкиваться с техническими трудностями, или у Вас есть идея, но не знаете с чего начать &#8212; приходите, расскажу что делать, можно даже обсудить конкретно Ваш кейс.</p>
<p>В форме регистрации очень желательно задать любые вопросы по теме и рассказать о своих проектах, постараюсь учесть их в программе лекции или ответить Вам лично.</p>
<h2>Регистрация закрыта</h2>
<p>Если Вы уже в теме и обзорное выступление Вам не интересно, то можете приезжать просто пообщаться. <em>Зовите друзей, коллег и знакомых вживую и через социальные сети <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<p>Лекция будет проходить 29 марта, в 18:30 в Лабораторном корпусе МФТИ, как добраться, можно узнать <a href="http://mipt.ru/institute/address1.html" target="_blank">здесь</a>. Внутри здания: Актовый зал, второй этаж и прямо.</p>
<p>Для прохода в здание регистрация обязательна, нужно иметь при себе документ, удостоверяющий личность.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/life/otkrytaya-lekciya-o-tom-kak-rabotayut-krupnye-internet-proekty/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Аналитика в реальном времени от Facebook</title>
		<link>http://www.insight-it.ru/tekhnologii/analitika-v-realnom-vremeni-ot-facebook/</link>
		<comments>http://www.insight-it.ru/tekhnologii/analitika-v-realnom-vremeni-ot-facebook/#comments</comments>
		<pubDate>Thu, 24 Mar 2011 16:14:38 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Технологии]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[HBase]]></category>
		<category><![CDATA[Insights]]></category>
		<category><![CDATA[Ptail]]></category>
		<category><![CDATA[Puma]]></category>
		<category><![CDATA[Scribe]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1062</guid>
		<description><![CDATA[HBase в Facebook завоевывает все более и более крепкие позиции, в прошлый раз я рассказывал о применении HBase в роли системы хранения данных для их новой системы обмена сообщений. Вторым продуктом, который теперь полноценно использует данную технологию, является система сбора и обработки статистики в реальном времени под названием Insights. Социальные кнопки (см. слева от поста) [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/tag/hbase/" target="_blank">HBase</a> в <a href="/tag/facebook/" target="_blank">Facebook</a> завоевывает все более и более крепкие позиции, в прошлый раз я рассказывал о применении HBase в роли системы хранения данных для их новой системы обмена сообщений. Вторым продуктом, который теперь полноценно использует данную технологию, является система сбора и обработки статистики в реальном времени под названием Insights. Социальные кнопки (см. слева от поста) стали одним из основных источников трафика для многих сайтов, новая система аналитики позволит владельцам сайтов и страниц лучше понимать как пользователи взаимодействуют и оптимизировать свои интернет-ресурсы, основываясь на данных в реальном времени. Итак, 20 миллиардов событий в день (200 тысяч в секунду) с задержкой не более 30 секунд, как же можно этого достичь?<span id="more-1062"></span><br />
<img class="alignnone size-full wp-image-1196" title="facebook analytics" src="http://www.insight-it.ru/wp-content/uploads/2011/03/facebook-analytics.jpg" alt="" width="628" height="181" /></p>
<h2>Цели сервиса</h2>
<ul>
<li>Дать пользователям надежные счетчики в реальном времени по ряду метрик</li>
<li>Предоставлять анонимные данных &#8212; нельзя узнать кто конкретно были эти люди</li>
<li>Продемонстрировать ценность социальных плагинов и виджетов. Что они дают сайту или бизнесу?</li>
<li>Концепция воронки: сколько людей увидело плагин, сколько совершило действие, сколько было привлечено пользователей обратно на интернет-ресурс</li>
<li>Сделать данные более оперативными: сокращение частоты обновлений с 48 часов до 30 секунд</li>
</ul>
<h2>Задачи</h2>
<ul>
<li>Множество типов метрик, более 100: показы, лайки, просмотры и клики в новостной ленте, демография и.т.д.</li>
<li>Большой поток данных: 20 миллиардов событий в день</li>
<li>Неравномерное распределение данных: за большинство контента практически не голосуют, но некоторые материалы набирают просто невероятное количество лайков</li>
</ul>
<h2>Неудавшиеся попытки</h2>
<h2>MySQL</h2>
<ul>
<li>В каждой строке идентификатор и значение счетчика</li>
<li>Привело к очень высокой активности в СУБД</li>
<li>Статистика считается за каждые сутки, создание новых счетчиков в полночь приводило к большому скачку операций записи</li>
<li>Пришлось пробовать искать способы решать проблему распределения счетчиков, пробовали учитывать временные зоны пользователей</li>
<li>Пики операций записи неминуемо вели к блокировкам</li>
<li>Решение оказалось не очень хорошо подходящим для данной конкретной задачи</li>
</ul>
<h2>Счетчики в памяти</h2>
<ul>
<li>Казалось бы: если столкнулись с проблемами ввода-вывода &#8212; надо перенести все в память</li>
<li>Никаких проблем с масштабируемостью &#8212; счетчики находятся в памяти, обновление практически мгновенно, легко распределить по серверам</li>
<li>Но на практике оказалось, что при таком подходе теряется точность, видимо из-за неатомарности операций или других последствий столь прямолинейной реализации, подробностей нет</li>
<li>Погрешность даже в 1% посчитали неприемлемой и от данного варианта отказались</li>
</ul>
<h2>MapReduce</h2>
<ul>
<li>Предыдущий вариант реализации был создан с помощью <a href="/tag/hadoop/" target="_blank">Hadoop</a> + <a href="/tag/hive/" target="_blank">Hive</a></li>
<li>Подход гибкий, легко справляется с большим входящим потоком информации и объемами данным</li>
<li>Основной минус: даже близко не в реальном времени, слишком комплексная система</li>
</ul>
<h2>Cassandra</h2>
<ul>
<li>Вариант с <a href="/tag/cassandra/" target="_blank">Cassandra</a> рассматривался, но так и не был реализован</li>
<li>Причины были опубликованы достаточно сомнительные: высокие требования к доступности данных и производительности записи</li>
<li>По всем данным у Cassandra нет абсолютно никаких проблем ни с одним, ни с другим</li>
</ul>
<h1>Победитель: HBase + Scribe + Ptail + Puma</h1>
<p>В целом система, на которой остановился выбор, выглядит следующим образом:</p>
<ul>
<li>HBase хранит все данные на распределенном кластере</li>
<li>Используется система логов, новые данные дописываются в конец</li>
<li>Система обрабатывает события и записывает результат в хранилище</li>
<li>Пользовательский интерфейс забирает данные из хранилища и отображает пользователям</li>
</ul>
<p>Как обрабатывается один запрос:</p>
<ul>
<li>Пользователь жмет на кнопку Like</li>
<li>Браузер инициирует AJAX запрос к серверу Facebook</li>
<li>Запрос записывается в лог в HDFS с помощью Scribe</li>
<li>Ptail &#8212; внутренний инструмент для чтения данных из нескольких Scribe-логов, на выходе данные разделяются на три потока, которые отправляются в разные кластеры в разных датацетрах:
<ul>
<li>Просмотры плагинов и виджетов</li>
<li>Просмотры в новостной ленте</li>
<li>Действия (плагины + новостная лента)</li>
</ul>
</li>
<li>Puma &#8212; механизм для пакетной записи данных в HBase для снижения влияния &#171;горячих&#187; материалов:
<ul>
<li>HBase может справиться с очень большим потоком операций записи, но популярные материалы могут заставить упереться во ввод-вывод даже её</li>
<li>В среднем пакет запросов собирается в течении 1.5 секунд, хотелось бы больше &#8212; но из-за огромного количества URL очень быстро заканчивается оперативная память</li>
</ul>
</li>
<li>Отображение данных пользователю:
<ul>
<li>Сам код для отображения написан на <a href="/tag/php/" target="_blank">PHP</a></li>
<li>Работа с HBase осуществляется из <a href="/tag/java/" target="_blank">Java</a></li>
<li>Для взаимодействия по традиции используется <a href="/tag/thrift/" target="_blank">Thrift</a></li>
</ul>
</li>
<li>Система кэширования используется для ускорения отображения страниц:
<ul>
<li>Чем более старые данные запрашиваются, тем реже они пересчитываются</li>
<li>Многое зависит от типа запрашиваемой статистики</li>
</ul>
</li>
<li>MapReduce:
<ul>
<li>Данные передаются для дальнейшего анализа с помощью Hive</li>
<li>Сами логи удаляются через какой-то период времени</li>
<li>Помимо этого старая система анализа статистики все еще в действии, она используется для регулярных проверок результатов новой системы, а также в роли запасного плана, если что-то пойдет не так</li>
</ul>
</li>
</ul>
<h2>О проекте</h2>
<ul>
<li>Продолжительность 5 месяцев</li>
<li>2 с половиной разработчика самой системы</li>
<li>2 разработчика пользовательского интерфейса</li>
<li>Всего было задействовано около 14 человек, включая менеджмент, дизайнера и системных администраторов</li>
</ul>
<h2>Направления развития</h2>
<ul>
<li>Списки популярных материалов: при текущем подходе их составление является сложной задачей</li>
<li>Отдельные пользовательские счетчики</li>
<li>Обобщение приложения для использования с другими сервисами, а не только с социальными плагинами</li>
<li>Распределение системы на несколько датацентров</li>
</ul>
<h2>Подводим итоги</h2>
<p>У новых систем аналитики и сообщений много общего: большой поток входящих данных для записи, HBase и требование работы в реальном времени. Facebook делает ставку на HBase, Hadoop и HDFS, не смотря на громоздкость системы, когда другие предпочитают Cassandra из-за её простой схемы масштабирования, поддержку нескольких датацентров и легкость в использовании. Какой путь окажется выигрышным &#8212; покажет время.</p>
<h2>Источники информации</h2>
<ul>
<li><a href="http://highscalability.com/blog/2011/3/22/facebooks-new-realtime-analytics-system-hbase-to-process-20.html">Facebook&#8217;s New Realtime Analytics System: HBase To Process 20 Billion Events Per Day</a></li>
<li><a href="http://www.facebook.com/note.php?note_id=10150103900258920" target="_blank">Building Realtime Insights</a> (<a href="http://www.facebook.com/video/video.php?v=707216889765&amp;oid=9445547199&amp;comments" target="_blank">видео</a>)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/tekhnologii/analitika-v-realnom-vremeni-ot-facebook/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Архитектура Одноклассников</title>
		<link>http://www.insight-it.ru/masshtabiruemost/arkhitektura-odnoklassnikov/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/arkhitektura-odnoklassnikov/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 21:17:30 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[BerkleyDB]]></category>
		<category><![CDATA[C. GWT]]></category>
		<category><![CDATA[IPVS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Jboss]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[LVS]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[openSUSE]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Архитектура Одноклассников]]></category>
		<category><![CDATA[Одноклассники]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1048</guid>
		<description><![CDATA[Сегодня представители Одноклассников расскали о накопленном за 5 лет опыте по поддержанию высоконагруженного проекта. Была опубликована довольно детальная информация о том, как устроена эта социальная сеть для аудитории &#171;постарше&#187;. Далее можно прочитать мою версию материала, либо перейти на оригинал по сссылке. &#160; Платформа Windows и openSUSE &#8212; основные операционные системы Java &#8212; основной язык программирования [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-1199" title="odnoklassniki" src="http://www.insight-it.ru/wp-content/uploads/2011/03/odnoklassniki.jpeg" alt="" width="628" height="451" /><br />
Сегодня представители <a href="http://www.odnoklassniki.ru" target="_blank">Одноклассников</a> расскали о накопленном за 5 лет опыте по поддержанию высоконагруженного проекта. Была опубликована довольно детальная информация о том, как устроена эта социальная сеть для аудитории &#171;постарше&#187;. Далее можно прочитать мою версию материала, либо перейти на оригинал <a href="http://habrahabr.ru/company/odnoklassniki/blog/115881/" target="_blank">по сссылке</a>.</p>
<p>&nbsp;<br />
<span id="more-1048"></span></p>
<h2>Платформа</h2>
<ul>
<li><a href="/tag/windows/" target="_blank">Windows</a> и <a href="/tag/opensuse/" target="_blank">openSUSE</a> &#8212; основные операционные системы</li>
<li><a href="/tag/java/" target="_blank">Java</a> &#8212; основной язык программирования</li>
<li><a href="/tag/c/" target="_blank">С/С++</a> &#8212; для некоторых модулей</li>
<li><a href="/tag/gwt/" target="_blank">GWT</a> &#8212; реализация динамического веб-интерфейса</li>
<li><a href="/tag/tomcat/" target="_blank">Apache Tomcat</a> &#8212; сервера приложений</li>
<li><a href="/tag/jboss/" target="_blank">JBoss 4</a> &#8212; сервера бизнес-логики</li>
<li><a href="/tag/lvs/" target="_blank">LVS</a> и <a href="/tag/ipvs/" target="_blank">IPVS</a> &#8212; балансировка нагрузки</li>
<li><a href="/tag/mssql/" target="_blank">MS SQL 2005 и 2008</a> &#8212; основная СУБД</li>
<li><a href="/tag/berkleydb/" target="_blank">BerkleyDB</a> &#8212; дополнительная СУБД</li>
<li><a href="/tag/lucene/" target="_blank">Apache Lucene</a> &#8212; индексация и поиск текстовой информации</li>
</ul>
<h2>Статистика</h2>
<ul>
<li>До 2.8 млн. пользователей онлайн в часы пик</li>
<li>7,5 миллиардов запросов в день (150 000 запросов в секунду в часы пик)</li>
<li>2 400 серверов и систем хранения данных, из которых 150 являются веб-серверами</li>
<li>Сетевой трафик в час пик: 32 Gb/s</li>
</ul>
<h2>Оборудование</h2>
<p>Сервера используются двухпроцессорные с 4 ядрами, объемом памяти от 4 до 48 Гб. В зависимости от роли сервера данные хранятся либо в памяти, либо на дисках, либо на внешних системах хранения данных.</p>
<p>Все оборудование размещено в 3 датацентрах, объединенных в оптическое кольцо. На данный момент на каждом из маршрутов пропускная способность составляет 30Гбит/с. Каждый из маршрутов состоит из физически независимых друг от друга оптоволоконных пар, которые агрегируются в общую “трубу” на корневых маршрутизаторах.</p>
<p>Сеть физически разделена на внутреннюю и внешнюю, разные интерфейсы серверов подключены в разные коммутаторы и работают в разных сетях. По внешней сети HTTP сервера, общаются с Интернетом, по внутренней сети все сервера общаются между собой. Топология внутренней сети – звезда. Сервера подключены в L2 коммутаторы (access switches), которые, в свою очередь, подключены как минимум двумя гигабитными линками к aggregation стеку маршрутизаторов. Каждый линк идет к отдельному коммутатору в стеке. Для того, чтобы эта схема работала, используеться протокол <a href="http://ru.wikipedia.org/wiki/RSTP">RSTP</a>. При необходимости, подключения access коммутаторов к agregation стеку осуществляются более чем двумя линками с использованием link aggregation портов. Aggregation коммутаторы подключены 10Гб линками в корневые маршрутизаторы, которые обеспечивают как связь между датацентрами, так и связь с внешним миром. Используются коммутаторы и маршрутизаторы от компании Cisco.</p>
<p>Для связи с внешним миром используются прямые подключения с несколькими крупнейшими операторами связи, общий сетевой трафик в часы пик доходит до 32Гбит/с.</p>
<h2>Архитектура</h2>
<p>Архитектура проекта имеет традиционную многоуровневую структуру:</p>
<ul>
<li>презентационный уровень;</li>
<li>уровень бизнес-логики;</li>
<li>уровень кэширования;</li>
<li>уровень баз данных;</li>
<li>уровень инфраструктуры (логирование, конфигурация и мониторинг).</li>
</ul>
<p>Код проекта в целом написан на Java, но есть исключения в виде модулей для кэширования на C и C++.<br />
Java был выбран так как он является удобным языком для разработки, доступно множество наработок в различных сферах, библиотек и opensource проектов.</p>
<h3>Презентационный уровень</h3>
<ul>
<li>Используем собственный фреймворк, позволяющий строить композицию страниц на языке Jаvа, с использованием собственные GUI фабрик (для оформления текста, списков, таблиц и портлетов).</li>
<li>Страницы состоят из независимых блоков (обычно портлетов), что позволяет обновлять информацию на них частями с помощью AJAX запросов.</li>
<li>При данном подходе одновременно обеспечивается минимум перезагрузок страниц для пользователей с включенным JavaScript, так и полная работоспособность сайта для пользователей, у которых он отключен.</li>
<li>Google Web Toolkit используется для реальзации функциональные компонент, таких как Сообщения, Обсуждения и Оповещения, а также все динамических элементов (меню шорткатов, метки на фотографиях, сортировка фотографий, ротация подарков и.т.д.). В GWT используются UIBinder и HTMLPanel для создания интерфейсов.</li>
<li>Кешируются все внешние ресурсы (Expires и Cache-Control заголовки). CSS и JavaScript файлы минимизируются и сжимаются (gzip).</li>
<li>Для уменьшения количества HTTP запросов с браузера, все JavaScript и CSS файлы объединяются в один. Маленькие графические изображения объединяются в спрайты.</li>
<li>При загрузке страницы скачиваются только те ресурсы, которые на самом деле необходимы для начала работы.</li>
<li>Никаких универсальных CSS селекторов. Стараются не использовать типовые селекторы (по имени тэга), что повышает скорость отрисовки страниц внутри браузера.</li>
<li>Если необходимы CSS expressions, то пишутся «одноразовые». По возможности избегаются фильтры.</li>
<li>Кешируется обращения к DOM дереву, а так же свойства элементов, приводящие к reflow. Обновляется DOM дерево в «оффлайне».</li>
</ul>
<h2>Уровень бизнес-логики</h2>
<p>На уровне бизнес логики располагаются около 25 типов серверов и компонентов, общающихся между собой через удаленные интерфейсы. Каждую секунду происходит около 3 миллионов удаленных запросов между этими модулями.<br />
Сервера на уровне бизнес логики разбиты на группы. Каждая группа обрабатывает различные события. Есть механизм маршрутизации событий, то есть любое событие или группу событий можно выделить и направить на обработку на определенную группу серверов. При общении серверов между собой используется свое решение, основанное на <a href="http://www.jboss.org/jbossremoting">JBoss Remoting</a>.</p>
<h2>Уровень кэширования</h2>
<p>Для кэширования данных используется самописный модуль odnoklassniki-cache. Он предоставляет возможность хранения данных в памяти средствами Java Unsafe. Кэшируются все данные, к которым происходит частое обращение, например: профили пользователей, списки участников сообществ, информация о самих сообществах, граф связей пользователей и групп, праздники, мета информация о фотографиях и многое другое.Для хранения больших объемов данных в памяти используется память Java off heap memory для снятия ненужной нагрузки с сборщика мусора. Кеши могут использовать локальный диск для хранения данных, что превращает их в высокопроизводительный сервер БД. Кеш сервера, кроме обычных операций ключ-значение, могут выполнять запросы по данным, хранящимся в памяти, минимизируют таким образом передачу данных по сети. Используется map-reduce для выполнения запросов и операций на кластере. В особо сложных случаях, например для реализации запросов по социальному графу, используется язык C. Это помогает повысить производительность.</p>
<p>Данные распределяются между кластерами кеш серверов, а также используется репликация партиций для обеспечения надежности. Иногда требования к быстродействию настолько велики, что используются локальные короткоживущие кеши данных полученных с кеш серверов, расположенные непосредственно в памяти серверов бизнес логики.</p>
<p>Для примера, один сервер, кэширующий граф связей пользователей, в час пик может обработать около 16 600 запросов в секунду. Процессоры при этом заняты до 7%, максимальный load average за 5 минут — 1.2. Количество вершин графа &#8212; более 85 миллионов, связей 2.5 миллиарда. В памяти граф занимает 30 GB.</p>
<h2>Уровень баз данных</h2>
<p>Суммарный объем данных без резервирования составляет 160Тб. Используются два решения для хранения данных: MS SQL и BerkeleyDB. Данные хранятся в нескольких копиях, в зависимости от их типа от двух до четырех. Полное резервное копирование всех данных осуществляется раз в сутки, плюс каждые 15 минут делаются резервные копии новых данных. В результате максимально возможная потеря данных составляет 15 минут.</p>
<p>Сервера с MS SQL объединены в failover кластера, при выходе из строя одного из серверов, находящийся в режиме ожидания сервер берет на себя его функции. Общение с MS SQL происходит посредством JDBC драйверов.</p>
<p>Используются как вертикальное, так и горизонтальное разбиение данных, т.е. разные группы таблиц располагаются на разных серверах (вертикальное партиционирование), а данные больших таблицы дополнительно распределяются между серверами (горизонтальное партиционирование). Встроенный в СУБД аппарат партиционирования не используется — весь процесс реализован на уровне бизнес-логики. Распределенные транзакции не используются — всё только в пределах одного сервера. Для обеспечения целостности, связанные данные помещаются на один сервер или, если это невозможно, дополнительно разработывается логика обеспечения целостности данных. В запросах к БД не используются JOIN даже среди локальных таблиц для минимизации нагрузки на CPU. Вместо этого используется денормализация данных или JOIN происходят на уровне бизнес сервисов, что позволяет осуществлять JOIN как с данными из баз данных, так и с данными из кэша. При проектировании структуры данных не используются внешние ключи, хранимые процедуры и триггеры. Опять же для снижения потребления вычислительных ресурсов на серверах баз данных.<br />
SQL операторы DELETE также используются с осторожностью — это самая тяжелая операция. Данные удаляются чаще всего через маркер: запись сначала отмечается как удаленная, а потом удаляется окончательно с помощью фонового процесса. Широко используются индексы, как обычные, так и кластерные. Последние для оптимизации наиболее высокочастотных запросов в таблицу.</p>
<p>Используется C реализация BerkleyDB версии 4.5. Для работы с BerkleydDB используется своя библиотека, позволяющая организовывать двухнодовые master-slave кластера с использованием родной BDB репликация. Запись происходит только в master, чтение происходит с обеих нод. Данные хранятся в tmpfs, transaction логи сохраняются на дисках. Резервная копия логов делается каждые 15 минут. Сервера одного кластера размещены на разных лучах питания дабы не потерять обе копии одновременно. Помимо прочего, BerkleyDB используется и в роли очереди заданий.</p>
<p>Внутри системы используется взвешенный round robin, а также вертикальное и горизонтальное разбиение данных как на уровне СУБД, так и на уровне кэширования.</p>
<p>В разработке новое решение для хранения данных, так как необходим еще более быстрый и надежный доступ к данным.</p>
<h2>Уровень инфраструктуры</h2>
<p>Для агрегации статистики используется собственная библиотека, основанная на log4j. Сохраняется такая информация, как количество вызовов, среднее, максимальное и минимальное время выполнения, количество ошибок. Данные сохраняются во временные базы, но раз в минуту данные переносятся из них в общий склад данных (data warehouse), а временные базы очищаются. Сам склад реализован на базе решений от Microsoft: MS SQL 2008 и сиситема генерации отчетов Reporting Services. Он расположен на 13 серверах, находящихся в отдельной от production среде. Некоторые из них отвечают за статистику в реальном времени, а некоторые за ведение и предоставление доступа к архиву. Общий объем статистических данных составляет 13Тб. Планируется внедрение многомерного анализа статистики на основе OLAP.</p>
<p>Управление сервисами происходит через самописную централизованную систему конфигурации. Через веб-интерфейс доступно изменение расположения портлетов, конфигурацим кластеров, измениние логики сервисов и прочее. Вся конфигурация сохраняется в базе данных. Каждый из серверов периодически проверяет, есть ли обновления для приложений, которые на нем запущены, и, если есть, применяет их.</p>
<p>Мониторинг логически разделен на две части:</p>
<ul>
<li>Мониторинг сервисов и компонентов</li>
<li>Мониторинг ресурсов, оборудования и сети</li>
</ul>
<p>Система мониторинга сервисов также самописная и основывается на оперативных данных с упомянутого выше склада. Мониторинг ресурсов и здоровья оборудования же онован на Zabbix, а статстистика по использованию ресурсов серверов и сети накапливаетя в Cacti. Для предпринятия мер по устранению чрезвычайных ситуаций работают дежурные, которые следят за всеми основными параметрами. Оповещения о наиболее критичных аномалиях приходят по смс, остальные оповещения отсылаются по емейлу.</p>
<h2>Команда</h2>
<p>Над проектом работают около 70 технических специалистов:</p>
<ul>
<li>40 разработчиков;</li>
<li>20 системных администраторов и инженеров;</li>
<li>8 тестеров.</li>
</ul>
<p>Все разработчики разделены на небольшие команды до 3х человек. Каждая из команд работает автономно и разрабатывает либо какой-то новый сервис, либо работает над улучшением существующих. В каждой команде есть технический лидер или архитектор, который ответственен за архитектуру сервиса, выбор технологий и подходов. На разных этапах к команде могут примыкать дизайнеры, тестеры и системные администраторы.</p>
<p>Разработка ведется итерациями в несколько недель. Как пример жизненного цикла разработки можно привести 3х недельный цикл:</p>
<ol>
<li>определение архитектуры;</li>
<li>разработка, тестирование на компьютерах разработчиков;</li>
<li>тестирование на pre-production среде, релиз на production среду.</li>
</ol>
<p>Практически весь новый функционал делается «отключаемым», типичный процесс запуска новой функциональной возможности:</p>
<ul>
<li>Функционал разрабатывается и попадает в production релиз;</li>
<li>Через централизованную систему конфигурации функционал включается для небольшой части пользователей;</li>
<li>Анализируется статистика активности пользователей, нагрузка на инфраструктуру;</li>
<li>Если предыдущий этап прошел успешно, функционал включается постепенно для все большей аудитории;</li>
<li>Если в процессе запуска собранная статистика выглядет неудовлетворительно, либо непозволительно вырастает нагрузка на инфраструктуру, то функционал отключается, анализируются причины, исправляются ошибки, происходит оптимизация и все повторяется с начала.</li>
</ul>
<h2>Подводим итоги</h2>
<ul>
<li>В отличии от остальных популярных социальных сетей в Одноклассниках используются технологии, рассчитанные в первую очередь на корпоративный рынок, начиная от обоих СУБД и заканчивая операционными системами.</li>
<li>Во многом этот факт обсулавливает комплексный подход к генерации пользовательского интерфейса, не слишком высокую производительность и многие другие особенности этой социальной сети.</li>
<li>Использование &#171;тяжелых&#187; технологий с самого начала оставило Одноклассники с большим количеством доставшегося по наследству от ранних версий устаревшего кода и купленных давно лицензий на проприетарный софт, которые выступают в роли оков, от которых довольно сложно избавиться.</li>
<li>Возможно эти факторы и являются одними из основных препятствий на пути к завоеванию большей доли рынка и быстрому развитию платформы как в функциональном, так и техническом плане.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/arkhitektura-odnoklassnikov/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Реальная ситуация в мире языков программирования</title>
		<link>http://www.insight-it.ru/programmirovanie/realnaya-situaciya-v-mire-yazykov-programmirovaniya/</link>
		<comments>http://www.insight-it.ru/programmirovanie/realnaya-situaciya-v-mire-yazykov-programmirovaniya/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 00:29:25 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1041</guid>
		<description><![CDATA[Наверняка у всех &#171;гражданских&#187; на слуху сплошные PHP да C++, но на них все, естественно, не заканчивается. Популярность языков программирования можно объяснить массой причин, начиная от &#171;так исторически сложилось&#187; и заканчивая, скажем, условно низким порогом входа. Но далеко не всегда лучшие технологии становятся мэйнстримом, по крайней мере в первые годы, а то и десятилетия, их [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.insight-it.ru/wp-content/uploads/2011/03/programming.jpeg" alt="" title="programming" width="628" height="421" class="alignnone size-full wp-image-1202" /><br />
Наверняка у всех &#171;гражданских&#187; на слуху сплошные PHP да C++, но на них все, естественно, не заканчивается. Популярность языков программирования можно объяснить массой причин, начиная от &#171;так исторически сложилось&#187; и заканчивая, скажем, условно низким порогом входа. Но далеко не всегда лучшие технологии становятся мэйнстримом, по крайней мере в первые годы, а то и десятилетия, их существования.</p>
<p>Так как нас <a href="/life/wordpress/nebolshojj-soc-opros/" target="_blank">здесь много разработчиков собралось</a>, давайте составим рейтинг самых распространенных и перспективных языков программирования. Посмотрим на реальную ситуацию на сегодняшний день &#8212; какие языки сейчас широко распространены, какие заслуживают более детального внимания, а в каких мы видим перспективы.</p>
<p>Для просмотра результатов и участия в опросе &#8212; прошу под кат. В комментариях предлагаю устроить маленький холивар и обсудить сферы применения каждого из языков на практике <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <span id="more-1041"></span></p>
<div style="float:left; width:33%;">[poll id="16"]</div>
<div style="float:left; width:34%;">[poll id="17"]</div>
<div style="float:left; width:33%;">[poll id="18"]</div>
<div style="float:left; width:100%;">&nbsp;</div>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/programmirovanie/realnaya-situaciya-v-mire-yazykov-programmirovaniya/feed/</wfw:commentRss>
		<slash:comments>43</slash:comments>
		</item>
		<item>
		<title>Архитектура Dropbox</title>
		<link>http://www.insight-it.ru/masshtabiruemost/arkhitektura-dropbox/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/arkhitektura-dropbox/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 15:57:55 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[ctypes]]></category>
		<category><![CDATA[Dropbox]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[py2app]]></category>
		<category><![CDATA[py2exe]]></category>
		<category><![CDATA[PyObjC]]></category>
		<category><![CDATA[PyWin32]]></category>
		<category><![CDATA[Twisted]]></category>
		<category><![CDATA[wxPython]]></category>
		<category><![CDATA[Архитектура Dropbox]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=1017</guid>
		<description><![CDATA[Совсем недавно я написал практически совсем не технический пост про Dropbox, а тут совершенно случайно наткнулся-таки на техническое выступление их сотрудника на PyCon 2011, которая прошла меньше недели назад. Как не трудно догадаться, залогом успеха Dropbox с технической точки зрения оказался Python. Как же Python оказался в сердце бизнес-модели Dropbox? Dropbox &#8212; это самый простой [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-1018" style="float: left; margin: 2em 1em;" title="Dropbox Logo" src="http://www.insight-it.ru/wp-content/uploads/2011/03/logo.png" alt="Dropbox" width="231" height="60" />Совсем недавно я написал практически совсем не технический пост <a href="/masshtabiruemost/dropbox/" target="_blank">про Dropbox</a>, а тут совершенно случайно наткнулся-таки на техническое выступление их сотрудника на PyCon 2011, которая прошла меньше недели назад. Как не трудно догадаться, залогом успеха Dropbox с технической точки зрения оказался <a href="/tag/python/" target="_blank">Python</a>. Как же Python оказался в сердце бизнес-модели Dropbox? <span id="more-1017"></span> <strong><a href="http://db.tt/4TDAr1L" target="_blank"></a></strong></p>
<h2><strong><a href="http://db.tt/4TDAr1L" target="_blank">Dropbox</a> &#8212; это самый простой способ&#8230;</strong></h2>
<ul>
<li>Хранить файлы в безопасном месте</li>
<li>Делиться файлами с другими людьми</li>
<li>Постоянно иметь к ним доступ вне зависимости от своего месторасположения</li>
</ul>
<h2><strong>Взрывной рост</strong></h2>
<ul>
<li>1 миллион файлов сохраняются в Dropbox каждые 15 минут (по презентации это больше, чем твитов в Twitter за тот же период времени, но это <a href="http://www.insight-it.ru/masshtabiruemost/arkhitektura-twitter-dva-goda-spustya/" target="_blank">несколько преувеличено</a>)</li>
<li>Одно из самых скачиваемых приложений, уступает лишь Skype</li>
<li>Важная часть жизни многих пользователей: &#171;не могу жить без этого&#187;</li>
<li>Рост обеспечен &#171;сарафанным радио&#187;, практически без рекламы</li>
</ul>
<h2>Команда в начале проекта</h2>
<ul>
<li>Все хорошие друзья</li>
<li>Самые умные, голодные и страстные, которых они знали <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>Для каждого это была первая реальная работа, очень ограниченный опыт в данной индустрии</li>
<li>Эти качества хорошо сочетаются с итеративной методологией разработки на Python</li>
</ul>
<h2>Ранние достижения</h2>
<ul>
<li>Reverse engineering приложения Finder для Mac OSX 10.4/5 для отображения иконок статуса синхронизации (&#171;в процессе&#187;, &#171;все готово&#187;)</li>
<li>Сложная инфраструктура HTTP нотификаций для избежания регулярного опроса серверов на каждом клиенте, основанная на <a href="/tag/twisted/">Twisted</a></li>
<li> Общая кодовая база, работающая на всех основных операционных системах: Windows, Mac OS, Linux (на основе PyObjC, wxPython, ctypes, py2exe, py2app, PyWin32)</li>
<li>Горизонтально масштабируемое хранилище для информации о файлах на основе <a href="/tag/mysql/" target="_blank">MySQL</a></li>
<li>Собственная инфраструктура для аналитики в реальном времени</li>
<li>Собственный механизм выделения памяти для Python, позволивший сократить её потребление на 90%</li>
</ul>
<h2>Сферы применения Python</h2>
<p>По сути он используется во всех частях проекта:</p>
<ul>
<li>логика backend синхронизации;</li>
<li>клиенты для основных ОС (Windows, Mac, Linux);</li>
<li>контроллер основного сайта;</li>
<li>обработка API запросов;</li>
<li>аналитика.</li>
</ul>
<p>Исключения из-за ограничений по доступной оперативной памяти:</p>
<ul>
<li>Android (мог бы быть Jython)</li>
<li>iPhone (мог бы быть Cpython)</li>
</ul>
<h2>Почему именно Python?</h2>
<ul>
<li><strong>Легок в изучении и понимании:</strong>
<ul>
<li>новые люди легко втягиваются в процесс;</li>
<li>позволяет людям переключаться с проекта на проект.</li>
</ul>
</li>
<li><strong>Легок в написании:</strong> важно для быстрой реализации функционала и выпуска новых версий.</li>
<li><strong>Легок в изменении:</strong>
<ul>
<li>нет необходимости в перекомпиляции;</li>
<li>высокая скорость итерации;</li>
<li>динамическая типизация:
<ul>
<li>рефакторинг очень прост;</li>
<li>уменьшение прямых зависимостей модулей;</li>
<li>динамические инструменты.</li>
</ul>
</li>
</ul>
</li>
<li><strong>Позволяет обеспечивать качество</strong> путем создания более-менее работающей версии продукта и доведения её до качественного уровня путем быстрых итераций.</li>
</ul>
<h2>Не без трудностей</h2>
<blockquote><p>Аргх!!! Python потребляет слишком много оперативной памяти и о-о-очень медленный!</p></blockquote>
<p>На серверной стороне можно вообще не заморачиваться и купить больше оборудования &#8212; всегда помогает. Но для клиентской части такой подход не прокатит, если только Вы не собираетесь купить новые компьютеры и телефоны всем своим клиентам.</p>
<p>Как с этим бороться?</p>
<ul>
<li>Убедитесь, что все длинные внутренние циклы выполняются в C (может сэкономить до 44% процессорного времени)</li>
<li>С оптимизацией потребления вычислительных ресурсов все просто:
<ul>
<li>есть много готовых решений для профайлинга;</li>
<li>проблемный код чаще всего не раскидан по всей кодовой базе.</li>
</ul>
</li>
<li>С оптимизацией потребляемой памяти все сложнее:
<ul>
<li>нет готовых решений для профайлинга память (одновременно в Python и C);</li>
<li>много потенциальных причин для повышенного потребления памяти:
<ul>
<li>утечки в Python и C;</li>
<li>фрагментация памяти;</li>
<li>неэффективное её использование.</li>
</ul>
</li>
<li>Как исправить? Однозначного решения нет &#8212; чаще всего приходится перерывать всю кодовую базу в поисках неоптимальных мест и источников утечек.</li>
<li>Почему память фрагментируется?
<ul>
<li>Большинство объектов расположены в heap памяти (большой последовательный кусок, выделенный приложению);</li>
<li>Много маленьких объектов вперемешку с большими;</li>
<li>Много временных объектов вперемешку с постоянными;</li>
<li>В CPython нет сборщика мусора, позволяющего собрать объекты компактно в одной части heap&#8217;а.</li>
</ul>
</li>
<li>Решением проблемы с фрагментацией стал собственный аллокатор памяти (механизм её выделения под определенные типы объектов):
<ul>
<li>В Dropbox обнаружили, что большая часть heap-памяти захламляется контейнерами с метаданными файлов, которые синхронизируется;</li>
<li>Было решено вынести их куда-нибудь еще;</li>
<li>CPython позволяет управлять процессом выделения памяти для типов данных расширений;</li>
<li>Делается это с помощью простых структур на C;</li>
<li>&#171;Not Rocket Science, just C code&#187;;</li>
<li>Выделяются области памяти по 4Мб, состоящие из заголовка и буфферов фиксированной длины.</li>
<li>Что насчет внутренней фрагментации?
<ul>
<li>по идее же даже в одном буффере останутся данные, весь блок нельзя будет освободить&#8230;</li>
<li>потенциально этот факт может привести к еще большему расходу оперативной памяти;</li>
<li>но это оказывается не так, если учесть, что все объекты являются временными, то есть живут не долго!</li>
<li>в результате Dropbox редко использует более 100Мб памяти для больших синхронизаций (раньше эта цифра могла достигать 1.5Гб)</li>
</ul>
</li>
<li>Но писать C расширение для каждой структуры данных, которую может понадобиться вынести в отдельный аллокатор &#8212; дело неблагодарное: в результате эта история закончилась изменением type_new() в Objects/typeobject.c для того, чтобы можно было указывать <strong>__use_region_allocator__ = True</strong> для тех классов, которым требуется такой механизм выделения памяти.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>Подводим итоги</h2>
<ul>
<li>Python стал ключом к технической реализации обоих сторон Dropbox: серверной и клиентской.</li>
<li>Залогом успеха является максимальная простота с пользовательской точки зрения: &#171;положил файл в папку и он становится доступен отовсюду&#187;</li>
<li>Dropbox не брали на себя реализацию стороннего функционала, вроде собственно создания хранилища файлов &#8212; используется <a href="http://aws.amazon.com/s3/" target="_blank">Amazon S3</a>, что позволило им запуститься очень быстро и стремительно.</li>
<li><em>Лучше решать одну задачу, но качественно, чем много, но так себе!</em></li>
</ul>
<h2>Пользуясь случаем</h2>
<p>Если в процессе прочтения этой статьи у Вас появилось ощущение, что Вам в жизни очень бы пригодилось знание Python для быстрого создания прототипов своих проектов или, может быть, работы в стремительно развивающемся интернет-проекте вроде <a href="http://db.tt/4TDAr1L" target="_blank">Dropbox</a>, могу порекомендовать Вам записаться на <a href="/ustali-ot-figurnykh-skobochek-i-tochek-s-zapyatojj/" target="_blank">мои курсы по Python</a>. Как раз скоро начнется следующий поток <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Источники информации</h2>
<ul>
<li><a href="http://pycon.blip.tv/file/4878722/" target="_blank">Видео</a></li>
<li><a href="https://www.dropbox.com/s/mwxsyxtu9qieboo/pycon%20talk%20minus%20video.pptx" target="_blank">Презентация</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/arkhitektura-dropbox/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Добро пожаловать в Сказку! (вакансия)</title>
		<link>http://www.insight-it.ru/life/vakansii/dobro-pozhalovat-v-skazku-vakansiya/</link>
		<comments>http://www.insight-it.ru/life/vakansii/dobro-pozhalovat-v-skazku-vakansiya/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 12:32:25 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Вакансии]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=996</guid>
		<description><![CDATA[Компания SKAZKA, российский разработчик и издатель онлайн-игр, ищет опытного веб-разработчика на Python. Предлагается работа в команде MMO-проекта &#171;Королевство&#187;, а также участие в разработке ряда новых игр (одна в активной разработке, а другая проектируется). О проекте Проект &#171;Королевство&#187; состоит из 2-х частей: непосредственно игра (сервер – C+Python, клиент – Flash) социальная сеть – веб-часть проекта, содержащая [...]]]></description>
			<content:encoded><![CDATA[<p>Компания <a target="_blank" href="http://skzk.ru">SKAZKA</a>, российский разработчик и издатель онлайн-игр, ищет опытного веб-разработчика на Python. Предлагается работа в команде MMO-проекта <a target="_blank" href="http://kor.ru">&#171;Королевство&#187;</a>, а также участие в разработке ряда новых игр (одна в активной разработке, а другая проектируется).</p>
<h2>О проекте</h2>
<p>Проект &#171;Королевство&#187; состоит из 2-х частей:</p>
<ul>
<li>непосредственно игра (сервер – C+Python, клиент – Flash)</li>
<li>социальная сеть – веб-часть проекта, содержащая все полагающиеся атрибуты соцсетей в реалиях игры (nginx, Python, Twisted, XSLT, memcached, PostgreSQL)</li>
</ul>
<h2>Обязанности</h2>
<ul>
<li>Полная самостоятельная поддержка и разработка всех проектов компании со стороны веба</li>
<li>Оптимизация существующего кода для увеличения производительности и уменьшения нагрузок</li>
<li>Разработка модулей для существующего проекта</li>
<li>Доработка функционала, фикс багов</li>
<li>Интергация проектов с российскими и зарубежными соцсетями</li>
</ul>
<h2>Требования к кандидату</h2>
<ul>
<li>Уверенное знание Python</li>
<li>Уверенное знание JavaScript</li>
<li>Знание XSLT</li>
<li>Умение разбираться в чужом коде</li>
<li>Умение объективно оценивать собственные трудозатраты по той или иной задаче и укладываться в поставленные сроки</li>
<li>Английский язык на уровне чтения технической документации</li>
<li>Коммуникабельность, дисциплинированность и ответственность</li>
<li>Приветствуется опыт работы над сложными/высоконагруженными web-проектами</li>
</ul>
<h2>Условия работы</h2>
<ul>
<li>Полный рабочий день в офисе в Москве (пять минут пешком от метро Третьяковская)</li>
<li>Работа над интересными, перспективными проектами</li>
<li>Отличная команда единомышленников, каждый из которых является профессионалом в своей области</li>
<li>Начало рабочего дня: с 10.00 до 12.00 (по желанию)</li>
<li><em>Зарплата: 50-100 тыс. руб. в месяц</em></li>
</ul>
<h2>Куда писать?</h2>
<p>Вопросы и резюме отправлять на <a href="mailto:da.public@skzk.ru">da.public@skzk.ru</a>.<br />
К резюме приложите, пожалуйста, написанный Вами код на питоне.</p>
<p>P.S.: Если Вы не дотягиваете до требований, но в Сказку хочется &#8212; все равно пишите, еще есть вакансия джуниора.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/life/vakansii/dobro-pozhalovat-v-skazku-vakansiya/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

