Номер телефона

Последнее обновление:

САМО-DDOS на elibrary.ru

В русском языке известны слова, начинающиеся на буквы «само». Например, самоподвижничество, самоотречение, самодельный. Самопальный (хотя, это уже жаргонизм). Ну, и т.д. А вот слова САМО-DDOS пока еще не было. Но, автору этой статьи пришлось его придумать, ибо… ну, а как еще назвать ситуацию, когда САМИ РАЗРАБОТЧИКИ сайта организуют на него… DDOS-атаку? Впрочем, судите сами.

Открываем сайт научной электронной библиотеки elibrary.ru

Ну, и пытаемся найти научные статьи, например, имеющие слова «экономика». Вставляем их в (увы, небольшое) окно поиска справа на странице библиотеки – там, где поиск. Затем наживаем кнопку «Поиск» и ждем-с…

Дело в том, что мы, по роду своей деятельности (научная помощь, консалтинг) нередко пользуемся этой библиотекой. Поэтому разного рода неисправности на ней часто замечаются. Кстати, иногда ее сайт работает ОЧЕНЬ медленно, отвечает на запрос в течение нескольких минут.

Пример страницы библиотеки elibrary.ru с ответом на поисковый запрос

Итак, вот что выдает поисковая система библиотеки.

Начинаем листать страницу вниз и убеждаемся, что при пролистывании происходит какая-то задержка. Пусть и небольшая, но – задержка.

Хм… к чему бы это? Ведь страница содержит всего-то 100 (сто) результатов запроса. Ну, плюс некоторые ссылки, картинки и текст. Это – довольно немного и потому перелистываться страница должны бы почти мгновенно. В чем же дело?

А вот в чем. Вот скриншот, снятый СРАЗУ после перелистывания:


Скриншот с сайта elibrary.ru, снятый сразу после прокрутки страницы

А вот – через пару секунд:


Скриншот с сайта elibrary.ru, снятый через какое-то время после прокрутки страницы

Как видим, скриншоты почти идентичные. За исключением того, что на последнем скриншоте появились так называемые иконки (значки) красного и зеленого цвета слева от некоторых ссылок на научные публикации.

Зеленый означает: публикацию можно скачать с сайта elibrary, тогда как красный – то, что скачать публикацию нельзя (т.е. доступ к ее тексту закрыт). Но, не суть, речь сейчас не об этом.

Так вот, судя по всему, эти самые иконки (точнее, изображения для них) скачиваются с сайта elibrary… динамически. Т.е. в процессе прокрутки страницы.

Ммм… неужели? НЕУЖЕЛИ разработчики сайта библиотеки решили сделать динамическую подкачку иконок по мере прокрутки страницы? Не верится.

Придется проверить, настолько очевидная, но странная (для XXI века) информация

Открываем в браузере Инспектор DOM и стилей. Например, в браузере Firefox это можно сделать, нажав правую кнопку мыши, затем исследовать элемент. Откроется окно инспектора. И вот что там видим:


Исходный код страницы сайта elibrary.ru

У, да тут и атрибуты “valign”, “align”, а то и давно забытый тег <font>. Вместе с тегом <b>. Которые уже давно deprecated (нежелательны к использованию, вместо них рекомендуется использовать соответствующие свойства атрибута style). М-да… Как будто верстка делалась в 80-х годах прошлого столетия. Но, впрочем, это – ерунда. Главное – работает. А уж устарело или нет – это второй вопрос.

Ладно, переходим во вкладку «Сеть». Это чтобы отлавливать запросы, идущие со страницы на сервер библиотеки elibrary. Пока страницу не прокручиваем, ничего там не делаем, запросов нет.

Что же, начнем прокручивать страницу вниз. И вот оно:


Запросы AJAX, генерируемые страницей сайта elibrary.ru с результатами поискового запроса

Итак, страница прокручена всего-то до 13-го источника (ссылки на очередную публикацию). А страница сделала уже 5 (пять) AJAX-запросов на сервер. И все для того, чтобы получить оттуда ответ вида

<a href="javascript:load_article(26285752)"><img src="/images/download_green.png" width=16 vspace=3 border=0 title="Доступ к полному тексту открыт"></a>

Прокрутим страницу еще – и число AJAX-запросов синхронно увеличивается. Хм… Итак, если страницу потихоньку прокрутить вниз до конца, она сделает 93(!) запроса. Ответы на которые, еще раз, будут иметь примерно такой же вид. Причем, объем ответов (в килобайтах) очень невелик и для каждого из них составляет 0…0,18 КБ.

Да ведь это не что иное, как DDOS-атака!...

Да, она самая и есть. Это когда на сервер отправляются частые-частые запросы небольшого объема и сервер через какое-то время, образно говоря, «захлебывается» в них, будучи уже неспособным ответить на каждый из них. Т.е. происходит отказ сервера по причине его перегрузки.

Ведь, в самом деле, представим себе, что не только автор этой статьи решил что-то поискать на elibrary. Но и сотня других примерно таких же авторов (студентов или исследователей). Получается, что если каждый из них в течение короткого времени (несколько секунд) создаст 90 с лишним запросов на сервер… и это только с ОДНОЙ страницы – то сколько будет всего запросов? Правильно, 900 с лишним.  

Предположим, что ни одного из них не удовлетворили результаты поиска на первой странице и каждый из них решил посмотреть результаты на второй, третьей страницах… В итоге – в течение пары минут на сервер (бедолагу) электронной библиотеки elibrary обрушится, реально, шквал запросов. На которые этот сервер, как правило, будет отвечать примерно одним и тем же ответом. Немудрено, если сервер будет часть «падать».

Собственно, вот в чем одна из (но, неединственная) причин того, что поиск на elibrary работает медленно. Правильно, ведь если серверу приходится отвечать на множество запросов практически единообразными ответами – так оно и будет. Да плюс к тому, ведь еще нужно найти, собственно, результаты поиска и выдать их клиенту (например, браузеру).

Любопытно, что возможных ответов сервера elibrary.ru всего-навсего 5 (пять). Их виды можно посмотреть на первом скриншоте справа. Да, в самом деле, разница только в цвете рисунка иконки (красный, зеленый, синий, желтый) или в его отсутствии (т.е. цвет прозрачный). Сами же иконки – совершенно одинаковы и достаточно примитивны. И уж никак не являются произведениями художества или т.п.

Итак, только для того, чтобы обозначить ссылку в списке результатов (доступна ли на для скачивания или нет и т.д.), разработчики сайта elibrary сделали так, что почти для КАЖДОЙ ссылки на странице делается свой индивидуальный запрос. Результатом которого, повторимся, является лишь разница в цвете иконки.

Дурдом? Несомненно. Притом вспомним, что живем уж, вообще-то, в XXI веке. М-да… А, может, тут что-то нечисто? Ведь не могут же быть разработчики сайта elibrary, в самом деле, столь недалекими. А не специально ли они так сделали?... Может, это они так умышленно сделали, чтобы на сервер elibrary было побольше нагрузки?

Зачем же так сделали разработчики ПО на elibrary.ru?

Строго говоря, вопрос совершенно риторический и НЕ ТРЕБУЕТ ответа. По причине полной бесполезности всех дальнейших обсуждений. Ибо вспомним, что это – РОССИЙСКАЯ государственная электронная библиотека. После этого (после внимательного прочтения слова, написанного заглавными буквами) все становится ясным и понятным.

В стране, которая последние лет 10 озабочена… разного рода законами о цитировании, публикациями неких блогеров (да-да, вплоть до посадок их в тюрьмы – и под это даже специальные федеральные законы пишутся)… страна, которая то штрафует (и смешно, и больно одновременно) корпорацию Google, то грозит Twitter, то делает выпады даже в сторону (ой, господи боже мой) браузера Opera, то еще что… такая страна, РАЗУМЕЕТСЯ, по определению, неспособна да и не пожелает делать что-то качественно, как минимум, в сфере компьютерных технологий.

Да, есть некоторые частные энтузиасты, типа Яндекса, к примеру. Но, вспомним, что Яндекс, вообще-то, уже давно не является, строго говоря, российским… Впрочем, об этом – чуть позже.

Посему – вот вам электронная библиотека. Хоть как-то там работает, информацию можно найти? Ну, так и все, сидите мол там у себя перед своими компьютерами-планшетами, господа студенты-ученые-исследователи и большего не ждите. Говорите, мол, спасибо, что ХОТЬ ЭТО (пока еще!) есть.

Поэтому что-то тут обсуждать и предлагать – ну, это даже не то, что толочь воду в ступе. Ибо можно допредлагаться и до того, что еще и в тюрьму за это посадят (например, за некий «экстремизм»; знайте, мол, «свое место»; не Вам, мол, бюджеты пилить – и т.д.). Посему, лично библиотеке elibrary (равно как и Российской Федерации в целом) мы предлагать, конечно же, НИЧЕГО не будем. Кто там что пилит или не пилит – нам об этом ничего неизвестно.

А вот всем остальным - тем, кто интересуется программированием и кто хотел бы работать более качественно и эффективно, кто хотел бы, чтобы аналогичный сайт работал бы с гораздо меньшей нагрузкой – вот для них (и только для них) и написано то, что приведено ниже.

И что же?

Еще раз: картинки иконок – практически одинаковые, различаются только цветом. Стало быть, совсем нет необходимости гонять в каждом запросе эти сотни байтов. Вообще-то, достаточно было бы просто передать в AJAX-ответе лишь ЦВЕТ. И все. А уж применить его к конкретной публикации – это легко можно было бы сделать средствами javascript.

Но, согласитесь, все-таки – делать практически на каждую публикацию индивидуальный AJAX-запрос – это чересчур. Ведь пользователь библиотеки скорее всего не удовлетворится просмотром списка первых ссылок на публикации, вероятно, он пролистнет страницу ниже, еще ниже. Стало быть, иконки должны бы быть у ссылок постоянно. Они, несомненно, должны бы появляться при изначальной загрузке страницы с результатами поиска.

Кстати, еще несколько лет именно так и было на elibrary. Но, видимо, потому туда в разработчики прорвались – то ли вредители, то ли халтурщики, то ли… (но, не будем о том). Которые замедлили взаимодействие пользователей с сайтом библиотеки. И, попутно, создали дополнительную (совершенно ненужную) нагрузку на сервер библиотеки.

А как можно было бы сделать все лучше?

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

1. Заранее проиндескировать базу данных публикаций. На дату 21 июня 2021 г. их там, судя по информации на странице библиотеки, 37073146. Всего-то 37 миллионов. Не столь много.

Проиндексировать – с тем, чтобы заранее, еще до отправки результатов поисковых запросов, как-то помечать ссылки на публикации. Например, задать ссылкам соответствующие классы (вида red, green, blue и т.д.). Т.е. перед тем, как выдавать результаты поискового запроса, всего-навсего задать соответствующего класса для блока, в котором будет содержаться иконка – для каждой из ссылок на публикации.

2. В блок, содержащий иконку, добавить тег «круглой формы». Например, задав для него радиусы закругления границ, равные половине его высоты (ширины).

3. Соответствующий класс, примененный к этому тегу, будет окрашивать его в тот или иной цвет (или делать бесцветным).

4. Добавить еще один тег внутрь этого блока. Это тег <img … />, который будет содержать в себе стрелку с вертикальной чертой (белого цвета) и прозрачным фоном. Можно, впрочем, это реализовать и через псевдоэлемент. Или даже средствами CSS (хотя, если через CSS, то придется немного повозиться).

Картинку, содержащую белого цвета стрелку с вертикальной чертой потребуется посылать с сервера всего 1 (один) раз. Затем она будет кэширована в браузере клиента и браузер при открытии следующих страниц библиотеки будет брать ее уже из кэша, т.е.из локального хранилища, без необходимости интернет-трафика.

Если, конечно, в браузере не будет отключено кэширование.

Поэтому при просмотре последующих страниц с elibrary надобности в скачивании с сервера этой картинки уже не будет.

5. Прописать в соответствующем файле стилей (с расширением .css) стили для указанных классов.

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

Вот, собственно, упрощенный практический пример

Чтобы не быть голословными, приведем пример. Благо, сделать его – недолго. Раз уж на elibrary принята табличная верстка, то быть тому – сделаем пример тоже в табличной верстке. Сделаем на чистом CSS, без тега <img… />, так как иконка – достаточно простая.

<style type="text/css">

.red div{ background-color: red; }

.green div{ background-color: green; }

.blue div{ background-color: blue; }

.transparent {background-color: transparent}


.links{ font-size: 16px; background-color: white }

 .links  td:nth-of-type(odd) > div{ width: 20px; height: 20px; border-radius: 10px; position: relative;  display: block; text-align: center}

 .links td:nth-of-type(even)  {min-width: 200px}

 .links  td:nth-of-type(odd) > div > div{

       display: inline-block;

       position: absolute;

       margin: auto;

       padding: 0;

       left: 0;

       bottom: 0;

       right: 0;

   }

 .links  td:nth-of-type(odd) > div > div:nth-of-type(1) {

     height: 0; border-bottom: 2px solid white;

     top: 12px;

     width: 60%;

 }

 .links  td:nth-of-type(odd) > div > div:nth-of-type(2){

       border: solid white; border-width: 0 0 3px 3px;

       height: 30%;

       top: -2px;

       width: 30%;

       transform: rotate(-45deg);

   }

 .links  td:nth-of-type(odd) > div > div:nth-of-type(3){

       height: 0; border-bottom: 2px solid white;

       top: -5px;

       width: 60%;

       transform: rotate(90deg)

   }

</style>


<table class="links">

   <tr>

       <td class="red"><div><div></div><div></div><div></div></div></td><td>Ссылка 1</td>

   </tr>

   <tr>

       <td class="green"><div><div></div><div></div><div></div></div></td><td>Ссылка 2</td>

   </tr>

   <tr>

       <td class="blue"><div><div></div><div></div><div></div></div></td><td>Ссылка 3</td>

   </tr>

   <tr>

       <td class="transparent"><div><div></div><div></div><div></div></div></td><td>Ссылка 4</td>

   </tr>

</table>

Код, надо сказать, несколько громоздкий: для оформления (т.е. рисования иконки средствами CSS) используются дополнительные теги, а это ой как не любят современные «продвинутые вебмастера». Но. зато его плюсы в том, что рисунок с сервера не нужно скачивать вообще.

Кстати, дополнительные теги вполне можно создать средствами javascript. Это позволит дополнительно сэкономить интернет-трафик. Мы здесь этим заниматься не будем, ибо не ставим цель полной оптимизации. Здесь в статье мы лишь обращаем внимание на явный ляп в работе научной(!) электронной библиотеки, не более того. Ибо, повторимся, в России что-то там предлагать все равно бесполезно, уж на государственном-то уровне точно никто слушать не станет. Здесь если кто и способен прислушаться, так, разве что, некоторые частные компании, типа того же Яндекса.

Кстати, судя по живым откликам служб поддержки разных сервисов Яндекса, судя по их форумам для вебмастеров – там нередко и в самом деле прислушиваются.

Примечание: это НЕ реклама Яндексу.

Вот что получается в результате работы этого кода:

Таким образом, та самая почти сотня запросов при открытии одной страницы библиотеки elibrary оказывается ненужной.

Так зачем же, все-таки, была испорчена работа сайта библиотеки?

С какой целью сей САМО-DDOS? Сложно сказать. Лично нам видится одна (типичная ныне, судя по российской действительности) причина. Можем ошибаться, но таки выскажем ее.

На наш взгляд, были некие деньги, выделенные на развитие сайта. Надо было их «освоить». А думать-то не хочется, реально РАЗВИВАТЬ сайт – не хочется. Ну, вот и освоили. А попутно – еще и создали видимость необходимости закупки более мощных серверов. Да, запросов-то, мол, теперь очень много к ним. Смотрите, мол, сколько запросов делает КАЖДАЯ открываемая пользователем страница.

И опять немного риторически…

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


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



Подписаться на комментарии на этой странице

Мы можем выполнить

Другие услуги
Интересная и полезная
информация
НАПИШИТЕ НАМ
Яндекс.Метрика
Номер телефона
© Copyright Все права защищены 2013-2024 Научный консалтинг