VPS и облачные провайдеры
Shared-хостинг, VPS, управляемые платформы или облако: что выбрать, как подобрать размер и что сделать в первую очередь.
За 30 секунд
Есть четыре основных способа хостить веб-приложение: shared-хостинг, виртуальный частный сервер (VPS), управляемая платформа, которая запускает ваш код за вас, и полноценный облачный провайдер с десятками сервисов. Каждый из них обменивает контроль на удобство и стоимость. Для большинства небольших и средних проектов грамотно настроенный VPS быстрый, дешёвый и простой — при условии, что вы его защищаете, бэкапите и наблюдаете за ним.
Почему я это использую
- Мои продакшен-серверы работают на дроплетах DigitalOcean с Ubuntu, так что выбор, подбор размера и защита VPS — моя повседневная работа.
- Я объединяю четыре сервера в два — один для SaaS-продукта и один для всех остальных сайтов, — потому что меньшее число правильно защищённых серверов дешевле и проще в обслуживании.
- Снапшоты с проверенным восстановлением и файрволы на уровне провайдера входят в базовый набор, который я применяю к каждому серверу.
Как это работает
01Четыре способа хостить приложение
Представьте хостинг как жильё. Shared-хостинг — это комната в общей квартире: дёшево и всё обслуживают за вас, но ресурсы вы делите с сотнями сайтов, не можете ставить своё ПО, а один шумный сосед тормозит всех. Подходит для простых PHP-сайтов. VPS — это своя квартира: виртуальная машина с гарантированными CPU, RAM и диском и полным root-доступом, где за всё внутри отвечаете вы. Управляемая платформа (PaaS) вроде Vercel, Render, Fly.io, Railway или Laravel Cloud — это сервисные апартаменты: вы пушите код, а она берёт на себя серверы, масштабирование и TLS — по более высокой цене за ресурс и с ограничениями платформы. Гипермасштабное облако (AWS, Google Cloud, Azure) — это целый город: виртуальные машины плюс управляемые базы данных, очереди, хранилище и сеть, очень гибко и очень сложно.
- Shared-хостинг: самый дешёвый, минимум контроля. Подходит для сайтов-визиток и небольших WordPress.
- VPS: полный контроль за небольшие деньги; безопасность, обновления и бэкапы — на вас.
- Управляемая платформа: быстрее всего выкатить, вы платите за удобство, контроль ограничен.
- Гипермасштабное облако: доступно всё, но стоимость и настройка требуют настоящей экспертизы.
02Выбор провайдера
Для VPS-хостинга популярны DigitalOcean (дроплеты, понятный интерфейс, хорошая документация, управляемые базы данных и объектное хранилище), Hetzner (очень сильное соотношение цены и производительности, дата-центры в Европе и США), Vultr, Linode (теперь Akamai) и OVHcloud. AWS Lightsail предлагает простые VPS-тарифы внутри AWS. Большие облака имеют смысл, когда нужны конкретные управляемые сервисы, сертификаты соответствия, много регионов или ваша компания уже там работает. При сравнении смотрите дальше месячной цены: расположение дата-центров, включённый трафик и цену сверх него, качество снапшотов и бэкапов, наличие облачного файрвола и частной сети, варианты управляемой БД и объектного хранилища, поддержку API и Terraform и то, как отвечает поддержка. Цены меняются, поэтому сравнивайте актуальные страницы с тарифами, а не старые статьи в блогах.
- Расположение: ближе к пользователям; учитывайте требования к хранению данных, например GDPR.
- Сеть: включённый трафик, цена исходящего трафика, IPv6, защита от DDoS.
- Дополнительно: облачный файрвол, частная сеть, снапшоты, бэкапы, объектное хранилище, управляемая БД.
- Эксплуатация: API, CLI, Terraform-провайдер, история статуса и качество поддержки.
03Размер и регион
Начинайте с малого и измеряйте; увеличить VPS позже легко, и большинство провайдеров позволяет масштабироваться вверх за минуты. Небольшой сайт с nginx и PHP или Node спокойно работает на 1–2 vCPU и 2 GB RAM. Если на той же машине ещё база данных, Redis и воркеры очередей, безопаснее начинать с 4 GB и больше. Обычно первым ограничением становится память, а не CPU. Тарифы с разделяемыми vCPU дешёвые и подходят большинству веб-приложений; тарифы с выделенными vCPU дают стабильную производительность для задач, нагружающих CPU. Выбирайте регион, ближайший к большинству пользователей, держите взаимодействующие серверы в одном регионе и помните, что CDN вроде Cloudflare может отдавать статику близко к пользователям где угодно. Несколько недель наблюдайте за нагрузкой, памятью и диском и меняйте размер на основе данных.
- На большинстве веб-серверов память заканчивается раньше CPU; закладывайте ресурсы на базу данных и воркеры.
- Диск SSD или NVMe; пользовательские загрузки и бэкапы храните в объектном хранилище, а не на огромном диске.
- Увеличить размер обычно легко, а вот уменьшить диск часто нельзя.
04Снапшоты, бэкапы и частная сеть
Снапшот — это полный образ диска сервера на определённый момент. Он идеален перед рискованными изменениями, потому что можно откатить всю машину. Бэкапы провайдера — это снапшоты по расписанию, обычно ежедневные или еженедельные, за небольшую доплату. Но и те, и другие живут у того же провайдера, а дисковый снапшот работающей базы данных может оказаться неконсистентным. Поэтому делайте и бэкапы на уровне приложения, например дамп базы данных, и копируйте их за пределы сервера, в идеале в объектное хранилище у другого провайдера или в другом регионе. Бэкап считается бэкапом только после того, как вы успешно из него восстановились. Частная сеть соединяет ваши серверы внутренней сетью, недоступной из интернета, так что сервер приложения может обращаться к базе данных, не открывая её публично.
- Снапшот перед обновлениями, миграциями и крупными изменениями конфигурации.
- Дампы базы данных плюс копии вне площадки; следуйте идее 3-2-1 (3 копии, 2 носителя, 1 вне площадки).
- Регулярно, по расписанию, проверяйте восстановление на свежем сервере.
- Используйте частную сеть для трафика базы данных и кэша между серверами.
05Держим расходы под контролем
Облачные счета растут незаметно. Обычные утечки — забытые серверы и тестовые окружения, старые снапшоты и неподключённые тома, завышенные инстансы, которые никто не уменьшил, неиспользуемые балансировщики и статические IP и прежде всего исходящий трафик (egress), который в больших облаках тарифицируется за гигабайт и может многократно превысить цену самого сервера. VPS-провайдер с щедрым включённым трафиком часто гораздо дешевле для сайтов с большим трафиком. Помогают простые привычки: настройте алерт по счёту, помечайте или называйте каждый ресурс по проекту, раз в месяц просматривайте счёт, удаляйте неиспользуемое и ставьте CDN перед статическими ресурсами. Объединение множества маленьких полупустых серверов в меньшее число правильно подобранных часто снижает и расходы, и трудозатраты на обслуживание одновременно.
- Алерты по счетам и бюджеты на каждом аккаунте.
- Ежемесячная уборка: старые снапшоты, тома, IP, тестовые серверы.
- Следите за ценой egress; кэшируйте статику на CDN.
- Берите reserved-инстансы или savings plans только под стабильные долгосрочные нагрузки.
06Первые 10 минут на новом сервере
Свежий публичный сервер начинают сканировать в течение нескольких минут, поэтому защитите его до того, как что-либо деплоить. Создайте сервер с добавленным SSH-ключом, войдите, обновите пакеты, создайте своего пользователя с sudo, во втором терминале убедитесь, что вход по ключу для него работает, и затем отключите вход по паролю и под root. Включите файрвол, разрешив только SSH, HTTP и HTTPS, и продублируйте это в облачном файрволе провайдера. Включите автоматические обновления безопасности, установите fail2ban, задайте часовой пояс и hostname, на маленьких инстансах добавьте swap-файл и сделайте первый снапшот чистой базы. Напоследок настройте мониторинг и алерт по диску. Команды для каждого шага разобраны в других уроках по Linux.
ssh [email protected] # first login with your key
apt update && apt full-upgrade -y
adduser your_user && usermod -aG sudo your_user
rsync -a --chown=your_user:your_user ~/.ssh /home/your_user/
# New terminal: ssh [email protected] must work before continuing
printf "PasswordAuthentication no\nPermitRootLogin no\n" > /etc/ssh/sshd_config.d/10-hardening.conf
sshd -t && systemctl reload ssh
ufw allow OpenSSH && ufw allow 80/tcp && ufw allow 443/tcp && ufw enable
apt install -y unattended-upgrades fail2ban
dpkg-reconfigure -plow unattended-upgrades
timedatectl set-timezone UTC && hostnamectl set-hostname web1
Когда применять
- VPS: небольшие и средние приложения, предсказуемый трафик, команда, уверенно работающая с Linux, ограниченный бюджет.
- Управляемая платформа: фронтенд-приложения и приложения, дружащие с serverless, где скорость выкатки важнее контроля.
- Гипермасштабное облако: управляемые сервисы в масштабе, требования соответствия, много регионов или уже существующий аккаунт компании.
- Shared-хостинг: простые сайты без собственного ПО и без человека, который будет обслуживать сервер.
Когда не стоит
- Не берите самостоятельно обслуживаемый VPS, если никто не будет ставить обновления, следить за бэкапами и реагировать на алерты.
- Не берите гипермасштабное облако для маленького приложения только потому, что им пользуются большие компании: сложность и расходы на egress вполне реальны.
- Не берите shared-хостинг для приложений, которым нужны фоновые воркеры, WebSockets, собственные расширения или Node.
Альтернативы
- Управляемые платформы (Vercel, Render, Fly.io, Laravel Cloud)
Пушите код — получаете TLS, масштабирование и превью; выше цена за ресурс и меньше контроля.
- AWS / Google Cloud / Azure
Любой управляемый сервис, какой только можно захотеть, с IAM, VPC и серьёзной работой по настройке.
- Управляемые базы данных
Многие VPS-провайдеры продают управляемые PostgreSQL или MySQL с бэкапами и failover, снимая с вас самую рискованную часть.
- Выделенные bare-metal серверы
Целые физические машины для тяжёлых нагрузок по хорошей цене, но с более долгим выделением и без мгновенного изменения размера.
Лучшие практики
- Защитите новый сервер до деплоя: только ключи, файрвол, обновления, пользователь с sudo вместо root.
- Используйте и файрвол на хосте, и облачный файрвол провайдера.
- Держите базы данных на localhost или в частной сети, никогда на публичном IP.
- Делайте снапшот перед рискованными изменениями, храните бэкапы базы данных вне площадки и регулярно проверяйте восстановление.
- Храните загрузки и бэкапы в объектном хранилище, чтобы серверы оставались маленькими и заменяемыми.
- Настройте алерты по счетам и ежемесячно пересматривайте ресурсы.
- Документируйте каждый сервер: что на нём работает, как деплоится и как его восстановить.
Частые ошибки
- Считают снапшоты провайдера единственным бэкапом — у того же провайдера и ни разу не восстановленным.
- Сначала деплоят, а защищают потом, когда сервер уже несколько дней сканируют.
- Сразу берут самый большой инстанс вместо того, чтобы измерить и изменить размер.
- Забывают тестовые серверы, снапшоты и тома, которые месяцами продолжают выставлять счёт.
- Выбирают регион далеко от пользователей или разносят приложение и базу данных по разным регионам.
Глубже
07Что такое vCPU на самом деле: гипервизоры, steal time и хранилище
VPS — это виртуальная машина на физическом хосте, общем с другими клиентами, под управлением гипервизора, например KVM. vCPU — обычно один аппаратный поток ядра хоста, который распределяется между многими гостевыми машинами. На тарифах с shared CPU провайдер рассчитывает, что не все заняты одновременно; когда соседи заняты, ваша VM ждёт, и это ожидание проявляется как steal time — значение st в top и vmstat. Стабильный steal выше нескольких процентов означает, что вы платите за CPU, которого не получаете, и это решает тариф с dedicated CPU или другой хост. Хранилище тоже различается: локальный NVMe быстрый и с низкой задержкой, но привязан к хосту, а сетевые блочные тома переживают отказы хоста и могут переноситься, но имеют более высокую задержку и лимиты IOPS в зависимости от размера тома. Понимание того, что у вас, объясняет результаты бенчмарков, которые иначе кажутся бессмысленными.
top -bn1 | head -5 # look at 'st' in the %Cpu(s) line
vmstat 1 10 # last column 'st' = steal
lscpu | grep -E 'Model name|Thread|Hypervisor'
systemd-detect-virt # kvm, xen, microsoft...
# Quick disk benchmark (apt install fio), on a test file, not a live DB
fio --name=randread --rw=randread --bs=4k --size=1G --runtime=30 \
--ioengine=libaio --direct=1 --filename=/var/tmp/fio.test
08Серверы как код: cloud-init и пересобираемые машины
Самый надёжный сервер — тот, который можно пересоздать за минуты. Почти все провайдеры поддерживают cloud-init: при создании VM вы передаёте документ user-data, и при первой загрузке он создаёт пользователей, добавляет SSH-ключи, устанавливает пакеты и выполняет команды. Это превращает первые десять минут харденинга в файл, который вы ревьюите и версионируете, так что каждый новый сервер стартует одинаково. Инструменты вроде Terraform или OpenTofu поднимаются уровнем выше и через API провайдера описывают сами серверы, файрволы, тома и DNS-записи, а инструменты конфигурации вроде Ansible управляют текущими изменениями внутри машины. Даже если вы никогда не автоматизируете всё полностью, наличие user-data и письменного runbook означает, что потерянный сервер — неудобство, а не кризис, потому что ничего важного не существует только в чьей-то памяти.
#cloud-config
users:
- name: your_user
groups: [sudo]
shell: /bin/bash
lock_passwd: true
ssh_authorized_keys:
- ssh-ed25519 AAAAC3...placeholder your_user@laptop
ssh_pwauth: false
disable_root: true
package_update: true
package_upgrade: true
packages: [ufw, fail2ban, unattended-upgrades]
runcmd:
- [ufw, allow, OpenSSH]
- [ufw, allow, 80/tcp]
- [ufw, allow, 443/tcp]
- [ufw, --force, enable]
09Доступность на небольшом бюджете: RPO, RTO и единые точки отказа
Два числа делают обсуждение доступности конкретным. RPO (recovery point objective) — сколько данных вы можете позволить себе потерять; это задаёт частоту бэкапов: ночные дампы означают потерю заказов вплоть до суток. RTO (recovery time objective) — сколько времени сервис может лежать; это задаёт, сколько всего должно быть автоматизировано. Один VPS — единая точка отказа, и это часто приемлемо, если RPO и RTO согласованы и проверены. Сначала идут дешёвые улучшения: более частые дампы или непрерывное архивирование binlog или WAL в объектное хранилище, зарезервированный или плавающий IP, который можно перенести на сервер-замену, умеренные DNS TTL и отрепетированное восстановление. Два сервера приложения за балансировщиком нагрузки помогают только тогда, когда база данных, сессии и загрузки уже не живут на одной машине.
- Согласуйте RPO и RTO с бизнесом до выбора архитектуры.
- Плавающий или зарезервированный IP позволяет заменить сервер, не дожидаясь DNS.
- Учения по восстановлению превращают записанный RTO в измеренный.
10Путь масштабирования от одного VPS
Масштабируйтесь поэтапно и только тогда, когда этого требуют измерения. Первый шаг — вертикальный: тариф побольше, что занимает минуты и ничего не меняет в приложении. Второй шаг — разделение: вынесите базу данных на собственный сервер или в управляемую базу данных в частной сети, чтобы приложение и данные перестали конкурировать за память, а загрузки перенесите в объектное хранилище. Третий шаг — горизонтальный: несколько одинаковых серверов приложения за балансировщиком нагрузки. Для этого нужны stateless-серверы приложения: сессии и кэш в Redis или базе данных, файлы в объектном хранилище, плановые задачи ровно на одной ноде и деплои, согласованно обновляющие все ноды. Четвёртый шаг — реплики для чтения, очереди для медленной работы и CDN для статики. Каждый шаг добавляет расходов и эксплуатационной работы, поэтому хорошо настроенный одиночный сервер часто тянет дальше, чем принято думать.
- Сначала вертикально, затем вынести базу данных, затем горизонтально.
- Горизонтальное масштабирование требует stateless-серверов приложения.
- Убедитесь, что cron и планировщики работают только на одной ноде.
Реальные ситуации
Миграция живого сайта на новый сервер с минимальным простоем
Проблема
Сайт с базой данных и пользовательскими загрузками нужно перенести со старого VPS на новый у другого провайдера. Бизнес согласен максимум на несколько минут простоя.
Как решить
За сутки или раньше снизьте DNS TTL до 300 секунд. Соберите новый сервер по вашему базовому шаблону харденинга, задеплойте приложение и заранее синхронизируйте загрузки через rsync. Проверьте его через curl --resolve или запись в файле hosts. В момент переключения переведите старый сайт в режим обслуживания, сделайте финальный дамп базы данных и восстановите его на новом сервере, выполните последний rsync загрузок, затем переключите DNS. Оставьте старый сервер работать в режиме только для чтения и следите за обоими access-логами, пока трафик полностью не переедет. Проверьте заказы, входы и письма, затем снова поднимите TTL. Храните старый сервер и его снапшот неделю, прежде чем удалять.
Сервер тормозит, а графики CPU не имеют смысла
Проблема
Время ответа на VPS с shared CPU удваивается в случайные часы. Потребление CPU приложением почти не меняется, деплоев и всплесков трафика не было.
Как решить
Посмотрите на steal time: vmstat 1 или top в период замедления. Если st регулярно поднимается выше примерно 5–10 процентов, другие арендаторы на том же хосте забирают процессорное время, которого ждёт ваша VM. Соберите доказательства агентом мониторинга, который несколько дней записывает steal. Варианты, от самого дешёвого: попросить поддержку перенести VM на другой хост, сменить тариф (что часто переносит машину) или перейти на тариф с dedicated CPU ради стабильной производительности. Также исключите диск: сравните задержки из iostat с лимитом IOPS тома, потому что тротлинг сетевого тома даёт похожие симптомы при низком CPU.
Потеря доступа к аккаунту провайдера
Проблема
Почту одного из участников команды взломали, и атакующий пытался войти в облачный аккаунт. Вы понимаете, что все серверы, снапшоты и бэкапы живут в этом одном аккаунте.
Как решить
Сначала локализуйте: смените пароль, потребуйте от каждого пользователя аппаратные ключи или двухфакторную аутентификацию через приложение, отзовите API-токены и проверьте недавнюю активность и созданные ресурсы. Затем уберите единую точку отказа: ежедневно копируйте дампы базы данных и загрузки в объектное хранилище у другого провайдера с учётными данными, которые могут писать, но не могут удалять, и включите версионирование объектов или retention lock, чтобы бэкапы нельзя было стереть. Дайте каждому человеку собственный аккаунт с ролями по принципу наименьших привилегий вместо общих логинов. Задокументируйте, как пересобрать серверы из cloud-init и бэкапов в другом месте, и настройте алерты по счетам, которые также быстро выявляют злоупотребления вроде криптомайнинга.
Шпаргалка
- Проверить CPU steal time
vmstat 1 5 (столбец st)- На каком я гипервизоре
systemd-detect-virt- Завершился ли cloud-init успешно
cloud-init status --long- Логи настройки при первой загрузке
sudo less /var/log/cloud-init-output.log- Проверить сайт на новом сервере до смены DNS
curl --resolve example.com:443:203.0.113.20 https://example.com/- Проверить текущий TTL записи
dig +noall +answer example.com A- Финальная синхронизация загрузок при переключении
rsync -aH --delete --dry-run old:/srv/app/uploads/ /srv/app/uploads/- Простой бенчмарк диска
fio --name=t --rw=randread --bs=4k --size=1G --direct=1 --runtime=30- Открытые порты, видимые снаружи
nmap -Pn -p 1-1000 203.0.113.10
В моих реальных проектах
- Я веду четыре продакшен-сервера на Ubuntu на дроплетах DigitalOcean, на которых работают сайты на Laravel и Next.js для моих собственных продуктов и для клиентов.
- Мой базовый набор для каждого из них: только SSH-ключи, ufw плюс файрвол провайдера с открытыми только 22, 80 и 443, unattended-upgrades, fail2ban и снапшоты с проверенным восстановлением.
- Я планирую объединить четыре сервера в два, перенеся бэкапы за пределы сервера, а загрузки — в S3-совместимое объектное хранилище; миграция идёт по шагам: инвентаризация, копирование, проверка, переключение DNS — и старый сервер остаётся, пока всё не проверено.
Вопросы и ответы
Q1Когда вы выберете VPS, а не управляемую платформу вроде Vercel или Render?
VPS имеет смысл, когда мне нужен полный контроль над стеком — фоновые воркеры, cron, WebSockets, собственные PHP-расширения или несколько приложений с общей базой данных — и когда важна стоимость за ресурс. Небольшой VPS часто стоит лишь долю от эквивалентных управляемых ресурсов и включает щедрый трафик. Цена — ответственность: обновления, безопасность, бэкапы и мониторинг на мне. Управляемая платформа выигрывает, когда команда хочет быстро выкатывать без эксплуатационной работы, нужны превью-деплои и автоматическое масштабирование или приложение в основном фронтендовое и вписывается в модель платформы. Многие проекты сочетают оба варианта: фронтенд на платформе, API и воркеры на VPS.
Q2Как решить, какого размера должен быть сервер?
Я отталкиваюсь от того, что на нём будет работать: веб-сервер, рантайм приложения, база данных, кэш и воркеры, — и в первую очередь оцениваю память, потому что для веб-нагрузок RAM обычно становится первым ограничением. Небольшое приложение нормально работает на 2 GB; с базой данных и воркерами на той же машине я начинаю с 4 GB. Затем несколько недель измеряю реальное использование: load average относительно числа ядер, доступную память, активность swap, рост диска и время ответа. Увеличение размера у большинства провайдеров занимает минуты, поэтому начать скромно и масштабироваться по данным дешевле, чем гадать с запасом. Если доминирует один ресурс, я выбираю тип тарифа, заточенный под него, например с выделенным CPU.
Q3Чем снапшот отличается от бэкапа?
Снапшот — это образ всего диска на определённый момент, который делает провайдер. Он отлично подходит для отката сервера после неудачного обновления, но обычно живёт у того же провайдера и в том же регионе, а снапшот работающей базы данных может быть неконсистентным. Бэкап в строгом смысле — это копия ваших данных, способная пережить потерю сервера, аккаунта или провайдера: например, ночной дамп базы данных и загруженные файлы, скопированные в объектное хранилище в другом месте. Я использую оба варианта и доверяю любому из них только после того, как тестовое восстановление на свежий сервер действительно сработало.
Q4Что вы делаете в первые минуты на новом сервере?
До любого деплоя: вхожу по SSH-ключу, добавленному при создании, обновляю все пакеты, создаю личного пользователя с sudo и во второй сессии убеждаюсь, что вход по ключу для него работает. Затем отключаю аутентификацию по паролю и вход под root по SSH и проверяю конфиг через sshd -t. Включаю ufw только с SSH, HTTP и HTTPS и задаю те же правила в файрволе провайдера. Включаю unattended-upgrades, ставлю fail2ban, задаю часовой пояс и hostname, на маленьких инстансах добавляю swap и делаю чистый снапшот. Дальше идут мониторинг и алерт по диску, а потом уже приложение.
Q5Как держать облачные расходы под контролем?
Сначала прозрачность: алерты по счетам на каждом аккаунте и имя или тег проекта на каждом ресурсе, чтобы ничего не было анонимным. Затем ежемесячный обзор, чтобы удалить забытые тестовые серверы, старые снапшоты, неподключённые тома и неиспользуемые IP или балансировщики. Подбирайте размер инстансов по данным мониторинга, а не наугад. Следите за egress: в больших облаках исходящий трафик тарифицируется за гигабайт, поэтому важны CDN перед статикой и объектное хранилище с разумной ценой egress. Для стабильных нагрузок снизить стоимость помогают reserved capacity или savings plans, но только когда использование уже известно. Часто самая большая экономия — консолидация: несколько полупростаивающих серверов превращаются в один правильно подобранный.
Q6Зачем нужна частная сеть между серверами?
Частная сеть даёт серверам в одном регионе внутреннюю сеть с приватными IP, недоступную из интернета. Тогда база данных, Redis или внутренние API могут слушать только приватный интерфейс и никогда не окажутся публичными, даже если правило файрвола на хосте ошибочно. Трафик по частной сети обычно не учитывается в лимите трафика и имеет меньшую задержку. Она также упрощает правила файрвола: порт базы данных разрешается только из приватной подсети. Для дополнительной защиты я всё равно шифрую чувствительные соединения через TLS, потому что «частная» не означает изолированную от всех остальных клиентов у каждого провайдера.
Вопросы уровня senior
S1Клиент хочет «high availability» на небольшом бюджете. Как вы к этому подходите?
Я начинаю с перевода этой фразы в цифры: сколько минут простоя в месяц допустимо и какая потеря данных. Большинству небольших бизнесов быстрое отрепетированное восстановление нужнее, чем настоящая избыточность. Поэтому первые вложения — частые внешние бэкапы с point-in-time recovery для базы данных, мониторинг с алертами, инфраструктура, описанная в cloud-init или Terraform, плавающий IP и проверенное восстановление, укладывающееся в согласованный RTO. Настоящая HA, то есть отсутствие единой точки отказа, требует как минимум двух серверов приложения, балансировщика нагрузки, реплицируемой или управляемой базы данных и общего хранилища, что многократно увеличивает стоимость и сложность. Я представляю оба варианта с ценами и сценариями отказов и обычно рекомендую дизайн, ориентированный на восстановление, пока выручка не оправдает избыточность.
S2Когда вы перешли бы с VPS в гиперскейл-облако вроде AWS?
Не из-за одного лишь роста: правильно подобранная инфраструктура на VPS масштабируется удивительно далеко. Переход имеет смысл, когда появляется конкретная потребность: управляемые сервисы, которые команда иначе эксплуатировала бы плохо, например мультизонная управляемая база данных, очереди или serverless-функции; требования compliance, которым нужна сертифицированная инфраструктура и подробные audit trail; деплой в несколько регионов; тонкое управление идентификацией и доступом для большой команды; или материнская компания, стандартизирующаяся на одном облаке. Издержки реальны: более сложные сеть и IAM, плата за egress, плата за каждый публичный IPv4-адрес и риск привязки к проприетарным сервисам. Распространён средний путь: держать ядро на VPS или переносимых контейнерах и использовать отдельные управляемые сервисы там, где они явно экономят работу.
S3Как сделать серверы заменяемыми, а не уникальными?
Нужно добиться того, чтобы никакое важное состояние или знание не жило только на машине. Конфигурация — это код: cloud-init user-data для первой загрузки, Ansible или аналог для текущей конфигурации и Terraform или OpenTofu для самих серверов, файрволов и DNS. Деплои приложения идут из пайплайна, а не из ручных правок. Данные живут снаружи или непрерывно копируются наружу: бэкапы баз данных хранятся вне сервера, загрузки — в объектном хранилище, логи отправляются централизованно. Секреты берутся из хранилища секретов или защищённых env-файлов, которые пересоздаются автоматизацией. Затем я доказываю это, регулярно пересобирая сервер с нуля по расписанию. Цена — начальные усилия и дисциплина, потому что один ручной хотфикс на сервере ломает гарантию, пока его не перенесут обратно в код.
Глоссарий
- Гипервизор
- Программное обеспечение, например KVM, которое запускает много виртуальных машин на одном физическом хосте и делит между ними его CPU, память и диски.
- vCPU
- Виртуальный процессор, выданный VM; обычно один аппаратный поток физического ядра, возможно общий с другими гостями.
- Steal time
- Время, когда VM хотела работать, но гипервизор отдал CPU другому гостю. Высокий steal означает шумных соседей.
- IOPS
- Input/output operations per second: сколько мелких операций чтения и записи обрабатывает диск; в облаке часто ограничено для каждого тома.
- cloud-init
- Стандартный инструмент первой загрузки в облачных образах, применяющий user-data: пользователей, ключи, пакеты и команды.
- Плавающий IP
- Публичный IP, который можно переносить между серверами в регионе, что позволяет делать failover без изменения DNS.
- RPO
- Recovery point objective: максимальный объём данных, измеряемый во времени, потерю которого вы готовы допустить при инциденте.
- RTO
- Recovery time objective: максимальное время, которое сервис может быть недоступен, прежде чем его нужно восстановить.
- Egress
- Исходящая передача данных из сети провайдера; в гиперскейлерах часто тарифицируется за гигабайт.
Что изучить дальше
Есть идея продукта?Давайте создадим его.
Расскажите о своей идее, продукте или команде. Обычно отвечаю в течение одного рабочего дня.