Надёжность, доступность и отказоустойчивость сайтов и веб-приложений

Действительно серьёзные проекты должны работать без перебоев даже в случае отказа отдельных подсистем. А причин для сбоев в работе немало — это выход из строя серверного «железа», сбои программного обеспечения, аварии на уровне дата-центров. Но всех этих рисков можно избежать или минимизировать их последствия.

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

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

Отказоустойчивость сложно измерить саму по себе, но измерению поддаётся аптайм — доступность сервиса, выраженная в процентах. Правильнее всего с точки зрения аналитики измерять аптайм за длительные интервалы — как минимум за год, а лучше — еще за больший интервал. Аптайм в диапазоне 99.8-99.9% — это нормальный показатель для обычных проектов на виртуальных хостингах или VPS — это примерно 1-2 часа неработоспособности в месяц или около 12 часов недоступности сервиса в год. Показатель около 99.95% — эквивалент 4 часов недоступности в год — уже достаточно хороший для односерверных инсталляций и для ПО, изначально не спроектированного для высокой отказоустойчивости. Если же требуемый уровень аптайма 99.99% и выше, то обычно требуется как построение соответствующей серверной инфраструктуры, так и модификация кодовой базы проекта для работы в режиме высокой отказоустойчивости.

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

Для достижения высокого уровня доступности уже используются механики построения отказоустойчивых систем — в частности, дублирование всех критичных подсистем, что позволяет приложению функционировать, даже если из строя выходит один из компонентов. Основных способа тут два — горизонтальное масштабирование или дублирование всех серверов и настройка их автоматической "горячей" замены. И в том, и в другом случае выполняется дублирование всех критичных компонентов системы, разница лишь в штатных режимах работы и в механике обеспечения отказоустойчивости. При горизонтальном масштабировании компоненты работают параллельно и это к тому же повышает устойчивость к нагрузкам, а при использовании схемы с «горячей заменой» резервный компонент включается только в момент выхода из строя основного. Горизонтальное масштабирование обычно более привлекательно с точки зрения утилизации мощностей, но применимо оно не везде и часто требует более существенных доработок ПО для реализации.

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

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

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

Уровень на котором производится дублирование определяет степень толерантности к сбоям. Если ограничится одним физическим сервером, то его выход из строя будет точкой отказа. Если резместить несколько дублирующих серверов в дата-центре, то точкой отказа будет дата-центр. Если разнести сервера по нескольким дата-центрам, то единой точки отказа уже не будет.

Но чем более отказоустойчива система, тем дороже инфраструктура и тем сложнее инженерные задачи, связанные с обеспечением её работы. Экономическая целесообразность подходов к отказоустойчивости определяется индивидуально в каждом конкретном случае.

Узнать больше →

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

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

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

Узнать больше →

Согласно многим исследованиям, быстродействие оказывает существенное влияние на удовлетворённость пользователей и на количество отказов. Это же, в свою очередь, влияет на коммерческую эффективность веб-проекта.

Cтатьи по теме:

DDoS — распределенные атаки типа «отказ в обслуживании»
DoS-атака / Denial of Service attack — это атака типа «отказ в обслуживании», суть которой состоит в том, чтобы «перегрузить» атакуемый сервер или каналы связи и тем самым ухудшить качество работы сервиса или вообще прекратить его работу. Distributed DоS или DDoS — это атака того же типа, производящаяся с более чем одного атакующего компьютера.
Серверные языки программирования
Серверные языки программирования нужны для реализации бизнес-логики, то есть разработчик при помощи языка программирования описывает возможные сценарии использования сайта или приложения.
CMS — коробочные системы управления сайтами
Система управления сайтом — это программный продукт, который создан для упрощения создания основных видов сайтов. Как правило, системы управления достаточно универсальны, то есть на них можно собрать что угодно: от информационного сайта до интернет-магазина или портала.
Фреймворки в веб-разработке
Фреймворки — это программные продукты, которые упрощают создание и поддержку технически сложных или нагруженных проектов. Фреймворк, как правило, содержит только базовые программные модули, а все специфичные для проекта компоненты реализуются разработчиком на их основе. Тем самым достигается не только высокая скорость разработки, но и большая производительность и надёжность решений.
Выбор между CMS и фреймворком
​Технически любой функционал может быть реализован как на CMS, так и на фреймворке. Однако некоторые проекты проще сделать на CMS, а некоторые — на фреймворке.
Рекомендации по выбору CMS и фреймворков
При выборе конкретной платформы для разработки часто возникают сложности. Бывает непросто принять взвешенное решение, в этом случае будет полезен формализованный алгоритм выбора.
Хостинг сайтов и веб-приложений
Это услуга по предоставлению дискового пространства и вычислительных ресурсов на сервере, постоянно находящемся в сети интернет. Обычно под понятием услуги хостинга подразумевают как минимум услугу размещения файлов сайта на сервере, на котором запущено ПО, необходимое для обработки запросов к этим файлам (веб-сервер).

Тематические технологии:

Язык программирования Ruby
Фреймворк Ruby on Rails
Язык программирования Python
Язык программирования Go
Язык программирования Elixir
Фреймворк Phoenix
Websockets
Язык разметки HTML