Как стать автором
Поиск
Написать публикацию
Обновить
0
@aplexeyread⁠-⁠only

Пользователь

Отправить сообщение

Data Plane Development Kit (DPDK): приступая к работе

Время на прочтение7 мин
Количество просмотров29K
Для быстрой обработки пакетов требуется обнаруживать битовые шаблоны и быстро (со скоростью работы канала) принимать решения о нужных действиях на основе наличных битовых шаблонов. Эти битовые шаблоны могут принадлежать одному из нескольких заголовков, присутствующих в пакете, которые, в свою очередь, могут находиться на одном из нескольких уровней, например Ethernet, VLAN, IP, MPLS или TCP/UDP. Действия, определяемые по битовым шаблонам, могут различаться — от простого перенаправления пакетов в другой порт до сложных операций перезаписи, для которых требуется сопоставление заголовка пакета из одного набора протоколов с другими. К этому следует добавить функции управления трафика и политик трафика, брандмауэры, виртуальные частные сети и т. п., вследствие чего сложность операций, которые необходимо выполнять с каждым пакетом, многократно возрастает.

Чтобы добиться работы на ожидаемом уровне производительности при скорости канала 10 Гбит/с и размере пакета в 84 байта, процессор должен обрабатывать 14,88 миллиона пакетов в секунду. Оборудование общего назначения было недостаточно мощным для обработки пакетов с такой скоростью. Поэтому в большинстве рабочих сетевых систем обработкой пакетов в каналах данных занимаются контроллеры ASIC и сетевые процессоры NPU. К очевидным недостаткам такого подхода относятся: недостаточная гибкость, высокая стоимость, длительные циклы разработки, зависимость от определенного поставщика. Тем не менее, благодаря доступности более быстрых и дешевых ЦП и программных ускорителей, таких как Data Plane Development Kit (DPDK), можно переложить эту нагрузку на оборудование общего назначения.
Читать дальше →

По мотивам Cisco Live 2009: Advanced Concepts of DMVPN

Время на прочтение15 мин
Количество просмотров38K
Продолжая серию статей о VPN, хочу поделиться подробностями о реализации технологии DMVPN, изложенными на Cisco Live 2009. Осторожно, много букв :)
Читать дальше →

BGP Inter-AS

Время на прочтение28 мин
Количество просмотров73K
Сегодня речь пойдет о «межоператорском» взаимодействии — BGP Inter-AS. Эти опции используют при необходимости прокинуть L3vpn между PE маршрутизаторами, находящимися в разных автономных системах. Стоит уточнить, что данные опции используются по большей части внутри компаний при поглощении/слиянии сетей, для взаимодействия между филиалами одной компании если они имеют свои автономные системы и свои mpls домены.
В статье рассмотрим следующие темы:
— BGP Inter-AS Option A
— BGP Inter-AS Option B
— BGP Inter-AS Option C
— Особенности настройки данных опций на JunOS
В данной статье будет много выводов из CLI Cisco и Juniper. Если вы не знаете основ mpls, разницы между bgp labeled-unicast и vpnv4 unicast, то читать данную статью вам нет смысла. Если же эти понятия вам знакомы, то прошу под кат.
Читать дальше →

DevOps с Kubernetes и VSTS. Часть 2: Облачная история

Время на прочтение16 мин
Количество просмотров6K
Продолжение истории про Kubernetes, контейнеры и организацию CI/CD пайплайна. Наконец-то появляется облако Azure и Visual Studio Team Services. Интересно, что CI/CD пайплайн VSTS использует для работы с k8s кластером kubectl, поэтому развёртывать приложение можно не только в Azure Container Services, но и в любой другой инстраляции Kubernetes.



Читайте перевод второй части статьи DevOps с Kubernetes и VSTS.
Читать дальше →

Настройка VPLS Multihoming на маршрутизаторах Juniper

