Почему на сайте, что-то может «само» сломаться?

Author Автор: Роман Чернышов    Опубликовано: 16 марта 2023

Сломали сайтДоброго времени друзья! Давно назревал пост на тему: «Почему на сайте, что-то может взять и сломаться?» — Вроде как само собой, хотя такого вроде как быть не должно, правда? В этой статье, я хочу рассмотреть ряд неявных причин, по которым сайт, начинает работать иначе, некорректно, или вообще перестает работать — отображая белый экран или текст с ошибкой. Важно понимать, что программное обеспечение(сайт), как ни странно, это «живая и подвижная среда», где постоянно что-то меняется, и принцип: «Один раз настроил и забыл», осуществим лишь только на словах или в наших фантазиях. На самом деле, за любой программой(и её окружающей средой), чтобы она долгое время работала, так как было задумано — приходиться присматривать. Это конечно очевидно любому системному администратору, и большинству опытных программистов, но не всегда очевидно простому пользователю(к слову, коим является подавляющие большинство моих клиентов). Далее я расскажу про причины, по которым отлаженный и хорошо работающий сайт, может начать работать с ошибками(маленькими или большими). При этом я умышленно не буду затрагивать тему его возможного взлома, вирусов, хакерских атак и т.д., остановимся лишь на вполне легитимных событиях, которые приводят к печальному итогу. Поехали!

Содержание

Изменилось программное обеспечение на хостинге

Для того, чтобы ваш сайт работал, на хостинге где он размещается, есть множество предустановленного программного обеспечения, которое отвечает за: интерпретацию скриптов, написанных на PHP, Python или NodeJS, обработку HTTP запросов(Apache, nGinx), работу базы данных, выполнение сценариев написанных на языке Bash, за фильтрацию трафика(файерволы, сетевой монитор), и вообще за общую работу всего комплекса ПО — операционная система(Linux, Windows или прочая). Список можно продолжать долго, я лишь озвучил основное. Всё это, влияет на работу вашего сайта, обновление(на более новую версию, или даже на эту же самую) любой из программ на хостинге(сервере), может привести к изменению функционирования вашего сайта. Например база данных может начать работать медленнее, PHP скрипт выдавать ошибку, или параметры в URL страницы обрабатываться не корректно. От части, это может быть связано с тем, что при обновлении ПО изменяются и его настройки. Обновление может происходить как в автоматическом режиме, так и в ручном режиме силами системного администратора. Обновления могут быть плановыми, но могут быть и оперативными(срочными), нарушающими нормальный распорядок работы всех процессов — например в случае обнаружения уязвимости в прежней версии ПО, обновления производятся незамедлительно, часто при этом совместимость с другим ПО ставиться на второе место.

Изменилась окружающая среда на хостинге

Что такое окружающая среда на хостинге? В контексте вашего сайта, это всё, что описано пунктом выше, включая все возможные настройки, а также параметры и конфигурация оборудования самого сервера, вплоть до оборудования за его пределами(маршрутизаторы, роутеры, сетевые экраны, DNS сервера, почтовые сервера и т.д.). Например на жестком диске закончилось свободное пространство, т.е. параметры и условия с в которых работает сайт изменились, от этого изменилась и его работа. Что вполне может привести к ошибке, или даже к потере данных, например из-за невозможности сохранить в данные БД. Такие изменения происходят как естественным путем(как в случае с заполнением жесткого диска) так и путем целевого изменения конфигурации любого из перечисленных узлов системным администратором. Также они могут происходить и автоматически. Для примера вот небольшой список что может измениться: Заменили жесткий диск с HDD на SSD, заменили CPU, заменили сетевую карту, разместили на одном сервере с вами ресурсоемкий проект, обновили старую версию FTP-сервера на новую, перенастроили сетевые маршруты, изменили пути к служебным программам, и т.д. Список можно продолжать бесконечно. Часто бывает, что вообще сам сайт просто переносят на другой сервер, с совершенно другим оборудованием и ПО (на моей практике такое бывало не раз).

Изменились настройки хостинга

К настройкам хостинга относятся также настройки любого из вышеперечисленных ПО. Настройки могут меняться как вручную, так и автоматически, например при изменении всего лишь одного параметра в настройках nGinx, через панель управления ISP Manager, в конфигурационном файле nGinx также будет заменен ряд других параметров, на те, что заданы по умолчанию в ISP Manager для nGinx(автоматическая замена), а в случае если ваш сайт работал с персональными настройками ранее внесенными системным администратором, это может привести к неправильной работе сайта. И такую причинно-следственную связь мало того, что сложно установить, еще сложнее доказать(ведь в системных логах о том, какие настройки были изменены, информации нет). Но факт остается фактом — настройки любого хостинга(сервера), постоянно в «движении», иногда это совсем незначительно, а иногда на столько существенно, что сайт может перестать работать.

Изменилось оборудование на хостинге

По сути выше об это уже сказал, но еще раз отдельно замечу, что оборудование также постоянно заменяется, и не всегда HDD меняют на SSD, легко может произойти и обратная замена, от чего скорость работы БД, например, замедлиться. Или, бывает и такое, что сервер переводят с LAN 1000 mbit, на LAN 100 mbit, просто в рамках оптимизации и сокращения расходов, или в рамках завершения промо-компании(проводимой хостингом для привлечения клиентов). Нередка замена CPU, например я сталкивался с заменой i7 6700 на Xeon e3-1270 v5(в рамках все той же оптимизации, экономии), к чему это может привести? Например при снижении тактовой частоты процессора, но при увеличении его общего количества ядер, в однопоточных задачах будет заметно существенное снижение производительности. А если допустим у вас VDS с ограниченным числом CPU ядер, то замена CPU пусть и сохранить ваше гарантированное число ядер, но просто приведет к снижению тактовой частоты по каждому ядру. Например, сайт может падать из-за превышения лимита в 30 секунд на выполнения скрипта, установленного в настройках PHP, хотя на более быстром CPU скрипт всегда укалывался в это временное ограничение.

Изменилась версия веб-сервера

Apache, nGinx — Программное обеспечение отвечающее за обработку входящих запросов по HTTP, то есть все запросы к вашему сайту по URL, обрабатываются как правило этими двумя службами. Они отвечают за маршрутизацию, за передачу параметров из URL, за передачу POST данных, а также за сжатие и кеширование отдаваемых данных пользователю, за безопасность доступа к определенным ресурсам, за работу SSL сертификата установленного на сайте, и много чего еще. Обновление версии веб-сервера, легко может нарушить любой из вышеперечисленных пунктов, также обновление может изменить и саму конфигурацию, это может произойти и в автоматическом режиме (например ряд панелей, таких как ISP Manager, имеют такую настройку, позволяющую автоматически обновлять ПО и конфигурацию, по CRON, при появлении их новых версий).

Изменилась версия PHP

Этот пункт, пожалуй самый частый виновник всевозможных ошибок. Часто администратор хостинга, даже без уведомления, просто меняет старую версию PHP на новую. Была версия 7.3.3, пусть будет 8.1, чего уж там (думает сисадмин). Разумеется это может привести к некорректной работе функций PHP, например по причине их признания устаревшими(Deprecated) в новой версии PHP. Пример такой ошибки — при переходе на более новую версию PHP, скрипт стал выдавать предупреждение о том, что какая-то используемая функция устарела, при этом сама функция по прежнему работает, просто рекомендуется использовать другую, это даже не ошибка, а всего лишь предупреждение, но текст предупреждения выводиться перед отдачей браузеру HTTP заголовков, из-за чего заголовки не считываются, и в браузере перестает срабатывать переадресация на другой URL, сайт функционирует не правильно.

Изменились параметры внешних сервисов (API)

Большинство сайтов, для того чтобы предоставить своим пользователям удобный функционал, взаимодействуют со сторонними сервисами, по средствам API(описание способов взаимодействия одной компьютерной программы с другими). Например при заказе в интернет-магазине(ИМ) и выборе способа доставки, ИМ может обращаться по API к компании СДЭК или Почте России, для получения автоматического расчета стоимости посылки. Если что-то изменится в протоколах взаимодействия, в API, то с высокой долей вероятности функционал на сайте перестанет корректно работать. Такое случается очень часто. Даже у крупных компаний. Практически все API с которыми мне приходилось работать(а это десятки), имеют такую особенность, как микро-обновления(т.е. они об этом даже могут не уведомить, ищите сами) без обратной совместимости(будет большая радость если разработчик поспешит описать изменения в документации). Например недовно API Сбера, перешло на SSL сертификат от Минцифры, а хостинг Бегет их не поддерживал по умолчанию, и все сервисы(эквайринг, кредитование), подключенные к сайту, перестали работать.

Изменилась версия JavaScript

И вот если с примером PHP, еще все как-то более-менее понятно, то с JavaScript(JS) вообще темный лес. Оказывается большинство пользователей даже если и знают о существовании JS, то о его версиях, и стандартах даже не догадываются. А между тем, язык развивается, постоянно(чуть ли не каждый год) выходят новые стандарты JS(ECMAScript). Это может приводить к тому, что ранее корректно работающие JS скрипты, могут начать работать с ошибкой или вообще не работать. Например ранее в JS коде часто можно было встретить оператор with, но теперь использовать оператор with в ES6+ невозможно, то же касается и ES5 с включенным строгим режимом. Запросто может быть и обратный эффект, когда скрипт написан с использованием новых фишек JS, которые не будут работать с браузерах не успевших перейти на новую версию JS.

Изменились стандарты HTML

Вы удивитесь но HTML не стоит на месте, даже в рамках пятой версии, уже вышел HTML 5.3 (я говорю уже, хотя на самом деле прошло несколько лет, как быстро все развивается). И хорошо работающий сайт, шаблон которого был написан с использованием например блочной верстки, которому были заданы определенные стили, и который работал со скриптами JS, сегодня может начать отображаться иначе. Какой-то блок может съехать. Таблица может построиться с другими параметрами ширины колонок, например. Или вообще страница может уходить в полный крах (у меня такое недавно было на iPhone в браузере Safari, что-то поменялось и рендеринг лонгрида стал зависать, причину нашел — дело было в каскадно-вложенных друг в друга таблицах, хотя раньше все работало корректно). HTML не только развивается, но и исправляется, ошибки в языке которые ранее позволяли отображаться некоторым блокам одним образом, сегодня также могут быть исправлены и из-за этого ваша верстка поплывет. И это нормально. Надо поправлять.

Изменились стандарты CSS

Верстальщики не дадут соврать, за последние годы CSS превратился из скудного набора правил описывающих отображение того или иного блока, в полноценный язык, в нем появились условия, методы вычисления величин, расширились возможности выбора элементов относительно других элементов, возможности поиска элементов для выборки по параметрам и многое другое. Разумеется, все нововведения, это потенциальная угроза стилям написанных по старым стандартам, что-то может начать работать не так, например наложение слоев(z-index, в фиксированных блоках), или тоже выравнивание(float) с переносом на новую строку. Буквально смещение блока при рендеринге страницы на один пиксель, может ломать отображение всей страницы. Время летит быстро. Сайт созданный в 2017 году, и протестированный во всех версиях браузеров, может иначе отображаться в 2023 году. И изменения могут быть не постепенными, а просто в один день, при очередном обновлении версии CSS.

Изменилась версия MySQL

Сервер баз данных, а также язык запросов MySQL, не стоят на месте, меняются его версии, меняются языковые конструкции. При обновлении ПО, также может и обновиться его конфигурация. Это может произойти как по инициативе системного администратора, так и автоматически. Вас, как владельца сайта, об этом могут и не уведомить. Нередки случаи перехода с программного обеспечения MySQL от компании Oracle на MariaDB, или в обратном направлении. Конечно же такие обновления, изменения, переходы влияют на работу сайта.

Изменилась версия CMS

Большинство сайтов работает на базе готовых решений, таких как CMS(система управления содержимым), например WordPress, Joomla, Bitrix. Все эти системы также подвержены устареванию, изменениям и обновлениям. Все они поддерживают в том числе автоматические обновления. Более того, все CMS включают возможности расширения функционала плагинами, которые как правило также обновляются и изменяются. Всё это может происходить в автоматическом режиме, даже если вы в настройках системы, явно отключили такую функцию. Например разработчики плагинов, запросто могут игнорировать глобальные настройки CMS, которые регламентируют порядок обновления скриптов, файлов, плагинов и структуры БД. Такое положение приводит к тому, что отлаженная, настроенная CMS, может начать работать некорректно. Проблемы связанные именно с этим, также случаются крайне часто. Их сложно диагностировать, сложно исправлять, и сложно устанавливать причинно-следственную связь, ведь ни в каких логах изменения не значатся.

Изменились версии браузеров

На ряду с развитием HTML/CSS/JS, развиваются и браузеры, новые версии выходят чуть ли не каждую неделю. Браузер Chrome вообще перестал заострять внимание на своей версии, т.к. выкатывает одну за другой. Исправляются ошибки, дорабатывается функционал, внедряются новые возможности. А как в это время отображается сайт в браузерах? Можно подумать что эпоха Internet Explorer 6, далеко позади, и больше проблем с отображением страниц, из-за браузера быть не может, но это глубокое заблуждение. Например недавно я столкнулся с проблемой зависания страницы, в браузере Chrome, из-за того, что блоку документа body, на достаточно увесистой странице, было задано правило box-sizing: inherit; Хотя раньше ни каких проблем с этим не было, но общий контекст(вся функциональность страницы в целом) в купе с обновлением браузера привели к проблеме — страница стала притормаживать при скроллинге.

Изменилось устройство с помощью которого осуществляется работа с сайтом

Вроде все ПО на сайте тоже самое, ничего не менялось, но сайт отображается как-то иначе? Это может легко являться причиной того, что вы просто просматриваете его с другого устройства. Ведь оно(другое устройство) тоже имеет свой набор предустановленного ПО(кроме самого браузера), свои настройки, что несомненно может влиять и на работу сайта, на вашем устройстве. Например может некорректно проигрывается видео, из-за устаревших кодеков, не отображаться изображения в некоторых форматах, или браузер может ругаться на SSL сертификат установленный на сайте, из-за того, что на вашем устройстве не установлены некоторые корневые сертификаты(особенно актуально с новыми сертификатами от Минцифры).

Изменения на DNS/CDN сервере

Многие сайты в качестве DNS(технология, которая позволяет браузеру найти запрошенный пользователем сайт по его имени) сервера используют например Cloudflare. А что будет если на его стороне произойдут какие-то изменения? Cloudflare это не только DNS это еще и CDN(сеть доставки контента). Если например раньше при написании JS кода, можно было пренебрегать точкой запятой в конце строки, то сейчас при использовании CDN это крайне не рекомендуется. Всего скорее JS скрипт продолжит работу, но риск того, что что-то пойдет не так возрастает. Например, если передача JS файлов с сайта начнет проходить через алгоритмы минификации CDN Cloudflare, то JS код имеющий строки завершенный без точки с запятой, при объединении, приведут к ошибкам.

Заключение

Из всего выше сказанного, стоит сделать главный вывод, что за всем нужно следить, поддерживать актуальность как системного окружения сайта, так и самого программного обеспечения используемого на сайте. Любому программному обеспечению, сайту — нужна поддержка! И при обнаружении ошибок, которых ранее не было, рассматривать проблему в более широких рамках. Это также поможет исправить ошибку более правильным образом (как говориться: — «без костылей»), так что-бы функционал работал стабильно как можно дольше, принося пользователям пользу, а вам прибыль.

Друзья, если вам нужна помощь в исправлении ошибок на вашем сайте, обращайтесь, буду рад помочь!

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Оформить предзаказ
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка