В марте 2015 года, в воскресенье, на Netflix вышла премьера третьего сезона сериала «Карточный домик», и тут же нахлынул большой поток зрителей: трафик Netflix в тот день был на 30 % выше, чем в любое другое воскресенье. 30 % – это огромный скачок, особенно если учесть, что в 2015 году на Netflix приходилось 37 % всего интернет-трафика. (Это был не единственный случай: HBO пережил 300 %-ный скачок трафика, когда в апреле 2015 года состоялся премьерный показ пятого сезона «Игры престолов».) Как веб-сайт Netflix справилась с таким огромным наплывом аудитории?
Давайте разберемся, как компания управляет своим веб-сайтом. В 2008 году у Netflix были собственные серверы, но в течение следующих нескольких лет он начал переносить большую часть данных на облако Amazon Web Services, завершив весь этот процесс в 2016 году. Размещая все данные на облаке, Netflix получила три основные преимущества, которые не обеспечивали наличие собственных серверов. Начнем с эластичности.
Когда у Netflix были собственные серверы, их должно было хватить, чтобы справиться с пиковой нагрузкой. Проблема заключалась в том, что большую часть времени сайт не работал в пиковом режиме, поэтому большинство серверов оставались незадействованными, что означало напрасную трату денег. Но услуги облачного хостинга, например Amazon Web Services, мгновенно увеличивают или уменьшают вычислительную мощность программы по мере увеличения или уменьшения нагрузки на нее в течение дня, поэтому оплачивается только фактическое использование. Это и есть эластичность.
В качестве аналогии представьте, что вы владелец ресторана, а в обеденный перерыв случается наплыв посетителей, при этом в любое другое время поток клиентов совсем небольшой. Если бы все сотрудники работали в одно и то же время, то чтобы справиться с этим наплывом, потребовалось бы нанять достаточное количество персонала, но тогда в остальное время у вас было бы слишком много сотрудников, которые не работают, а только тратят ваши деньги. Но если вы составите гибкий график, то сможете привлечь больше сотрудников в часы пиковых нагрузок и отпустить свободный персонал в спокойное время. Таким образом, вы заплатите ровно столько, сколько нужно.
Эластичность помогает сэкономить всем, но Netflix выигрывает именно потому, что его загруженность на протяжении дня меняется. Не так много людей смотрят Netflix с 9:00 до 17:00, однако ежедневно около 22:00 наступают пиковые часы. Благодаря эластичности, Amazon Web Services может автоматически регулировать вычислительную мощность Netflix на протяжении дня, вместо того чтобы предоставлять постоянно одинаковую мощность.
Какие еще причины у Netflix переходить на облако, помимо эластичности? Одна из главных – масштабируемость: Amazon Web Services помогает быстро наращивать, или масштабировать, программу по мере увеличения числа пользователей. (Это рост в масштабах месяцев и лет, а не внезапные скачки.) Для Netflix это очень важно, так как с 2007 по 2015 год количество просмотров видео на канале выросло более чем в тысячу раз. Без облака Netflix приходилось бы постоянно физически устанавливать новые серверы, однако Amazon Web Services автоматически предоставил им больше вычислительной мощности по мере увеличения производительности, при этом Netflix не пришлось прилагать никаких усилий.
Последняя важная причина, по которой Netflix выбрала облако, заключается в том, что использование Amazon Web Services более надежно, чем владение собственными ЦХОД или зданиями с серверами. В первую очередь это связано с тем, что облако предполагает резервирование, или создание нескольких копий одной и той же информации или кода. Даже если несколько компьютеров выйдут из строя, останутся другие, на которых данные сохранятся. (Точно так же, как нам, людям, нужна всего одна почка, но у нас их две. Мы будем чувствовать себя хорошо, даже если одна из них откажет или мы ее продадим!)
Облако дает Netflix огромные преимущества, но это изменение далось непросто. Компании потребовалось семь лет, чтобы полностью отказаться от собственных серверов и перейти на Amazon Web Services, – по сути, ей пришлось с нуля восстанавливать всю инфраструктуру и базы данных. Компания проделала большую работу, но оно того стоило.
Так что в следующий раз, когда будете смотреть Netflix, мысленно поблагодарите инженеров, которые решили перейти на облако.
Это случилось 28 февраля 2017 года. Инженер Amazon ввел стандартную команду, чтобы отключить несколько серверов Amazon Web Services для решения вопросов с оплатой. Но он сделал опечатку, случайно вырубившую огромное количество серверов, что заставило AWS перезапустить S3. Напомним, что S3 позволяет разработчикам хранить фотографии, видео и другие файлы в облаке – воспринимайте это как огромный Dropbox для приложений. В течение следующих четырех часов полетело около 20 % всего интернета, включая такие известные сайты, как Medium, Quora, Netflix, Spotify и Pinterest. Ущерб был огромным: компании S&P 500 потеряли более 150 млн долларов.
Как это произошло?
Ответ: все пострадавшие сайты пользовались Amazon Web Services. Код сайтов работал через серверы Amazon, файлы хранились там же (в частности, S3). Поэтому, когда они вышли из строя, со всеми сайтами случилось то же самое.
Это подчеркивает одну из самых больших проблем облачных вычислений: если приложение запускается через облако, проблемы возникают одновременно со сбоем у провайдера. Даже лучшие из них не дадут стопроцентную гарантию бесперебойной работы. Например, в 2015 году AWS не работал в общей сложности в течение двух с половиной часов, это означает, что примерно в 99,97 % случаев он был исправен. Мир настолько непредсказуем, что нельзя предвидеть каждую потенциальную точку отказа сервера, и даже если бы это было возможно, это дорого бы обошлось. Точно так же Диснейленд во Флориде мог бы подготовиться к снегопаду, который там уже случался раньше, но вряд ли стоит тратить на это деньги.
Так что же делать разработчикам приложений с неизбежным простоем облачного хостинга? Для начала можно купить собственные серверы и запускать приложения на них – модель, известная как «локальный вариант». Хотя компании могли бы взять дело в свои руки, но цифры предупреждают о возможных неприятных последствиях. Например, Microsoft предлагает компаниям два способа доступа к корпоративной электронной почте: в облаке с Office 365 или через локальное соединение Exchange. Результат исследования показал, что Exchange выходило из строя в 3,5 раза чаще, чем Office 365, что означает дополнительные девять часов простоя каждый год.
Если локальный вариант обработки данных хуже, чем облачные технологии, то разработчикам приложений лучше отдать предпочтение облаку и смириться с неизбежностью случайного сбоя. Со своей стороны, провайдеры облачных услуг должны незамедлительно сообщать клиентам о сбое, быстро устранять проблемы и делать все возможное, чтобы этого больше не повторялось. В качестве примера, как надо (и как не надо) решать проблемы с перебоями, давайте вернемся к истории с опечаткой в Amazon Web Services. AWS раскритиковали за то, что во время сбоя консоль показывала, что все в порядке, – по иронии судьбы, она работала на самом AWS и тоже вышла из строя. Но к чести Amazon, компания провела проверку безопасности с целью снизить урон, который могут нанести подобные опечатки, а также проверила безопасность всей системы.
Вернемся к первоначальному вопросу: как одна опечатка «сломала» 20 % интернета? Эти 20 % работали на серверах AWS, и когда из-за роковой ошибки их пришлось перезагрузить, веб-сайты, работавшие на нем, также перестали работать. Но, несмотря на все свои недостатки, облако помогает отлично экономить деньги, повышает надежность и увеличивает скорость масштабирования веб-сайтов. И это делает жизнь пользователей намного удобнее.