Что такое оверхед в программировании
overhead
Смотреть что такое «overhead» в других словарях:
Overhead — may be: Overhead (business), the ongoing operating costs of running a business Engineering overhead, ancillary design features required by a component of a device Computational overhead, ancillary computation required by an algorithm or program… … Wikipedia
Overhead — (v. engl.: over über; head Kopf) ist ein in verschiedenen Bereichen verwendeter Anglizismus, den man oft mit „Mehraufwand“ übersetzen kann. Overhead bezeichnet: allgemein (evtl. entbehrlichen) Mehraufwand, der nicht direkt Nutzen erzeugt Overhead … Deutsch Wikipedia
overhead — over·head / ō vər ˌhed/ n: business expenses (as rent or insurance) not chargeable to a particular part of the work or product Merriam Webster’s Dictionary of Law. Merriam Webster. 1996. overhead … Law dictionary
overhead — [ō′vər hed΄; ] for adv. [ ō΄vər hed′] adj. 1. a) located or operating above the level of the head ☆ b) designating a door, as of a garage, that moves into place overhead when opened 2. in the sky 3. on a higher level, with reference to related… … English World dictionary
overhead — ► ADVERB ▪ above one s head; in the sky. ► ADJECTIVE 1) situated overhead. 2) (of a driving mechanism) above the object driven. 3) (of an expense) incurred in the upkeep or running of premises or a business. ► NOUN 1) an overhead cost or expense … English terms dictionary
overhead — 1530s, above one s head (adv.), from OVER (Cf. over) + HEAD (Cf. head). The adjective is attested from 1874. As a noun, short for overhead costs, etc., it is attested from 1914 … Etymology dictionary
overhead — [adj/adv] up above above, aerial, aloft, atop, hanging, in the sky, on high, over, overhanging, roof, skyward, upper, upward; concept 586 Ant. below, underfoot overhead [n] general, continuing costs of operation budget, burden, cost, depreciation … New thesaurus
Overhead — Cost; in die deutsche wirtschaftliche Umgangssprache übernommene Bezeichnung für ⇡ fixe Kosten bzw. ⇡ Gemeinkosten … Lexikon der Economics
overhead — cost An indirect cost of an organization. Overheads are usually classified as manufacturing overheads, administration overheads, selling overheads, distribution overheads, and research and development costs … Accounting dictionary
Что такое оверхед в программировании
Все, что вы разрабатываете, не будучи зависимыми от третьих сторон, более предсказуемо по финансовым и временным затратам. При интеграции же «мяч» почти постоянно находится на стороне команды сервиса. Непрерывность хода и стоимость проекта обусловлены их уровнем вовлеченности в сотрудничество, а также состоянием документации к API.
Мы в Axmor осуществили 100+ интеграций с различными веб-сервисами и аппаратными решениями, и можем сказать, что практически каждая интеграция в плане управления проектом — это путь, полный мелких и крупных подводных камней. Тем не менее, все решаемо, вопрос лишь в количестве рисков, которые нужно учесть на старте.
В статье мы предложим 2 чек-листа действий — для случаев интеграции с публичными и непубличными сервисами. Эти подготовительные мероприятия помогут минимизировать перерасходы по времени или бюджету и спрогнозировать объем рисков в целом.
Статья будет полезна менеджерам проектов, тимлидам и разработчикам.
Интеграция с публичным сервисом
Поскольку такие сервисы, как правило, платные или условно бесплатные, то для привлечения и удержания пользователей владельцы заботятся об их удобстве, публикуя официальную документацию, а также предоставляя возможность обратиться за помощью в службу поддержки.
Если бы мы жили в идеальном мире, на этом история об интеграции с публичным сервисом и закончилась бы. В реальности же качество документации может варьироваться, из-за чего нередко возникают следующие проблемы:
Полнота: документация неполная и описаны не все случаи использования сервиса;
Актуальность: фактический функционал сервиса отличается от функционала, описанного в документации;
Стабильность: функционал на практике может оказаться нестабильным или лимитированным;
Доступность: необходимая часть функционала может быть платной. Например, плату потребуют после 10 000 запроса к сервису — это лучше выяснить заранее и заложить в проектный бюджет.
Случай из нашей практики — с хорошим концом
Один из наших заказчиков — владелец сайта, на котором регистрируют компании в Австралии. Перед нами была поставлена задача по интеграции этого сайта с публичным австралийским государственным сервисом — ASIC Business Name Registration Service.
Первая проблема заключалась в том, что документация, размещенная на сайте сервиса, представляла собой описание функционала еще не выпущенной версии 3.1, хотя в продакшне находилась версия 1.5.
После безуспешных попыток настроить работу сервиса по имеющимся инструкциям мы решили обратиться за помощью в службу поддержки, и началась долгая переписка с ее сотрудником.
Он любезно предоставил соответствующую версии сервиса документацию, но на этом сложности не закончились. В ней описывались основные методы взаимодействия с сервисом в «идеальных» условиях, однако, при работе с реальными данными возникали ситуации, которых не было в документации, а сами запросы возвращали лишь «400 Bad Request» без описания причины проблемы. В каждой такой ситуации приходилось писать сотруднику саппорта и вместе искать решение. Некоторые проблемы были настолько специфичными, что он сам несколько раз обращался в свой IT-отдел за консультацией.
Третьей проблемой была разница часовых поясов между Новосибирском и Мельбурном. К тому времени, как у нас возникал вопрос к документации или по использованию сервиса, рабочий день в Австралии подходил к концу, и ответ мы получали только на следующий день утром. Вопросы возникали часто, а скорость ответов составляла приблизительно день.
В конечном итоге мы справились с поставленной задачей (спасибо саппортеру!), и интегрировали необходимый сервис в продукт, однако, на это ушло в
3 раза больше времени (
300 часов против предполагаемых
100 часов). Но, как сказал сотрудник поддержки ASIC, мы были первыми, кому это удалось.
Чек-лист при интеграции с публичным сервисом
Убедиться в актуальности предоставленной документации.
Выявить недостающую информацию заранее и уточнить детали интеграции.
Не пытаться экспериментировать самостоятельно (хотя в разумных пределах можно) — лучше заручиться помощью у специалиста поддержки, причем желательно найти конкретного специалиста и с ним поддерживать связь по всем вопросам.
Проявлять активность и использовать все возможные варианты, в том числе не стесняться подключать непосредственного заказчика к решению проблем и переговорам со службой поддержки.
Интеграция с непубличным сервисом
Непубличные сервисы — это внутрикорпоративные или отраслевые системы, доступные сотрудникам компании, либо партнерам. Интеграции с ними несколько сложнее, так как документированность у них традиционно ниже — задачи постоянного роста количества пользователей нет, роль сервиса в создании прибыли не проанализирована или является опосредованной, поэтому у владельца нет серьезной мотивации для его усовершенствования.
Интеграции без подробной документации сложны и часто вызывают большой перерасход в проектах. Наилучшим подходом к их реализации является тщательная проработка требований и составление документации непосредственно перед стартом разработки.
Случай из нашей практики — с плохим концом
Один из наших проектов в какой-то момент зашел в тупик из-за невозможности интеграции с внутренним сервисом заказчика. Несмотря на то, что перед стартом новой фазы разработки специалисты со стороны клиента предоставляли краткое описание реализации и интеграции новой функциональности, на деле выяснилось, что подобный подход не работоспособен. Часто новые договоренности — по набору и структуре запросов, а также применяемой логики для расчета тех или иных параметров системы — осуществлялись на прямой связи с разработчиком, никак не документировались.
Бизнес торопил со сроками, бюрократический аппарат на стороне заказчика работал медленно, четкие требования отсутствовали. Лучшим вариантом было бы приостановить проект, пока не появится документация, но складывалось впечатление, что вот сейчас еще немного, доделаем, и можно будет закончить проект и вздохнуть с облегчением, но проект так и не был доведен до его логического завершения и в итоге был приостановлен.
Чек-лист при интеграции с непубличным сервисом
Если вы имеете дело с внутренним, незадокументированным сервисом, нужно запросить исходный код у владельца:
в случае интеграции по протоколу SOAP — запросить WSDL-файл;
в случае, если есть доступ к документации API сервиса (Swagger, RAML и др.) — получить доступ и изучить существующий API;
если есть возможность «прикрутить» систему автодокументации, то прикрутить ее и затем изучить API сервиса;
в случае, когда есть уже реализованный пример интеграции с сервисом, запросите и изучите его.
Изучить API и получить все необходимые уточнения от команды, ответственной за работоспособность сервиса, поддерживать связь и стараться как можно раньше поднять вопрос или проблему.
Если API не совсем готов, заложить календарное время на коммуникации по наполнению до требуемого уровня.
Вывод
Глобальный рынок API растет со среднегодовой скоростью 33%. В ближайшие три года этот сегмент будет занимать лидерские позиции. Уже сейчас многие сервисы успешны настолько, насколько удачно они образовали единую экосистему с другими.
Интеграция со сторонним решением похожа на поиск черной кошки в темной комнате с разложенными по полу граблями. В идеале, чтобы обойти грабли и поймать кошку, вам нужен «фонарик», в роли которого здесь выступают документация или код. В случае, когда фонарика нет, может помочь человек с «картой разложенных граблей», который будет направлять вас в темноте на слух. Если у вас уже есть некоторый опыт, делайте гипотезы и разбивайте проект на фазы, где возможно объективно оценить трудоемкость интеграции (где вероятность возникновения риска мала), и фазы, которые требуют дополнительных уточнений (с высоким уровнем вероятности срабатывания рисков) и адекватно оценить стоимость реализации пока не предоставляется возможным.
Если же вы проводите интеграцию впервые, ищите «фонарик» или человека с «картой».
Ищете исполнителя для реализации проекта?
Проведите конкурс среди участников CMS Magazine
Узнайте цены и сроки уже завтра. Это бесплатно и займет ≈5 минут.
Как работают профайлеры в Ruby и Python?
Перевод статьи подготовлен в преддверии старта продвинутого курса «Разработчик Python».
Всем привет! В качестве аперитива к профайлеру на Ruby я хотела рассказать о том, как работают уже существующие профайлеры на Ruby и Python. Также это поможет дать ответ на вопрос, который мне задает множество людей: «Как написать профайлер?»
В этой статье мы сфокусируемся на профайлерах процессора (а не, допустим, профайлерах памяти/кучи). Я расскажу о некоторых базовых подходах к написанию профайлера, приведу примеры кода и покажу много примеров популярных профайлеров на Ruby и Python, а также расскажу, как они работают под капотом.
Вероятно, в статье могут быть ошибки (при подготовке к ее написанию, я частично просмотрела код 14 библиотек для профайлинга, и со многими из них я была не знакома до этого момента), так что, пожалуйста, дайте мне знать, если вы их обнаружите.
2 вида профайлеров
Есть два основных вида профайлеров процессора – sampling- и tracing-профайлеры.
Tracing-профайлеры записывают каждый вызов функции в вашей программе, в конечном итоге предоставляя отчет. Sampling-профайлеры придерживаются статистического подхода, они записывают стек каждые несколько миллисекунд, создавая отчет на основе этих данных.
Основная причина использовать sampling-профайлер вместо tracing-профайлера – это его легковесность. Делаете вы 20 или 200 снимков в секунду — это не занимает много времени. Такие профайлеры будут очень эффективны, если у вас есть серьезная проблема с производительностью (80% времени тратится на вызов одной медленной функции), поскольку 200 снимков в секунду будет вполне достаточно для определения проблемной функции!
Профайлеры
Дальше я приведу общую сводку профайлеров, рассматриваемых в данной статье(отсюда). Я объясню термины, используемые статье (setitimer, rb_add_event_hook, ptrace) немного позже. Интересно, что все профайлеры реализованы с использованием небольшого набора базовых возможностей.
Профайлеры Python
«gdb hacks» не совсем профайлер Python — он ссылается на веб-сайт, рассказывающий о том, как реализовать хакерский профайлер в качестве обертки shell-скрипта вокруг gdb. Речь идет именно о Python, так как новые версии gbd фактически развернут для вас стек Python. Что-то вроде pyflame для бедных.
Профайлеры Ruby
Почти все эти профайлеры живут внутри вашего процесса
Прежде чем мы начнем разбираться в деталях этих профайлеров, есть одна очень важная вещь – все эти профайлеры, кроме pyflame, запускаются внутри вашего процесса Python/Ruby. Если вы находитесь внутри программы на Python/Ruby, у вас, как правило, имеется простой доступ к стеку. Например, вот простая программа на Python, которая печатает содержимое стека каждого работающего потока:
Вот вывод консоли. Вы видите, что в нем есть имена функций из стека, номера строк, имена файлов – все, что вам может понадобиться, если вы выполняете профилирование.
В Ruby даже проще: вы можете использовать puts caller, чтобы получить стек.
Большинство этих профайлеров являются расширениями С в плане производительности, поэтому они немного отличаются, но такие расширения для программ на Ruby/Python также имеют легкий доступ к стеку вызовов.
Как работают tracing-профайлеры
Я перечислила все tracing-профайлеры Ruby и Python в таблицах выше: rblineprof, ruby-prof, line_profiler и cProfile. Все они работают схожим образом. Они записывают каждый вызов функции и являются расширениями С для уменьшения оверхеда.
Как они работают? И в Ruby, и в Python вы можете указать коллбэк, который запускается, когда происходят различные события интерпретатора (например, «вызов функции» или «выполнение строки кода»). Когда вызывается коллбэк, он записывает стек для последующего анализа.
Полезно видеть, где именно в коде находятся эти коллбэки, поэтому я сошлюсь на соответствующие строки кода на github.
Чем-то похоже на PyEval_SetTrace в Python, но в более гибкой форме – вы можете выбрать, о каких событиях вы хотите получать уведомления (например, «только вызовы функций»).
Недостатки tracing-профайлеров
Основным недостатком реализованных таким образом tracing-профайлеров является то, что они добавляют фиксированное количество кода для каждого выполняемого вызова функции/строки. Это может заставить вас принимать неправильные решения! Например, если у вас есть две реализации чего-либо — одна с большим количеством вызовов функций, а другая без, которые обычно выполняются за одинаковое время, то первая, с большим количеством вызовов функций, при профилировании будет казаться медленнее.
В документации cProfile сказано:
интерпретируемая природа Python добавляет столько накладных расходов во время выполнения, что детерминированное профилирование имеет тенденцию добавлять небольшую нагрузку на обработку в обычных приложениях
Большинство программ будет работать примерно вдвое медленнее, в то время как высокорекурсивные программы (такие как тест ряда Фибоначчи) будут работать в три раза медленнее.
Как в основном работают sampling-профайлеры: setitimer
Допустим, вы хотите получать снимок стека программы 50 раз в секунду. Сделать это можно следующим образом:
Причина, по которой stacksampler.py занимает всего 100 строк в Python, заключается в том, что при регистрации функции Python в качестве обработчика сигнала функция передается в текущий стек вашей программы. Поэтому обработчик сигналов stacksampler.py регистрируется очень просто:
Он просто извлекает стек из фрейма и увеличивает количество раз, которое конкретный стек просматривался. Так просто! Так круто!
Один ИНТЕРЕСНЫЙ недостаток профайлеров на основе setitimer – то, что таймеры вызывают сигналы! Сигналы иногда прерывают системные вызовы! Системные вызовы иногда занимают несколько миллисекунд! Если вы делаете снимки слишком часто, то можете заставить программу выполнять системные вызовы бесконечно долго!
Sampling-профайлеры, которые не используют setitimer
Существует несколько sampling-профайлеров, которые не используют setitimer :
Посты в блоге pyflame
Конечно же, все немного сложнее, чем я описала. Я не буду вдаваться в подробности, но Эван Клицке написал много хороших статей об этом в своем блоге:
На этом все на сегодня!
Есть много важных тонкостей, в которые я не вдавалась в этом посте – например, я в основном сказала, что vmprof и stacksampler – схожи (это не так — vmprof поддерживает профилирование строк и профилирование функций Python, написанных на C, что, я считаю, делает профайлер более сложным). Но у них есть некоторые одинаковые основные принципы, и поэтому я думаю, что сегодняшний обзор будет хорошей отправной точкой.
ГОСТ VPN Overhead
Накладные расходы (overhead) в VPN можно условно разделить на две части:
Величина накладных расходов очень важна, так как увеличение размера пакетов может привести к фрагментации трафика во внешней сети. Фрагментация снижает производительность, а для некоторых сервисов — недопустима в принципе.
Зная overhead заранее, можно уменьшить MTU в локальной сети или, наоборот, увеличить в канале связи. Это позволит избежать проблем с фрагментацией.
Рассмотрим величину накладных расходов на примере продуктов С-Терра, Континент, ViPNet.
С-Терра
В продуктах С-Терра используется стандартный IPSec, но с ГОСТ алгоритмами. Расчет overhead не сложный, можно воспользоваться зарубежными ресурсами (например, у Cisco есть калькулятор), но сделать поправку на российские криптоалгоритмы.
Подробная заметка про overhead в С-Терра уже есть в блоге. В ней рассматривался только ГОСТ28147 (ESP_GOST-4M-IMIT). Постепенный переход на ГОСТ Р 34.12/13-2015 вносит небольшие коррективы:
Криптографическое преобразование | Header | Trailer | ICV | ESP Итого |
ГОСТ28147 (IMIT) | 16 | 2-9 | 4 | 22-29 |
ГОСТ Р 34.12/13-2015 Кузнечик MGM | 16 | 2-17 | 12 | 30-45 |
ГОСТ Р 34.12/13-2015 Магма MGM | 16 | 2-9 | 8 | 26-33 |
Также стоит отметить, что есть возможность дополнительной инкапсуляции в http. Применяется в основном для С-Терра Клиент, чтобы обойти запрет пропуска ESP и UDP500/4500 на промежуточном оборудовании. Дополнительно +135 байт.
Наиболее популярные случаи:
Континент
Информация про overhead в документации Континента весьма скудная, декларируются следующие цифры:
Сначала подумал, что это ошибка — разница минимальная, всего 4 байта. Но есть запись вебинара, в котором информация подтверждается и раскрыты подробности по размеру конкретных заголовков.
Режим | Заголовок IP | Заголовок UDP | Криптозаголовок | Данные |
L3 | 20 | 8 | 24 | Шифрованный пакет |
L2 | 20 | 8 | 28 | Шифрованный фрейм |
На сетевом уровне действительно получается 52 байта.
А вот с канальным есть нюансы. Обратите внимание, что в поле данных находится не пакет, а фрейм целиком. Соответственно, для пользователя дополнительные накладные расходы составят как минимум 14 байт исходного ethernet заголовка. К другим «допам» еще вернемся в конце заметки.
Итого для L2 получается 70 байт.
Континент АП (клиент для пользовательских устройств) — отдельная история, используется инкапсуляция в TCP (порт 443), overhead составляет до 49 байт.
ViPNet
Подробности по работе протокола IPlir нужно собирать по крупицам: что-то есть в документации, что-то в статьях на сайте. После стандартизации в ТК26 описание протокола в виде рекомендаций по стандартизации доступно публично — Р 1323565.1.034-2020 «Информационная технология. Криптографическая защита информации. Протокол безопасности сетевого уровня», но насколько оно соблюдается в продуктах ViPNet — известно только производителю.
Для туннелирования используется протокол IP/241. Такая инкапсуляция применяется, если устройства находятся в одном широковещательном домене, например, два VPN-клиента в рамках одной подсети. Если же между узлами ViPNet есть устройства сетевого уровня, то происходит инкапсуляция в IP и дополнительно в UDP (по умолчанию порт 55777). Если по UDP установить связь не удаётся, то вместо него используется TCP (по умолчанию порт 80), обычно это актуально для ViPNet Client.
Протокол IPlir может работать в трех режимах – туннельный, транспортный и легкий туннель.
Возможности настройки у пользователя нет, фактически всегда используется туннельный.
Размер заголовка IPlir составляет максимум 57 байт.
Дополнительные накладные расходы режима L2VPN (вендорское название — L2overIP) составляют 36 байт. Из них 22 байт — инкапсуляция фреймов в EtherIP. А вот куда делись остальные, мне выяснить не удалось (если знаете — напишите в комментариях). Так как фрейм перехватывается целиком, то традиционно добавляем в overhead исходный ethernet заголовок +14 байт.
Наиболее распространённые случаи:
L2VPN
Обратите внимание, что в L2 режиме фреймы перехватываются целиком независимо от вендора. Поэтому в overhead включен исходный ethernet заголовок без FCS. Если используются дополнительные протоколы, то overhead увеличивается на соответствующий размер заголовка, например:
Важно не забывать об этом при расчете общего overhead.
Калькулятор
В ближайшее время планирую переложить информацию из статьи в калькулятор на сайте, с помощью которого можно легко посчитать overhead в различных ситуациях.
оверхед
Смотреть что такое «оверхед» в других словарях:
оверхед — оверх ед, а … Русский орфографический словарь
ОВЕРХЕД-ПРОЕКТОР — (от англ. overhead – поверх головы + projector – выбрасывающий вперед). Средство оптической проекции с прозрачных пленок на настенный экран … Новый словарь методических терминов и понятий (теория и практика обучения языкам)
Бокс — Бой с участием Роя Джонса и Феликса Тринидада У этого термина существуют и другие значения, см. Бокс (значения). Бокс (от англ. … Википедия
Suede (альбом) — Suede Студийный альбом Suede … Википедия
Линза Френеля — Не следует путать с зонной пластинкой Френеля. Поперечное сечение (1) линзы Френеля и (2) обычной линзы … Википедия
Френеля линза — Поперечное сечение линзы Френеля и обычной линзы Линза Френеля сложная составная линза. Состоит не из цельного шлифованного куска стекла со сферической или иными поверхностями, как обычные линзы, а из отдельных примыкающих друг к другу… … Википедия
Epoll — (extended poll) API асинхронного ввода вывода, предоставляемого Linux для приложений. API позволяет приложениям осуществлять мониторинг нескольких открытых файловых дескрипторов (которые могут быть файлами, устройствами или сокетами, в том… … Википедия
Средства обучения — авмо, авсо, автоматизация, автоматизация обучения, автоматизированная обучающая система (аос), автоматическая обработка текста, автоматический перевод, авторские компьютерные системы, адаптивная обучающая машина, адаптивная обучающая программа,… … Новый словарь методических терминов и понятий (теория и практика обучения языкам)