Против всего защититься нереально. Однако можно предпринять комплекс мер для повышения устойчивости системы. А это, в свою очередь, зависит и от квалификации инженеров, времени и денег.
Как сделать сервер отказоустойчивым?
Если только 1 сервер, то это единая точка отказа. Т.е. упал сервер приложения - упал сайт. Упал сервер БД - упал сайт. И даже такая, казалось бы, незначительная часть потери фунциональности как отвалившиеся assets (CSS, JS, изображения) - сайтом становится невозможно пользоваться - обычно приводят к отплыву 99.99% пользователей сайта.
Нужно добиваться уменьшения количества точек отказа в системе. То есть должна быть соответствующая инфраструктура (допустим, на основе k8s). К примеру, отказал некоторый компонент (узел), а на его место моментально поднимается его замена. Не откликается одна реплика БД - переключается на другую.
В случае возникновения внезапной нагрузки обычно в автоматическом режиме система сама не справится и, как правило, нужны инженеры, которые будут латать дыры с течью системы в реальном времени.
Защита от DoS - отдельная непростая тема.
Добавлено
И забыл упомянуть такую важную вещь, как мониторинг всевозможных параметров. Со стороны это может условно выглядеть как Центр Управления Полетов (куча мониторов с графиками). Без телеметрии никуда не деться.