Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Масштаб сети Amazon Web Services — это 69 зон по всему миру в 22 регионах: США, Европа, Азия, Африка и Австралия. В каждой зоне находится до 8 ЦОД — Центров Обработки Данных. В каждом ЦОД тысячи или сотни тысяч серверов. Сеть построена так, что все маловероятные сценарии перебоев в работе принимаются в расчет. Например, все регионы изолированы друг от друга, а зоны доступности разнесены на расстояния в несколько километров. Даже если перерубить кабель, то система перейдет на резервные каналы, а потери информации составят единицы пакетов данных. О том, на каких еще принципах построена сеть и как она устроена, расскажет Василий Пантюхин.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Vasily Pantyukhin начинал Unix-админом в .ru-компаниях, 6 лет занимался большими железками Sun Microsystem, 11 лет проповедовал дата-центричность мира в EMC. Естественным путем эволюционировал в приватные облака, потом подался в публичные. Сейчас, как архитектор Amazon Web Services, техническими советами помогает жить и развиваться в облаке AWS.

В предыдущей части трилогии об устройстве AWS Василий углубился в устройство физических серверов и масштабирование базы данных. Nitro-карты, кастомный гипервизор на базе KVM, база данных Amazon Aurora — обо всем этом в материале «Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng quy mô máy chủ và cơ sở dữ liệu». Прочитайте, чтобы погрузиться в контекст, или посмотрите băng video выступления.

В этой части речь пойдет о масштабировании сети — одной из сложнейших систем в AWS. Эволюция от плоской сети к Virtual Private Cloud и ее устройство, внутренние сервисы Blackfoot и HyperPlane, проблема шумного соседа, а в конце — масштабы сети, backbone и физические кабели. Обо всем этом под катом.

Дисклеймер: всё, что ниже — личное мнение Василия, и оно может не совпадать с позицией Amazon Web Services.

Mở rộng quy mô mạng

Облако AWS запустили в 2006 году. Его сеть была достаточно примитивной — с плоской структурой. Диапазон приватных адресов был общим для всех тенантов облака. При запуске новой виртуальной машины вы случайно получали доступный IP-адрес из этого диапазона.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Такой подход был прост в реализации, но принципиально ограничивал использование облака. В частности, было достаточно сложно разрабатывать гибридные решения, в которых объединялись частные сети на земле и в AWS. Самая распространенная проблема была в пересечении диапазонов IP-адресов.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Đám mây riêng ảo

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

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Что первым приходит в голову, когда вы задумываетесь о сетевой изоляции? Конечно VLAN и VRF — Virtual Routing and Forwarding.

К сожалению, это не сработало. VLAN ID — это всего 12 бит, что дает нам всего лишь 4096 изолированных сегментов. Даже в самых больших коммутаторах можно использовать максимум 1-2 тыс VRF. Совместное использование VRF и VLAN дает нам всего несколько миллионов подсетей. Этого точно недостаточно для десятков миллионов тенантов, у каждого из которых должна быть возможность использовать несколько подсетей.

Еще мы просто не можем себе позволить купить требуемое количество больших коробок, например, у Cisco или Juniper. Есть две причины: это бешено дорого, и мы не хотим попадать в зависимость от их политики разработки и патчинга.

Вывод один – варить свое собственное решение.

В 2009 году мы анонсировали VPC - Đám mây riêng ảo. Название прижилось и теперь многие облачные провайдеры тоже его используют.

VPC – это виртуальная сеть SDN (Software Defined Network). Мы решили не изобретать специальных протоколов на уровнях L2 и L3. Сеть работает на стандартном Ethernet и IP. Для передачи по сети трафик виртуальных машин инкапсулируется в обертку нашего собственного протокола. В нем указывается ID, который принадлежит VPC тенанта.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Звучит просто. Однако нужно решить несколько серьезных технических задач. Например, где и как хранить данные о маппировании виртуальных MAC/IP-адресов, VPC ID и соответствующих физических MAC/IP. В масштабах AWS это огромная таблица, которая должна работать с минимальными задержками при обращении. За это отвечает сервис маппирования, который размазан тонким слоем по всей сети.

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

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Разберемся как это работает в общих чертах. Начнем с уровня L2. Предположим, что у нас есть виртуалка с IP 10.0.0.2 на физическом сервере 192.168.0.3. Она посылает данные виртуальной машине 10.0.0.3, которая живет на 192.168.1.4. Формируется ARP-запрос, который попадает на сетевую Nitro-карту. Для простоты считаем, что обе виртуалки живут в одном «синем» VPC.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Карта заменяет адрес источника на свой собственный и пересылает ARP-фрейм сервису маппирования.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Сервис маппирования возвращает информацию, которая необходима для передачи по физической сети L2.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Nitro-карта в ARP-ответе заменяет MAC в физической сети на адрес в VPC.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

При передаче данных мы заворачиваем логические MAC и IP в VPC-обертку. Все это передаем по физической сети с помощью соответствующих IP Nitro-карт источника и назначения.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Физическая машина, которой предназначен пакет, производит проверку. Это нужно, чтобы предотвратить возможность подмены адресов. Машина посылает специальный запрос сервису маппирования и спрашивает: «С физической машины 192.168.0.3 я получила пакет, который предназначен для 10.0.0.3 в «голубом» VPC. Он легитимный?» 

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Сервис маппирования сверяется со своей таблицей размещения ресурсов и разрешает, либо запрещает прохождения пакета. Во всех новых инстансах дополнительная валидация прошита в Nitro-картах. Ее невозможно обойти даже теоретически. Поэтому spoofing на ресурсы в другом VPC не сработает.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Дальше данные отправляются виртуальной машине для которой они предназначены. 

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

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

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Получается, что при передаче каждого пакета серверы обращаются к сервису маппирования. Как бороться с неизбежными задержками? Кэшированием, tất nhiên rồi.

Вся прелесть в том, что не нужно кэшировать всю огромную таблицу. На физическом сервере живут виртуалки из относительно небольшого количества VPC. Кэшировать информацию нужно только об этих VPC. Передача данных в другие VPC в «дефолтной» конфигурации все равно не легитимна. Если используется такая функциональность, как VPC-peering, то в кэш дополнительно подгружается информация о соответствующих VPC. 

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

С передачей данных в VPC разобрались.

Chân đen

Как быть в случаях, когда трафик надо передавать наружу, например в Internet или через VPN на землю? Здесь нас выручает Chân đen — внутренний сервис AWS. Он разработан нашей Южно-Африканской командой. Поэтому сервис называется в честь пингвина, который живет в Южной Африке.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Blackfoot декапсулирует трафик и делает с ним то, что нужно. Данные в Internet отправляются как есть.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Данные декапсулируются и снова заворачиваются в обертку IPsec при использовании VPN.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

При использовании Direct Connect трафик тэгируется и передается в соответствующий VLAN.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

HyperPlane

Это внутренний сервис контроля потока. Многие сетевые сервисы требуют контроля состояния потока данных. Например, при использовании NAT, контроль потока должен гарантировать, что каждой паре «IP: порт назначения» соответствует уникальный исходящий порт. В случае балансировщика NLB - Cân bằng tải mạng, поток данных всегда должен направляться на одну и ту же целевую виртуалку. Security Groups — это файрвол с сохранением состояния. Он следит за входящим трафиком и неявно открывает порты для исходящего потока пакетов.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

В облаке AWS требования к задержкам передачи предельно высокие. Поэтому HyperPlane критичен для работоспособности всей сети.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Hyperplane построен на виртуальных машинах EC2. Здесь нет никакой магии, только хитрость. Хитрость в том, что это виртуалки с большим RAM. Операции транзакционные и производятся исключительно в памяти. Это позволяет добиться задержек всего в десятки микросекунд. Работа с диском убила бы всю производительность. 

Hyperplane это распределенная система из огромного количества таких EC2-машин. Каждая виртуалка имеет пропускную способность 5 ГБ/с. В масштабах всей региональной сети это дает бешеные терабиты пропускной способности и позволяет обрабатывать миллионы соединений в секунду.

HyperPlane работает только с потоками. VPC инкапсуляция пакетов для него совершенно прозрачна. Потенциальная уязвимость в этом внутреннем сервисе все равно не позволит пробить изоляцию VPC. За безопасность отвечают уровни ниже.

Noisy neighbor

Есть еще проблема шумного соседа - noisy neighbor. Предположим, что у нас 8 нод. Эти ноды обрабатывают потоки всех пользователей облака. Вроде все хорошо и нагрузка должна равномерно распределяться по всем нодам. Ноды очень мощные и перегрузить их сложно.

Но мы строим свою архитектуру исходя даже из маловероятных сценариев. 

Низкая вероятность не означает невозможность.

Мы можем представить себе ситуацию, в которой один или несколько пользователей будут генерировать слишком большую нагрузку. В обработку этой нагрузки вовлечены все ноды HyperPlane и другие пользователи потенциально могут почувствовать какое-то снижение производительности. Это разрушает концепцию облака, в которой у тенантов нет возможности влиять друг на друга.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Как решить проблему шумного соседа? Первое что приходит на ум – шардирование. Наши 8 нод логически делятся на 4 шарда по 2 ноды в каждом. Теперь шумный сосед помешает всего лишь четверти всех пользователей, но зато сильно.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Давайте поступим по-другому. Каждому пользователю выделим всего по 3 ноды. 

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

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

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

