Обзор архитектуры Google
Архитектура инфраструктуры Google придерживается двум основным принципами:
- надежность системы обеспечивается программными методами, а не аппаратными. Это позволяет использовать обычные компьютеры для построения кластеров. Отказ от аппаратных, высоко-качественных, отказоустойчивых решений таких как RAID массивов, систем питания был сделан в пользу программных решений, обеспечивающих необходимый уровень надежности и производительности.
- для увеличения производительности используется репликация запросов между нодами кластера
Построение надежной системы кластеров на базе обычных компьютеров обеспечивается за счет распределения не только нагрузки, но и сервисов, приложений между различными нодами с автоматическим определением, обработкой или устранением неисправностей. Для эффективного распределения нагрузки Googe дата-центры расположены в различных странах. При использовании сервиса Google существует большая вероятность того, что запросы пользователя будут обрабатываться ближайшим к нему кластером. Географическое распределение дата-центров также позволяет обеспечить защиту от форс-мажорных обстоятельств, таких как землетрясения, наводнения, глобальное отключение электричества и т.д. Кластер - это порядка несколько тысяч машин (компьютеров).
Первоначальная балансировка трафика при запросе пользователя к сервису осуществляется с помощь DNS серверов на основании его географического местоположения. Пример:
>nslookup google.com Name: google.com Addresses: 74.125.39.103, 74.125.39.104, 74.125.39.105, 74.125.39.106, 74.125.39.147, 74.125.39.99При поступлении запроса, в кластере используется аппаратный балансировщик нагрузки, распределяющий запросы между нодами в кластере. Данные, хранящиеся в кластере, случайным образом распределены между нодами. Каждая машина в кластере в отдельности не является надежным устройством, данные дублируются между различными нодами. Это позволяет говорить о том, что выход из строя одного из узлов не приводит к потере данных или значительной потери производительности.
Система учитывает время ответа на пользовательский запрос на основании загруженности нод в кластере. В случае выхода из строя одной из ноды, нагрузка автоматически распределяется между рабочими нодами. Для увеличения производительности кластера достаточно добавления новых машин. После добавления нового узла, данные будут автоматически распределены между новыми и старыми серверами, а затем перераспределится и нагрузка. Важное замечание, ноды между собой не общаются. За распределение данных и нагрузки отвечает мастер-узел.
Коэффициент цена/производительность является основным критерием выбора компонентов. Google отдает предпочтение компонентам, которые в настоящее время имеют лучший показатель цена/производительность, чем компоненты, обеспечивающие максимальную производительность.
Снижение стоимости кластера за счет использования обычных компьютеров позволяет выделять больше вычислительных мощностей приходящихся на запрос, использовать более сложные алгоритмы поиска, индексации, хранения данных.
Примечание: данный пост не является описанием работы кластеров Google. В нем изложено лишь мое понимание работы системы на основании статей, брошюр, найденных в Интернет. Если у вас есть замечания, поправки или исправления - с радостью их выслушаю в комментариях.




0 комментариев:
Отправить комментарий