Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CodeFest 2019. Сергей Еланцев (Яндекс) — Баланс...

CodeFest
April 06, 2019

CodeFest 2019. Сергей Еланцев (Яндекс) — Балансировщик нагрузки. Опыт разработки Яндекс.Облака

Мы рассмотрим архитектуру сетевого балансировщика нагрузки Яндекс.Облака. Разберём абсолютно все компоненты стека балансировщика, узнаем про высокоуровненвые компоненты, реализующие API сервиса. Заглянем в control plane балансера и рассмотрим поток сообщений внутри микросервисной архитектуры. Погрузимся в глубины data plane и узнаем, как обеспечить космическую пропускную способность и бесконечное горизонтальное масштабирование. Узнаем, как устроены healthcheck сервисы и динамическое изменение состава бэкэндов баланировщика. Обсудим уроки, полученные при разработке балансировщика, и поделимся планами на будущее.

CodeFest

April 06, 2019
Tweet

More Decks by CodeFest

Other Decks in Technology

Transcript

  1. Адресация Healthcheck 610 Шаг Source IP Destination IP Healthcheck->Balancer fc::<h-id>:198.16.0.1

    fc::<c-id>:10.0.0.1 Balancer->Real 198.16.0.1 10.0.0.1 Real->Balancer 10.0.0.1 198.16.0.1 Balancer->Healthcheck fc::<c-id>:10.0.0.1 fc::<h-id>:198.16.0.1
  2. VPP 611 Сердце нашего Data plane Vpp - Vector Packet

    Processing
 › DPDK › Batch Processing › CPU Affinity › Immutable/Thread-local mutable › CPU cache
  3. Типичный цикл vpp 612 n_left_from = frame->n_vectors; while (n_left_from >

    0) { vlib_get_next_frame (vm, node, next_index, to_next, n_left_to_next); while (n_left_from >= 4 && n_left_to_next >= 2) { u32 next0 = SAMPLE_NEXT_INTERFACE_OUTPUT; u32 next1 = SAMPLE_NEXT_INTERFACE_OUTPUT; /* Prefetch next iteration. */ { p2 = vlib_get_buffer (vm, from[2]); p3 = vlib_get_buffer (vm, from[3]); vlib_prefetch_buffer_header (p2, LOAD); vlib_prefetch_buffer_header (p3, LOAD); CLIB_PREFETCH (p2->data, CLIB_CACHE_LINE_BYTES, STORE); CLIB_PREFETCH (p3->data, CLIB_CACHE_LINE_BYTES, STORE); }
  4. Что сработало хорошо 617 Масштабируемая и отказоустойчивая архитектура
 › Control

    plane на Go › Хорошая масштабируемость › Удобно писать › Много open source › Отличная производительность VPP
  5. Что сработало плохо 618 › Утечки памяти в Go ›

    Функциональные тесты на Go › Отсутствие tracing
  6. Планы на будущее 619 › Шардировать ещё больше! › Добавить

    новых healthcheck › Поменять логику агрегации healthcheck › Развязать сервисы через message queue