<?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; Google</title>
	<atom:link href="http://www.insight-it.ru/tag/google/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>Архитектура 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>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>Google Megastore</title>
		<link>http://www.insight-it.ru/masshtabiruemost/google-megastore/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/google-megastore/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 17:18:48 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[ACID]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[Google Megastore]]></category>
		<category><![CDATA[консистентность]]></category>
		<category><![CDATA[репликация]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=826</guid>
		<description><![CDATA[Гигантский шаг в сторону распределенного будущего был предпринят командой Google App Engine в момент их релиза системы хранения данных с повышенным уровнем репликации. Она направленна на критичные для бизнеса приложения, которые требуют расположения копий данных как минимум в трех датацентрах, полной семантики ACID для групп сущностей и ограниченных гарантий консистентности между группами сущностей. Это было [...]]]></description>
			<content:encoded><![CDATA[<p>Гигантский шаг в сторону распределенного будущего был предпринят командой <a href="http://www.appspot.com" target="_blank">Google App Engine</a> в момент их релиза системы хранения данных с повышенным уровнем репликации. Она направленна на критичные для бизнеса приложения, которые требуют расположения копий данных как минимум в трех датацентрах, полной семантики ACID для групп сущностей и ограниченных гарантий консистентности между группами сущностей.<br />
<span id="more-826"></span></p>
<p>Это было большим достижением, ведь всего несколько компаний во всем мире способны на реализацию по-настоящему меж-датацентровой системы хранения данных. Помимо SimpleDB, как много других публично-доступных сервисов баз данных могут хранить информацию в нескольких датацентрах одновременно? Теперь эта возможность доступна каждому. Но всему есть цена: так как Megastore использует втрое больше ресурсов, чем обычное Master-Slave хранилище в GAE, стоимость так же увеличивается в три раза. Помимо этого стоит учитывать, что с ростом надежности и издержек, понижается производительность. Именно из-за этого, новая система хранения является альтернативой обычному хранилищу GAE для критичных задач, а не полной заменой.</p>
<h2>Основные особенности Megastore</h2>
<ul>
<li>Megastore совмещает масштабируемость NoSQL систем хранения данных с удобством традиционных СУБД. Оно использовалось для внутренних проектов Google на протяжении нескольких лет. Более 100 приложений, 3 миллиардов транзакций на запись и 20 миллиардов на чтение, более петабайта данных распределены по множеству датацентров по всему миру.</li>
<li>Megastore &#8212; хранилище, разработанное для удовлетворения требований современных интерактивных онлайн сервисов. Используется синхронная репликация для достижения высокого уровня доступности и консистентности. Вкратце, оно предоставляет полную ACID семантику для удаленных реплик с достаточно низкой задержкой, чтобы использоваться в интерактивных приложениях. Хранилище партиционируется и каждая часть реплицируется отдельно, позволяя достичь полного соответствия ACID внутри партиции, но консистентность между ними гарантируется лишь ограниченно. Предоставляются некоторый функционал традиционных СУБД, такой как вторичные индексы, но только те из них, которые масштабируются без сильного негативного влияния на задержки и которые укладываются в семантику используемой схемы партиционирования.</li>
<li><a href="http://labs.google.com/papers/paxos_made_live.html" target="_blank">Paxos</a> используется для управлением синхронной репликацией между датацентрами. Это позволяет достичь очень высокого уровня надежности ценой повышения времени выполнения операций записи. Обычно Paxos используется только для координации, но в Megastore он также используются и для управления записью данных.</li>
<li>Поддерживается три уровня консистентности при чтении: текущий, снимок и неконсистентный.</li>
<li><a href="http://code.google.com/appengine/docs/python/datastore/entities.html" target="_blank">Группы сущностей</a> являются единицей консистентности и транзакционности. Они рассматриваются как маленькие независимые базы данных. Сами же данные внутри каждого датацентра хранятся в масштабируемом NoSQL хранилище.</li>
<li>Megastore, как и обычное хранилище в GAE, не поддерживает транзакции с использованием нескольких групп сущностей, это существенно повысило бы время их выполнения.</li>
<li>Группы сущностей &#8212; основной механизм группировки данных для быстрого осуществления операций. Их размер и композиция должны быть сбалансированы. В каждом приложении должен найтись способ естественным образом очертить границы групп сущностей. При оптимальном выборе групп сущностей ресурсоемкие кросс-групповые операции будут сведены к минимуму. По сути этот процесс чем-то напоминает нормализацию в реляционных СУБД.</li>
<li>Запросы с высокими требованиями по консистентности должны быть ограничены одной группой сущностей. Кросс-групповые запросу могут вернуть устаревшие результаты. Это является серьезным отличием в поведении от обычного хранилища GAE, где по-умолчанию используется высокий уровень консистентности для всех запросов, так как операции записи и чтения по-умолчанию происходят с мастера.</li>
<li>В обычном хранилище GAE иногда отключается в связи с запланированными техническими работами, а также вовремя непредвиденных проблем с инфраструктурой. Megastore в большинстве случаев не страдает этими проблемами.</li>
<li>Резервирование данных и избыточность достигаются посредством синхронной репликации, снимков и инкрементального лога транзакций.</li>
<li>API для доступа к данным остался прежним.</li>
<li>Операции записи могут достигать секунды для каждой группы сущностей, так что для приложений с высокой нагрузкой на запись оно подходит не так хорошо.</li>
<li>Только новые приложения могут воспользоваться опцией Megastore, существующие приложения необходимо пересоздать, чтобы использовать эту возможность. Впоследствии изменить тип хранилища невозможно.</li>
<li>
<div id="_mcePaste">Одно приложение не может использовать одновременно обычное хранилище и Megastore. Напрашивается использование одного приложения с Google Megastore для критически важных данных, а другое приложение с обычным хранилищем для всего остального, но такая схема противоречит правилам использования сервиса.</div>
</li>
<li>Автоматической миграции данных между Master/Slave хранилищем и Megastore не существует, разработчики приложения должны сами позаботиться об этом. Google предоставляют лишь набор инструментов и примеров кода, чтобы облегчить процесс миграции.</li>
<li>В приложениях, использующих Megastore, еще большее  значение приобретает эффективное кэширование данных.</li>
</ul>
<h2>Материалы по теме</h2>
<ul>
<li><a href="http://highscalability.com/blog/2011/1/11/google-megastore-3-billion-writes-and-20-billion-read-transa.html" target="_blank">Google Megastore &#8212; 3 Billion Writes And 20 Billion Read Transactions Daily</a></li>
<li><a href="http://www.cidrdb.org/cidr2011/Papers/CIDR11_Paper32.pdf" target="_blank">Megastore: Providing Scalable, Highly Available Storage for Interactive Services</a></li>
<li><a href="https://groups.google.com/group/google-appengine-downtime-notify/msg/e9414ee6493da6fb?pli=1" target="_blank">May 25th Datastore Outage Post-mortem</a></li>
<li><a href="http://labs.google.com/papers/paxos_made_live.html" target="_blank">Paxos Made Live – An Engineering Perspective</a></li>
<li><a href="http://code.google.com/appengine/docs/python/datastore/hr/" target="_blank">Choosing a Datastore</a></li>
<li><a href="http://code.google.com/appengine/docs/python/datastore/hr/overview.html" target="_blank">Using the High Replication Datastore</a></li>
<li><a href="http://labs.google.com/papers/bigtable.html" target="_blank">Bigtable: A Distributed Storage System for Structured Data</a></li>
<li><a href="http://highscalability.com/blog/2009/8/24/how-google-serves-data-from-multiple-datacenters.html" target="_blank">How Google Serves Data From Multiple Datacenters</a></li>
<li><a href="http://highscalability.com/blog/2009/3/10/paper-consensus-protocols-paxos.html" target="_blank">Consensus Protocols: Paxos</a></li>
<li><a href="http://groups.google.com/group/google-appengine/browse_thread/thread/5fc3b6a4366de62f/4b4d23e924b7b136?lnk=gst&amp;q=High+Replication+Datastore+for+App+Engine#">Performance comparison</a></li>
</ul>
<hr />
Еще не все возможности Google Megastore полностью доступны пользователям App Engine в виде High Replication Storage, но я думаю это вопрос времени. Хотелось бы пообсуждать в комментариях области применения новинки на практике: какие приложения, критичные к доступности и сохранности данных, можно позволить себе отдать в PaaS, пускай даже от Google?</p>
<p><strong>P.S.: По традиции хочу напомнить, что читать Insight IT удобнее всего <a href="/feed" target="_blank">через RSS-reader</a>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/google-megastore/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Новый Google: интернет-гигант проливает свет на темы поиска в реальном времени, локального поиска, облачных вычислений и освобождения данных</title>
		<link>http://www.insight-it.ru/set/novyjj-google-internet-gigant-prolivaet-svet-na-temy-poiska-v-realnom-vremeni-lokalnogo-poiska-oblachnykh-vychislenijj-i-osvobozhdeniya-dannykh/</link>
		<comments>http://www.insight-it.ru/set/novyjj-google-internet-gigant-prolivaet-svet-na-temy-poiska-v-realnom-vremeni-lokalnogo-poiska-oblachnykh-vychislenijj-i-osvobozhdeniya-dannykh/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 15:17:27 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Сеть]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[data liberation]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[local search]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[realtime search]]></category>
		<category><![CDATA[интервью]]></category>
		<category><![CDATA[интернет]]></category>
		<category><![CDATA[облачные вычисления]]></category>
		<category><![CDATA[освобождение данных]]></category>
		<category><![CDATA[поиск]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=385</guid>
		<description><![CDATA[Когда речь заходит о продуктовых и бизнес стратегиях, Google обычно становится одной из самых скрытных и секретных компаний. Но не смотря на это, интернет-гигант некоторое время назад согласился дать серию интервью, в основном с участием высшего продуктового менеджмета, работающего в штабквартире в Mountain View, CA. В четырех отдельных интервью, сотрудники Google окунулись в самые насущные [...]]]></description>
			<content:encoded><![CDATA[<p>Когда речь заходит о продуктовых и бизнес стратегиях, Google обычно становится одной из самых скрытных и секретных компаний. Но не смотря на это, интернет-гигант некоторое время назад согласился дать серию интервью, в основном с участием высшего продуктового менеджмета, работающего в штабквартире в Mountain View, CA.</p>
<p>В четырех отдельных интервью, сотрудники Google окунулись в самые насущные темы, наиболее актуальные для компании в целом. Среди них оказались различные вопросы, начиная с поиска в реальном времени, локального поиска, и заканчивая облачными вычислениями, а также так называемой возможностью освобождения данных. Под освобождением данных имеется ввиду комплекс мер, направленных на предоставлении пользователям возможности экспортировать их файлы и другую цифровую информацию из продуктов Google (если они сами этого захотят, конечно же).</p>
<p>Достаточно любопытный факт: менеджеры Google реально очень скучные. И им правда нравится выглядеть именно так (по крайней мере пока их PR-коллеги находятся рядом). Они не разговаривают о конкурентах. Они не делают прогнозов о развитии индустрии. И они не говорят конкретно кто над чем работает внутри Google. Просто-напросто они фокусируются на совершенствовании своих продуктов, особенно в направлении удобства использования пользователями, разве этого не достаточно?</p>
<p>Возможно Jack Menzel, старший продукт-менеджер, лучше всего это выразил, когда пошутил о &#171;неблагодарности&#187; работы над веб-поиском в Google: &#171;Вы демонстрируете [новую функцию поиска] людям, а они говорят: &#8216;Да, вроде она работает, ну и что?&#8217;&#187; (Как быстро все мы забываем, каково это было искать информацию в Интернете всего несколько лет назад.) Что ж, без дальнейших предисловий, перейдем к основным моментам, связанным с различными аспектами работы Google.</p>
<p><span id="more-385"></span> <em>По мотивам <a href="http://www.xconomy.com/national/2009/12/21/the-new-google-internet-giant-opens-up-about-real-time-and-local-search-cloud-computing-and-data-liberation/?single_page=true" target="_blank" rel="external nofollow">статьи на xconomy.com</a>, автор <a title="Posts by Gregory T. Huang" href="http://www.xconomy.com/author/ghuang/" target="_blank" rel="external nofollow">Gregory T. Huang</a>.</em></p>
<h2>Поиск в реальном времени</h2>
<p>Google активно работает над максимально оперативным обновлением результатов поиска по сети Интернет, в том числе и по социальным медиа вроде Twitter или Facebook, практически так же быстро, как такая информация и публикуется.</p>
<p>Menzel, бывший сотрудник Microsoft, который изучал компьютерное ремесло в University of Washington, возглавляет продуктовую группу на данном фронте. Он говорит, что компания Google работала над ускорением процесса индексации и ранжирования на протяжении уже многих лет: когда-то данные обновлялись раз в месяц, потом обновление стало ежедневным, чтобы поспевать за блогами и новостными сайтами. В течении прошлого года <a href="/tag/twitter" target="_blank">Twitter</a> стал популярен и, как следствие, появилась достаточно критичная потребность в обновлении информации за считанные секунды или в крайнем случае минуты. &#171;Мы двигались по направлению к тому, чтобы становиться все быстрее и быстрее, на протяжении уже достаточно длительного периода времени&#187;, говорит Menzel. &#171;Данная траектория развития была выбрана уже давно. Каждый шаг в данном направлении приводит к все новым и новым проблемам и трудностям. Мы верим, что именно получение доступа к свежей информации является одним из ключевых факторов, являющихся залогом успеха Google.&#187; (В число остальных факторов, относящихся к самому поиску, входят такие показатели как релевантность, быстрота получения результата и полнота контента.)</p>
<p>Menzel считает, что самой сложной задачей является не просто быстродействие, а релевантность результатов потребностям пользователей (возможно, кто-то привык называть этот показатель словом <em>&#171;пертинентность&#187;</em>). &#171;Это очень, очень непросто собирать свежий короткоживущий контент и ранжировать его рядом с, скажем, статьями из New York Times или просто постами из блогов.&#187; Стоит заметить, что когда контент появился буквально только что, обычно на него еще практически никто не успел сослаться, а значит Google не может полноценно использовать PageRank, их классическую технологию.</p>
<p>Вместо этого, они &#171;тяжело опираются на все то, что они выявили в течении последних 10 лет&#187;, говорит Menzel. Это включает в себя, например, способы отбрасывания контента, который скорее всего является иррелевантным или спамом, в более общем случае.  Помимо этого он упоминал &#171;совершенно новые сигналы&#187;, скажем &#171;новые языковые модели&#187;, которые позволяют понять какие обновления являются релевантыми, а какие &#8212; просто горстка никому не нужных данных от какого-нибудь ученого-океанографа, или методы определения насколько тот или иной создатель контента авторитетен в своей области.</p>
<p>Говоря о будущем, Menzel повторил то, что казалось бы на сегодняшний день говорят все о поиске: еще рано. &#171;На самом деле мы лишь начали работать над данной задачей и у нас все еще очень долгий путь впереди&#187;. Он надеется, что в течении 5 лет Google сделает поиск намного более персонализированным, чем он есть сегодня. Например, Google будет знать что ты увлекаешься футболом, но привык называть его не &#171;soccer&#187;, а &#171;football&#187;, то есть помимо прочего поисковая система должна понимать кем является каждый ее конкретный пользователь, как и с кем он связан, кем он является в реальной жизни, где находится, и, тем самым, помогать ему организовывать всю информацию вокруг него.</p>
<p>&#171;Поиск &#8212; все еще очень далекая от решения проблема,&#187; &#8212; говорит Menzel.  &#187;Существует еще масса вещей, которые очень не просто найти в Интернете.&#187;</p>
<h2>Локальный поиск</h2>
<p>В эту категорию попадают все виды поисковых запросов, так или иначе связынных с географической информацией, скажем &#171;отели в Гонг-Конге&#187; или &#171;рестораны в Сиэттле&#187;, а также запросы с мобильных устройств на поиск близлежайших мест, заведений, достопримечательностей и прочих объектов.</p>
<p>Carter Maslan, директор продуктового менеджмента в области локального поиска в Google, называет эту область &#171;организацией мировой информации географически&#187; , или созданием быстрого и простого гида по &#171;гео-Интернету&#187;. Самым сложным моментом в данном вопросе по его мнению является отображение всех этих различных способов выражения пользовательского запроса на очень большой массив локализированных данных, а также возвращение правильного ответа на полученный запрос в минимальные сроки.</p>
<p>Maslan, еще один экс-сотрудник Microsoft, говорит, что Google обрабатывает большое количество поисковых запросов для анализа того, как люди предпочитают искать локальную информацию, и как с географической точки зрения создаются ссылки на различные вещи. По его мнению конечная цель заключается в том, чтобы сделать поиск и обнаружение мест рядом с собой практически не требующим от пользователя каких-либо усилий. Наиболее знакомые сценарии, это помощь в ориентировании в новом окружении, скажем после приземления в аэропорту, или поиск баров во время ночной прогулки по пригородам Нью-Йорка.</p>
<p>Складывается впечатление, что все это должно плотно вписываться в более широкую стратегию Google, связанную с мобильными технологиями. &#171;Ваш телефон знает многое&#187;  - говорит Maslan. &#171;Он знает где Вы сейчас находитесь, он может определить в каком направлении Вы направляетесь. Все не ограничивается только текстом в окошке для поискового запроса. Мы хотим вывести мобильную информацию на передний план.&#187; Существующим на данный момент примером является <a href="http://www.google.com/mobile/goggles/" target="_blank" rel="external nofollow">Google Goggles</a>, приложение, которое позволяет сфотографировать логотип, достопримечательность или какое-то место и мгновенно получить информацию о нем.</p>
<p>Maslan считает, что основной отличительной чертой Google в области локального поиска является &#171;открытость для всех источников&#187;, что достаточно сложно с технической точки зрения. Это включает в себя пребывание в состоянии &#171;активной глобальности&#187;, а не просто в индексировании информации о ключевых станциях метро. &#171;Масштаб, с которым Google работает с картографическими и гео-кодированными данными, в совокупности с пониманием принципов работы Интернета является ключем для успешной работы в данной области&#187;.</p>
<p>Возможно в скором будущем мы увидим вещи вроде карт и списков компаний или мест от Google в еще большем количестве мест и языков по всему миру, с еще более точной информацией, чутко реагирующей на локальные события вроде открытия, закрытия или перемещения предприятий и организаций. &#171;Мы четко понимаем, какие именно вещи у нас получаются лучше всего&#187; &#8212; говорит Maslan. &#171;У нас есть небольшие команды из людей, фанатично настроенных на реализацию их наиболее правильным образом&#187;.</p>
<h2>Облачные вычисления</h2>
<p>Наверняка все наслышаны о знаменитых вычислениях &#171;в облаках&#187;, то есть с использованием программного обеспечения, работающем на удаленных серверах, часто нескольких одновременно и в виртуализированном окружении, а не прямо на персональном компьютере. В этом ключе Google наиболее интересует выполнение повседневных задач, таких как работа с электронной почтой, составление расписаний и управление документами. На самом деле это всего лишь часть более широкой стратегии Google по облачным вычисления &#8212; именно она создает видимость того, что потребитили, предприятия и организации арендуют вычислительный мощности и хранилища данных через Интернет, так как это дешевле и более эффективно для многих приложений.</p>
<p>Ken Norton, старший продукт-менеджер Google (а также выпускник Boston University и бывший предприниматель), поведал о Google Apps и стратегии компании в области облачных вычислений. Команда Norton&#8217;а работает конкретно над Google Calendar, но Google Apps также включают в себя и другие продукты, такие как Gmail, Google Talk, Google Docs и Google Sites. “Сеть выигрывает на том, как приложения будут потребляться” &#8212; он сказал.</p>
<p>Ключевым преимуществом Google на данном фронте является масштаб и инфраструктура. &#171;У нас есть настолько много серверов и датацентров по всему миру, что мы можем содержать их достаточно дешево и эффективно&#187; &#8212; говорит Norton. Это преимущество оказывает влияние и на индивидуальные устройства, так как оно &#171;открывает новые возможности&#187; для потребителей, возможность использовать веб-приложения с любого типа устройств, будь то смартфон, нетбук или обычный полноразмерный ноутбук.</p>
<p>Работа Google в области облачных вычислений сфокусирована на двух уровнях: на первом располагаются готовые программные продукты вроде Google Apps, направленные на прямое потребление конечными пользователями (как индивидуальными, так и корпоративными); второй же уровень занимает App Engine, &#171;облачная&#187; платформа, предназначенная для использования разработчиками программного обеспечения для эффективного построения их собственных веб-продуктов.</p>
<p>Относительно прогнозов на следующий год на фронте облачных вычислений, Norton сказал, что &#171;мы постоянно совершенствуемся&#187;. В 2009 году было запущенно более 100 основных новых функциональных возможностей в Google Apps &#8212; таких вещей, как видео чат в GTalk или Gmail offline. Он считает, что Google &#171;продолжит делать акцент на коммуникационных предложениях&#187;. Помимо развития Gmail и Calendar, это включает в себя доведение до ума Google Docs и придание более завершенного вида набору их возможностей. Norton говорит, что Google также ищет возможности по расширению своих предложений в области коллаборации, в том числе в виде продуктов для крупного бизнеса, совместимыми с различными системами обеспечения безопасности для аутентификации.</p>
<p>Подведем черту: все выглядит как-будто Google совершает переход от фокусирования на бесплатных потребительских продуктах, работающих в &#171;облаках&#187;, к более активной работе над платными облачными сервисами для бизнес-пользователей.</p>
<h2>Освобождение данных</h2>
<p>Последнее время в компании все больше внимания уделяется предоставлению пользователям легко экспортировать их данные из продуктов Google, таких как Blogger, Google Maps, Google Docs, Chrome и App Engine (пользовательские данные разработчиков). На первый взгляд это может показаться очередным капризом PR-менеджеров, но на самом деле за этим фактом стоит более глубокая и интересная инновационная стратегия.</p>
<p>Brian Fitzpatrick, ветеран opensource разработок, возглавляет двухлетний проект от офисов Google в Чикаго. Основная идея заключается в оказании помощи пользователям, если они хотят получить свои файлы и другие данные из облака Google, чтобы у них была возможность перейти на какую-то другую систему, если они захотят. &#171;Большинство людей не думает о возможности экспорта данных до тех пор пока не станет слишком поздно&#187; &#8212; говорит Fitzpatrick. &#171;Мы надеемся, что если вы прекратите использование одного нашего продукта сегодня, то у вас будет возможность попробовать другой продукт завтра.&#187;</p>
<p>Помимо &#171;создания правильных возможностей для пользователей&#187; существует и другая мотивация. &#171;Мы, как компания, старательно работаем над такими вещами, как поиск. Если пользователи становятся привязанным к вашим продуктам, то вы становитесь более самодовольными, расслабленными. Если же уйти достаточно просто, то вы будете серьезно мотивированны делать свои продукты как можно лучше, чтобы избежать ухода пользователей любой ценой.&#187;</p>
<p>Что ж, теперь у нас есть эта возможность. Google считает, что эта открытость с точки зрения пользовательских данных, заставит компанию работать более старательно для удержания пользовательской базы. Fitzpatrick не знает других компаний, которые бы открыто заявляли об инициативе создания подобных возможностей для своих пользователей.</p>
<p>По его мнению наибольшая трудность лежит не собственно в разработке такого функционала, а в повышение осведомленности пользователей о наличии возможности экспортировать свои данные из облака. &#171;Достаточно сложно заставить пользователей думать, что это на самом деле важно&#187;. Но в целом этот подход достаточно достаточно хорошо вписывается в понятие о том, как потребители и корпоративные пользователи заботятся о всех своих данных, когда все большая и большая их част мигрирует &#171;в облака&#187; и как Google хочет быть ответственным за организацию мировых данным, шаг за шагом, на протяжении всего пути.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/set/novyjj-google-internet-gigant-prolivaet-svet-na-temy-poiska-v-realnom-vremeni-lokalnogo-poiska-oblachnykh-vychislenijj-i-osvobozhdeniya-dannykh/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Google Developer Day 2009</title>
		<link>http://www.insight-it.ru/life/google-developer-day-2009/</link>
		<comments>http://www.insight-it.ru/life/google-developer-day-2009/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 12:47:41 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[GDD]]></category>
		<category><![CDATA[gdd2009]]></category>
		<category><![CDATA[gdd2009ru]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[Google Developer Day]]></category>
		<category><![CDATA[Google Wave]]></category>
		<category><![CDATA[Google Webmaster Tools]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Wave]]></category>
		<category><![CDATA[конференция]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=227</guid>
		<description><![CDATA[10 ноября состоялась конференция, название которой &#171;совершенно случайно&#187; совпало с заголовком данного поста. Не знаю за какие заслуги я получил туда приглашение, но не воспользоваться возможностью посетить подобное мероприятие, да еще и бесплатно, было бы просто непростительно. Позвольте представить вам отчет о моих впечатлениях от GDD2009. День начался с традиционной проверки почтового ящика &#8212; обнаружилась [...]]]></description>
			<content:encoded><![CDATA[<p>10 ноября состоялась конференция, название которой &#171;совершенно случайно&#187; совпало с заголовком данного поста. Не знаю за какие заслуги я получил туда приглашение, но не воспользоваться возможностью посетить подобное мероприятие, да еще и бесплатно, было бы просто непростительно. Позвольте представить вам отчет о моих впечатлениях от <a id="ng3." title="GDD2009" href="http://code.google.com/intl/ru/events/developerday/2009/home.html" rel="external nofollow">GDD2009</a>.<br />
<span id="more-227"></span></p>
<div>День начался с традиционной проверки почтового ящика &#8212; обнаружилась пара писем с приглашениями в <a id="st4d" title="Google Wave" href="http://wave.google.com/" rel="external nofollow">Google Wave</a> и Google Wave Sandbox, сначала был очень удивлен &#8212; не может же быть таких совпадений, чтобы случайно они прямо в день конференции пришли. Чуть позже оказалось, что и правда, не совпадение: аналогичные приглашения получили все участники конференции. Вообще Wave был &#171;хитом&#187; на данной конференции &#8212; множество докладов так или иначе касались данного проекта, а также на каждом втором экране ноутбуков участников не трудно было разглядеть достаточно примечательный интерфейс нового продукта Google. Если никто ни разу не слышал про Wave &#8212; если в двух словах, то это новый подъод к онлайн-общению, пытающийся совместить в себе все преимущества существующих на данный момент средств связи, коллективной работы и обмена медиа-данными; не хватает разве что аудио-видео трансляций и конференций, но это лишь вопрос времени, <a href="http://www.google.com/googlevoice/about.html" target="_blank" rel="external nofollow">Google Voice</a> не за горами.Наверное проект Google Wave заслуживает отдельного поста, по этому подробнее останавливаться на нем не буду, так что все же давайте пойдем далее по порядку&#8230;</div>
<div>
<h3><strong>Открытие</strong></h3>
</div>
<div>GDD была первой конференцией, которую мне довелось посетить, и на которой было реально интересно смотреть открытие. В течении чуть более часа прошло несколько мини-презентаций основных тем и потоков конференции, причем быстро, информативно и с юмором. Особенно запомнились выступления о ключевых нововведениях HTML5 и live demo Wave. По HTML5 показали примеры того, что можно будет делать без использования дополнительных расширений и проприетарных технологий вроде Flash&#8217;а: векторная графика, аудио/видео, хранение данных на клиентской стороне и многое другое. Демо Wave таже было впечатляющим, так как пока аккаунты Wave есть лишь у &#171;избранных&#187;, пообщаться с кем-то не так просто; а на сцене сотрудники гугл достаточно весело так пообщались со своими коллегами в зале, попутно демонстрируя основные возможности технологии.</div>
<div>
<h3><strong>Tech talks</strong></h3>
</div>
<div>Один из залов был практически полностью посвящен выступлениям в формате tech talk: выступали инженеры Google (и не только) с обзором какой-то достаточно узкой темы. Основным минусом этого потока был сам зал: желающих было существенно больше, чем мест &#8212; в итоге я послушал в этом потоке только одно выступление про производительность сайтов на клиентской стороне (<a id="i8qo" title="основная релевантная ссылка" href="http://code.google.com/speed" rel="external nofollow">основная релевантная ссылка</a>) и сбежал при первой же возможности из-за недостатка воздуха и стабильной работы Ёты или WiFi, даже не смотря на то что остальные доклады обещали быть достаточно интересными.</p>
<h3>Продукты Google для разработчиков</h3>
</div>
<p>В этой секции я провел большую часть своего времени на конференции, причин было несколько: начиная от низкой плотности населения и заканчивая нормальным доступом в Интернет, хотя доклады тоже были достаточно интересные <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . В данной секции освещались три основные темы: <a id="nzyy" title="Google Wave" href="http://wave.google.com/" rel="external nofollow">Google Wave</a>, <a id="gl:m" title="Google App Engine" href="http://www.appspot.com/" rel="external nofollow">Google App Engine</a>, <a id="kjw5" title="GWT" href="http://code.google.com/webtoolkit/" rel="external nofollow">Google Web Toolkit</a>. Оказывается GWT у них принято называть как-то вроде &#171;гуит&#187;, очень забавно звучало, особенно когда через слово повторяют. Давайте обо всем по порядку&#8230;</p>
<p>Про Wave рассказали все что только можно и что нельзя: все виды API какие в нем есть и какие планируются, различные варианты использования, о том как в нем используется GWT для создания интерфейса (в том числе и мобильного) и многое-многое другое. Опять же &#8212; это хорошая тема для отдельного поста, так что не задерживаемся, проходим дальше.</p>
<p>Google App Engine по прежнему для меня был достаточно актуален, так как я все еще вожусь с ним на досуге. По нему было два доклада: один вел Fred Sauer, про базовые принципе работы платформы, и второй был более детальным, Brett Slatkin рассказывал о практическом применении новых функциональных возможностей, особенно много внимания было уделено разным вариантам применения <a id="vk.5" title="Task Queue" href="http://code.google.com/appengine/docs/python/taskqueue/overview.html" rel="external nofollow">Task Queue</a>. Оба докладчика очень хорошо и наглядно рассказывали, но доклад Fred&#8217;а был слишком прост и был нацелен на тех, кто еще совсем не знаком с платформой.</p>
<p>Про GWT официально тоже было два доклада, но один из них в итоге все равно полностью свелся к обсуждению Wave, так как это всем было существенно более интересно. Второй же доклад был из серии 201, то есть для тех кто уже работает с технологией, но докладчика тоже унесло непонятно куда &#8212; вместо GWT он рассказывал о создании систем со слабой связанностью компонентов и <a id="ne4_" title="Dependency Injection" href="http://en.wikipedia.org/wiki/Dependency_injection" rel="external nofollow">Dependency Injection</a> в Java; в итоге целый час мусолил на примерах с кодом то, что можно было бы рассказать за 5 минут.</p>
<h3>Общая организация</h3>
<p>Не смотря на бесплатное участие в конференции, организаторы не поскупились на техническое обеспечение мероприятия. Мероприятие проходило в кинотеатре Октябрь на Новом Арбате, в 5 потоков; как следствие: большие хорошие проекторы, качественный звук и удобные кресла. Большинство выступлений проходило на английском, всем желающим выдавали наушники и специальные девайсы для синхронного перевода (сам не взял, но многие пользовались). Помимо этого всех бесплатно кормили завтраком и обедом (вполне прилично) + фуршет-afterparty чуть ли не до ночи. Традиционный пакетик с безделушками почему-то выдавали в конце мероприятия, в обмен на заполненную анкету с отзывом о мероприятии; как верно подметил один человек в официальной волне мероприятия: если кому-то и правда лень было заполнять анкету &#8212; заполняли наугад и толку от этого ноль, зато те кто любят записывать информацию с конференции в халявный блокнотик не смогли этого сделать.</p>
<p>Из минусов могу припомнить только длинную очередь на входе (в том числе и на улице), а также после окончания в гардероб. Правда я и ту и другую достаточно легко минимизировал или избежал: на регистрации сразу заметил нужную девушку, раздающие бейджики на букву Б, а вторую тупо не сдав куртку в гардероб <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>В целом с точки зрения организации это была одна из лучших конференций, на которых мне доводилось побывать.</p>
<h3>Пару слов в заключении</h3>
<p>Конференция выдалась отличная, да, сплошная самореклама Google, но они могут себе это позволить; причем качество они держат на уровне, все было весело, интересно и полезно. Не зря у них даже есть специальные люди-проповедники с должностью Developer Advocate &#8212; невероятно толково рассказывают и объясняют.</p>
<p>Извиняюсь, что отчет получился не настолько подробным, как хотелось бы, да и на два дня позже мероприятия &#8212; снова проблемы со свободным временем, пишу второпях перед поездкой за город на выходные, даже не успеваю нормально проверить опечатки и русский язык. Вернусь &#8212; обязательно все поправлю и отвечу на комментарии, если таковые появятся. Кстати не забывайте подписываться на <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>
<p>P.S.: Продам инвайты в Google Wave <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  (шутко)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/life/google-developer-day-2009/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Django в гостях у Google</title>
		<link>http://www.insight-it.ru/masshtabiruemost/django-v-gostyakh-u-google/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/django-v-gostyakh-u-google/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 20:53:28 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[app engine patch]]></category>
		<category><![CDATA[BigTable]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[платформа]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=213</guid>
		<description><![CDATA[Давным-давно, в далекой-предалекой галактике&#8230; Хотя да, достаточно давно уже Google выпустили в свет платформу Google App Engine. Описание этого продукта меня заинтересовало еще до открытия публичного доступа к системе и я даже записался на полу-закрытое тестирование. Вскоре пришло подтверждение, что мол &#171;мы рады сообщить, что Ваша учетная запись активирована и теперь у Вас есть возможность [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/appengine.jpg" title="Google App Engine" alt="Google App Engine" style="float:left;" /><br />
<span style="text-decoration: line-through;">Давным-давно, в далекой-предалекой галактике&#8230;</span></p>
<p>Хотя да, достаточно давно уже Google выпустили в свет платформу <a id="ix89" title="Google App Engine" href="http://www.appspot.com/" target="_blank" rel="external nofollow">Google App Engine</a>. Описание этого продукта меня заинтересовало еще до открытия публичного доступа к системе и я даже записался на полу-закрытое тестирование. Вскоре пришло подтверждение, что мол &#171;мы рады сообщить, что Ваша учетная запись активирована и теперь у Вас есть возможность попробовать наш новый продукт, для этого нажмите ссылку такую-то&#187;. Но пришло оно как-то не очень удачно, когда ни лишнего свободного времени не было, да и идеи подходящей для создания чего-нибудь эдакого на новой платформе тоже на горизонте не наблюдалось. В общем зашел на их сайт, посмотрел админку, поставил демо-приложение, поигрался чуток и забросил. Но с тех пор руки так и не прекращали чесаться от желания попробовать GAE на каком-нибудь более приближенном к реальности приложении, что мне совсем недавно и довелось сделать. Спешу поделиться впечатлениями.<br />
<span id="more-213"></span><br />
Если Вы даже краем уха не слышали о платформе <span style="font-family: Courier New;">Google App Engine</span> и после прочтения вступления не удосужились скопировать это название в свою любимую поисковую систему, чтобы почитать по-подробнее, то Вам повезло: для порядка я все-таки расскажу чуть-чуть о тех вкусностях, которые так долго поддерживали мой интерес к данному проекту.</p>
<p>Если взглянуть издалека, то GAE представляет собой условно-бесплатный хостинг для веб-приложений, для разработчиков предоставляется все необходимое: начиная от минимально-необходимого <a id="t39e" title="SDK" href="http://code.google.com/appengine/downloads.html" target="_blank" rel="external nofollow">SDK</a> со встроенным веб-сервером, локально эмулирующим саму платформу, заканчивая неплохой документацией по самой системе и доступным из нее API от Google. Почему условно-бесплатный? Бесплатно приложениям выделяется лишь ограниченное количество вычислительных ресурсов, при превышении которых по выбору владельца приложения либо взимается вполне <a id="ly53" title="скромная плата" href="http://code.google.com/appengine/docs/quotas.html" target="_blank" rel="external nofollow">скромная плата</a>, либо всем пользователям начинают показывать &#171;извиняйте, заходите завтра&#187; (в прямом смысле, счетчики потребления ресурсов сбрасываются ежедневно).</p>
<p>Но финансовый вопрос далеко не самый интересный, давайте взглянем на техническую сторону медали. Написанное с использованием SDK приложение загружается в production-окружение, которое физически размещается на тех самых известных кластерах Google, о которых у меня даже <a id="t6li" title="есть пост" href="../net/scalability/arkhitektura-google/" target="_blank" rel="external nofollow">есть пост</a> (конечно же под GAE используется только очень небольшая часть их вычислительных можностей). Причем все заботы о распределенной работе приложения на большом количестве машин платформа берет на себя: разработчику не нужно думать ни о балансировке нагрузки, ни о партиционировании данных, ни о других аспектах. Сразу же после окончания процессов загрузки и развертывания приложение готово становится готово к работе и доступно по домену третьего уровня на <span style="font-family: Courier New;">*.appspot.com</span>, либо можно подключить свой отдельный домен.</p>
<p>Технические ограничения тоже имеют быть: для разработки под GAE можно использовать лишь небольшой набор языков программирования, в частности Python 2.5, а также Java и все остальные языки, компилируемые или интерпретируемые под JVM (JRuby, Scala, Rhino, etc.). Все приложения исполняются в песочнице, ограничивающей доступ к окружающему миру, то есть определенные подмножества языков становятся недоступны, например: доступ к файловым системам, встроенные средства обработки изображений, доступ к сторонним ресурсам по HTTP, отправка почты. Про реляционные базы данных, memcached и библиотеки, использующие нативный, платформозависимый код, также стоит забыть. Но не все так плохо, как кажется: для реализации всех &#171;отобранных&#187; у разработчиков функциональных компонент Google предоставляет собственные сервисы-заменители, доступные через хорошо документированный API или вовсе замаскированные под стандартные методы языка. В качестве дополнительных бонусов предоставляются и возможности по интеграции с другими продуктами Google, скажем можно легко сделать авторизацию пользователей в приложении по учетным записям от <em>GMail</em> или нотификацию пользователей по Jabber через <em>GTalk</em>.</p>
<p>Отдельного внимания заслуживает используемая в данной платформе система хранения данных, основанная на <strong>BigTable</strong>, о которой более подробно можно почитать в уже упомянутом <a id="j:55" title="посте об архитектуре Google" href="../net/scalability/arkhitektura-google/" target="_blank">посте об архитектуре Google</a>. Если в двух словах, то она представляет собой распределенное <strong>не</strong>реляционное хранилище данных, автоматически обеспечивающее репликацию и кеширование данных, а также практически гарантирующее постоянную доступность данных вне зависимости от сбоев низлежащего оборудования. Для доступа к нему разработчикам предоставляется специальный API и язык доступа к данным <em>GQL</em>, слегка напоминающий упрощенный диалект <em>SQL</em> (лишь отдаленно). Продукт в обращении достаточно своеобразен, как оказалось самый простой способ привыкнуть к работе с ним &#8212; выкинуть из головы все знания о традиционных СУБД и взглянуть на процесс хранения данных с чистого листа. Разномастные JOIN&#8217;ы и прочие изыски лишь мешают думать в терминах подобных систем.</p>
<p>Закончив тему с рекламой GAE, позвольте перейти к моим личным впечатлениям. Попробовал я данную платформу на вполне конкретном примере (в конце поста дам ссылочку на частично-готовый результат, если кому интересно), надо же в конце-концов на что-то с пользой убивать внезапно появившееся свободное время. ОтJava и прочей компании языков, основанных на JVM, я невероятно устал на теперь уже &#171;прошлой&#187; работе, так что взор мой упал на Python и давно находящийся у меня на слуху (в основном благодаря  <a id="vdse" title="Ивану Сагалаеву" href="http://www.softwaremaniacs.org/" target="_blank" rel="external nofollow">Ивану Сагалаеву</a>) фреймворк <a id="mnk8" title="Django" href="http://www.djangoproject.com/" target="_blank" rel="external nofollow">Django</a>. Ни с тем, ни с другим я ранее почти не был знаком на практике, разве что когда-то пытался помогать своим очень хорошим подругам с прохождением Python в университете (пользуясь случаем, передаю привет Полине, Кате и Юле, очень по вам скучаю <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ). Стоит упомянуть, что существует несколько сборок Django, адаптированных под GAE, наиболее продуманным и готовым к эксплуатации мне показался проект под названием  <a id="u899" title="app engine patch" href="http://code.google.com/p/app-engine-patch/" target="_blank">app engine patch</a>, которым я и воспользовался для экспериментов.</p>
<p>Django, как известно, является вполне традиционным веб-фрейморком, пропагандирующим свою вариацию на тему MVC (именуемую <strong>MVT</strong> &#8212; <span style="font-family: Courier New;">Model-View-Template</span>, но по сути абсолютно то же самое), а также целый ряд философских верований (вроде <em>DRY, Don&#8217;t repeat yourself</em>), которым даже отведена <a id="m71-" title="отдельная страница на сайте" href="http://docs.djangoproject.com/en/dev/misc/design-philosophies/" target="_blank" rel="external nofollow">отдельная страница на официальном сайте</a>. Адаптированная под GAE версия фреймворка отличается от стандартной по большому счету лишь замененной частью <span style="font-family: Courier New;">Model</span>, в которую очень неплохо вписался предоставляемый API к уже упоминавшемуся хранилищу данных. По всем остальным компонентам системы официальная документация по Django практически полностью актуальна и сильно помогла понять всю картину разработки веб-приложений с использованием данных технологий.</p>
<p>Пересказывать функциональные возможности Django как-то не входило в мои планы, все кому интересно и так уже в курсе или знают где посмотреть. Хочу лишь сказать, что со своей задачей упрощения и ускорения процесса разработки веб-приложений он полностью справляется: все основные функциональные компоненты реализуются просто, легко и быстро, при этом особой необходимости (да и желания) вникать в то, как оно в итоге работает не возникает. Если же взглянуть на Django в совокупности с возможностями GAE &#8212; вопросы масштабируемости также по большей части с плеч разработчика снимаются (если не забыть прочитать документацию по хранилищу и не творить глупостей). В общем что-что, а количество человекочасов, требуемых на создание качественного масштабируемого веб-приложения, эта парочка способна сократить изрядно.</p>
<p>Предложение Google по использованию платформы GAE выглядит очень заманчиво, не смотря на все ограничения под нее можно как портировать существующие приложения, так и легко создавать новые. Бесплатное использование до превышения квот также не может не радовать (кстати квоты там рассчитаны на мировой рынок, превысить большинство из них в рамках рунета &#8212; надо постараться, мне кажется). Но закончить данное повествование мне всетаки хотелось парой недокументированных или вкратце официально упоминавшихся &#171;ложек дегтя&#187;. Первая неприятная особенность: процессы, обрабатывающие пользовательские запросы приложений, умирают после очень небольшого времени простоя (таймаут судя по всему секунд 20-30). По истечении таймаута система освобождает использующиеся приложением ресурсы и когда после перерыва приходит очередной пользователь система вынуждена заново инициализироваться (чуть ли не заново компилировать байткод, хотя не уверен), что занимает около 5 секунд, а то и больше, во время которых пользователю ничего не остается кроме как терпеливо ждать. Сделали данный механизм видимо в связи с тем фактом, что подавляющее большинство развернутых приложений были сделаны просто чтобы побаловаться и были сразу же заброшены, что делает неэффективным постоянное держание в готовом состоянии даже одного процесса для каждого приложения. Таким образом использование GAE для тяжелых веб-приложений с небольшой целевой аудиторией не очень эффективно.  Минус второй: существуют некоторые жесткие ограничения, которые не разрешают увеличивать даже за деньги (по крайней мере расценок не видно). В их число входят максимальное время обработки одного запроса (30 секунд, правда не ясно распространяется ли это на выполнение задач в Task Queue и местном аналоге Cron&#8217;а), 30 активных процессов, обрабатывающих запросы приложения (что влечет за собой достаточно жесткое ограничение на количество запросов в секунду в районе нескольких сотен), максимальный размер HTTP запроса/ответа в 10 мегабайт и некоторые другие. В итоге &#171;тяжелые&#187; вычисления на GAE не погоняешь (хотя есть варианты с применением AJAX и, соответственно, большого количества запросов к GAE), от Digg-эффекта или DDOS&#8217;а есть шанс не уберечься, хостинг файлов не соорудить, но&#8230; разве это ограничения? Есть масса более интересных типов веб-приложений, способных прекрасно существовать в такой среде. Да и в крайнем случае всегда можно связаться с представителями Google с просьбой в виде исключение для Вашего приложения, судя по их заявлениям все ограничения носят искусственный характер и служат лишь для защиты от потребления неоправданно большого количества вычислительных ресурсов плохо спроектированных приложениями.</p>
<p>Этот пост написан по мотивам истории сайта <a id="csyo" title="CargoBook" href="http://www.cargobook.ru/" target="_blank">CargoBook</a>, который задумывался как сообщество для логистов, с плавным выходом на корпоративный рынок с продуктом в виде логистической информационной системы, предоставляемой по принципу SaaS. Сходив по ссылке можно заценить, что можно сделать средствами сладкой парочки Django+GAE и одного студента с почти гуманитарным образованием за часов эдак 20 работы в свободное время. Сейчас в задумке кроме меня участвует всего еще один человек: на правах автора идеи, но  если Вас заинтересовал данный проект и может быть Вы хотите присоединиться в каком-либо амплуа &#8212; пишите об этом в комментариях или <a id="hvgv" title="по другим контактным данным" href="../author" target="_blank">по другим контактным данным</a>.</p>
<p>Кстати в американской части Интернета о GAE ходят в основном негативные мнения, мол тормозит, большое время отклика, сплошные таймауты и ошибки. На практике пока не удалось столкнуться с чем-то подобным, но реально работающего приложения с активной пользовательской базой у меня пока нет для того, чтобы делать какие-то относительно объективные выводы. Может быть со временем что-нибудь изменится и более тонкие нюансы станут выползать на поверхность &#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/masshtabiruemost/django-v-gostyakh-u-google/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Google Chrome</title>
		<link>http://www.insight-it.ru/unix-way/linux/google-chrome/</link>
		<comments>http://www.insight-it.ru/unix-way/linux/google-chrome/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 21:36:49 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[браузер]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=90</guid>
		<description><![CDATA[Наверное многие из вас уже успели за последние пару дней стать свидетелями всей этой шумихи на просторах Сети, связанной с выходом Google на рынок браузеров. Сопутствующие релизу комиксы произвели на меня вполне положительное впечатление, благодаря достаточно большой актуальности поднятых в них проблем и интересным вариантам их решений. Так что я определенно решил, что поглядеть что [...]]]></description>
			<content:encoded><![CDATA[<p><img src="/wp-content/uploads/google-chrome.png" title="Google Chrome" alt="Google Chrome" style="float:right;margin:64px 16px;" /><br />
Наверное многие из вас уже успели за последние пару дней стать свидетелями всей этой шумихи на просторах Сети, связанной с выходом Google на рынок браузеров. Сопутствующие релизу <a href="http://www.google.com/googlebooks/chrome/#" target="_blank" rel="nofollow">комиксы</a> произвели на меня вполне положительное впечатление, благодаря достаточно большой актуальности поднятых в них проблем и интересным вариантам их решений. Так что я определенно решил, что поглядеть что за зверь такой &#8212; <strong>Google Chrome</strong>, определенно стоит, а что из этого вышло я и хотел бы тут рассказать, так что очередную рекламу нового продукта или какие-либо практически полезные советы у Вас врядли получится здесь обнаружить.<br />
<span id="more-90"></span><br />
Первым делом я посетил <a href="http://www.google.com/chrome" target="_blank" rel="nofollow">официальную страничку браузера</a> и практически сразу немного разочаровался, увидев в заголовке надпись <strong>Google Chrome (BETA) for W****ws</strong>. Сразу напросился вопрос: а где версия для <strong><em>Linux</em></strong>? Покопавшись в соседних страничках ничего подобного обнаружить не удалось &#8212; пришлось пожать плечами с мыслью &#171;наверное еще не сделали&#187;.</p>
<p>Зато через какое-то время наткнувшись на очередную заметку про все ту же довольно избитую тему, я заметил ма-а-аленькую неприметную <a href="http://dev.chromium.org/developers/how-tos/build-instructions-linux" target="_blank" rel="nofollow">ссылку</a> на &#171;инструкцию по компиляции Google Chrome из исходников в Linux&#187;. В очередной раз пожав плечами с мыслью &#171;а нам не привыкать, все равно Gentoo пользуюсь&#187; отправился вводить заветное заклинание в свежесозданную консольку.</p>
<p>Заклинание это выглядит примерно следующим образом:</p>
<pre lang="bash">
#!/bin/bash
CHROME=/usr/local/src
mkdir $CHROME/chrome
cd $CHROME/chrome
export LANG=C
$CHROME/depot_tools/gclient config http://src.chromium.org/svn/trunk/src
$CHROME/depot_tools/gclient sync
cd $CHROME/src/chrome
../third_party/scons/scons.py Hammer
</pre>
<p>Для успешного каста требуются следующие ингридиенты:</p>
<ul>
<li>subversion &gt;= 1.4</li>
<li>pkg-config &gt;= 0.20</li>
<li>python &gt;= 2.4</li>
<li>perl &gt;= 5.x</li>
<li>gcc/g++ &gt;= 4.2</li>
<li>bison &gt;= 2.3</li>
<li>flex &gt;= 2.5.34</li>
<li>gperf &gt;= 3.0.3</li>
<li>libnss3-dev &gt;= 3.12</li>
</ul>
<p>Начался процесс вполне оптимистично &#8212; строчки, генерируемые <strong>svn co</strong> побежали по экрану вполне весело, но когда этот процесс затянулся на более чем час &ndash; стало очевидно, что даже <em>Google</em> оказалось не по зубам выдержать такой наплыв желающх &#171;заценить&#187; новую игрушку и обеспечить достаточную пропускную способность на сервере с SVN. Правда и масштабы проекта мягко говоря впечатляют &#8212; директория с исходным кодом перед инициализацией компиляции оказалось очень даже весомой: <strong>2.6 GB</strong>. В общем в итоге я не придумал ничего лучше, чем по старой традиции оставить браузер компилироваться на ночь и с чистой совестью уползти спать.</p>
<p>В итоге оказалось, что в результате получается не вовсе браузер, а лишь некоторые непонятно зачем нужные бинарники: надо было внимательно читать инструкцию, особенно обведенный в красную рамку блок &#8212; студенческая привычка при чтении чего-либо подсознательно отфильтровывать всю на первый взгляд второстепенную информацию, попадающую в категорию &#171;слишком много букв&#187;, дала о себе знать <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  В общем там об этом все заранее предупреждали &#8212; я просто не заметил, ну да ладно: в wine-то оно точно заведется, все тот же Google с легкостью помог обнаружить соответствующий мануал, для моего Gentoo он свелся к следующему:</p>
<pre lang="bash">
#!/bin/bash
emerge --sync; emerge -av wine cabextract
cd /usr/bin
sudo wget www.kegel.com/wine/winetricks
sudo chmod +x winetricks
winetricks riched20 riched30 flash allfonts
cd ~
wget gpdl.google.com/chrome/install/149.27/chrome_installer.exe
wine chrome_installer.exe
rm chrome_installer.exe
</pre>
<p>Запуск с ходу из инсталлятора ничем хорошим не закончилcя, но вот такая команда вполне нормально запустила-таки браузер</p>
<pre lang="bash">
wine ~/.wine/drive_c/windows/profiles/m11/Local Settings/Application Data/Google/Chrome/Application/chrome.exe--new-http --in-process-plugins
</pre>
<p><em>(если кто соберется копипастить &#8212; не забываем подменять m11 на свое имя пользователя)</em></p>
<p>Первое впечатление &#8212; ужасный V**ta-like дизайн, вернее не то чтобы он совсем ужасный &#8212; минималистичность очень даже полезное свойство для дизайна браузера, но в мое KDE 3.5.9 темно-фиолетовой раскраски он не вписывается ну совсем никак. Ну да ладно &#8212; пока он стоит &#171;просто побаловаться&#187;, то можно и потерпеть. Далее я решил пройтись по основным &#171;фишечкам&#187;, заинтересовавшим меня в комиксах &#8212; все реализовано вполне &#171;как обещали&#187;, очень много концептуально правильных решений, которых в старом-добром FF определенно не хватает (перечислять наверное смысла нет &#8212; все и так уже, наверное, в курсе что там есть &#171;вкусненького&#187;). Но и многих абсолютно жизненно-важных вещей я там не обнаружил &#8212; начиная с блокировки рекламы и заканчивая все тем же стандартно-фиксированным дизайном и отсутствием центрального репозитория плагинов. Кое-какие неприятности можно свалить на все еще не окончательную доведенность до ума wine (проблемы с SSL/TSL, скажем), но на них я смело закрывал глаза &#8212; пока не будет полноценной Linux-версии о регулярном использовании данного продукта речи быть просто не может. Скорость работы новинки также произвела впечатление &#8212; на его фоне даже FF чисто субъективно показался медлительным (не смотря на все огрехи wine, как оно будет выглядить в native-версии &#8212; предсказать сложно).</p>
<p>Меню настроек оказалось вполне стандартным &#8212; ничего лишнего, лишь самые необходимые вещи, даже ребенок разберется. Хотя сложно на самом деле сказать плюс это или минус: если вдруг взбредет в голову потюнить что-либо более специфическое, могут возникнуть проблемы, хотя впринципе возможно там всетаки предусмотренно какое-то более расширенное меню настроек, по аналогии с about:config в FF, а я его просто не нашел.</p>
<p>Вдоволь наигравшись, я смело закрыл окошко браузера, с твердой уверенностью, что когда-нибудь потом обязательно заморочусь и с установкой и (возможно) эксплуатацией полноценной native Linux версии, когда граждане из Google соизволят-таки довести ее до работоспособного состояния &#8212; к тому времени глядишь и ситуацию с плагинами и темами исправят. Вот такая вот бестолковая история, спасибо, что дочитали до конца <img src='http://www.insight-it.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>P.S.: А вот <a href="/feed" target="_blank">тут есть RSS</a>, если вдруг кто еще не в курсе.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/unix-way/linux/google-chrome/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Архитектура Google Talk</title>
		<link>http://www.insight-it.ru/masshtabiruemost/arkhitektura-googletalk/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/arkhitektura-googletalk/#comments</comments>
		<pubDate>Thu, 22 May 2008 13:39:44 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Talk]]></category>
		<category><![CDATA[IM]]></category>
		<category><![CDATA[Jabber]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[sharding]]></category>
		<category><![CDATA[XMPP]]></category>
		<category><![CDATA[архитектура]]></category>
		<category><![CDATA[архитектура Google Talk]]></category>
		<category><![CDATA[присутствие]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/?p=79</guid>
		<description><![CDATA[Google Talk представляет собой сервис мгновенного обмена сообщениями от Google. В основе этого сервиса лежит XMPP протокол, более известный как Jabber. В России среди IM-сервисов несомненно наиболее широко распространен ICQ, но количество русских пользователей Jabber тоже неуклонно растет. Вам когда-нибудь доводилось задумываться какое количество сообщений приходится обрабатывать такого рода сервисам? Допустим есть абстрактный IM-сервис, которым [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.google.com/talk" target="_blank" rel="nofollow">Google Talk</a> представляет собой сервис мгновенного обмена сообщениями от Google. В основе этого сервиса лежит <strong><abbr title="eXtensible Messaging and Presence Protocol">XMPP</abbr></strong> протокол, более известный как <em>Jabber</em>. В России среди IM-сервисов несомненно наиболее широко распространен <em>ICQ</em>, но количество русских пользователей <em>Jabber</em> тоже неуклонно растет.</p>
<p>Вам когда-нибудь доводилось задумываться какое количество сообщений приходится обрабатывать такого рода сервисам? Допустим есть абстрактный IM-сервис, которым пользуется миллион пользователей, в среднем каждый из них отправляет сто текстовых сообщений. Сколько всего сообщений обработал и доставил сервис? Сто миллионов? Наивно!<br />
<span id="more-79"></span></p>
<h3>Введение</h3>
<p>Сервисы мгновенного обмена на самом деле подвергаются существенно большей нагрузке, чем это может показаться на первый взгляд. Давайте взглянем на расшифровку аббревиатуры XMPP: eXtensible Messaging and Presence Protocol. Обмен сообщениями &#8212; лишь одна из его функций, наиболее важная же его часть остается &#171;за сценой&#187; &#8212; отображение присутствия пользователей <em>online</em>.</p>
<p>Давайте посмотрим на наш абстрактный пример с точки зрения присутствия: пускай им пользуется все тот же миллион пользователей, когда один из них включил компьютер и появился online &#8212; он должен уведомить весь свой список контактов об этом событии, а также узнать кто из них находится online. Если этот список велик, то такое элементарное событие может обернуться для сервиса далеко не одной сотней обработанных и доставленных сообщений. Помимо простого изменения статуса online/offline подобную цепочку сообщений может генерировать и любое другое изменение статуса: связанное с отсутствием пользователя около компьютера или с изменением небольшого текстового сообщения, которое обычно отображается в контакт листе рядом с ником пользователя и призвано отображать текущее его состояние, занятие или чего там только не пишут (эта функция не всегда предоставляется IM-сервисами, но наверняка многим знакома по <em>ICQ</em>, если не по <em>Jabber</em>). Все эти сообщения как раз и стоят за &#171;presence&#187; в аббревиатуре XMPP, суммарный траффик, ими генерируемый, может в несколько раз превышать траффик от собственно самих текстовых сообщений.</p>
<p>Если учесть факты, описанные в предыдущем абзаце, не трудно догадаться, что зависимость суммарного количества presence-сообщений от количества пользователей IM-сервиса далеко не линейна. Их количество за какой-то период времени можно очень приблизительно посчитать как произведение трех параметров: количества пользователей online, средней длины списка контактов среди них и количества изменений статуса каждым пользователем. А каждый дополнительный пользователь в системе так или иначе увеличивает как минимум два из этих трех параметров.</p>
<p>Введение несколько затянулась, а проблема масштабируемости XMPP-сервисов я думаю теперь стала очевидна, так что сейчас очень подходящий момент, чтобы вернуться к основной теме разговора &#8212; сервису Google Talk и том, как команда его разработчиков решает эту проблему.</p>
<h3>Источники информации</h3>
<p>Наверное уже стало заметно, что это не очередной перевод, а лично мной написанный текстик. Так что сразу выдам <a href="http://video.google.com/videoplay?docid=6202268628085731280" rel="nofollow" target="_blank">видео</a>, являющееся основным источником информации, и продолжу.</p>
<h3>Архитектура</h3>
<p>Со стороны Google (о котором я, кстати говоря, <a href="/net/scalability/arkhitektura-google" target="_blank">уже писал</a>) было бы глупо строить сервис мгновенного обмена сообщениями в стороне от остальных коммуникационных сервисов, предоставляемых этой компанией. Еще до своего публичного старта Google Talk был интегрирован в почтовый сервис <a href="http://www.gmail.com" rel="nofollow" target="_blank">GMail</a> и социальную сеть <a href="http://www.orkut.com" rel="nofollow" target="_blank">Orkut</a>: эти сервисы просто запрашивали у Google Talk присутствие online пользователей из своего списка контактов при возникновении соответствующих событий, но при этом не отображали результаты в своих страницах. Таким образом разработчики получили возможность оценить предстоящие нагрузки и готовность сервиса к публичному запуску намного более точно, чем они могли бы это сделать средствами синтетических тестов.</p>
<p>В отношении распределения нагрузок, сразу же был выбран и реализован подход, связанный с разбиением пользователей на группы и распределением работы с каждой отдельной группой по разным серверам. Это позволило избежать всей той эволюции серверной части приложения от одного сервера до большого кластера, что впрочем вполне оправданно, так как сразу же после запуска сервису предстояло столкнуться с огромным количеством пользователей и не ничуть не меньшей нагрузкой. Разработчики не забыли и сразу же предусмотреть безболезненный перенос пользователей с одного сервера на другой без видимых для него изменений, это позволило очень гибко изменять количество серверов в системе.</p>
<p>С точки зрения интеграции сервиса с другими проектами <a href="/tag/google" target="_blank">Google</a>, очень важно было предоставить определенный уровень абстракции для взаимодействия в виде API и набора адресов, по которым необходимо обращаться к сервису. Придерживаясь одного API можно производить практически любые архитектурные или программные изменения в рамках проекта таким образом, что все его пользователи и проекты, в которые он интегрирован, просто не заметят что что-то изменилось. Адреса, к которым происходит обращение при обмене данных, так же являются своеобразной абстракцией &#8212; можно переместить сервис в новый датацентр и благодаря DNS трафик будет направляться в нужное место.</p>
<p>С другой стороны необходимо учитывать и программное обеспечение работающие ниже уровнем, чем собственно код приложения: особенно ядро операционной системы и используемые библиотеки. В данном случае большую роль играет количество открытых TCP соединений, так как IM требует большое их количество, но активность в них не велика.</p>
<p>Разработчики Google Talk постарались как можно больше внимания уделить возможным сбоям и связанным с ними ситуациям. Любое даже запланированное временное прекращение функционирования какой-то части системы может резко увеличить нагрузку на остальную часть, даже если это просто перезагрузка части системы &#8212; из-за очистившегося кэша серверы снова начнут полноценно функционировать далеко не сразу, не говоря уже о непредвиденных сбоях, когда последствия намного более глобальны. Для своевременного устранения потенциальных проблем как с общем функционированием системы, так и с недостаточной производительностью, ведутся логи для всех этапов обработки запросов, а также предусмотрена возможность профайлинга прямо на работающих в системе серверах.</p>
<p>Но не стоит забывать и о клиентской части программного обеспечения: какая-нибудь глупая ошибка в коде клиента сервиса запросто может устроить DDoS атаку на сервис, что и случилось с одной из ранних версий клиента Google Talk. Помимо этого необходимо поддерживать совместимость разных версий клиентских приложений.</p>
<h3>Заключение</h3>
<p>Благодаря описанным выше принципам Google Talk удается обрабатывать каждое из миллиардов сообщений в день менее чем за 100 миллисекунд. Тесная интеграция с другими сервисами <a href="/tag/google" target="_blank">Google</a> позволила проекту сразу же получить невероятную популярность, а продуманный подход к разработке сервиса позволил справиться с огромной нагрузкой.</p>
<p>На этот раз статья получилась скорее о специфике сервиса, чем о его реализации. Технической информации найти практически не удалось, так что очень кратко все, но надеюсь и в таком варианте было достаточно интересно почитать. Напоследок хочу порекомендовать <a href="/feed" target="_blank">подписаться на RSS</a>, если не хотите пропустить публикацию новых постов.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/arkhitektura-googletalk/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Архитектура Google</title>
		<link>http://www.insight-it.ru/masshtabiruemost/arkhitektura-google/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/arkhitektura-google/#comments</comments>
		<pubDate>Thu, 31 Jan 2008 15:05:56 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[BigTable]]></category>
		<category><![CDATA[featured]]></category>
		<category><![CDATA[GFS]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[MapReduce]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[Sawzall]]></category>
		<category><![CDATA[архитектура]]></category>
		<category><![CDATA[архитектура Google]]></category>
		<category><![CDATA[интернет]]></category>
		<category><![CDATA[кластер]]></category>
		<category><![CDATA[поиск]]></category>
		<category><![CDATA[сервер]]></category>
		<category><![CDATA[хранение данных]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/net/scalability/arkhitektura-google/</guid>
		<description><![CDATA[Эта статья датируется 2008 годом, новая версия: Архитектура Google 2011 Google &#8212; Король масштабируемости. Каждый хоть раз слышал о Google благодаря их всеобъемлющему, &#171;умному&#187; и быстрому поисковому сервису, но ни для кого не секрет, что они не ограничиваются только им. Их платформа для построения масштабируемых приложений позволяет выпускать множество удивительно конкурентноспособных интернет-приложений, работающих на уровне [...]]]></description>
			<content:encoded><![CDATA[<div class="frame"><em>Эта статья датируется 2008 годом, новая версия: <a href="/masshtabiruemost/arkhitektura-google-2011/">Архитектура Google 2011</a></em></div>
<blockquote style="margin-left: 200px"><p><strong><a href="/tag/google" target="_blank">Google</a></strong> &#8212; Король масштабируемости.</p></blockquote>
<p>Каждый хоть раз слышал о <a href="/tag/google" target="_blank">Google</a> благодаря их всеобъемлющему, &#171;умному&#187; и быстрому поисковому сервису, но ни для кого не секрет, что они  не ограничиваются только им. Их платформа для построения масштабируемых приложений позволяет выпускать множество удивительно конкурентноспособных интернет-приложений, работающих на уровне всего Интернета вцелом. Они ставят перед собой цель постоянно строить все более и более производительную и масштабируемую архитектуру для поддержки своих продуктов. Как же им это удается?</p>
<p><span id="more-35"></span></p>
<h3>Источники информации</h3>
<p><em>Сразу хочу сказать, что эта запись является переводом с английского, автор <a href="http://highscalability.com/google-architecture" target="_blank" rel="nofollow">оригинальной версии</a> &#8212; <a href="http://highscalability.com/user/todd-hoff" target="_blank" rel="nofollow">Todd Hoff</a>. Оригинал написан приблизительно в середине 2007 года, но по-моему до сих пор очень даже актуально.</em></p>
<p>Далее следует перечисление источников информации из оригинала:</p>
<ul>
<li><a href="http://video.google.com/videoplay?docid=-5699448884004201579" target="_blank" rel="_nofollow">Video: Построение больших систем в Google</a></li>
<li><a href="http://labs.google.com/papers/gfs.html" target="_blank" rel="_nofollow">Google Lab: Файловая система Google (GFS)</a></li>
<li><a href="http://labs.google.com/papers/mapreduce.html" target="_blank" rel="_nofollow">Google Lab: MapReduce: упрощенная обработка данных на больших кластерах</a></li>
<li><a href="http://labs.google.com/papers/bigtable.html" target="_blank" rel="_nofollow">Google Lab: BigTable.</a></li>
<li><a href="http://video.google.com/videoplay?docid=7278544055668715642" target="_blank" rel="_nofollow">Video: BigTable: система распределенного хранения данных.</a></li>
<li><a href="http://www.baselinemag.com/article2/0,1540,1985514,00.asp" target="_blank" rel="_nofollow">Как работает Google</a> от David Carr в Baseline Magazine.</li>
<li><a href="http://labs.google.com/papers/sawzall.html" target="_blank" rel="_nofollow">Google Lab: интерпретирование данных. Параллельный анализ с помощью Sawzall.</a></li>
<li><a href="http://www.25hoursaday.com/weblog/2007/06/25/GoogleScalabilityConferenceTripReportMapReduceBigTableAndOtherDistributedSystemAbstractionsForHandlingLargeDatasets.aspx" target="_blank" rel="_nofollow">Записи с конференции по масштабированию от Dare Obasonjo.</a></li>
</ul>
<h3>Платформа</h3>
<ul>
<li><a href="/tag/linux" target="_blank">Linux</a></li>
<li>Большое разнообразие языков программирования: Python, <a href="/tag/java" target="_blank">Java</a>, C++</li>
</ul>
<h3>Что внутри?</h3>
<h4>Статистика</h4>
<ul>
<li>На 2006 год система включала в себя 450000 недорогих серверов</li>
<li>За 2005 год было проиндексировано 8 миллиардов страниц. На данный момент… кто знает?</li>
<li>На момент написания оригинала Google включает в себя более 200 <a href="/tag/gfs" target="_blank">GFS</a> кластеров. Один кластер может состоять из 1000 или даже 5000 компьютеров</li>
<li>Десятки и сотни тысяч компьютеров получают данные из <a href="/tag/gfs" target="_blank">GFS</a> кластеров, которые насчитывают более 5 петабайт дискового пространства. Суммарные пропускная способность операций записи и чтения между дата центрами может достигать 40 гигабайт в секунду</li>
<li><a href="/tag/bigtable" target="_blank">BigTable</a> позволяет хранить миллиарды ссылок (URL), сотни терабайт снимков со спутников, а также настройки миллионов пользователей</li>
</ul>
<p><em>// Цифры не первой свежести конечно, но тоже неплохо.</em></p>
<h4>Стек</h4>
<p><a href="/tag/google" target="_blank">Google</a> визуализирует свою инфраструктуру в виде трехслойного стека:</p>
<ul>
<li><em>Продукты:</em> поиск, реклама, электронная почта, карты, видео, чат, блоги</li>
<li><em>Распределенная инфраструктура системы:</em> <a href="/tag/gfs" target="_blank">GFS</a>, <a href="/tag/mapreduce" target="_blank">MapReduce</a> и <a href="/tag/bigtable" target="_blank">BigTable</a></li>
<li><em>Вычислительные платформы:</em> множество компьютеров во множестве датацентров</li>
<li>Легкое развертывание для компании при низком уровне издержек</li>
<li>Больше денег вкладывается в оборудование для исключения возможности потерь данных</li>
</ul>
<h4>Надежное хранение данных с помощью <a href="/tag/gfs" target="_blank">GFS</a></h4>
<ul>
<li>Надежное масштабируемое хранение данных крайне необходимо для любого приложения. <strong>GFS</strong> является основой их платформы хранения информации</li>
<li><strong><a href="/tag/gfs" target="_blank">GFS</a></strong> &#8212; большая распределенная файловая система, способная хранить и обрабатывать огромные объемы информации</li>
<li><em>Зачем строить что-либо самим вместо того, чтобы просто взять это с полки?</em> Они контролируют абсолютно всю систему и именно эта платформа отличает их от всех остальных. Она предоставляет:
<dl>
<dd>– высокую надежность дата центров</dd>
<dt>
</dt>
<dd>– масштабируемость до тысяч сетевых узлов</dd>
<dt>
</dt>
<dd>– высокую пропускную способность операций чтения и записи</dd>
<dt>
</dt>
<dd>– поддержку больших блоков данных, размер которых может измеряться в гигабайтах</dd>
<dt>
</dt>
<dd>– эффективное распределение операций между датацентрами для избежания возникновения &#171;узких мест&#187; в системе</dd>
</dl>
</li>
<li>В системе существуют мастер-сервера и сервера, собственно хранящие информацию:
<dl>
<dt>
</dt>
<dd>– Мастер-сервера хранят метаданные для всех файлов. Сами данные хранятся блоками по 64 мегабайта на остальных серверах. Клиенты могут выполнять операции с метаданными на мастер-серверах, чтобы узнать на каком именно сервере расположены необходимые данные.</dd>
<dt>
</dt>
<dd>– Для обеспечения надежности один и тот же блок данных хранится в трех экземплярах на разных серверах, что обеспечивает избыточность на случай сбоев в работе какого-либо сервера.</dd>
<dt>
</dt>
<dd>– Новые приложения могут пользоваться как существующими кластерами, так и новыми, созданными специально для них.</dd>
<dt>
</dt>
<dd>– Ключ успеха заключается в том, чтобы быть уверенными в том, что у людей есть достаточно вариантов выбора для реализации их приложений. <strong><a href="/tag/gfs" target="_blank">GFS</a></strong> может быть настроена для удовлетворения нужд любого конкретного приложения.</dd>
</dl>
</li>
</ul>
<h4>Работаем с данными при помощи MapReduce</h4>
<ul>
<li>Теперь, когда у нас есть отличная система хранения, что же делать с такими объемами данных? Допустим, у нас есть много терабайт данных, равномерно распределенных между 1000 компьютерами. Коммерческие базы данных не могут эффективно масштабироваться до такого уровня, именно в такой ситуации в дело вступает технология <strong><a href="/tag/mapreduce" target="_blank">MapReduce</a></strong>.</li>
<li><strong><a href="/tag/mapreduce" target="_blank">MapReduce</a></strong> является программной моделью и соответствующей реализацией обработки и генерации больших наборов данных. Пользователи могут задавать функцию, обрабатывающую пары ключ/значение для генерации промежуточных аналогичных пар, и сокращающую функцию, которая объединяет все промежуточные значения, соответствующие одному и тому же ключу. Многие реальные задачи могут быть выражены с помощью этой модели. Программы, написанные в таком функциональном стиле автоматически распараллеливаются и адаптируются для выполнения на обширных кластерах. Система берет на себя детали разбиения входных данных на части, составления расписания выполнения программ на различных компьютерах, управления ошибками, и организации необходимой коммуникации между компьютерами. Это позволяет программистам, не обладающим опытом работы с параллельными и распределенными системами, легко использовать все ресурсы больших распределенных систем.</li>
<li>Зачем использовать <strong><a href="/tag/mapreduce" target="_blank">MapReduce</a></strong>?
<dl>
<dd>– Отличный способ распределения задач между множеством компьютеров</dd>
<dd>– Обработка сбоев в работе</dd>
<dd>– Работа с различными типами смежных приложений, таких как поиск или реклама. Возможно предварительное вычисление и обработка данных, подсчет количества слов, сортировка терабайт данных и так далее</dd>
<dd>– Вычисления автоматически приближаются к источнику ввода-вывода</dd>
</dl>
</li>
<li><strong><a href="/tag/mapreduce" target="_blank">MapReduce</a></strong> использует три типа серверов:
<dl>
<dd>– <em>Master:</em> назначают задания остальным типам серверов, а также следят за процессом их выполнения</dd>
<dd>– <em>Map:</em> принимают входные данные от пользователей и обрабатывают их, результаты записываются в промежуточные файлы</dd>
<dd>– <em>Reduce:</em> принимают промежуточные файлы от Map-серверов и сокращают их указанным выше способом</dd>
</dl>
</li>
<li>Например, мы хотим посчитать количество слов на всех страницах. Для этого нам необходимо передать все страницы, хранимые в <strong>GFS</strong>, на обработку в <strong>MapReduce</strong>. Этот процесс будет происходить на тысячах машин одновременно с полной координацией действий, в соответствии  с автоматически составленным расписанием выполняемых работ, обработкой потенциальных ошибок, и передачей данных выполняемыми автоматически.
<dl>
<dd>– Последовательность выполняемых действий выглядела бы следующим образом: <em>GFS → Map → перемешивание → Reduce → запись результатов обратно в GFS</em></dd>
<dd>– Технология <strong>MapReduce</strong> состоит из двух компонентов: соответственно <em>map</em> и <em>reduce</em>. Map отображает один набор данных в другой, создавая тем самым пары ключ/значение, которпыми в нашем случае являются слова и их количества.</dd>
<dd>– В процессе перемешивания происходит аггрегирование типов ключей.</dd>
<dd>– Reduction в нашем случае просто суммирует все результаты и возвращает финальный результат.</dd>
</dl>
</li>
<li>В процессе индексирования <a href="/tag/google" target="_blank">Google</a> подвергает поток данных обработке около 20 разных механизмов сокращения. Сначала идет работа над всеми записями и аггрегированными ключами, после чего результат передается следующему механизму и второй механизм уже работает с результатами работы первого, и так далее.</li>
<li>Программы могут быть очень маленькими, всего лишь от 20 до 50 строк кода.</li>
<li>Единственной проблемой могут быть &#171;отстающие компьютеры&#187;. Если один компьютер работает существенно медленнее, чем все остальные, это будет задерживать работу всей системы в целом.</li>
<li>Транспортировка данных между серверами происходит в сжатом виде. Идея заключается в том, что ограничивающим фактором является пропускная способность канала и ввода-вывода, что делает резонным потратить часть процессорного времени  на компрессию и декомпрессию данных.</li>
</ul>
<h4>Хранение структурированных данных в BigTable</h4>
<ul>
<li><strong>BigTable</strong> является крупномасштабной, устойчивой к потенциальным ошибкам, самоуправляемой системой, которая может включать в себя терабайты памяти и петабайты данных, а также управлять миллионами операций чтения и записи в секунду.</li>
<li><strong>BigTable</strong> представляет собой распределенный механизм хэширования, построенный поверх <strong><a href="/tag/gfs" target="_blank">GFS</a></strong>, а вовсе не реляционную базу данных и, как следствие, не поддерживает <a href="/tag/sql" target="_blank">SQL</a>-запросы и операции типа Join.</li>
<li>Она предоставляет механизм просмотра данных для получения доступа к структурированным данным по имеющемуся ключу. <strong><a href="/tag/gfs" target="_blank">GFS</a></strong> хранит данные не поддающиеся пониманию, хотя многим приложениям необходимы структурированные данные.</li>
<li>Коммерческие базы данных попросту не могут масштабироваться до такого уровня и, соответственно, не могут работать с тысячами машин одновременно.</li>
<li>С помощью контролирования своих низкоуровневых систем хранения данных, <a href="/tag/google" target="_blank">Google</a> получает больше возможностей по управлению и модификации их системой. Например, если им понадобится функция, упрощающая координацию работы между датацентрами, они просто могут написать ее и внедрить в систему.</li>
<li>Подключение и отключение компьютеров к функционирующей системе никак не мешает ей просто работать.</li>
<li>Каждый блок данных хранится в ячейке, доступ к которой может быть предоставлен как по ключу строки или столбца, так и по временной метке.</li>
<li>Каждая строка может храниться в одной или нескольких таблицах. Таблицы реализуются в виде последовательности блоков по 64 килобайта, организованных в формате данных под названием <strong>SSTable</strong>.</li>
<li>В <strong><a href="/tag/bigtable" target="_blank">BigTable</a></strong> тоже используется три типа серверов:
<dl>
<dd>– <em>Master:</em> распределяют таблицы по Tablet-серверам, а также следят за расположением таблиц и перераспределяют задания в случае необходимости.</dd>
<dd>– <em>Tablet:</em> обрабатывают запросы чтения/записи для таблиц. Они раделяют таблицы, когда те превышают лимит размера (обычно 100-200 мегабайт). Когда такой сервер прекращает функционирование по каким-либо причинам, 100 других серверов берут на себя по одной таблице и система продолжает работать как-будто ничего не произошло.</dd>
<dd>– <em>Lock:</em> формируют распределенный сервис ограничения одновременного доступа. Операции открытия таблицы для записи, анализа Master-сервером или проверки доступа должны быть взаимноисключающими.</dd>
</dl>
</li>
<li>Локальная группировка может быть использована для физического хранения связанных данных вместе, чтобы обеспечить лучшую локализацию ссылок на данные.</li>
<li>Таблицы по возможности кэшируются в оперативной памяти серверов.</li>
</ul>
<h3>Оборудование</h3>
<ul>
<li>Как эффективно организовать большую группу компьютеров с точки зрения издержек и производительности?</li>
<li>Используется самое обыкновенное ультра-дешевое оборудование и поверх него строится программное обеспечение, способное спокойно пережить смерть любой части оборудования.</li>
<li>Тысячекратный рост вычислительной мощности может быть достигнут с издержками в 33 раза меньшими, если воспользоваться толерантной к сбоям инфраструктурой, по сравнению с инфраструктурой, построенной на высоконадежных компонентах. Надежность строится поверх ненадежных компонентов.</li>
<li><a href="/tag/linux" target="_blank">Linux</a>, домашнее размещение серверов, материнске платы предназначенные для персональных компьютеров, дешевые средства хранения данных.</li>
<li>Цена за каждый ватт энергии в расчете на производительность не становится меньше, что ведет к большим проблемам связанным с энергообеспечением и охлаждением.</li>
<li>Использование совместного размещения в своих и арендуемых датацентрах.</li>
</ul>
<h3>Разное</h3>
<ul>
<li>Быстрый выпуск изменений более предпочтителен, чем ожидание.</li>
<li>Библиотеки &#8212; превалирующий метод построения программ.</li>
<li>Некоторые приложения предоставляются в виде сервисов.</li>
<li>Инфраструктура управляет определением версий приложений таким образом, что они могут выпускать новые продукты, не боясь сломать работу какого-либо компонента системы.</li>
</ul>
<h3>Пути развития</h3>
<ul>
<li>Поддержка географически распределенных кластеров.</li>
<li>Создание единого глобального пространства имен для всех данных. На данный момент данные распределены по кластерам.</li>
<li>Более автоматизированные передача и обработка данных</li>
<li>Решение вопросов, связанных с поддержанием работоспособности сервисов даже в тех случаях, когда целый кластер отключается от системы в связи с техническими работами или каким-либо сбоем в работе.</li>
</ul>
<h3>Подводим итоги</h3>
<ul>
<li><strong>Инфраструктура может быть конкурентным преимуществом.</strong> Это определенно так для Google. Они могут выпускать новые интернет сервисы быстрее, с меньшими издержками, на таком уровне, что мало кто сможет составить им конкуренцию. Подход многих компаний сильно отличается от подхода <a href="/tag/google" target="_blank">Google</a>, эти компании рассматривают инфраструктуру как статью расходов, они обычно используют совсем другие технологии и совсем не задумываются о планировании и организации своей системы. Google позиционирует себя как компанию по построению систем, что является очень современным подходом к разработке программного обеспечения.</li>
<li><strong>Охватывание нескольких дата центров до сих пор является нерешенной проблемой.</strong> Большинство сайтов базируется в одном или двух дата центрах. Полное распределение сайта между несколькими датацентрами является хитрой задачей.</li>
<li>Взгляните на <em><a href="http://hadoop.apache.org/core/" target="_blank" rel="nofollow">Hadoop</a></em>, если у Вас нет времени на собственноручное построение всей архитектуры с нуля. <em>Hadoop</em> явялется opensource воплощением в жизнь многих идей здесь представленных.</li>
<li>Часто недооцениваемым преимуществом платформенного подхода является тот факт, что даже неопытные разработчики могут быстро и качественно реализовывать трудоемкие приложения на базе платформы. Но если бы каждый проект требовал одинаково распределенной архитектуры, то это создало бы много проблем, так как люди, которые понимают как это делается, являются достаточно большой редкостью.</li>
<li><strong>Совместная деятельность не всегда является таким уж плохим занятием.</strong> Если все части системы работают взаимосвязанно, то улучшение в одной из них сразу и абсолютно прозрачно отразится положительным образом и на остальных компонентах системы. В противном случае такой эффект наблюдаться не будет.</li>
<li>Построение самоуправляемых систем позволяет более легко перераспределять ресурсы между серверами, расширять систему, отключать некоторые компьютеры и элегантно проводить обновления.</li>
<li>Производить длительные операции стоит параллельно.</li>
<li>Всему, что было сделано Google, предшествовало искусство, а не только крупномасштабное развертывание системы.</li>
<li>Учитывайте возможность <strong>компрессии данных</strong>, она является очень неплохим решением, если остается лишнее процессорное время, но присутствует нехватка пропускной способности.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/arkhitektura-google/feed/</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
	</channel>
</rss>

