Сравнительный Анализ Linkerd И Istio



Сравнительный анализ Linkerd и Istio

Фото с сайта linkerd.io Пару лет назад ребята из Кинволк сравнил производительность Linkerd и Istio и выяснил, что Linkerd значительно быстрее и меньше Istio во всех областях, кроме одной.

.

Linkerd использовал больше ресурсов ЦП на уровне данных.

Недавно мы повторили эти эксперименты с последними версиями обеих сервисных сеток.

Как показывают результаты, Linkerd не только все еще заметно быстрее Istio, но и использует на порядок меньше памяти и ресурсов ЦП в плоскости данных.

.

Причём это происходит даже в том случае, если количество запросов в секунду более чем в три раза больше, чем в бенчмарке Kinvolk. Вы можете легко это повторить.

Теперь подробности.



Контекст

В 2019 году Кинволк опубликовал Сравнительные показатели Linkerd и Istio .

Это дало два результата.

Во-первых, был Инструмент сравнения сервисных сеток с открытым исходным кодом , с помощью которого каждый может воспроизвести бенчмаркинг.

Прелесть этого инструмента в том, что он воспроизводит реальные сценарии: через простое микросервисное приложение проходит постоянный поток трафика, используются вызовы gRPC и HTTP, измеряются затрачиваемые ресурсы памяти и ЦП, а также задержка при использовании сервисной сетки.

.

Важно отметить, что задержка измеряется с точки зрения клиента, а не внутренних процессов.

Во-вторых, Kinvolk представил результаты бенчмарка Linkerd и Istio за 2019 год. Цифры показали, что Linkerd работает намного быстрее и потребляет значительно меньше ресурсов, за исключением одного участка — плоскость данных Linkerd (т. е.

прокси) потребляла больше процессорных ресурсов, чем Istio. , при очень высокой нагрузке.

Спустя два года и множество новых релизов с обеих сторон мы решили повторить этот эксперимент.

Подготовка

Мы использовали инструмент сравнительного анализа Kinvolk и последние стабильные версии обоих проектов: Linkerd 2.10.2 (установка по умолчанию) и 1.10.0 (минимальная конфигурация).

Мы запустили последнюю версию инструмента для сравнительного анализа на кластере Kubernetes v1.19 с дистрибутивом Lokomotive Kubernetes и использовали любезно предоставленное «голое железо» оборудование.

Эквиникс Металл для проектов CNCF. Первое, что мы сделали, — это искали тестовую среду на Equinix Metal, которая обеспечивала бы стабильные результаты при каждом запуске.

Это оказалось сложно: многие среды давали большую разницу в задержке даже без сервисной сетки (например, в одной среде мы получили максимальную задержку от 26 до 159 мс для 200 запросов в секунду без сервисной сетки!).

Наконец мы нашли кластер в Дата-центр Equinix Metal dfw2 , что дало меньше расхождений.

Кластер состоял из шести рабочих нод конфигурации s3.xlarge.x86 (Intel Xeon 4214 с 24 физическими ядрами, 2,2 ГГц и 192 ГБ ОЗУ), на которых мы запустили приложение.

Другой узел с такой же конфигурацией генерировал нагрузку.

Плюс был главный узел Kubernetes с конфигурацией конфигурации c2.medium.x86. Затем мы приступили к настройке параметров инструмента.

Kinvolk оценивался по производительности на уровне 500 запросов в секунду (RPS) и 600 RPS. Мы расширили ассортимент и взяли 20 RPS, 200 RPS и 2000 RPS. На каждом уровне мы сделали по шесть независимых прогонов со стабильной нагрузкой по 10 минут для Linkerd, Istio и конфигурации без сервисной сетки.

Между запусками мы переустанавливали все ресурсы тестов и сетки.

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

Если хотите, можете изучить наш необработанные данные .

Платформа Kinvolk измеряет поведение сервисной сетки, в частности:

  • Он оценивает наибольшее потребление памяти для плоскости управления и плоскости данных.

    То есть максимальное потребление памяти в плоскости управления (в сумме со всеми компонентами) в любой момент прогона будет считаться значением для этого прогона.

  • То же самое происходит с памятью для прокси-сервера плоскости данных.

  • Для ресурсов процессора значение рассчитывается таким же образом, используя в качестве метрики время процессора.

  • Задержка измеряется с точки зрения клиента (генератора нагрузки) и включает время в сети кластера, время в приложении, время в прокси-сервере и т. д. Задержка выражается как процентиль распределения — p50 (медиана), p99, p999 ( 99,9%) и т. д.
(См.

раздел «Сводка» ниже.

) Цифры зависят как от самой сервисной сетки, так и от инструмента и его среды.

