Архитектура Google

31 января 2008 50 комментариев Иван Блинков
Эта статья датируется 2008 годом, новая версия: Архитектура Google 2011

Google — Король масштабируемости.

Каждый хоть раз слышал о Google благодаря их всеобъемлющему, «умному» и быстрому поисковому сервису, но ни для кого не секрет, что они не ограничиваются только им. Их платформа для построения масштабируемых приложений позволяет выпускать множество удивительно конкурентноспособных интернет-приложений, работающих на уровне всего Интернета вцелом. Они ставят перед собой цель постоянно строить все более и более производительную и масштабируемую архитектуру для поддержки своих продуктов. Как же им это удается?

Источники информации

Сразу хочу сказать, что эта запись является переводом с английского, автор оригинальной версии — Todd Hoff. Оригинал написан приблизительно в середине 2007 года, но по-моему до сих пор очень даже актуально.

Далее следует перечисление источников информации из оригинала:

Платформа

  • Linux
  • Большое разнообразие языков программирования: Python, Java, C++

Что внутри?

Статистика

  • На 2006 год система включала в себя 450000 недорогих серверов
  • За 2005 год было проиндексировано 8 миллиардов страниц. На данный момент… кто знает?
  • На момент написания оригинала Google включает в себя более 200 GFS кластеров. Один кластер может состоять из 1000 или даже 5000 компьютеров
  • Десятки и сотни тысяч компьютеров получают данные из GFS кластеров, которые насчитывают более 5 петабайт дискового пространства. Суммарные пропускная способность операций записи и чтения между дата центрами может достигать 40 гигабайт в секунду
  • BigTable позволяет хранить миллиарды ссылок (URL), сотни терабайт снимков со спутников, а также настройки миллионов пользователей

// Цифры не первой свежести конечно, но тоже неплохо.

Стек

Google визуализирует свою инфраструктуру в виде трехслойного стека:

  • Продукты: поиск, реклама, электронная почта, карты, видео, чат, блоги
  • Распределенная инфраструктура системы: GFS, MapReduce и BigTable
  • Вычислительные платформы: множество компьютеров во множестве датацентров
  • Легкое развертывание для компании при низком уровне издержек
  • Больше денег вкладывается в оборудование для исключения возможности потерь данных

Надежное хранение данных с помощью GFS

  • Надежное масштабируемое хранение данных крайне необходимо для любого приложения. GFS является основой их платформы хранения информации
  • GFS — большая распределенная файловая система, способная хранить и обрабатывать огромные объемы информации
  • Зачем строить что-либо самим вместо того, чтобы просто взять это с полки? Они контролируют абсолютно всю систему и именно эта платформа отличает их от всех остальных. Она предоставляет:
    – высокую надежность дата центров
    – масштабируемость до тысяч сетевых узлов
    – высокую пропускную способность операций чтения и записи
    – поддержку больших блоков данных, размер которых может измеряться в гигабайтах
    – эффективное распределение операций между датацентрами для избежания возникновения «узких мест» в системе
  • В системе существуют мастер-сервера и сервера, собственно хранящие информацию:
    – Мастер-сервера хранят метаданные для всех файлов. Сами данные хранятся блоками по 64 мегабайта на остальных серверах. Клиенты могут выполнять операции с метаданными на мастер-серверах, чтобы узнать на каком именно сервере расположены необходимые данные.
    – Для обеспечения надежности один и тот же блок данных хранится в трех экземплярах на разных серверах, что обеспечивает избыточность на случай сбоев в работе какого-либо сервера.
    – Новые приложения могут пользоваться как существующими кластерами, так и новыми, созданными специально для них.
    – Ключ успеха заключается в том, чтобы быть уверенными в том, что у людей есть достаточно вариантов выбора для реализации их приложений. GFS может быть настроена для удовлетворения нужд любого конкретного приложения.

Работаем с данными при помощи MapReduce

  • Теперь, когда у нас есть отличная система хранения, что же делать с такими объемами данных? Допустим, у нас есть много терабайт данных, равномерно распределенных между 1000 компьютерами. Коммерческие базы данных не могут эффективно масштабироваться до такого уровня, именно в такой ситуации в дело вступает технология MapReduce.
  • MapReduce является программной моделью и соответствующей реализацией обработки и генерации больших наборов данных. Пользователи могут задавать функцию, обрабатывающую пары ключ/значение для генерации промежуточных аналогичных пар, и сокращающую функцию, которая объединяет все промежуточные значения, соответствующие одному и тому же ключу. Многие реальные задачи могут быть выражены с помощью этой модели. Программы, написанные в таком функциональном стиле автоматически распараллеливаются и адаптируются для выполнения на обширных кластерах. Система берет на себя детали разбиения входных данных на части, составления расписания выполнения программ на различных компьютерах, управления ошибками, и организации необходимой коммуникации между компьютерами. Это позволяет программистам, не обладающим опытом работы с параллельными и распределенными системами, легко использовать все ресурсы больших распределенных систем.
  • Зачем использовать MapReduce?
    – Отличный способ распределения задач между множеством компьютеров
    – Обработка сбоев в работе
    – Работа с различными типами смежных приложений, таких как поиск или реклама. Возможно предварительное вычисление и обработка данных, подсчет количества слов, сортировка терабайт данных и так далее
    – Вычисления автоматически приближаются к источнику ввода-вывода
  • MapReduce использует три типа серверов:
    Master: назначают задания остальным типам серверов, а также следят за процессом их выполнения
    Map: принимают входные данные от пользователей и обрабатывают их, результаты записываются в промежуточные файлы
    Reduce: принимают промежуточные файлы от Map-серверов и сокращают их указанным выше способом
  • Например, мы хотим посчитать количество слов на всех страницах. Для этого нам необходимо передать все страницы, хранимые в GFS, на обработку в MapReduce. Этот процесс будет происходить на тысячах машин одновременно с полной координацией действий, в соответствии с автоматически составленным расписанием выполняемых работ, обработкой потенциальных ошибок, и передачей данных выполняемыми автоматически.
    – Последовательность выполняемых действий выглядела бы следующим образом: GFS → Map → перемешивание → Reduce → запись результатов обратно в GFS
    – Технология MapReduce состоит из двух компонентов: соответственно map и reduce. Map отображает один набор данных в другой, создавая тем самым пары ключ/значение, которпыми в нашем случае являются слова и их количества.
    – В процессе перемешивания происходит аггрегирование типов ключей.
    – Reduction в нашем случае просто суммирует все результаты и возвращает финальный результат.
  • В процессе индексирования Google подвергает поток данных обработке около 20 разных механизмов сокращения. Сначала идет работа над всеми записями и аггрегированными ключами, после чего результат передается следующему механизму и второй механизм уже работает с результатами работы первого, и так далее.
  • Программы могут быть очень маленькими, всего лишь от 20 до 50 строк кода.
  • Единственной проблемой могут быть «отстающие компьютеры». Если один компьютер работает существенно медленнее, чем все остальные, это будет задерживать работу всей системы в целом.
  • Транспортировка данных между серверами происходит в сжатом виде. Идея заключается в том, что ограничивающим фактором является пропускная способность канала и ввода-вывода, что делает резонным потратить часть процессорного времени на компрессию и декомпрессию данных.

Хранение структурированных данных в BigTable

  • BigTable является крупномасштабной, устойчивой к потенциальным ошибкам, самоуправляемой системой, которая может включать в себя терабайты памяти и петабайты данных, а также управлять миллионами операций чтения и записи в секунду.
  • BigTable представляет собой распределенный механизм хэширования, построенный поверх GFS, а вовсе не реляционную базу данных и, как следствие, не поддерживает SQL-запросы и операции типа Join.
  • Она предоставляет механизм просмотра данных для получения доступа к структурированным данным по имеющемуся ключу. GFS хранит данные не поддающиеся пониманию, хотя многим приложениям необходимы структурированные данные.
  • Коммерческие базы данных попросту не могут масштабироваться до такого уровня и, соответственно, не могут работать с тысячами машин одновременно.
  • С помощью контролирования своих низкоуровневых систем хранения данных, Google получает больше возможностей по управлению и модификации их системой. Например, если им понадобится функция, упрощающая координацию работы между датацентрами, они просто могут написать ее и внедрить в систему.
  • Подключение и отключение компьютеров к функционирующей системе никак не мешает ей просто работать.
  • Каждый блок данных хранится в ячейке, доступ к которой может быть предоставлен как по ключу строки или столбца, так и по временной метке.
  • Каждая строка может храниться в одной или нескольких таблицах. Таблицы реализуются в виде последовательности блоков по 64 килобайта, организованных в формате данных под названием SSTable.
  • В BigTable тоже используется три типа серверов:
    Master: распределяют таблицы по Tablet-серверам, а также следят за расположением таблиц и перераспределяют задания в случае необходимости.
    Tablet: обрабатывают запросы чтения/записи для таблиц. Они раделяют таблицы, когда те превышают лимит размера (обычно 100-200 мегабайт). Когда такой сервер прекращает функционирование по каким-либо причинам, 100 других серверов берут на себя по одной таблице и система продолжает работать как-будто ничего не произошло.
    Lock: формируют распределенный сервис ограничения одновременного доступа. Операции открытия таблицы для записи, анализа Master-сервером или проверки доступа должны быть взаимноисключающими.
  • Локальная группировка может быть использована для физического хранения связанных данных вместе, чтобы обеспечить лучшую локализацию ссылок на данные.
  • Таблицы по возможности кэшируются в оперативной памяти серверов.