Время на прочтение13 мин
Количество просмотров28K
Технология VPLS уже давно зарекомендовала себя как способ объединения географически разнесенных объектов в единую L2-сеть. Такое решение хорошо масштабируется по сравнению с классической L2-сетью и позволяет избавиться от проблем L2-петель в ядре сети. Однако, часто возникает необходимость организации резервных каналов от абонента к VPLS-облаку. В такой ситуации есть опасность образования петель на участке PE-CE. Для решения этой проблемы существует несколько подходов. Вот некоторые из них:
  • BGP-Based VPLS Multihoming
  • Связка VPLS и STP
  • MC-LAG

В данной статье я бы хотел рассмотреть первые два подхода.
Читать дальше →

Demystifying Juniper's rib-groups

Время на прочтение3 мин
Количество просмотров18K
Многие из моих знакомых не до конца понимаю механизм работы rib-groups внутри Juniper's JunOS. В данной статье я попробую наиболее просто объяснить, что же это такое — rib-groups, и зачем они нужны.
Подробности под катом.

Читать дальше →

Пользовательские атрибуты в Python

Время на прочтение11 мин
Количество просмотров192K
Вы когда нибудь задумывались о том, что происходит, когда вы ставите точку в python? Что скрывает за собой символ str(“\u002E”)? Какие тайны он хранит? Если без мистики, вы знаете как происходит поиск и установка значений пользовательских атрибутов в python? Хотели бы узнать? Тогда… добро пожаловать!
Читать дальше →

Тюним память и сетевой стек в Linux: история перевода высоконагруженных серверов на свежий дистрибутив

Время на прочтение10 мин
Количество просмотров97K
image

До недавнего времени в Одноклассниках в качестве основного Linux-дистрибутива использовался частично обновлённый OpenSuSE 10.2. Однако, поддерживать его становилось всё труднее, поэтому с прошлого года мы перешли к активной миграции на CentOS 7. На подготовительном этапе перехода для CentOS были отработаны все внутренние процедуры, подготовлены конфиги и политики настройки (мы используем CFEngine). Поэтому сейчас во многих случаях миграция с одного дистрибутива на другой заключается в установке ОС через kickstart и развёртывании приложения с помощью системы деплоя нашей разработки — всё остальное осуществляется без участия человека. Так происходит во многих случаях, хотя и не во всех.

Но с самыми большими проблемами мы столкнулись при миграции серверов раздачи видео. На их решение у нас ушло полгода.
Читать дальше →

DevOps с Kubernetes и VSTS. Часть 1: Локальная история

Время на прочтение13 мин
Количество просмотров13K
Последнее время я часто рассказываю про контейнеры, Docker и Kubernetes. На фоне этого коллеги всё чаще стали спрашивать о том, а где же здесь технологи Microsoft? Чтобы объяснить, я нашёл несколько материалов, в том числе этот набор из пары статей от Colin Dembovsky. В них есть всё: Docker, Kubernetes и наши технологии. Думаю, что для читателей Хабры это тоже должно быть интересно. Итак, встречайте, перевод первой части.



Если вы читаете мой блог, то знаете, что я фанат контейнеров в целом и Docker в частности. Когда вы в последний раз ставили софт на «голое железо»? Может быть, только на ноутбук, но и то шансы невелики. Виртуализация кардинально изменила наше отношение к ресурсам центра обработки данных, значительно увеличив их плотность и эффективность использования. Следующим этапом повышения плотности стали контейнеры, только ВМ размещаются на физических серверах, а контейнеры — в самих ВМ. Очень скоро большинство из нас не будет работать не только на уровне серверов, но даже на уровне ВМ, все рабочие нагрузки переместятся в контейнеры. Но это в перспективе.
Подходы к локальной разработке с использованием Kubernetes и minikube

Bridge-domains and virtual-switch in JunOS

Время на прочтение21 мин
Количество просмотров28K
image alt

Где то год назад или раньше я писал статью, посвященную routing-instance в JunOS, где описал основные виды routing инстансов, за исключением virtual switch и evpn. О последней вы можете прочитать в статье о EVPN, а вот virtual-switch пока что остался без внимания. Многие недооценивают возможности данной routing instance — а ведь функционал приличен. В данной небольшой статье мы рассмотрим — что такое virtual-switch, с чем его едят и нужен ли он вам.
Читать дальше →

Понимаем декораторы в Python'e, шаг за шагом. Шаг 1

Время на прочтение6 мин
Количество просмотров452K

На Хабре множество раз обсуждалась тема декораторов, однако, на мой взгляд, данная статья (выросшая из одного вопроса на stackoverflow) описывает данную тему наиболее понятно и, что немаловажно, является «пошаговым руководством» по использованию декораторов, позволяющим новичку овладеть этой техникой сразу на достойном уровне.

Итак, что же такое «декоратор»?


Впереди достаточно длинная статья, так что, если кто-то спешит — вот пример того, как работают декораторы:
def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped
 
def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped
 
@makebold
@makeitalic
def hello():
    return "hello habr"
 
print hello() ## выведет <b><i>hello habr</i></b>

Те же из вас, кто готов потратить немного времени, приглашаются прочесть длиииинный пост

Понимаем декораторы в Python'e, шаг за шагом. Шаг 2

Время на прочтение12 мин
Количество просмотров236K

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


Итак, в первой части данной статьи мы совершили базовое знакомство с декораторами, принципами их работы и даже написали свой вручную.
Однако, все декораторы, которые мы до этого рассматривали не имели одного очень важного функционала — передачи аргументов декорируемой функции.
Что ж, исправим это недоразумение!
Читать дальше →

Что за чёрт, Python

Время на прочтение24 мин
Количество просмотров103K


Недавно мы писали о забавных, хитрых и странных примерах на JavaScript. Теперь пришла очередь Python. У Python, высокоуровневого и интерпретируемого языка, много удобных свойств. Но иногда результат работы некоторых кусков кода на первый взгляд выглядит неочевидным.


Ниже — забавный проект, в котором собраны примеры неожиданного поведения в Python с обсуждением того, что происходит под капотом. Часть примеров не относятся к категории настоящих WTF?!, но зато они демонстрируют интересные особенности языка, которых вы можете захотеть избегать. Я думаю, это хороший способ изучить внутреннюю работу Python, и надеюсь, вам будет интересно.


Если вы уже опытный программист на Python, то многие примеры могут быть вам знакомы и даже вызовут ностальгию по тем случаям, когда вы ломали над ними голову :)

Читать дальше →

Мониторинг и настройка сетевого стека Linux: получение данных

Время на прочтение71 мин
Количество просмотров91K


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

Также рекомендуем ознакомиться с иллюстрированным руководством на ту же тему, там есть поясняющие схемы и дополнительная информация.
Читать дальше →

Использование DPDK для обеспечения высокой производительности прикладных решений (часть 0)

Время на прочтение14 мин
Количество просмотров22K

Kernel is the root of all evil ⊙.☉


Сейчас вряд ли кого-то удивить использованием epoll()/kqueue() в поллерах событий. Для решения проблемы C10K cуществует довольно много разнообразных решений (libevent/libev/libuv), с разной производительностью и довольно высокими накладными расходами. В статье рассматривается использование DPDK для решения задачи обработки 10 миллионов соединений (С10M), и достижение максимального прироста производительности при обработке сетевых запросов в распространённых прикладных решениях. Главной особенностью подобной задачи является делегирование ответственности обработки трафика с ядра ОС в пользовательское пространство (userspace), точный контроль обработки прерываний и каналов DMA, использование VFIO, и много других не очень понятных слов. В качестве целевого прикладного окружения было выбрано Java Netty с использованием Disruptor паттерна и offheap кэширования.



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

В статье очень детально рассмотрены вопросы установки, настройки, использования, отладки, профилирования и разворачивания DPDK для построения высокопроизводительных решений.

Welcome to the dark side!

Основы Juniper Contrail, и как его поставить себе в лабу

Время на прочтение7 мин
Количество просмотров16K
Неожиданно обнаружилось, что на Хабре нет практически никакой информации про Juniper Contrail (да-да, SDN) — и я решил своими силами восполнить упущение.

В этой статье хочу вкратце рассказать о том, что такое Contrail, в каких формах он доступен и как его поставить себе в лабу. Более конкретно, ставить будем Contrail Cloud 3.2.0.

image
Читать дальше →

Введение в DPDK: архитектура и принцип работы

Время на прочтение11 мин
Количество просмотров78K
DPDK

За последние несколько лет тема производительности сетевого стека Linux обрела особую актуальность. Это вполне понятно: объёмы передаваемых по сети данных и соответствующие нагрузки растут не по дням, а по часам.

И даже широкое распространение сетевых карт 10GE не решает проблемы: в самом ядре Linux имеется множество «узких мест», которые препятствуют быстрой обработке пакетов.
Читать дальше →

OvS, DPDK и Intel HT: 12-кратное ускорение виртуального коммутатора

Время на прочтение7 мин
Количество просмотров8.7K
Сегодня расскажем об Open vSwitch, интегрированном с Data Plane Development Kit (OvS-DPDK). Это – высокопроизводительный виртуальный многоуровневый коммутатор с открытым исходным кодом, доступный по лицензии Apache 2.0. Интеграция OvS с DPDK позволяет значительно повысить скорость обработки сетевых пакетов.
image

Open vSwitch нашёл практическое применение во множестве проектов. Коммутатор поддерживает протокол OpenFlow, подходит для работы в программно-определяемых сетях (Software Defined Network, SDN). OvS можно конфигурировать с помощью протокола управления OVSDB.
Читать дальше →

Изучаем внутреннюю кухню ядра Linux с помощью /proc для быстрой диагностики и решения проблем

Время на прочтение13 мин
Количество просмотров68K
Данная статья касается современных линуксов. Например, RHEL6 с ядрами 2.6.3х — подойдёт, а вот RHEL5 с ядрами 2.6.18 (кстати, наиболее популярный в продакшне) — увы, нет. И ещё — здесь не будет описания ядерных отладчиков или скриптов SytemTap; только старые-добрые простые команды вида «cat /proc/PID/xyz» в отношении некоторых полезных узлов файловой системы /proc.

Диагностика «тормозящего» процесса


Вот хороший пример часто возникающей проблемы, которую я воспроизвёл на своём лаптопе: пользователь жалуется, что команда find работает «значительно медленнее», при этом не возвращая никаких результатов. Зная, в чём дело, мы решили проблему. Однако меня попросили изложить систематический подход к решению подобных задач.

К счастью, система работает под управлением OEL6, т.е. на достаточно свежем ядре (а именно — 2.6.39 UEK2)

Итак, приступим к диагностике.
Подробности

Kubernetes на голом железе за 10 минут

Время на прочтение8 мин
Количество просмотров166K


Kubernetes — это предназначенный для контейнерной оркестровки фреймворк с открытым исходным кодом. Он был создан с учетом богатейшего опыта Google в области создания сред управления контейнерами и позволяет выполнять контейнеризованные приложения в готовом к промышленной эксплуатации кластере. В механизме Kubernetes много движущихся частей и способов их настройки — это различные системные компоненты, драйверы сетевого транспорта, утилиты командной строки, не говоря уже о приложениях и рабочих нагрузках.


По ходу этой статьи мы установим Kubernetes 1.6 на реальную (не виртуальную) машину под управлением Ubuntu 16.04 примерно за 10 минут. В результате у вас появится возможность начать изучать взаимодействие с Kubernetes посредством его CLI kubectl.
Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность