Требования к системам


Доступность


Доступность — это время, в течение которого система остается работоспособной для выполнения требуемой функции в течение определенного периода времени. Это простая мера процента времени, в течение которого система, служба или машина остаются работоспособными в нормальных условиях.

Девятка доступности

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

Если доступность составляет 99,00%, говорят, что она имеет «2 девятки» доступности, а если она составляет 99,9%, она называется «3 девятки» и так далее.

Доступность (%) Время простоя (год) Время простоя (месяц) Время простоя (неделя)
90% (одна девятка) 36.53 дней 72 часов 16.8 часов
99% (две девятки) 3.65 дней 7.20 часов 1.68 часов
99.9% (три девятки) 8.77 часов 43.8 минут 10.1 минут
99.99% (четыре девятки) 52.6 минут 4.32 минут 1.01 минут
99.999% (пять девяток) 5.25 минут 25.9 минут 6.05 минут
99.9999% (шесть девяток) 31.56 минут 2.59 минут 604.8 миллисекунд

Доступность в последовательном и параллельном режимах

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

Общая доступность снижается, когда два компонента расположены последовательно.

Например, если и Foo, и Bar имеют доступность 99,9 %, их общая доступность по очереди будет составлять 99,8 %.

Общая доступность увеличивается, когда два компонента работают параллельно.

Например, если и Foo, и Bar имеют доступность 99,9 %, их общая доступность при параллельном использовании составит 99,9999 %.

Доступность против надежности

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

Высокая доступность и отказоустойчивость

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

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


Масштабируемость


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

Давайте обсудим различные типы масштабирования:

Вертикальное масштабирование

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

Преимущества:

  • Простота реализации
  • Легче управлять
  • Согласованность данных

Недостатки:

  • Риск длительного простоя
  • Сложнее обновить
  • Может быть единой точкой отказа

Горизонтальное масштабирование

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

Преимущества:

  • Повышенная избыточность
  • Лучшая отказоустойчивость
  • Гибкость и эффективность
  • Легче обновить

Недостатки:

  • Повышенная сложность
  • Несоответствие данных
  • Повышенная нагрузка на нижестоящие сервисы

SLA, SLO, SLI

Кратко обсудим SLA, SLO и SLI. В основном они связаны с бизнесом и надежностью сайта, но, тем не менее, это полезно знать.

Почему они важны?

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

Соглашение об уровне обслуживания

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

SLA часто составляются бизнес- или юридическим отделом компании.

SLO

SLO, или цель уровня обслуживания, — это обещание, которое компания дает пользователям в отношении определенной метрики, такой как реакция на инцидент или время безотказной работы. SLO существуют в SLA как отдельные обещания, содержащиеся в полном пользовательском соглашении. SLO — это конкретная цель, которой должна соответствовать служба, чтобы соответствовать SLA. SLO всегда должны быть простыми, четко определенными и легко измеряемыми, чтобы определить, выполняется ли цель.

SLI

SLI, или индикатор уровня обслуживания, является ключевой метрикой, используемой для определения того, соблюдается ли SLO. Это измеренное значение метрики, описанной в SLO. Чтобы оставаться в соответствии с SLA, значение SLI всегда должно соответствовать или превышать значение, определенное SLO.

TTL

Время жизни в сети означает ограничение времени, налагаемое на пакет данных, который должен находиться в сети, прежде чем он будет отброшен. Это 8-битное двоичное значение, установленное в заголовке интернет-протокола (IP) отправляющим хостом. Целью TTL является предотвращение постоянного распространения пакетов данных в сети. Максимальное значение TTL — 255. Значение TTL может быть установлено администратором от 1 до 255.

Использование TTL в вычислительных приложениях заключается в повышении производительности и управлении кэшированием данных. Он также находит свое применение в кэшировании сети доставки контента (CDN) и кэшировании системы доменных имен (DNS).

Как работает время жизни (TTL)?

Количество прыжков, которые проходит пакет до того, как он будет отброшен сетью, называется временем жизни (TTL) или лимитом прыжков. Максимальный диапазон пакетов указывается значениями TTL.