Оборудование

  • Как эффективно организовать большую группу компьютеров с точки зрения издержек и производительности?
  • Используется самое обыкновенное ультра-дешевое оборудование и поверх него строится программное обеспечение, способное спокойно пережить смерть любой части оборудования.
  • Тысячекратный рост вычислительной мощности может быть достигнут с издержками в 33 раза меньшими, если воспользоваться толерантной к сбоям инфраструктурой, по сравнению с инфраструктурой, построенной на высоконадежных компонентах. Надежность строится поверх ненадежных компонентов.
  • Linux, домашнее размещение серверов, материнске платы предназначенные для персональных компьютеров, дешевые средства хранения данных.
  • Цена за каждый ватт энергии в расчете на производительность не становится меньше, что ведет к большим проблемам связанным с энергообеспечением и охлаждением.
  • Использование совместного размещения в своих и арендуемых датацентрах.

Разное

  • Быстрый выпуск изменений более предпочтителен, чем ожидание.
  • Библиотеки — превалирующий метод построения программ.
  • Некоторые приложения предоставляются в виде сервисов.
  • Инфраструктура управляет определением версий приложений таким образом, что они могут выпускать новые продукты, не боясь сломать работу какого-либо компонента системы.

Пути развития

  • Поддержка географически распределенных кластеров.
  • Создание единого глобального пространства имен для всех данных. На данный момент данные распределены по кластерам.
  • Более автоматизированные передача и обработка данных
  • Решение вопросов, связанных с поддержанием работоспособности сервисов даже в тех случаях, когда целый кластер отключается от системы в связи с техническими работами или каким-либо сбоем в работе.

Подводим итоги

  • Инфраструктура может быть конкурентным преимуществом. Это определенно так для Google. Они могут выпускать новые интернет сервисы быстрее, с меньшими издержками, на таком уровне, что мало кто сможет составить им конкуренцию. Подход многих компаний сильно отличается от подхода Google, эти компании рассматривают инфраструктуру как статью расходов, они обычно используют совсем другие технологии и совсем не задумываются о планировании и организации своей системы. Google позиционирует себя как компанию по построению систем, что является очень современным подходом к разработке программного обеспечения.
  • Охватывание нескольких дата центров до сих пор является нерешенной проблемой. Большинство сайтов базируется в одном или двух дата центрах. Полное распределение сайта между несколькими датацентрами является хитрой задачей.
  • Взгляните на Hadoop, если у Вас нет времени на собственноручное построение всей архитектуры с нуля. Hadoop явялется opensource воплощением в жизнь многих идей здесь представленных.
  • Часто недооцениваемым преимуществом платформенного подхода является тот факт, что даже неопытные разработчики могут быстро и качественно реализовывать трудоемкие приложения на базе платформы. Но если бы каждый проект требовал одинаково распределенной архитектуры, то это создало бы много проблем, так как люди, которые понимают как это делается, являются достаточно большой редкостью.
  • Совместная деятельность не всегда является таким уж плохим занятием. Если все части системы работают взаимосвязанно, то улучшение в одной из них сразу и абсолютно прозрачно отразится положительным образом и на остальных компонентах системы. В противном случае такой эффект наблюдаться не будет.
  • Построение самоуправляемых систем позволяет более легко перераспределять ресурсы между серверами, расширять систему, отключать некоторые компьютеры и элегантно проводить обновления.
  • Производить длительные операции стоит параллельно.
  • Всему, что было сделано Google, предшествовало искусство, а не только крупномасштабное развертывание системы.
  • Учитывайте возможность компрессии данных, она является очень неплохим решением, если остается лишнее процессорное время, но присутствует нехватка пропускной способности.

Метки: , , , , , , , , , , , , , ,

  • http://www.alrond.com Alrond

    Интересная статья, нехватает правда упоминания про веб-сервер собственной разработки GWS, в инете видел мнение, что структура и работа у него аналогична nginx-у

    • http://juravskiy.ru Vitaliy

      GWS использовали в wave сервисе.

  • http://amageblog.blogspot.com/ amage

    Спасибо, отличная статья

  • http://aarhipov.blogspot.com aam

    Я где-то читал, что они в некоторых проектах используют MySql, напрер, AdSense. Статья хорогая!

  • http://www.insight-it.ru Иван Блинков

    Спасибо, всегда приятно читать положительные отзывы :)

    Да, конечно далеко не все элементы их архитектуры упомянуты, детальное описание всего и вся заняло бы наверное на порядок больше объема, сил и времени, чем эта статья.

    А вот про AdSense+MySQL — вопрос достаточно спорный, я тоже где-то что-то об этом слышал, но от каких-то не сильно проверенных источников, да и по логике мне это скорее слухи напоминает, чем проверенную информацию.

  • http://tdigest.ru Артем

    Статья очень интересная.

    p.s. заметил опечатку — сраынению

  • http://alexbigbass.blogspot.com/ Алексей

    Спасибо, за перевод, а гугловцы — молодцы!

    Сами себе разрабатывают софт и не плохо с этим справляются.

  • http://www.insight-it.ru Иван Блинков

    И Вам спасибо за теплые слова, приходите еще :)

    [quote comment="47"]p.s. заметил опечатку — сраынению[/quote]

    А вот с этим у меня, к сожалению, туговато, так как пишу чаще всего с ноутбука в не сильно приспособленных для печатания текстов местах, а spellchecker спасает далеко не всегда. Спасибо!

  • http://www.guseletov.com/ Андрей

    Спасибо большое за перевод, оригинал-то я в своё время, читал... они даже где-то у себя PDF выкладывали, но всё равно — Ваша работа будет многим интересна и полезна, на родном языке люди будут воспринимать лучше.

  • Pingback: purrl.net |** urls that purr **|

  • http://v-kostin.blogspot.com Lamer

    Спасибо за статью. Подписался в ожидании таких же...

    Я тоже заметил опечатку: «взыимосвязанно».

  • http://www.insight-it.ru Иван Блинков

    Спасибо за отзывы и сообщения об опечатках, постараюсь удовлетворить Ваше желание увидеть «таких же» как только смогу найти достаточно свободного времени. Сам я что-либо подобное на данный момент врядли смогу написать, но еще один перевод хорошей статьи — очень даже вероятно.

  • http://shep.pp.ru/ Temoto

    Спасибо.

    По поводу ошибок.

    Я представляю отмазку Гугла на этот счет. Извините, но вот такая фигня, пишем с ноутбука. Зато поиск быстрый!

    google.ru, проверка орфографии онлайн, I'm feeling lucky — первая ссылка orfo.ru.

    P.S.: если с этим вопросом к вам, сделайте, пожалуйста, нормальный размер текста в поле ввода комментария. Люди иногда просматривают введенный текст, прежде, чем отправить.

  • BigHo

    Статья интересная. Очень хороший стиль изложения. Думаю, что информация нарочно поставляется в столь обобщенном виде, что ни скопировать, ни придумать даже близкого аналога. Даже если попытаться воссоздать какой-то функционал по приведенным здесь рекомендациям, то получится продукт, совсем не похожий на оригинал. Вообзем под впечатлением, но в состоянии информационного голодания :)

  • Toosa

    Статья действительно интересная. До этого вообще не знал на чем гугл построен. Молодцы гугловцы, большой риспект!!!

  • http://www.insight-it.ru Иван Блинков

    За 10 часов которые я провел в университете столько комментариев, постараюсь ответить всем:

    [quote comment="56"]

    P.S.: если с этим вопросом к вам, сделайте, пожалуйста, нормальный размер текста в поле ввода комментария. Люди иногда просматривают введенный текст, прежде, чем отправить.[/quote]

    Да, это ко мне, мысль неплохая, попробую подобрать кегль по-крупнее в ближайшей перспективе.

    [quote comment="68"]Статья интересная. Очень хороший стиль изложения. Думаю, что информация нарочно поставляется в столь обобщенном виде, что ни скопировать, ни придумать даже близкого аналога. Даже если попытаться воссоздать какой-то функционал по приведенным здесь рекомендациям, то получится продукт, совсем не похожий на оригинал. Вообзем под впечатлением, но в состоянии информационного голодания :) [/quote]

    Спорный достаточно вопрос: реализаций MapReduce существует далеко не одна, хотябы тот же упомянутый в статье Hadoop, клонов GFS и BigTable тоже предостаточно (точных названий не приведу, но натыкался не раз на их сайты и обзоры).

    Спасибо всем за отзывы :)

  • http://www.kodinsk-online.ru Fen1x

    Иван Блинков благодарю за такоу информативную статью, о работе гугла узнал очень много, перевод выполнен на 5+, так держать.

  • Анонимный посетитель

    Спасибо за интересный материал.Оказалось, что гугл теперь и коммутаторы сам делает.

    Вот пару заметок на эту тему:

    blogs.cisco.com/datacente...g_a_10gbe_1.html

    www.nyquistcapital.com/20...et-10gbe-switch/

  • http://www.insight-it.ru Иван Блинков

    В очередной раз хочется поблагодарить читателей за отзывы, по ссылкам обязательно схожу как только найдется лишнее свободное время.

  • proforg

    по моему вся информация устарела больше чем на год.

    по крайней мере не увидел ничего нового :)

    в том числе и про свитчи

    как исходную точку брал например alenacpp.blogspot.com/200...log-post_20.html

    по блогу: круто былоб вынести ссылку на регистрацию куда нить в заметное место. на главную

    или в меню. или бляд ещё куданить. главное чтоб была находима. хоть как то.

    Temoto: используйте нормальные барузеры, которые умеют ресайзить поле ввода

  • http://www.insight-it.ru Иван Блинков

    [quote comment="88"]по моему вся информация устарела больше чем на год.[/quote]Цифры — возможно, но по-моему в статье и помимо цифр много интересной информации, которая сомневаюсь что успела кардинально измениться :)

    [quote comment="88"]по блогу: круто былоб вынести ссылку на регистрацию куда нить в заметное место. на главную

    или в меню. или бляд ещё куданить. главное чтоб была находима. хоть как то.[/quote]Если честно когда я создавал этот блог, у меня не возникало надежды, что кому-то будет не лень регистрироваться, проверять почту на наличие письма с активацией, возвращаться обратно и авторизироваться. По-этому я саму ссылку вообще убрал, заменив нормальной формой комментариев, не требующей регистрации, но если очень хочется, то сама страница регистрации существует. Буду рад если здесь появятся зарегистрированные пользователи кроме меня :)

  • proforg

    форма регистрации находится исходя из того что это вордпресс :)

    что собственно и было сделано чтоб оставить камментарий — без регистрации оно как то не получалось :( нужно говорит быть зарегистрированным.

  • http://www.insight-it.ru Иван Блинков

    Хм, забавно, а как выглядела форма, которая сказала Вам, что комментарии только для зарегистрированных пользователей? Поля с именем, почтой и URL были?

    По идее она должна все комментарии должна пропускать, кроме тех, что под спам-фильтр попали, не важно — зарегистрирован читатель или нет. Сам в свое время проверял работу комментариев без регистрации — нормально вроде отправлялись. Странно...

  • Pingback: Obukhoff’s Place : Статья: Архитектура Google

  • SergeySilaev

    [quote comment="94"]Хм, забавно, а как выглядела форма, которая сказала Вам, что комментарии только для зарегистрированных пользователей? Поля с именем, почтой и URL были?

    По идее она должна все комментарии должна пропускать, кроме тех, что под спам-фильтр попали, не важно — зарегистрирован читатель или нет. Сам в свое время проверял работу комментариев без регистрации — нормально вроде отправлялись. Странно...[/quote]

    У меня сегодня возникла такая же проблема — не смотря на наличие и заполнение поля с именем и почтой (URL не заполнял, но он обозначен как необязательное поле), WP всеравно не дал оставить комментарий и потребовал пройти регистрацию.

  • http://www.insight-it.ru Иван Блинков

    [quote comment="101"]У меня сегодня возникла такая же проблема — не смотря на наличие и заполнение поля с именем и почтой (URL не заполнял, но он обозначен как необязательное поле), WP всеравно не дал оставить комментарий и потребовал пройти регистрацию.[/quote]

    Еще раз повозился с настройками этих форм — надеюсь, что мне удалось успешно устранить эту проблему.

    По крайней мере самому анонимные комментарии мне оставить удалось.

  • http://shep.pp.ru/ Temoto

    proforg, если нормальный барузер будет показывать шрифт, заданный, как textarea — 1.05em после 62.5% в body, извините, нормальным я его не назову.

    Речь шла о дизайне сайта, а бравзер у меня нормальный.

  • Дмитрий Тимохов

    Действительно интересно.

    Сейчас большинство блогов об ИТ-бизнесе — как делать деньги на софте или просто в интернете. Но уму программиста иногда хочется отдохнуть от чтения о чужих успехах на ниве слива трафа и партнерках.

    Я теперь постоянный читатель здесь.

    Удачи!

  • http://bloggreenwood.com/ greenwood

    Спасибо. Хорошая статья. Давно таких не было.

  • Simon

    «GFS хранит данные не поддающиеся пониманию,»

    «Совместная деятельность не всегда является таким уж плохим занятием.»

    :) )

  • http://www.mythbusters.org.ru buster

    Ничего нового не нашел (два года назад читал эту статью на америкосой википедии). Единственное достоинство статьи — не все пионеры американский язык знают. Так что — респект

  • http://www.insight-it.ru Иван Блинков

    [quote comment="195"]Ничего нового не нашел (два года назад читал эту статью на америкосой википедии). [/quote]Конкретно эту — маловероятно, оригинал позже был написан...

  • webcat

    Очень хорошая статья и актуальна до сих пор.

    Поэтому, друзья, не надо ворчливых коментов!

  • Анонимный посетитель

    было бы неплохо указывать ссылки на источники информации

  • http://www.insight-it.ru Иван Блинков

    [quote comment="372"]было бы неплохо указывать ссылки на источники информации[/quote]Они указаны, просьба во-внимательнее читать...

  • http://www.bonn.ru Иван

    Интересная статья

  • http://www.mind.od.ua raduga

    Спасибо. Очень позновательно

  • http://zlyka.ru Одинокий пастух

    Спасибо огромное, такого в обширного обзора Гугля я в сети еще не видел.

  • Pingback: My Internet tickets » Blog Archive » Google

  • http://ilono.ru/ treappitren

    Зачетный пост, спасибо!

  • Pingback: Структура хранения данных в поисковых движках « Программирование и работа

  • Pingback: Сравнение архитектур крупных интернет проектов | DD Home

  • metaluga

    омг

    вопрос только — откуда эта инфа вылезла?

    вообще хотел узнать что у них там за самописный вебсервак

    а до хттп заголовок дает:

    Server: sffe

    а оказывается ваще фулейший ппц.

    у них ваще все самописное!

    не удивлюсь что у них инопланетные кампы

  • Pingback: Архитектура высоконагруженных систем « IT-безопасность

  • Pingback: Паутина фриланса » Blog Archive » Архитектура сайтов с высокой нагрузкой

  • Antobra

    Интересно, тут указывали несколько раз, что серверы у Google недорогие. Что значит недорогие? Для гугула недорогие? Какова средняя стоимость одного сервера?

    И где-то опубликовывались тех. характеристики серверов ?

  • http://www.facebook.com/people/Александр-Белоусов/100000724630416 Александр Белоусов

     вапыаыаыа

  • http://www.facebook.com/agorev Artem Gorev

    Интересная статья, огромное спасибо автору и переводчику, но остается много вопросов, один из важных для меня, GFS, BigTable — эти продукты Google выложил в открытый доступ или это их закрытые разработки?

    • Asss

      alert ('Hey!') asdasd

  • Pingback: Архитектура Google 2011 | Insight IT