<?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; BigTable</title>
	<atom:link href="http://www.insight-it.ru/tag/bigtable/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>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>Архитектура YouTube</title>
		<link>http://www.insight-it.ru/masshtabiruemost/arkhitektura-youtube/</link>
		<comments>http://www.insight-it.ru/masshtabiruemost/arkhitektura-youtube/#comments</comments>
		<pubDate>Sat, 01 Mar 2008 13:07:09 +0000</pubDate>
		<dc:creator>Иван Блинков</dc:creator>
				<category><![CDATA[Масштабируемость]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[BigTable]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[NetScalar]]></category>
		<category><![CDATA[psyco]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[YouTube]]></category>
		<category><![CDATA[архитектура]]></category>
		<category><![CDATA[архитектура YouTube]]></category>
		<category><![CDATA[интернет]]></category>
		<category><![CDATA[производительность]]></category>
		<category><![CDATA[хранение данных]]></category>

		<guid isPermaLink="false">http://www.insight-it.ru/net/scalability/arkhitektura-youtube/</guid>
		<description><![CDATA[Рост YouTube был феноменально быстр, количество просмотров видео превысило 100 миллионов в сутки при том, что только около пяти человек работало над масштабированием проекта. Как им удается управлять предоставлением всех этих видеороликов своим посетителям? Как они развивались с тех пор, как были приобретены Google? Источники информации В отличии от остальных, этот перевод статьи от Todd [...]]]></description>
			<content:encoded><![CDATA[<p>Рост <a href="http://www.youtube.com" target="_blank" rel="nofollow">YouTube</a> был феноменально быстр, количество просмотров видео превысило 100 миллионов в сутки при том, что только около пяти человек работало над масштабированием проекта. Как им удается управлять предоставлением всех этих видеороликов своим посетителям? Как они развивались с тех пор, как были приобретены <a href="/tag/google" target="_blank">Google</a>?<br />
<span id="more-51"></span></p>
<h3>Источники информации</h3>
<p><em>В отличии от <a href="/highload" target="_blank">остальных</a>, этот перевод <a href="http://highscalability.com/youtube-architecture" target="_blank" rel="nofollow">статьи</a> от <a href="http://highscalability.com/user/todd-hoff" rel="nofollow" target="_blank">Todd Hoff</a>&#8216;а уже был выполнен до меня (при желании можно найти в любой поисковой системе), но я все равно решил опубликовать свою версию просто для собственного развития и полноты <a href="/highload" target="_blank">коллекции</a>, да и многим читателям, возможно, покажется интересным. Что ж, перейдем к источнику информации оригинала:</em></p>
<ul>
<li><a href="http://video.google.com/videoplay?docid=-6304964351441328559" target="_blank" rel="nofollow">Google Video</a></li>
</ul>
<h3>Платформа</h3>
<ul>
<li><a href="/tag/apache" target="_blank">Apache</a></li>
<li><a href="/tag/python" target="_blank">Python</a></li>
<li><a href="/tag/linux" target="_blank">Linux</a> (SuSe)</li>
<li><a href="/tag/mysql" target="_blank">MySQL</a></li>
<li><a href="/tag/psyco" target="_blank">psyco</a>, динамический компилятор <a href="/tag/python" target="_blank">Python</a> &rarr; <a href="/tag/c" target="_blank">C</a></li>
<li><a href="/tag/lighttpd" target="_blank">lighttpd</a> для видео</li>
</ul>
<h3>Что внутри?</h3>
<h4>Статистика</h4>
<ul>
<li>Поддержка обработки более 100 миллионов видеороликов в сутки</li>
<li>Сервис был запущен в феврале 2005 года</li>
<li>В марте 2006 года в среднем производилось около 30 миллионов просмотров видео в день</li>
<li>К июлю 2006 года эта цифра достигла 100 миллионов просмотров в день</li>
<li>Над проектом работают: 2 системных администратора, 2 архитектора масштабируемости программного обеспечения, 2 разработчика новых возможностей, 2 инженера по сетям, 1 архитектор баз данных</li>
</ul>
<h4>Рецепт управления огромными темпами роста</h4>
<pre lang="PHP">
while (true)
{
   identify_and_fix_bottlenecks();
   drink();
   sleep();
   notice_new_bottleneck();
}
</pre>
<p>Этот цикл проходит далеко не одну итерацию ежедневно.</p>
<h3>Веб-серверы</h3>
<ul>
<li><a href="/tag/netscalar" target="_blank">NetScalar</a> используется для балансировки нагрузки и кэширования статического контента.</li>
<li><a href="/tag/apache" target="_blank">Apache</a> работает с включенным <strong>mod_fast_cgi</strong></li>
<li>Запросы отправляются на обработку с помощью серверного приложения на <a href="/tag/python" target="_blank">Python</a>.</li>
<li>Приложение взаимодействует с различными базами данных и другими источниками информации для формирования финальной <a href="/tag/html" taget="_blank">HTML</a>-страницы.</li>
<li>Масштабирование обычно происходит просто добавлением дополнительных компьютеров.</li>
<li>Код на <a href="/tag/python" target="_blank">Python</a> обычно не является узким местом системы, он проводит большую часть времени заблокированным RPC.</li>
<li><a href="/tag/python" target="_blank">Python</a> предоставляет быстроту и гибкость в процессе разработки и развертывания. Этот факт является очень актуальным, если учесть кто является их конкурентами.</li>
<li>На формирование страницы обычно уходит не более 100 миллисекунд.</li>
<li><a href="/tag/psyco" target="_blank">psyco</a>, динамический компилятор <a href="/tag/python" target="_blank">Python</a> &rarr; <a href="/tag/c" target="_blank">C</a>, использует JIT подход к компилированию для оптимизации внутренних циклов</li>
<li>Для интенсивных вычислений, таких как шифрование, используются расширения, написанные на <a href="/tag/c" target="_blank">C</a>.</li>
<li>Какая-то часть заранее сгенерированного <a href="/tag/html" taget="_blank">HTML</a> хранится в кэше.</li>
<li>Кэширование данных в <a href="/tag/subd" target="_blank">СУБД</a> на уровне строк.</li>
<li>Кэшируются полностью сформированные объекты <a href="/tag/python" target="_blank">Python</a>.</li>
<li>Некие данные вычисляются и отправляется каждому серверу для кэширования в локальной оперативной памяти. Эта стратегия годится далеко не всегда, чаще всего более эффективен другой метод: самым быстрым кэшем является само серверное приложение, а отправка уже готовых данных остальным серверам для дальнейшей обработки обычно не занимает так много времени. Для организации такого подхода необходимы агенты, осуществляющие отслеживание изменений, предварительную обработку и отправку данных.</li>
</ul>
<h3>Управление видео</h3>
<ul>
<li>Издержки включают в себя затраты на пропускную способность каналов связи, приобретение нового оборудования и оплату огромных счетов за электроэнергию.</li>
<li>Каждый видеоролик расположен на мини-кластере, что означает управление работой с ним группой из нескольких компьютеров.</li>
<li>Использование кластеров влечет за собой:
<dl>
<dd>&ndash; увеличение производительности пропорционально количеству дисков, на которых расположен контент;</dd>
<dd>&ndash; возможность поддержания функционирования всей системы даже в случае прекращения работоспособности части компьютеров;</dd>
<dd>&ndash; возможность организации создания резервных копий <a href="/tag/online" target="_blank">online</a>.</dd>
</dl>
</li>
<li>В роли HTTP-сервера для работы с видео используется <a href="/tag/lighttpd" target="_blank">lighttpd</a>:
<dl>
<dd>&ndash; Он способен дать фору <a href="/tag/apache" target="_blank">Apache</a> в плане производительности предоставления статического контента;</dd>
<dd>&ndash; Для работы с событиями ввода-вывода используется <strong>epoll</strong>;</dd>
<dd>&ndash; Многопоточная конфигурация способна обрабатывать большее количество соединений одновременно;</dd>
</dl>
</li>
<li>Самая популярная часть контента размещается в <strong><abbr title="Content Delievery Network">CDN</abbr></strong>
<dd>
<dd>&ndash; <strong><abbr title="Content Delievery Network">CDN</abbr></strong> реплицирует весь контент в разных частях системы;</dd>
<dd>&ndash; Компьютеры <strong><abbr title="Content Delievery Network">CDN</abbr></strong> в основном предоставляют данные напрямую из кэша в оперативной памяти, так как ассортимент популярного видео с течением времени меняется достаточно медленно.</dd>
</dl>
</li>
<li>Менее популярный контент, количество просмотров в день которого варьируется в диапазоне от одного до двадцати, обычно размещается на серверах <a href="/tag/youtube" target="_blank">YouTube</a>, расположенных в датацентрах на <em>colocation</em>:
<dl>
<dd>&ndash; Не смотря на тот факт, что такое видео может быть просмотрено всего несколько раз за день, количество таких роликов велико, что приводит к случайным блокировкам данных на жестких дисках;</dd>
<dd>&ndash; В такой ситуации кэширование практически бесполезно, инвестиции в кэширование контента с низкой вероятностью востребованности обычно является пустой тратой средств;</dd>
<dd>&ndash; Более детальная настройка низкоуровневых компонентов системы, таких как, например, RAID-контроллеры, в этой ситуации может достаточно положительно повлиять на производительность;</dd>
<dd>&ndash; Выбор оптимального размера оперативной памяти на каждой машине также очень важен: как недостаточное, так и излишнее ее количество не являются эффективными решениями.</dd>
</dl>
</li>
</ul>
<h4>Ключевые моменты</h4>
<ul>
<li>Чем <strong>проще</strong> &#8212; тем <strong>лучше</strong>;</li>
<li>Старайтесь минимизировать количество устройств (маршрутизаторов, коммутаторов и тому подобных) между контентом и пользователями: далеко не факт, что все они будут способны выдерживать интенсивную нагрузку;</li>
<li>Старайтесь использовать самое обыкновенное оборудование. Hi-end оборудование обычно влечет за собой рост издержек, связанных с сопутствующими процессами, например технической поддержкой, а также уменьшает вероятность нахождение решения той или иной проблемы с оборудованием в Сети;</li>
<li>Используйте самые простые распространенные утилиты. <a href="/tag/youtube" target="_blank">YouTube</a> использует идущий в комплекте с <a href="/tag/linux" target="_blank">Linux</a> набор утилит для построения системы именно на их основе;</li>
<li>Не забывайте о случайных доступах к жестким дискам, эту, казалось бы, мелочь тоже стоит настроить.</li>
</ul>
<h3>Управление миниатюрами видео</h3>
<ul>
<li>На удивление сложно решаемая задача, особенно если необходима эффективность;</li>
<li>Для каждого видео хранится 4 миниатюры, что приводит к существенному преобладанию количества миниатюр над количеством видеороликов;</li>
<li>Миниатюры хранятся всего на нескольких компьютерах;</li>
<li>Некоторые проблемы наблюдаются в связи с работой с большим количеством маленьких объектов:
<dl>
<dd>&ndash; Проблемы на уровне операционной системы, связанные с большим количеством запросов на поиск данных, а также кэшем страниц и <em>inode</em>&#8216;ов файловой системы;</dd>
<dd>&ndash; Ограничение на количество файлов в одной директории (особенно актуально для <strong>ext3</strong>), возможно частичное решение в виде перехода к более иерархической структуре хранения данных, а также переходе к ядру    <a href="/tag/linux" target="_blank">Linux</a> версии 2.6, что может привести к более чем стократному росту производительности, но в любом случае хранение такого огромного количества файлов в локальной файловой системе &#8212; не самая лучшая идея;</dd>
<dd>&ndash; Большое количество запросов в секунду, так как одна страница может содержать до 60 миниатюр различных видеороликов;</dd>
<dd>&ndash; В условиях таких нагрузок <a href="/tag/apache" target="_blank">Apache</a> показывает плохую производительность;</dd>
<dd>&ndash; Проводились эксперименты с использованием <a href="/tag/squid" target="_blank">squid</a> (обратной proxy) между <a href="/tag/apache" target="_blank">Apache</a> и посетителями. Какое-то время такой вариант казался работоспособным, но с ростом нагрузки производительность начала падать. С обработки 300 запросов в секунду она упала до 20;</dd>
<dd>&ndash; Попытки использовать <a href="/tag/lighttpd" target="_blank">lighttpd</a> также не завершились успехом: однопоточный режим не справлялся с задачей, а многопоточный требовал отдельного кэша для каждого потока, что сводило на нет его эффективность;</dd>
<dd>&ndash; С таким количеством изображений добавление в систему нового компьютера могло занимать более 24 часов;</dd>
<dd>&ndash; Перезагрузка занимала 6-10 часов, так как кэш должен был &#171;разогреться&#187; прежде чем перестать использовать данные с жестких дисков.</dd>
</dl>
</li>
<li>Решением всех описанных выше проблем стала распределенная система хранения данных <a href="/tag/bigtable" target="_blank">BigTable</a> от <a href="/tag/google" target="_blank">Google</a>:
<dl>
<dd>&ndash; Она позволяет избежать проблем, связанных с большим количеством файлов, так как объединяет маленькие файлы вместе.</dd>
<dd>&ndash; Она работает быстро и устойчива к сбоям, помимо этого она прекрасно приспособлена для работы по ненадежной сети.</dd>
<dd>&ndash; Уменьшает задержки, так как использует распределенный многоуровневый кэш, который способен работать даже между удаленными датацентрами.</dd>
</dl>
</li>
</ul>
<h3>Базы данных</h3>
<ul>
<li>Раньше:
<dl>
<dd>&ndash; <a href="/tag/mysql" target="_blank">MySQL</a> использовалась для хранения данных: пользователей, тэгов, описаний и так далее.</dd>
<dd>&ndash; Данные хранились на монолитном RAID 10 массиве, состоящем из 10 жестких дисков;</dd>
<dd>&ndash; Оборудование арендовалось, что негативно сказывалось на состоянии их кредитных карточек. В случае необходимости нового оборудования, на оформление заказа и доставку мог уходить далеко не один день.</dd>
<dd>&ndash; Они прошли через весь путь эволюции: сначала был один сервер, затем добавилось несколько дополнительных серверов, обслуживающих операции чтения, после чего они решили разбить базу данных на части, и, наконец, они пришли к полноценной распределенной архитектуре.</dd>
<dd>&ndash; Поначалу их система страдала от задержек, связанных с реплицированием. Основной сервер, обрабатывающий операции записи, являлся мощным сервером, работающим в многопоточном режиме, это было необходимо для своевременного выполнения большого объема работы. Второстепенные сервера, которые обрабатывали только операции чтения, асинхронно реплицировали данные в одном потоке, что влекло за собой возможность серьезного отставания некоторых из них.</dd>
<dd>&ndash; Обновления были причиной частого отсутствия необходимой информации в кэше, что заставляло сервера читать данные с жестких дисков. Этот факт сильно замедлял процесс чтения и репликации.</dd>
<dd>&ndash; Реплицирующая архитектура требует немалых вложений в оборудование, необходимого для поддержания постоянно растущих темпов записи информации.</dd>
<dd>&ndash; Основным из кардинальных решений, принятых в архитектуре системы было отделение обеспечения процесса просмотра видео от основного кластера. Основной целью посетителей является просмотр видео, а второстепенные задачи можно возложить и на менее производительный кластер.</dd>
</dl>
</li>
<li>Сейчас:
<dl>
<dd>&ndash; Используются распределенные базы данных;</dd>
<dd>&ndash; Сегментированная система <em>(прим.: <a href="/net/scalability/arkhitektura-flickr" target="_blank">по аналогии с Flickr</a>)</em>;</dd>
<dd>&ndash; Распределенные чтение и запись;</dd>
<dd>&ndash; Более эффективное расположение кэша, что ведет к уменьшению работы с жесткими дисками;</dd>
<dd>&ndash; Такая архитектура привела к 30%-й экономии на оборудовании;</dd>
<dd>&ndash; Задержки в реплицировании сведены к нулю;</dd>
<dd>&ndash; Размеры базы данных могут расти практически неограниченно</dd>
</dl>
</li>
</ul>
<h3>Стратегия размещения в датацентрах</h3>
<ul>
<li>Поначалу использовались хостинг провайдеры, предоставляющие услуги colocation. Не самый экономичный подход, но тогда не было другого выхода.</li>
<li>Хостинг провайдеры не могут поспеть за темпами роста проекта. Не всегда получается получить контроль над необходимым оборудованием или сделать необходимые соглашения о предоставлению сетевых услуг.</li>
<li>Решением этой проблемы стало создание собственной базы для размещения оборудования. Появилась возможность настраивать абсолютно все и подписывать свои собственные контракты такого рода.</li>
<li>Было использовано 5 или 6 разных датацентров в дополнение к <abbr title="Content Delievery Network">CDN</abbr>.</li>
<li>Видео поступает из случайного датацентра, никаких специальных проверок не проводится. Если ролик становится достаточно популярным &#8212; он перемещается в <abbr title="Content Delievery Network">CDN</abbr>.</li>
<li>Основным фактором, влияющим на доступность того или иного ролика является пропускная способность канала связи.</li>
<li>Для изображений же более актуальны задержки, особенно если на одной страницы должно быть размещено под 60 изображений.</li>
<li>Репликация изображений производится средствами <a href="/tag/bigtable" target="_blank">BigTable</a>. В этом случае используются различные меры для определения ближайшего места, откуда можно получить необходимые данные.</li>
</ul>
<h3>Подводим итоги</h3>
<ul>
<li><strong>Остановитесь на секунду.</strong> Креативные и рискованные трюки могут помочь справиться с задачей в краткосрочном периоде, но со временем понадобятся более продуманные решения.</li>
<li><strong>Расставьте приоритеты.</strong> Определите какие части Вашего сервиса являются более важными и стройте  систему обеспечения ресурсами и усилиями именно в соответствии с поставленными приоритетами.</li>
<li><strong>Выбирайте свои битвы.</strong> Не бойтесь пользоваться аутсорсингом в некоторых ключевых сервисах. <a href="/tag/youtube" target="_blank">YouTube</a> использует <abbr title="Content Delievery Network">CDN</abbr> для распределения своего наиболее популярного контента. Создание своей собственной подобной сети стоило бы им слишком много и потребовало бы слишком много времени. Возможно у Вас появятся подобные возможности в отношении Вашей системы.</li>
<li><strong>Будьте проще!</strong> Простота позволяет изменять архитектуру более быстро, что позволяет своевременно реагировать на возникающие проблемы. Никто на самом деле не знает что такое <em>простота</em>, но если Вы не боитесь делать изменения, то это неплохой знак что вашей системе свойственна та самая <em>простота</em>.</li>
<li><strong>Сегментирование.</strong> Сегментирование позволяет изолировать и ограничить дисковое пространство, процессорное время, оперативную память и ввод-вывод. Оно выполняется не только для повышения производительности операций записи.</li>
<li><strong>Постоянная работа над поиском и устранением узких мест в системе:</strong>
<dl>
<dd>&ndash; на программном уровне это чаще всего бывает кэширование и работа с <a href="/tag/subd" target="_blank">СУБД</a>;</dd>
<dd>&ndash; на уровне операционной системы &#8212; операции ввода-вывода;</dd>
<dd>&ndash; на уровне оборудования &#8212; оперативная память и RAID массивы.</dd>
</dl>
</li>
<li><strong>Залог Вашего успеха &#8212; командная работа.</strong> Хорошая команда разного рода специалистов должна понимать принцип системы вцелом и того, что лежит <em>под</em> ней. Каждый должен знать свое дело: настраивать принтеры, подключать к системе новые компьютеры, строить сети и так далее. С отличной командой Вам по силам все что угодно.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.insight-it.ru/masshtabiruemost/arkhitektura-youtube/feed/</wfw:commentRss>
		<slash:comments>38</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>

