понедельник, ноября 26, 2012

Что такое TCP Incast

TCP Incast - неприятная проблема, возникающая в датацетрах, связанная с работой протокола TCP.

Возникает при следующем сценарии: некий сервер шлет запрос кластеру машин. Все эти машины ему одновременно отвечают. Ответ может быть довольно большой, несколько десятков килобайт. Эти килобайты доходят до свитча, за которым находится наш кластер. Свтич, как это сейчас модно, самый обычный. И буфер у него небольшой. Та часть данных, что в буфер не влезла, будет сброшена. Протокол TCP гарантирует доставку, так что все потерянные пакеты будут посланы еще раз. Вопрос когда. Стандартный RTO (retransmission timeout) - 200 ms. Для какого-нибудь облачного сервиса это много. В результате получаем латентность, наша распределенная система работает слишком медленно.

Здесь описание TCP Incast с правильной картинкой: TCP Incast and Cloud application performance
Еще одно хорошее описание: Fine-grained TCP Retransmissions

Как с этим можно бороться. Простой и действенный способ - уменьшить RTO до 1 ms. Еще можно изменить протокол TCP: Data Center TCP (DCTCP)

Еще пара работ с анализом проблемы с красивыми картинками:
Understanding TCP Incast Throughput Collapse in Datacenter Networks[.pdf]
Safe and Effective Fine-grained TCP Retransmissions for Datacenter Communication[.pdf]

воскресенье, ноября 25, 2012

Несколько крупных IT компаний договорились не переманивать программистов

Обсуждаемая новость последних дней - Пакт о ненападении: Parallels договорилась с «Яндексом», «Касперским» и другими не хантить программистов.

Очень странное решение. Во-первых, оно дает преимущество компаниям, которые в данной инициативе не участвуют.
Во-вторых, интересно, насколько это вообще легально и что по этому поводу думает ФАС.

Программисты недовольны, что ожидаемо. (На недовольных программистов можно посмотреть, например, тут)

среда, ноября 21, 2012

Статья Storage Layout of Polymorphic Objects

Начинающим С++ программистам часто бывает непонятно каким образом и где хранятся виртуальные функции. Статья Storage Layout of Polymorphic Objects рассказ в картинках о том, как будут размещены поля и виртуальные функции объекта, рекомендую.

via Code_Analysis