К нам обратился клиент из ресторана доставки в Кургане. Ресторан получает большую часть заказов со своего сайта. И если он недоступен, бизнес теряет заказы. Владелец не погладит за это по голове системного администратора.
Шансы, что что-то пойдет не так, были высоки. IT-инфраструктура была устроена как в большинстве подобных проектов. Все яйца хранились в одной корзине:
И база данных и веб-сервер, работали на одном дедике. Если он выйдет из строя, люди не смогут заказать себе роллы, останутся голодными и злыми.
Клиент попросил нас сделать так, чтобы сайт всегда был доступен посетителям — создать отказоустойчивую систему.
Отказоустойчивость не означает, что ничего не падает. Отказоустойчивость — это когда все работает даже при выходе из строя нескольких компонентов системы.
Как зарезервировали сайт
Мы перенесли сайт в виртуальный дата-центр и создали для него новую инфраструктуру:
Что сделали
— Разделили базу данных и веб-сервер. Изолированными модулями легче управлять. Каждый сервер выполняет одну простую функцию и не забирает вычислительные мощности у соседа. Такая микросервисная архитектура экономит ресурсы.
— Создали по одной копии сервера для базы данных и для сайта.
— Между базами данных настроили автоматическое реплицирование.
— Между веб-серверами синхронизацию делать не стали по просьбе клиента. Он захотел оставить одну машину для экспериментов с кодом.
— Всё это управляется баланасировщиком нагрузки. Он следит за доступностью машин.
— Сервис мониторинга информирует системных администраторов об инцидентах.
Как это работает
Обычно все запросы идут через балансировщик нагрузки. Основной веб-сервер общается с помощью него с базой данных:
Если один из компонентов отказывает, балансировщик направляет трафик на резервные серверы:
Где это работает
Проект был создан в виртуальном дата-центре. Это даёт ёще несколько плюшек:
— В любой момент клиент может изменить инфраструктуру: создать новые виртуальные машины, настроить сети между ними, добавить дисковые хранилища.
— Физическое элементы сети трижды зарезервированы.
— Используется система распределенного хранения Ceph. Это немного снижает скорость чтения и записи с дисков, но гарантирует сохранность данных — Сeph распределяет их по сетевому хранилищу в трех экземплярах.
Облако работает по принципу «инфраструктура как услуга» (IaaS)— на ней можно создать масштабируемую серверную архитектуру любой сложности.
Ресторан доставки получил отказоустойчивую архитектуру: при выходе из строя одного из серверов сайт все равно будет принимать заказы клиентов. Такая система не боится высоких нагрузок и роста.
А у вас есть план «Б» на случай отказа сервера? Пишите в комментариях!