Хост-отправитель устанавливает начальное значение TTL в виде поля из восьми двоичных цифр в заголовке пакета. Поле TTL дейтаграммы задается отправителем и уменьшается каждым маршрутизатором на пути к месту назначения. Маршрутизатор уменьшает значение TTL как минимум на единицу при пересылке IP-пакетов. Когда значение TTL пакета достигает 0, маршрутизатор отбрасывает его и отправляет ICMP-сообщение обратно исходному хосту. Эта система гарантирует, что пакет, перемещающийся по сети, отбрасывается через заданный промежуток времени, а не зацикливается на неопределенный срок.

Время жизни (TTL) в DNS

DNS TTL — это время, необходимое DNS для кэширования записи. Другими словами, продолжительность хранения записи DNS или время, необходимое для возврата записи DNS из кэша, называется временем жизни. Это числовое значение, установленное в записи DNS на авторитетном сервере доменных имен домена.

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

Время жизни (TTL) в HTTP

TTL измеряется в секундах и задается заголовками HTTP, такими как заголовок Cache-Control. Если для параметра установлено значение «Cache-Control: max-age=60», это подразумевает обновление данного ресурса каждые 60 секунд до истечения времени жизни. Настройка «max-age=0» подразумевает, что ресурс вообще не должен кэшироваться.

Поле «Время жизни» напрямую влияет на время загрузки страницы (кэшированные данные загружаются быстрее) и актуальность контента на вашем сайте (т. е. данные, кэшированные слишком долго, могут устареть).

TTL следует настроить следующим образом, чтобы посетители видели только самую последнюю версию вашего веб-сайта:

  • Для статического контента, такого как изображения, документы и т. д., устанавливается более длительное значение TTL, поскольку они редко обновляются.
  • Для динамического содержимого, такого как файлы HTML, сложно установить значения TTL. Например, раздел комментариев на веб-сайте часто меняется, и время его обновления вообще невозможно предсказать, если пользователю разрешено изменять существующие сообщения, а также тогда кэширование не рекомендуется.

Какое время жизни (TTL) превышено?

IP-пакеты, передающие веб-трафик HTTP через TCP (протокол управления передачей), которые прошли слишком много сетевых переходов, называются превышением TTL. Когда возникает такая ситуация, каждый маршрутизатор уменьшает поле TTL IP-пакетов, отправляемых по сети, пока оно не достигнет 0. Затем маршрутизатор отбрасывает IP-пакет и отправляет ICMP-пакет с кодом ошибки превышения TTL на отправляющий хост.

Кэширование


«В компьютерных науках есть только две сложные вещи: инвалидация кэша и присвоение имен вещам». - Фил Карлтон

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

Кэш использует принцип локальности ссылки «недавно запрошенные данные, вероятно, будут запрошены снова».

Кэширование и память

Как и память компьютера, кэш — это компактная, быстродействующая память, в которой данные хранятся в виде иерархии уровней, начиная с первого уровня и последовательно продвигаясь оттуда. Они обозначаются как L1, L2, L3 и так далее. Кэш также записывается по запросу, например, когда произошло обновление, и новый контент необходимо сохранить в кэше, заменив старый сохраненный контент.

Независимо от того, читается ли кеш или записывается, это делается по одному блоку за раз. У каждого блока также есть тег, который включает место, где данные были сохранены в кэше. Когда данные запрашиваются из кэша, выполняется поиск по тегам, чтобы найти конкретное содержимое, необходимое на первом уровне (L1) памяти. Если правильные данные не найдены, в L2 выполняется дополнительный поиск.

Если данные там не найдены, поиск продолжается в L3, затем в L4 и так далее, пока они не будут найдены, затем они считываются и загружаются. Если данные вообще не найдены в кеше, то они записываются в него для быстрого извлечения в следующий раз.

Попадание в кеш и промах кеша

Попадание в кэш

Попадание в кеш описывает ситуацию, когда содержимое успешно обслуживается из кеша. Теги быстро ищутся в памяти, и когда данные найдены и прочитаны, это считается попаданием в кеш.

Холодный, теплый и горячий кэш

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

Горячий кэш — это экземпляр, в котором данные считывались из памяти с максимально возможной скоростью. Это происходит, когда данные извлекаются из L1.

Холодный кеш — это самая медленная возможная скорость чтения данных, однако он по-прежнему успешен, поэтому он по-прежнему считается попаданием в кеш. Данные просто находятся ниже в иерархии памяти, например, в L3 или ниже.

Теплый кэш используется для описания данных, находящихся в L2 или L3. Это не так быстро, как горячий кеш, но все же быстрее, чем холодный кеш. Как правило, кеш называют теплым, чтобы показать, что он медленнее и ближе к холодному кешу, чем к горячему.

Промах кеша

Кэш-промах относится к случаю, когда в памяти выполняется поиск, а данные не найдены. Когда это происходит, содержимое передается и записывается в кэш.

Инвалидация кеша

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

  • Кэш со сквозной записью - Данные записываются в кэш и соответствующую базу данных одновременно.

    Плюсы: быстрый поиск, полная согласованность данных между кешем и хранилищем.
    Минусы: более высокая задержка для операций записи.

  • Кэш с круговой записью - Где запись напрямую идет в базу данных или постоянное хранилище, минуя кеш.

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

  • Кэш обратной записи - Где запись выполняется только на уровне кэширования, и запись подтверждается, как только запись в кэш завершается. Затем кеш асинхронно синхронизирует эту запись с базой данных.

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

Политика выселения

Ниже приведены некоторые из наиболее распространенных политик вытеснения кэша:

  • First In First Out (FIFO): Кэш удаляет первый блок, к которому был получен доступ первым, независимо от того, как часто или сколько раз к нему обращались раньше.
  • Last In First Out (LIFO): Кэш сначала удаляет блок, к которому был получен последний доступ, независимо от того, как часто или сколько раз к нему обращались ранее.
  • Наименее недавно использовавшиеся (LRU): в первую очередь отбрасываются наименее использовавшиеся элементы.
  • Самые последние использованные (MRU): в отличие от LRU, в первую очередь отбрасываются самые последние использованные элементы.
  • Наименее часто используемый (LFU): подсчитывает, как часто требуется элемент. В первую очередь отбрасываются те, которые используются реже всего
  • Случайная замена (RR): случайным образом выбирает элемент-кандидат и отбрасывает его, чтобы освободить место, когда это необходимо.

Распределенный кэш

Распределенный кэш — это система, которая объединяет оперативную память (ОЗУ) нескольких сетевых компьютеров в единое хранилище данных в памяти, используемое в качестве кэша данных для обеспечения быстрого доступа к данным. В то время как большинство кэшей традиционно находится на одном физическом сервере или аппаратном компоненте, распределенный кэш может выйти за пределы памяти одного компьютера, связав вместе несколько компьютеров.

Глобальный кэш

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

Случаи использования и преимущества кэширования

Кэширование может иметь много реальных вариантов использования, таких как:

  • Кэширование базы данных
  • Сеть доставки контента (CDN)
  • Кэширование системы доменных имен (DNS)
  • Кэширование API

Давайте также рассмотрим некоторые сценарии, в которых нам не следует использовать кеш:

  • Кэширование бесполезно, когда доступ к кешу занимает столько же времени, сколько и доступ к первичному хранилищу данных.
  • Кэширование также не работает, когда запросы имеют мало повторений (более высокая случайность), потому что производительность кэширования зависит от повторяющихся шаблонов доступа к памяти.
  • Кэширование бесполезно, когда данные часто изменяются, так как кэшированная версия не синхронизируется, и каждый раз необходимо обращаться к первичному хранилищу данных.
  • Важно отметить, что кеш не следует использовать в качестве постоянного хранилища данных. Они почти всегда реализуются в энергозависимой памяти, потому что она быстрее и, следовательно, должна считаться временной.

Ниже приведены некоторые преимущества кэширования:

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

Примеры

Вот некоторые часто используемые технологии кэширования:

  • Редис
  • Memcached
  • Амазонка Эластичная боль
  • Аэроспайк