При 8 нодах и 3 пользователях вероятность пересечения шумного соседа с одним из пользователей составляет 54%. Именно с такой вероятностью синий пользователь повлияет на других тенантов. При этом только лишь частью частью своей нагрузки. В нашем примере это влияние будет хоть как-то заметно не всем, а всего трети всех пользователей. Это уже неплохой результат.

Число пользователей, которые пересекутся

Вероятность в процентах

0

18%

1

54%

2

26%

3

2%

Приблизим ситуацию к реальной — возьмем 100 нод и 5 пользователей на 5 нодах. В этом случае ни одна из нод не пересечется с вероятностью 77%. 

Число пользователей, которые пересекутся

Вероятность в процентах

0

77%

1

21%

2

1,8%

3

0,06%

4

0,0006%

5

0,00000013%

В реальной ситуации при огромном количестве HyperPlane нод и пользователей потенциальное влияние шумного соседа на других пользователей минимально. Этот метод называется перемешивающим шардированием - shuffle sharding. Он минимизирует негативный эффект от выхода нод из строя.

На базе HyperPlane построено множество сервисов: Network Load Balancer, NAT Gateway, Amazon EFS, AWS PrivateLink, AWS Transit Gateway.

Масштабы сети

Теперь поговорим о масштабах самой сети. На октябрь 2019 AWS предлагает свои сервисы в 22 регионах, а запланировано еще 9.

  • Каждый регион содержит несколько зон доступности — Availability Zone. Всего их по миру 69.
  • Каждая AZ состоит из Центров Обработки Данных. Всего их не больше 8.
  • В ЦОД располагается огромное количество серверов, в некоторых до 300 000.

Теперь все это усредним, перемножим и получим внушительную цифру, которая отображает масштаб облака Amazon.

Между зонами доступности и ЦОД проложено много оптических каналов. В одном крупнейшем нашем регионе только для связи AZ между собой и центрами связи с другими регионами (Transit Centers) проложено 388 каналов. В сумме это дает бешеные 5000 Тбит.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Backbone AWS построен специально для облака и оптимизирован для работы с ним. Мы строем его на каналах 100 GB / giây. Мы их полностью контролируем, за исключением регионов в Китае. Трафик не разделяется с нагрузками других компаний.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

Конечно, мы не единственный облачный провайдер с частной backbone-сетью. Все больше и больше крупных компаний идут по этому пути. Это подтверждается независимыми исследователями, например, от Telegeography.

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

На графике видно, что доля провайдеров контента и cloud-провайдеров растет. Из-за этого доля Internet-трафика backbone-провайдеров постоянно снижается.

Объясню почему так происходит. Раньше большинство web-сервисов были доступны и потреблялись непосредственно из Internet. Сейчас все больше серверов расположены в облаке и доступны через CDN - Mạng phân phối nội dung. Для доступа к ресурсу пользователь идет через Internet только до ближайшей CDN PoP — Điểm của sự hiện diện. Чаще всего это где-то рядом. Дальше он покидает общедоступный Internet и по приватному backbone летит через Атлантику, например, и попадает непосредственно на ресурс.

Интересно, как поменяется Internet через 10 лет если эта тенденция сохранится?

Физические каналы

Ученые пока не придумали, как увеличить скорость света во Вселенной, но сильно продвинулись в методах его передачи по оптоволокну. Сейчас мы используем кабели с 6912 волокнами. Это помогает значительно оптимизировать стоимость их прокладки.

В некоторых регионах нам приходится использовать специальные кабели. Например, в регионе Сидней мы применяем кабели со специальным покрытием против термитов. 

Cách AWS xử lý các dịch vụ linh hoạt của mình. Mở rộng mạng

От неприятностей никто не застрахован и иногда наши каналы повреждаются. На фото справа оптические кабели в одном из Американских регионов, которые были порваны строителями. В результате аварии потерялось всего 13 пакетов данных, что удивительно. Еще раз – всего 13! Система буквально мгновенно переключилась на резервные каналы — масштаб работает.

Мы галопом пробежались по некоторым сервисам и технологиям облака Amazon. Надеюсь, что у вас появилось хотя бы некоторое представление о масштабе задач, которые приходится решать нашим инженерам. Лично меня это очень увлекает. 

Это финальная часть трилогии от Василия Пантюхина об устройстве AWS. В người đầu tiên части описаны оптимизация серверов и масштабирование базы данных, а во 2 — серверлесс-функции и Firecracker.

Trên HighLoad ++ в ноябре Василий Пантюхин поделится новыми подробностями устройства Amazon. Он sẽ nói о причинах отказов и проектировании распределенные систем в Amazon. 24 октября еще можно đặt билет по хорошей цене, а оплатить потом. Ждем вас на HighLoad++, приходите — пообщаемся!

Nguồn: www.habr.com

Thêm một lời nhận xét