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

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

Avatar for CodeFest CodeFest
April 06, 2019

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

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

Avatar for CodeFest

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