Весенняя простуда — ГБУЗ «Специализированная клиническая инфекционная больница» МЗ КК
Весна у многих жителей нашей страны ассоциируется с периодом обновления и пробуждения природы. Готовясь к новому, мы ощущаем небывалый приток силы, как будто вырастают крылья за спиной. Но ощущение эйфории порой притупляют симптомы неожиданно появившейся простуды. И вместо переживания романтичных моментов многие оказываются на больничной койке. Простуда весной – очень частое явление. С ней сталкивается практически каждый третий. Почему же так происходит?
Действительно, весна – сезон простуд. Вероятность подхватить ОРВИ в этот период гораздо выше, поскольку в межсезонье организм человека слабеет. На фоне желания избавиться от шапок и теплых пальто, нестабильной погоды и происходит проникновение вирусов в наш организм. Весенняя простуда буквально застает врасплох и выбивает из колеи. Если воспалились лимфоузлы на шее и болит горло, вы чувствуете недомогание, то с высокой вероятностью можно говорить, что инфекция уже проникла в ваше тело.
Острые респираторные вирусные инфекции объединяют крупную группу заболеваний. Но в быту ОРВИ весной зачастую называют просто – весенняя простуда. Она может быть результатом деструктивного действия разнообразных болезнетворных микроорганизмов. Чаще всего простуда весной появляется из-за повышения активности адено- или риновирусов, вирусов парагриппа. Наиболее распространенный метод инфицирования – передача вирусов от одного человека к другому воздушно-капельным путем.
Именно по этой причине ОРВИ весной часто распространяются в рабочих и учебных коллективах. Подхватить болезнь можно даже при единичном контакте с больным человеком. Наиболее высокая вероятность инфицирования в местах с большим скоплением людей. Поэтому первый и самый важный совет, как уберечься от простуды весной, — это по возможности избегать посещения мест с крупными людскими потоками, например:
- крупных магазинов и супермаркетов;
- кафе, ресторанов;
- кинотеатров и т.п.
⠀
Также для грамотной профилактики простуды весной необходимо тщательно следить за прогнозами погоды и одеваться соответственно. Переохлаждение – частая причина снижения защитных сил организма, из-за которого риск заразиться серьёзно возрастает.
Когда же избежать этого не удалось, то важно правильно определить признаки заболевания. Простуда весной может проявляться целым букетом характерных симптомов, среди них:
- насморк;
- заложенность носа;
- зуд в носу и чихание;
- першение в горле;
- общая слабость в теле;
- повышенная утомляемость, сонливость;
- температура;
- озноб.
⠀
Если вы заметили, что у вас сильно воспалились лимфоузлы и болит горло, необходимо обратиться к врачу. Подобные симптомы ни в коем случае нельзя игнорировать. Равно как и не стоит заниматься самолечением. Если болит горло, воспалились лимфоузлы, долго не проходят, либо усиливаются другие симптомы простуды, потребуется компетентная консультация специалиста и индивидуальный подбор медицинских препаратов. Причем, чем быстрее вы обратитесь к врачу, тем выше вероятность преодолеть болезнь в более короткие сроки и избежать возможных осложнений.
⠀
ВАЖНО! В случае пренебрежения врачебной помощью увеличивается риск присоединения вторичных инфекций и развития хронических заболеваний!
Частые простудные заболевания — лечение у иммунолога в Центральной поликлинике Литфонда
- Галерея
- Новости
- Блог
- Отзывы
- Вакансии
- Лицензии
- Страховые партнеры
- Контролирующие организации
- Что надо знать о коронавирусной инфекции?
- Правила для пациентов
- Онлайн-консультация врача
- Корпоративным клиентам
- Документы
Частые острые респираторные заболевания (ОРЗ) часто, но не всегда связаны со снижение иммунитета. Большое значение имеют морфологические изменения со стороны ЛОР-органов, затрудняющие носовое дыхание:
- искривление носовой перегородки,
- полипы,
- атрезии и синехии полости носа.
На частые ОРЗ также жалуются пациенты с аллергическим ринитом, сенсибилизированные к домашней пыли и бытовым аллергенам. Правильная постановка диагноза и лечение позволяют значительно улучшить ситуацию. В любом случае при частых ОРЗ показана профилактика ОРЗ, которая может быть подобрана по индивидуальной программе.
Профилактика ОРЗ заключается в формировании специфического иммунитета, повышении факторов неспецифической иммунорезистентности, профилактическом приеме малых доз противовирусных препаратов, санации очагов хронических воспалительных процессов.
К специфической профилактике относится противогриппозная вакцинация по антигенной формуле эпидемического клона вируса гриппа (вакцины: гриппол, инфлювак, флюарикс). Следует отметить, что вирусы гриппа далеко не единственный этиологический фактор ОРЗ.
ОРЗ вызывают также вирусы:
- парагриппа,
- аденовирусы,
- риновирусы,
- респираторно-синцитиальные вирусы,
- энтеровирусы,
- цитомегаловирусы,
- вирусы Эпштейн-Барр,
- вирусы простого герпеса,
- микоплазмы,
- хламидии,
- бактериальные агенты,
- грибы.
В профилактике этих заболеваний ведущим звеном является повышение неспецифической резистентости организма с помощью иммуномодулирующих препаратов.
Большое значение имеет лечение хронических воспалительных процессов, так как многие возбудители ОРЗ поражают не только респираторный тракт, но и ткани других органов. При этом многие пациенты не подозревают, что они не просто заразились ОРЗ воздушно-капельным путем, а заболели вследствие эндогенного инфицирования. В связи с этим следует более внимательно относится к лечению вирусных лимфаденитов, так как в увеличенных лимфоузлах могут находиться вирусы герпеса, Цитомегаловирусы, вирусы Эпштейн-Барр. Кроме того, хронические инфекционные состояния усиливают интоксикацию организма и соответственно усугубляют степень снижения иммунитета.
Большое значение в постановке диагноза имеет иммунологическое обследование (иммунограмма), включающее оценку клеточного, гуморального, фагоцитарного звеньев иммунитета, показатели интерферонового статуса.
Хронические воспалительные процессы
Формирование иммунодефицитного состояния начинается с изменений местного иммунитета систем, связанных с внешней средой (кожа, слизистые респираторного желудочно-кишечного трактов, мочеполовой системы).
Большое значение в барьерной функции слизистых имеют факторы неспецифической резистентности (лизоцим, интерфероны, фагоциты) и секреторный иммуноглобулин А. Изменения в иммунной системе слизистых могут не соответствовать показателям периферической крови. Поэтому в определенных ситуациях врачи-иммунологи, учитывая клиническое состояние пациента, назначают ему иммуномодулирующую терапию даже при нормальной иммунограмме.
Среди пациентов с иммунодефицитными состояниями наиболее многочисленна группа с заболеваниями желудочно-кишечного тракта. Белки, калорийное питание, витамины и минералы, поступление которых в организм зависит от работы органов пищеварения, необходимы для формирования полноценного иммунного ответа.
Кроме того в пейеровых бляшках слизистой оболочки кишки происходит переработка антигена с образованием специфических Т- и В-лимфоцитов. Примированные антигеном лимфоциты по системе лимфотока поступают на слизистые респираторного, мочеполового трактов, участвуя в синтезе секреторного иммуноглобулина А, что является одним из важнейших факторов защиты слизистых. Дисбактериоз кишечника и дисфункция ЖКТ, ограничивая поступление питательных веществ и усиливая токсическое влияние кишечной микрофлоры, снижают функциональную активность иммунокомпетентных клеток.Записывайтесь на консультацию иммунолога по тел: +7(495)150-60-01
Фамилия имя и отчество полностью: *
Номер пропуска или медкарты:
Контактный телефон: *
Выберите день приема:Дополнительная информация:
Я не роботНажимая кнопку «Отправить заявку» вы соглашаетесь с условиями Политики конфиденциальности и Пользовательского соглашения
Холодный запуск
AWS Lambda: решение проблемы
Ян Цуй , 20 сентября 2020 г.
Примечание:
Эта запись в блоге была обновлена 2 мая 2023 г.
Что такое холодный запуск Lambda?
Холодный запуск может негативно сказаться на производительности Lambda, особенно если вы разрабатываете клиентское приложение, которое должно работать в режиме реального времени. Это происходит потому, что если ваша Lambda еще не запущена, AWS необходимо развернуть ваш код и запустить новый контейнер, прежде чем запрос сможет начаться. Это может означать, что выполнение запроса занимает гораздо больше времени, и только когда контейнер готов, ваша лямбда может начать работать.
«Холодный старт» — это первый запрос, который обрабатывает новый рабочий процесс Lambda. Обработка этого запроса занимает больше времени, поскольку сервису Lambda необходимо:
- найти место в своем парке EC2 для размещения рабочего процесса
- инициализировать среду выполнения
- инициализируйте свой функциональный модуль, прежде чем он сможет передать запрос вашей функции-обработчику.
Дело в том, что холодный запуск является необходимым побочным продуктом масштабируемости без сервера. Холодный запуск отражает время запуска AWS Lambda, необходимое для «прогрева» контейнеров перед тем, как функции заработают.
AWS требуется готовый набор контейнеров для запуска при вызове функций. Это означает, что функции остаются горячими в течение ограниченного периода времени (обычно 30–45 минут) после выполнения, а затем останавливаются, чтобы контейнер был готов к вызову любой новой функции.
Источник: AWS
Холодные запуски в Lambda учитывают менее 0,25% запросов, но влияние может быть огромным, иногда для выполнения кода требуется 5 секунд. Эта проблема особенно актуальна для приложений, которым необходимо выполнять выполнение в режиме реального времени, или тех, которые полагаются на синхронизацию в доли секунды.
В этой статье
Что такое Provisioned Concurrency и как он может решить проблему холодного запуска?Amazon Lambda поддерживает Provisioned Concurrency — функцию, позволяющую лучше контролировать производительность бессерверных приложений. Используя Provisioned Concurrency, вы можете избежать проблем с холодным запуском и задержкой запуска для ваших функций Lambda.
Provisioned Concurrency позволяет создавать масштабируемые бессерверные приложения с предсказуемой задержкой. Вы можете установить желаемый параллелизм для всех версий или псевдонимов функции. AWS Lambda подготавливает контейнеры для ваших функций, гарантируя, что они могут быть вызваны с двузначной миллисекундной задержкой после их вызова. Это означает, что бессерверные функции могут адаптироваться к внезапным всплескам трафика или значительным событиям масштабирования без увеличения задержки.
Однако за предоставление параллелизма приходится платить. Плата за подготовленный параллелизм выставляется с момента его включения с округлением до ближайших 5 минут. Цена рассчитывается в зависимости от объема параллелизма (количество одновременных вызовов функций, которые могут выполняться без задержки) и объема выделяемой вами памяти.
Это означает, что вы должны тщательно настраивать подготовленный параллелизм — укажите достаточно параллелизма для своих рабочих нагрузок, чтобы избежать ненужных затрат.
Очистка холодных запусков Lambda
Легко идентифицируйте функции Lambda с холодными запусками, чтобы обеспечить максимальную производительность бессерверных приложений.
Без кода, установка за 5 минут
Какие факторы способствуют холодному пуску?Холодному запуску в AWS Lambda способствуют несколько факторов. Эти факторы могут повлиять на продолжительность и частоту холодных пусков:
Языки
Выбор языка программирования может повлиять на время холодного запуска. Некоторые языки, такие как Python и Node.js, имеют более быстрое время инициализации по сравнению с такими языками, как Java или .NET Core, которые могут иметь более длительное время запуска из-за таких факторов, как процесс компиляции Just-In-Time (JIT) и более крупные среды выполнения.
Цепочки функций
Когда функции Lambda вызывают другие функции Lambda (цепочка функций), холодный запуск может быть усилен. Если одна функция в цепочке испытывает холодный запуск, это может задержать всю цепочку функций, что приведет к увеличению общей задержки. Оптимизация отдельных функций для уменьшения количества холодных пусков может помочь смягчить эту проблему.
Виртуальные частные облака (VPC)
Когда функция Lambda подключена к VPC, время холодного запуска может увеличиться. Это связано с тем, что AWS необходимо настроить эластичный сетевой интерфейс (ENI) для функции Lambda для доступа к ресурсам внутри VPC. Процесс создания и подключения ENI увеличивает нагрузку на процесс инициализации, что приводит к увеличению продолжительности холодного запуска.
Как включить Provisioned Concurrency
Ниже описано, как настроить Provisioned Concurrency для функций Lambda с помощью Консоли управления AWS.
- В консоли AWS Lambda выберите существующую функцию Lambda.
- В раскрывающемся меню Действия выберите параметр Опубликовать новую версию . Это позволит вам применить настройки к псевдониму или опубликованной версии функции.
Источник изображения: AWS
- Вы можете добавить описание версии, но это необязательно. Когда закончите, выберите опцию Опубликовать .
- В Действиях 9В раскрывающемся меню 0039 выберите параметр Создать псевдоним . Для каждого псевдонима введите имя.
- В раскрывающемся меню Версия выберите 1 , а затем выберите Создать .
Источник изображения: AWS
- Найдите карту Concurrency и выберите параметр Добавить .
- Выберите переключатель Alias для Qualifier Type , а затем выберите псевдоним функции, который вы выбрали ранее в Псевдоним раскрывающееся меню. Определите необходимое значение для Provisioned Concurrency — число указывает количество экземпляров функции, которые будут выполняться непрерывно. Выберите Сохранить .
Предупреждение – дополнительные расходы : за предоставленный параллелизм взимается дополнительная плата за обычные вызовы для AWS Lambda. Вы платите за обеспеченный параллелизм, как если бы дополнительные экземпляры вашей функции вызывались и выполнялись на постоянной основе.
- После выполнения шага 7 перейдите в консоль Lambda. Карта Provisioned Concurrency должна отображать статус In progress .
Процесс инициализации будет завершен через несколько минут, после чего вы сможете использовать опубликованный псевдоним вашей функции с функцией Provisioned Concurrency.
Источник изображения: AWS
Описанные выше действия относятся к Консоли управления AWS. Вы также можете использовать AWS CloudFormation, AWS CLI и AWS SDK, чтобы изменить эти настройки.
Дополнительные способы повышения производительности холодного запуска Lambda
Мониторинг, чтобы определить, как холодный запуск влияет на ваше приложение
Даже если вы правильно используете подготовленный параллелизм, холодный запуск может произойти. Важно отслеживать ваши приложения и определять, как холодный запуск влияет на производительность. Холодный запуск увеличивает задержку для некоторых запросов, и вам необходимо определить, какие запросы затронуты и влияют ли они на ваших конечных пользователей.
Как журналы CloudWatch, так и X-Ray могут помочь вам определить, где и когда происходят холодные запуски в вашем приложении, хотя это требует некоторого активного процесса вывода с вашей стороны. Бессерверная платформа мониторинга, такая как Lumigo, значительно упрощает мониторинг того, как холодный запуск влияет на ваше приложение.
На приборной панели Lumigo можно сразу увидеть функции с наибольшим количеством холодных запусков. Когда вы видите функции с высоким процентом холодных запусков, такие как функция graphql-api-prod-listSports ниже (57,36% ее вызовов являются холодными запусками), это функции, на которые вам нужно обратить особое внимание!
Вы можете углубиться в каждую из этих функций и посмотреть, насколько плохи эти холодные пуски с точки зрения продолжительности. В конце концов, если продолжительность холодного запуска короткая, холодный запуск оказывает гораздо меньшее влияние на наш пользовательский опыт, когда он происходит. В худшем случае продолжительность холодного пуска велика, а холодный пуск происходит часто!
Кроме того, вы можете настроить оповещения в Lumigo, чтобы получать уведомления, когда ваши функции испытывают высокий процент холодных запусков. Это отличный способ следить за теми пользовательскими функциями, где вас беспокоит сквозная задержка.
Уменьшение количества пакетов
Мы видели, что наибольшее влияние на время холодного запуска AWS Lambda оказывает не размер пакета, а время инициализации, когда пакет фактически загружается в первый раз.
Чем больше пакетов вы используете, тем больше времени потребуется контейнеру для их загрузки. Такие инструменты, как Browserify и Serverless Plugin Optimize, могут помочь вам сократить количество пакетов.
Связанные исследования — Влияние веб-фреймворков на производительность бессерверного холодного запуска в NodeJS
Использование Node. js, Python или Golang
приемлемый диапазон (<500 мс) с минимальными усилиями. Это означает, что даже при холодном запуске время отклика остается в пределах SLA приложения.
В ходе одного эксперимента Натан Малышев обнаружил, что для инициализации Python , Node.js и Go требуется гораздо меньше времени, чем для Java или .NET , при этом Python работает как минимум в два раза быстрее по сравнению с Java. , в зависимости от выделения памяти.
Источник: Lambda Cold Starts, A Language Comparison — Nathan Malishev
Электронная книга: лучшие методы мониторинга бессерверных приложений
Что влияет на продолжительность холодного запуска? Наш эксперимент
Если вы хотите лучше понять холодный пуск, давайте подробнее рассмотрим основные факторы, влияющие на холодный пуск. Оказывается, разные типы запросов могут привести к разным временам холодного старта. Мы разработали эксперимент, чтобы лучше понять эти эффекты.
Холодный пуск типа 1 по сравнению с типом 2
Первоначально Майкл Харт заметил, что существуют заметные различия между двумя типами холодного пуска:
- Холодный пуск, происходящий сразу после изменения кода
- Другие холодные запуски (например, когда Lambda необходимо увеличить количество рабочих процессов, чтобы соответствовать спросу на трафик)
Возможно, есть какие-то дополнительные действия, которые необходимо выполнить во время первого холодного запуска после развертывания кода. Вот почему первый холодный пуск после изменения кода занимает больше времени, чем другие холодные пуски.
На практике большинство холодных пусков, которые вы увидите в дикой природе, будут 2-го типа, и именно на них мы должны сосредоточиться. Однако я был очень заинтригован этим открытием и сам провел несколько экспериментов.
Схема эксперимента
В одном из таких экспериментов я измерил продолжительность приема-передачи для нескольких различных функций:
- управление — функция hello world без каких-либо зависимостей.
module.exports.handler = асинхронное событие => { возвращаться { код состояния: 200, тело: '{}' } }
- AWS SDK входит в комплект, но не требуется — та же функция, что и для управления, но артефакт развертывания включает Node.js AWS SDK (хотя функция на самом деле не требует его), что приводит к 9Артефакт развертывания размером 0,5 МБ.
- контроль с большими активами — та же функция, что и контроль, но артефакт развертывания включает в себя два больших файла MP3, что приводит к артефакту развертывания размером 60,2 МБ.
- требуется связанный AWS SDK — функция, которая требует инициализации модуля длительности AWS SDK. Эта функция объединяет AWS SDK как часть своего артефакта развертывания (9,5 МБ).
const AWS = require('aws-sdk')module.exports.handler = асинхронное событие => { возвращаться { код состояния: 200, тело: '{}' } }
- требуется AWS SDK через уровень — та же функция, что и при запросе связанного AWS SDK, но AWS SDK не входит в комплект в артефакте развертывания. Вместо этого AWS SDK внедряется через слой Lambda.
- требуется встроенный AWS SDK — та же функция, что и при использовании связанного AWS SDK, но AWS SDK не входит в комплект в артефакте развертывания. Вместо этого он использует AWS SDK, включенный в среду выполнения Lambda.
Для каждой из этих функций я собрал 200 точек данных для холодного запуска после развертывания (тип 1) и 1000 точек данных для других холодных запусков (тип 2). Результаты приведены ниже.
Есть несколько вещей, которые вы можете узнать из этих данных.
Влияние холодного запуска на производительность Тип
Холодный запуск типа 1 (сразу после развертывания кода) постоянно занимает больше времени, чем тип 2, особенно если посмотреть на хвостовые задержки (p99).
Влияние размера артефакта развертывания на производительность
Размер артефакта влияет на холодный запуск, даже если функция не требует их активно. Следующие три теста имеют одинаковый код функции:
module.exports.handler = async event => { возвращаться { код состояния: 200, тело: '{}' } }
Единственное различие заключается в размере артефакта развертывания. Как вы можете видеть ниже, включение Node.js AWS SDK в артефакт развертывания добавляет 20–60 мс к двусторонней задержке для холодного запуска. Но когда этот артефакт становится намного больше, это также влияет на задержку.
Если размер артефакта составляет 60 МБ, это добавляет колоссальные 250–450 мс!
Итак, размер развертывания действительно влияет на холодный запуск , но влияние минимально, если это просто AWS SDK.
Влияние источника зависимости на производительность
Зачастую AWS SDK является неизбежной зависимостью. Но оказывается, происхождение AWS SDK тоже имеет значение. Быстрее всего использовать AWS SDK, встроенный в среду выполнения Lambda. Интересно, что загружать AWS SDK через слои намного быстрее, чем когда вы связываете его с артефактом развертывания! Разница гораздо более существенна, чем вышеупомянутые 20–60 мс, что говорит о наличии дополнительных факторов.
Прежде чем вы решите никогда не включать AWS SDK в свои артефакты развертывания, необходимо учитывать другие факторы.
Например, если вы используете встроенный SDK AWS, вы фактически теряете неизменяемую инфраструктуру. Также были случаи, когда функции людей внезапно ломались, когда AWS обновлял версию AWS SDK. Прочитайте этот пост для более подробной информации.
Если вы используете слои Lambda, вам придется нести дополнительные операционные издержки, поскольку для уровня Lambda требуется отдельное развертывание, и вам все равно придется обновлять каждую функцию, которая ссылается на этот уровень. Прочтите этот пост, чтобы узнать, почему слой Lambda не является панацеей и его следует использовать с осторожностью.
При этом для пользователей бессерверных сред существует умный плагин serverless-layers, который позволяет избежать многих операционных проблем с Lambda Layers. По сути, он не использует слои как способ обмена кодом, а использует его исключительно как оптимизацию. Во время каждого развертывания он проверяет, изменились ли ваши зависимости, и если да, упаковывайте и развертывайте зависимости как слой Lambda (только для этого проекта) и обновляйте все функции, чтобы они ссылались на слой.
Но подождите! Есть больше.
Влияние инструкции «Require» на производительность
Сколько времени занимает выполнение этой строки кода во время инициализации модуля?
const AWS = require('aws-sdk')
Незаметно среда выполнения узла должна разрешить зависимость и проверить, существует ли aws-sdk в любом из путей в NODE_PATH. И когда папка модуля найдена, она должна запустить логику инициализации модуля aws-sdk и разрешить все его зависимости и так далее.
Все это занимает циклы ЦП и вызовы ввода-вывода файловой системы, и именно здесь мы несем накладные расходы на задержку.
Итак, если вашей функции нужен только клиент DynamoDB, вы можете сэкономить много времени на холодный запуск, потребовав ТОЛЬКО клиент DynamoDB.
const DynamoDB = require('aws-sdk/clients/dynamodb')
И поскольку большая часть времени холодного запуска уходит на разрешение зависимостей, что, если мы вообще удалим необходимость разрешения зависимостей во время выполнения?
Влияние WebPack на производительность
Используя упаковщик, такой как webpack, мы можем заранее разрешить все зависимости и свести их только к тому коду, который нам действительно нужен.
Это обеспечивает экономию двумя способами:
- меньший артефакт развертывания
- нет разрешения во время выполнения
И результат потрясающий!
Итак, если вы используете Node.js и хотите минимизировать время холодного запуска Lambda. Тогда самое эффективное, что вы можете сделать, это помнить о том, что вам нужно в вашем коде, а затем применять webpack. Он одновременно устраняет несколько факторов, способствующих задержке холодного времени.
Для пользователей фреймворка Serverless: вы можете использовать подключаемый модуль serverless-webpack, который сделает это за вас.
Получите Lumigo и определите, устраните и предотвратите холодный запуск
Очистите холодный запуск Lambda
Легко идентифицируйте функции Lambda с помощью холодного запуска, чтобы ваши бессерверные приложения работали наилучшим образом.
Без кода, установка за 5 минут
Lumigo — это бессерверная платформа для мониторинга, которая позволяет разработчикам легко находить холодные запуски Lambda, понимать их влияние и устранять их.
Lumigo отслеживает стандартные ключевые показатели, связанные с холодным запуском Lambda, для ваших функций Lambda, включая процент холодного запуска, среднюю продолжительность холодного запуска и включенный выделенный параллелизм. Он также генерирует оповещения в режиме реального времени при холодном запуске, поэтому вы сразу узнаете, когда функция недостаточно подготовлена.
Помимо холодного запуска, Lumigo может помочь вам:
- Поиск и устранение проблем за считанные секунды с помощью визуальной отладки — Lumigo создает виртуальную трассировку стека всех служб, участвующих в транзакции. Все отображается на визуальной карте, которую можно искать и фильтровать.
- Автоматическая распределенная трассировка — одним щелчком мыши и без ручного изменения кода Lumigo визуализирует всю вашу среду, включая ваши Lambdas, другие сервисы AWS, а также каждый вызов API и внешний сервис SaaS.
- Определите и устраните узкие места в производительности — просмотрите продолжительность сквозного выполнения каждой службы, а также то, какие службы выполняются последовательно и параллельно. Lumigo автоматически выявляет самые серьезные нарушения задержки, включая холодный запуск AWS Lambda.
- Интеллектуальные оповещения для бессерверных приложений — с помощью машинного обучения прогнозная аналитика Lumigo выявляет проблемы и предупреждает о них до того, как они повлияют на производительность или затраты приложений, включая оповещения о холодных запусках AWS Lambda.
Получите бесплатную учетную запись Lumigo, и мы поможем вам избавиться от холодных запусков Lambda уже сегодня замечательная живая изгородь — «это как». В этом посте нет жестких и быстрых правил того, как вы должны создавать свои функции или как справляться с холодным запуском.
Это скорее предположение о том, что холодный пуск может быть не той проблемой, о которой вы думаете, почему это так, и несколько советов по устранению проблемы, если она существует.
Ваш пробег может отличаться.
Введение
Существует много дискуссий и мнений об использовании .NET с функциями Lambda и их холодном запуске. Судя по тому, что я видел, опасений больше, чем это оправдано. Да, функции Lambda будут иметь холодный запуск, но они, вероятно, не так часты, как вы думаете, или не так долго, как вы думаете.
Так что холодный пуск может вообще не быть проблемой. Если это так, ничто не мешает вам перенести некоторые из ваших . NET-приложений на функции Lambda.
Если холодный пуск занимает слишком много времени или происходит чаще, чем хотелось бы, вы можете предпринять некоторые действия, чтобы смягчить проблему.
Зачем использовать лямбда-функции?
Сервис AWS Lambda представляет собой сервисное предложение для вашего кода .NET. Это отличный способ запуска кода в ответ на события других приложений, сервисов AWS, HTTP-запросы, прямые вызовы и опросы. Вы платите только за то, что используете, поэтому они могут стать экономичным способом запуска приложений, которые не должны работать круглосуточно и без выходных.
Вам не нужно управлять какой-либо инфраструктурой, вы сосредоточены на написании кода, а служба Lambda позаботится о подготовке, масштабировании и управлении средами выполнения.
Многие люди используют функции Lambda для размещения приложений ASP.NET Web API. Это может быть очень эффективным способом размещения таких приложений. Сравните стоимость запуска приложения на сервере 24/7 и запуска его на Lambda только по мере поступления запросов.
Если вы хотите, чтобы ваша функция Lambda вызывалась другими сервисами AWS, это так же просто, как подписаться на события, которые они вызывают.
В оставшейся части этого поста я расскажу:
- Что такое холодный пуск
- Сценарии, в которых холодный пуск не представляет проблемы
- Сценарии, в которых холодный пуск может быть проблемой
- Что вы можете сделать о холодных запусках
Что такое холодный запуск
При первом вызове функции Lambda создается среда выполнения. Создание этой среды занимает немного времени и называется «холодным стартом». Приложение загружается, выделяется память, выполняется JIT-компиляция приложения и выполняется код инициализации. Код инициализации относится к конструктору, инициализаторам и т. д. Все это происходит в ответ на первый вызов функции, но до запуска обработчика функции.
Код инициализации запускается только один раз для среды выполнения, поэтому рекомендуется поместить такие вещи, как инициализация подключения к базе данных, создание клиента S3 и т. д., вне обработчика функции.
После запуска и запуска этой среды выполнения функция называется «горячей» и будет оставаться «горячей» в течение неопределенного периода времени. Код инициализации , а не будет запущен снова, будет запущен только обработчик функции. Функция останется теплой, если она вызывается регулярно. Среда выполнения будет повторно использоваться для последующих вызовов той же функции.
Но среда выполнения может обрабатывать один запрос за раз. Если у вас есть одна теплая среда выполнения, и она обрабатывает запрос, то второй запрос к функции приведет к созданию новой среды выполнения, эта вторая среда выполнения теперь пройдет через холодный запуск.
Даже если среда выполнения «горячая» и вызывается регулярно, в какой-то момент она будет перезапущена службой Lambda. Если это была единственная доступная среда выполнения, то при следующем вызове произойдет холодный запуск.
Возможно, что при обычном использовании функции Lambda у вас будет пул теплых сред выполнения, доступных для обработки входящих запросов, и все запросы будут обрабатываться этими средами выполнения. Со временем пул будет увеличиваться и уменьшаться по мере изменения скорости входящих запросов. Если запросы полностью прекратятся, через некоторое время пул сократится до нуля, а следующий вызов вызовет холодный запуск.
Продолжительность холодного запуска зависит от размера приложения и вашего кода инициализации. Но обычно оно составляет от нескольких сотен миллисекунд до пары секунд.
Вот пример вывода после холодного запуска. Вы увидите это в журналах CloudWatch или в командной строке, если вы вызовете функцию оттуда.
REPORT RequestId: 651cd093-9aef-4e3b-b7e8-39cd94ce6cd5 Длительность: 385,08 мс Продолжительность выставления счета: 386 мс Размер памяти: 256 МБ Макс. используемая память: 61 МБ Длительность инициализации: 207,84 мс
- 9 0080
-
Продолжительность
— это время, которое потребовалось для запуска обработчика функции. -
Billed Duration
— это время, которое потребовалось для запуска обработчика функции, округленное до следующей миллисекунды. Вы не платите за время инициализации при использовании управляемой среды выполнения, только за время, необходимое для запуска обработчика функции.
Продолжительность инициализации
— время понадобилось для создания среды выполнения и запуска кода инициализации.Вот результат после повторного вызова той же функции. Среда выполнения уже разогрета, поэтому код инициализации повторно не запускается.
REPORT RequestId: f37b73e6-666a-4e7f-a5e4-a2758854af6e Продолжительность: 1,43 мс Выставленная продолжительность: 2 мс Размер памяти: 256 МБ Макс. используемая память: 61 МБ
Продолжительность
очень короткая.
Имейте в виду, что во время разработки и тестирования вы, скорее всего, увидите гораздо больше холодных запусков, чем в производственной среде. Это связано с тем, что служба Lambda будет перезапускать среды выполнения каждый раз, когда вы обновляете код функции, а также потому, что вы, вероятно, будете вызывать функцию реже, чем в рабочей среде.
Сценарии, в которых холодный запуск может не быть проблемой
Это не единственные сценарии, в которых вам следует использовать лямбда-функции, но и те, в которых холодный запуск не может быть проблемой:
- ваша функция вызывается нечасто, отвечает быстро, реакция чувствительна ко времени, но вы можете справиться с периодической медленной реакцией во время холодного запуска.
- ваша функция вызывается нечасто, и ответ не зависит от времени.
- ваша функция вызывается часто, но не пачками, она быстро реагирует. Среды выполнения могут оставаться теплыми, что приводит к небольшому количеству холодных запусков.
- у вас есть непредсказуемые всплески запросов, но ответы не зависят от времени. Служба Lambda будет автоматически масштабироваться для удовлетворения этих всплесков намного быстрее, чем другие технологии, такие как виртуальные машины или контейнеры.
- ваша функция принимает запрос и ставит задание в очередь на какой-то другой системе и не отправляет ответ.
- вызывающий абонент может справиться со случайным медленным откликом во время холодного запуска.
- ваша функция берет элементы из очереди, но очередь не наполняется.
- ваш обработчик функций очень быстрый, поэтому, если у вас есть несколько теплых сред выполнения, они смогут обрабатывать все полученные запросы.
- у вас стабильный уровень запросов, и у вас нет непредсказуемых всплесков запросов.
Во всем вышеперечисленном холодный пуск может вообще не вызывать у вас беспокойства. Ваше приложение может отвечать достаточно быстро с нечастыми задержками.
Сценарии, в которых холодный пуск может быть проблемой
Вот несколько сценариев, в которых холодный запуск может быть проблемой, конечно, их гораздо больше, но в этих сценариях вам следует рассмотреть некоторые шаги, описанные в следующем разделе, или выбрать альтернативную технологию для размещения вашего приложения .NET. .
- ваша функция вызывается нечасто, отвечает быстро, но ответ чувствителен ко времени. Но вы не можете справиться с периодическим медленным откликом во время холодного запуска.
- ваша функция вызывается нечасто, но обработчик функции реагирует медленно. Медленный отклик может привести к созданию множества сред выполнения, и каждая из них будет иметь холодный запуск.
- ваша функция вызывается часто, но медленно отвечает из-за большой вычислительной нагрузки, медленного ввода-вывода и т. д. В этом случае лучше подойдет другая технология, рассмотрите возможность использования Fargate или App Runner.
- у вас есть непредсказуемые всплески запросов, которые нужно обрабатывать быстро. Когда вы получаете пакет запросов, каждый из них может привести к созданию среды выполнения, и каждый из них будет иметь холодный запуск.
- ваша функция выполняет длительную задачу. В этом случае среда выполнения будет удерживаться этой задачей, и любые последующие запросы вызовут создание новой среды выполнения, и каждый из них будет иметь холодный запуск. Длительные задачи, как правило, не подходят для лямбда-функций. Рассмотрите возможность использования пошаговых функций с Lambda или перейдите на другую технологию, такую как Fargate или App Runner.
Что вы можете сделать с холодным запуском
Есть несколько шагов, которые вы можете предпринять, чтобы уменьшить количество холодных запусков и их продолжительность.
Самое простое и первое, на что следует обратить внимание, — это обеспечение параллелизма. Это не требует никаких изменений в вашем коде.
- использовать подготовленный параллелизм, это позволит поддерживать заданное количество сред выполнения в горячем состоянии и быть готовыми к обработке запросов. За это взимается плата, но она может составлять всего 3 доллара в месяц для одной среды выполнения.
- Если у вас много функций, каждая из которых делает очень мало и вызывается нечасто, рассмотрите возможность объединения их в меньшее количество функций. Это уменьшит количество холодных запусков, потому что комбинированные функции будут вызываться чаще.
- добавить подготовленный параллелизм к объединенным функциям (предыдущее предложение). Это уменьшит количество холодных запусков и будет более рентабельным, чем использование выделенного параллелизма для многих функций.
- предварительно прогретые среды выполнения. См. эти сообщения, связанные с предварительным прогревом, для примеров того, как это сделать.
- Старайтесь, чтобы код функции (обработчик и код инициализации) был как можно меньше. Чем меньше двоичный файл, тем быстрее будет его загрузка и JIT-компиляция.
- добавьте больше памяти для вашей функции, это повысит мощность выделенного ЦП, сократит время, необходимое для JIT, и инициализирует ваш код. Это увеличивает цену за исполнение.
- оптимизируйте свой код так же, как и для любого другого приложения.
- рассмотрите возможность использования PublishReadyToRun, если ваше приложение использует .NET 6 или новее.
- рассмотрите возможность использования PublishTrimmed.
- рассмотрите возможность использования собственной компиляции AoT, если ваше приложение использует .