То есть это не абсолютные, а относительные величины, сравнивать которые можно только в том случае, если они получены одним и тем же методом в одной и той же среде.

Примечание автора.

Заявления о том, что медианная задержка Linkerd на X мс превышает базовую конфигурацию, не означают, что Linkerd увеличит медианную задержку в вашем приложении на X мс.

Кроме того, это не означает, что отдельный прокси-сервер Linkerd увеличит задержку на X мс (средняя задержка отдельного прокси-сервера Linkerd составляет менее миллисекунды для большинства типов трафика).



Какие функции сервисной сетки мы тестировали?

Сервисная сетка имеет множество возможностей, но в наших экспериментах мы использовали лишь некоторые из них:
  • В обеих сервисных сетках был включен mTLS, трафик шифровался, а аутентификация выполнялась между всеми модулями приложений.

  • Обе сервисные сетки отслеживали метрики, в том числе и на L7, хотя в нашем эксперименте мы эти метрики не использовали.

  • Обе сервисные сетки по умолчанию регистрируют разные сообщения на уровне INFO. Мы не настраивали логирование.

  • Обе сервисные сетки могли добавлять повторы и таймауты, а также перераспределять трафик по-разному, но мы не использовали эти функции явно.

  • Мы не включили распределенную трассировку, взаимодействие между кластерами и другие функции в стиле сетки.



Результаты

Результаты наших экспериментов показаны на графиках ниже.

Каждое очко представляет собой среднее значение пяти пробежек.

Усы показывают одно стандартное отклонение от этого среднего значения.

Синий столбец — Linkerd, оранжевый — Istio, а желтый — конфигурация без сервисной сетки.



Задержка при 20 RPS

Мы начали с малого — 20 RPS, но даже здесь есть большая разница в задержке для пользователя.

Linkerd имеет среднюю задержку 17 мс, что на 11 мс больше, чем в базовой конфигурации (6 мс).

У Istio средняя задержка составляет 26 мс, что почти в два раза больше, чем у Linkerd. Максимальная дополнительная задержка у Linkerd составляет 53 мс от базовой конфигурации (17 мс), а у Istio — 188 мс, то есть более чем в три раза больше, чем у Linkerd. Если посмотреть на процентили, то полоска Istio резко подскакивает на p99, почти до 200 мс, а у Linkerd подъем более постепенный, до 70 мс.

(Помните, что задержка измеряется с точки зрения клиента, то есть мы видим, как она воспринимается пользователем приложения.

)

Сравнительный анализ Linkerd и Istio



Задержка при 200 об/с

При 200 RPS мы видим аналогичную картину, и средние задержки почти такие же: у Linkerd 17 мс, опять же на 11 мс больше базовой, а у Istio 25 мс, что на 19 мс больше.

В максимуме у Istio задержка составляет 221 мс, почти на 200 мс больше, чем у базовой конфигурации (23 мс), а у Linkerd — 92 мс в абсолютном выражении и 70 мс по сравнению с базовой — в 2,5 раза меньше, чем у Istio. И снова на p99 задержка Istio резко возрастает почти до 200 мс, а у Linkerd падает всего до 90 мс.



Сравнительный анализ Linkerd и Istio



Задержка при 2000 об/с

Наконец, при 2000 RPS (что почти в три раза больше, чем у Kinvolk) ситуация примерно та же — у Linkerd медианная задержка на 9 мс выше базовой конфигурации (6 мс), а у Istio — на 15 мс выше.

В максимуме у Linkerd оно больше на 47 мс по сравнению с базовой конфигурацией (25 мс), а у Istio почти в пять раз больше — 253 мс.

В целом, в каждом процентиле задержка у Istio была на 40–400 % лучше, чем у Linkerd.

Сравнительный анализ Linkerd и Istio



Потребление ресурсов

Теперь посмотрим на потребление ресурсов.

Потребление памяти и ЦП для обеих сервисных сеток показано на графиках ниже.

Цифры практически не зависят от количества запросов в секунду, поэтому мы остановимся подробнее на сценарии с самой высокой нагрузкой — 2000 RPS. В плоскости управления мы видим, что Istio потребляет в среднем 837 МБ памяти, почти в 2,5 раза больше, чем Linkerd — 324 МБ.

Разница в потреблении ЦП в плоскости управления еще более впечатляющая — 71 мс у Linkerd против 3,7 с у Istio. Но нас больше интересуют цифры для плоскости данных.

Это именно та часть сетки, которая должна масштабироваться вместе с приложением.

Здесь разница очень заметна: в среднем максимальное потребление памяти Linkerd составляет 17,8 МБ, а у прокси Istio Envoy — в восемь раз больше, 154,6. Максимальное время процессора у Linkerd — 10 мс, а у Istio почти на порядок больше — 88.

Сравнительный анализ Linkerd и Istio



Полученные результаты

Бенчмарки, моделирующие реальные сценарии, показывают, что Linkerd заметно превосходит Istio и потребляет в несколько раз меньше ресурсов в плоскости данных.

При максимальном количестве запросов в секунду Linkerd потребляет лишь девятую часть памяти и восьмую часть времени процессора Istio на уровне данных, при этом медианная задержка всего на 75 % больше, чем в базовой конфигурации, и менее чем на одну пятую дополнительную задержку, которую дает Istio. .

Бенчмаркинг — это искусство.

В этих экспериментах мы намеренно повторили то, что сделал Кинволк, но хотим кое-что изменить в будущем.

Например:

  • Измеряйте общее, а не максимальное потребление ресурсов, чтобы лучше отображать истинные затраты.

  • Измеряйте ресурсы ЦП в ядрах, а не во времени, чтобы это было больше похоже на способ измерения памяти.

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

Наши эксперименты были намного проще, чем у Kinvolk в 2019 году.

У них было 30 минут стабильного трафика, разные кластеры, разные дата-центры и другие методы учета различий в оборудовании или сетях.

Мы со своей стороны сначала попытались найти среду с минимальными расхождениями.



Почему Linkerd настолько быстрее и легче?

Эта разница в производительности и потреблении ресурсов между Linkerd и Istio в основном объясняется микропрокси на базе Rust , Linkerd2-прокси .

Микропрокси лежит в основе плоскости данных Linkerd, и тесты во многом отражают его производительность и потребление ресурсов.

Мы много написал про Linkerd2-прокси И причины, почему мы любим Rust еще в 2018 году.

Интересный факт: Linkerd2-прокси был разработан не для производительности, а для оперативный соображения.

Чтобы использовать сервисную сетку на основе Envoy, такую как Istio, вам необходимо стать экспертом по Envoy. Мы решили не мучить этим пользователей Linkerd. Примечание автора: Прокси — пожалуй, самая интересная часть сервисной сетки с технической точки зрения, но наименее интересная для пользователей.

Мы считаем, что прокси-сервер Service Mesh должен составлять второстепенную часть реализации.

Мы прилагаем все усилия, чтобы большинству пользователей Linkerd не пришлось ничего узнавать о Linkerd2-прокси.

.

Как назло, Linkerd2-прокси обеспечил большой прирост производительности и эффективности.

Он был разработан исключительно как прокси-сервер сервисной сетки, поэтому он был невероятно эффективен на уровне данных.

Выбрав Rust, мы также получили все преимущества его экосистемы: при создании библиотек, таких как Токио , Гипер И Башня , используются лучшие принципы проектирования и системный подход. Linkerd2-proxy — это не только невероятно быстрый, легкий и безопасный прокси.

Он представляет собой одну из самых современных технологий во всей CNCF.

Планы на будущее

Как ни странно, несмотря на отличные результаты Linkerd в этих тестах, мы еще не изучали производительность прокси-сервера.

Работая в этом направлении, мы собираемся еще больше улучшить нашу производительность.

Мы внимательно наблюдаем СМП проект , которые могут представлять стандарты сравнительного анализа.

В идеале бенчмаркинг будет проводиться независимыми третьими сторонами.

Это подводит нас к следующей теме:

Как воспроизвести эти эксперименты

Чтобы воспроизвести эти эксперименты самостоятельно, следуйте инструкции по сравнительному тестированию .

Руководствуйтесь наши комментарии к методике .

Обязательно найдите среду, которая дает стабильные результаты, особенно если вы хотите оценить максимальную задержку.

Это значение сильно зависит от сетевого трафика, конкуренции за ресурсы и т. д. Помните, что вы получите относительные, а не абсолютные числа.

Расскажите нам, что произошло.



Благодарность

Особая благодарность ребятам из Equinix за предоставление среды Kubernetes; CNCF, который позволил проекту Linkerd провести эти эксперименты; и ребятам из Kinvolk, особенно Тило Фромму, за отличный инструмент для сравнительного анализа.



Связано для всех

Linkerd — это общественный проект в Фонд облачных вычислений .

Линкерд поддерживает открытое управление .

Если у вас есть пожелания, вопросы или комментарии, присоединяйтесь к нашему быстро растущему сообществу! Linkerd размещен на GitHub .

У нас есть обширные сообщества в Слабый , Твиттер И список рассылки .

Теги: #Kubernetes #DevOps #Microservices #service mesh #istio #Системное программирование #linkerd #linkerd #Linkerd

Вместе с данным постом часто просматривают: