ГлавнаяДвижок → Что такое GlassCubeServer?
Создано: 13.12.2009 1:26:30 · Исправлено: 11.08.2013 1:32:59 · Прочтений: 3367

В этой статье я использую термин «движок». Что же это такое? Движок - некая совокупность скриптов, реализующих функционал для создания динамического сайта. При помощи этих скриптов создаются статьи, шаблоны дизайна и прочее. Результат работы скриптов или движка мы видим в браузере при посещении сайта. Самый различный функционал современных сайтов обеспечивается его движком. Наверняка Вы слышали такие названия как Drupal, Wordpress, Joomla, vBulletin. Это лишь некоторые примеры движков, с помощью которых можно создать CMS, блог или форум не имея никаких специальных знаний в программировании или администрировании. Этот блог тоже обслуживается движком, но имеющим кардинальные, принципиальные отличия от других движков, которые упоминались выше. В этой статье я немного расскажу о проблематике использования популярных движков и объясню как эти проблемы решаются при помощи GlassCubeServer.

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

Многие годы я занимаюсь созданием и поддержкой разных сайтов. На моих глазах появлялись, расцветали и угасали разные проекты, предлагающие интересные CMS, форумы и просто небольшие скрипты для создания, например, гостевых книг. Большинство из них, а в последние годы наверно и все, объединяло то, что написаны они на языке PHP - Personal Home Page Tools - инструментах для создания персональных страниц. Сейчас принято расшифровывать PHP как Hypertext Preprocessor, считается, что Personal Home Page Tools - устаревшая расшифровка. Но эта расшифровка наиболее точно описывает суть языка, который был создан по словам его разработчика Расмуса Лердорфа (Rasmus Lerdorf) «буквально за день, в перерывах между деловыми встречами».

Расмус Лердорф

Что же такое Расмус предложил миру, что покорило сотни тысяч разработчиков? Он смог сформулировать и запрограммировать механизм, позволяющий разделить оформление сайта и его содержимое. Если раньше каждая html страница была полностью автономным, законченным объектом, содержала в себе и код для вывода графики, и сам текст статьи, то теперь появилась возможность настроить один раз шаблон оформления сайта, а в дальнейшем только писать тексты самих статей. При помощи PHP можно взять текст, вставить его в определённое место в шаблоне и отправить посетителю. Расмус оказался в нужное время в нужном месте. Предположим, что на существующем сайте из нескольких тысяч страниц нужно добавить один пункт в меню. До появления PHP администратор сайта был вынужден отредактировать каждую (!) страницу и добавить строчку меню. Само собой, для таких операций были созданы специальные программы, позволявшее автоматизировать эту операцию. Но, не смотря на наличие таких инструментов, по мере роста сайта его поддержка становилась всё более и более сложной задачей. Разумеется, были способы, позволявшие снять остроту этой проблемы, например, SSI, но, тем не менее, проблема существовала и все, кто поддерживал более-менее большой сайт, наверняка сталкивались с необходимостью исправить все станицы сайта, а затем закачать их по FTP на сервер у хостера. Если ещё вспомнить о скоростях подключения к интернету через диалап в то время, то можно оценить трудоёмкость добавления одной строки в меню на сайте.

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

Объяснение, конечно, сильно упрощено, но суть быстрого набора популярности и повального использования PHP именно в этом. Расмус показал, как и с помощью чего можно отделить текст от его оформления.

С 1995 года, когда вышла первая версия PHP, язык очень сильно развился. Теперь, пожалуй, невозможно придумать задачу, которая не могла бы быть реализована при помощи PHP. Но как выглядит обратная сторона, чем пришлось пожертвовать, начав массовое использование PHP?

К сожалению, это производительность. Если самый распространённый на то время веб-сервер Apache без использования PHP мог обслуживать сотни запросов страниц в секунду, то после перевода сайта на PHP общая производительность системы падала в десятки раз. За прошедшие 15 лет развития языка было сделано очень много для решения этой основной проблемы, но, тем не менее, и на сегодняшний день производительность PHP вызывает уныние.

Чтобы не быть голословным, простой пример. На новый сервер устанавливаю «классическую» связку из Apache, MySQL и PHP. Устанавливаю один из самых распространённых бесплатных движков CMS на PHP. Тестирую производительность при помощи ab - утилиты, поставляемой в комплекте с Apache. Результат: 8 запросов в секунду главной страницы при 100% загрузке процессора процессом Апача httpd, под которым работает PHP. Можно ли увеличить производительность? Безусловно. Можно купить ещё один железный сервер, перенести на него MySQL и прочее, освободив один сервер полностью под Apache и PHP. Можно купить ещё один сервер и переместить на него все статические файлы (картинки, css, javascript и т.д.). Можно пойти другим путём и поставить на один сервер nginx, а на второй - Apache с PHP и всем остальным. nginx, разработанный Игорем Сысоевым для Rambler-а, примет на себя все запросы из внешнего мира, переправит их на второй сервер и часть ответов закеширует, то есть, сохранит у себя. При получении последующих запросов, nginx сначала будет искать ответ на них у себя, а при отсутствии необходимой информации, перенаправлять запрос на сервер с Apache. Игорь проделал огромную работу, благодаря nginx мы можем получить при разумных расходах на инфраструктуру более-менее приемлемую скорость работы сайта, использующего движок на PHP. Без всех этих мероприятий, расходов, знаний можно прочитать фразу вида «У нас на сервере размещено несколько тысяч сайтов наших заказчиков. Сейчас 5 запросов в секунду означают недоступность сервера для остальных посетителей», написанную представителем крупной веб-студии, разрабатывающей сайты.

Уныло. Если называть вещи своими именами, то кроме как «костылями» все способы увеличить производительность PHP назвать нельзя. Перенося сайт с одного тарифного плана на другой, более быстрый, покупая виртуальный выделенный сервер, покупая железный сервер для установки в дата-центр хостера, меня не покидало ощущение того, что это не решение проблемы, а лишь отсрочка. Искал решение, думал, устанавливал, тестировал и в результате пришёл к выводу, что нужен свой движок. Движок, который изначально не будет использовать PHP, но даст лёгкие инструменты для создания и управления сайтом.

Дальше больше. Пришло понимание того, что и нынешние веб-серверы не имеют инструментов для решения простых задач, которые стали насущными в последние годы. Простой пример. Есть некий сайт, работающий на сервере достаточной мощности для обслуживания обычного количества посетителей. Даже есть определённый запас ресурсов. Всё хорошо, сайт работает, всё быстро, но в один из дней что-то происходит. Например, один из гигантов интернета, пусть это будет CNN, выпускает новость, в которой дана ссылка на наш сайт. Десятки тысяч кликов укладывают наш сервер, он недоступен ни для кого. По сути, это DDoS. Другой пример. Есть новостной сайт, движок которого за годы существования сайта отточен, производительность железа заведомо избыточна. Сервер без проблем справляется с нагрузками, пиками, работает стабильно и быстро. И тут в мире происходит какое-то событие. Например, аналог 11-го сентября 2001 года (избавь нас Бог от подобного). Миллионы смотрят прямые трансляции по телевизору, миллионы открывают сайт новостей. Что происходит с сервером? Правильно, он уходит в глубокую задумчивость и вообще перестаёт отзываться.

Казалось бы, решение у проблемы есть только одно. Изначально построить такую инфраструктуру, которая сможет обслужить десяти, стократную от штатной нагрузку. Но сколько будет стоить такое решение, его поддержка? И всё ради возможности сделать доступным сервер при чрезвычайных нагрузках? Нет, это не решение.

На самом деле, есть ещё одно решение. Менее очевидное и более сложное, но цена которого практически не заметна в расходах на поддержку уже работающей инфраструктуры. Стоит лишь отказаться от использования широко распространённых в интернете для построения онлайн ресурсов веб-серверов, баз данных и языков программирования, как мы получаем решение, способное обслуживать сумашедшие нагрузки.

Помните, я выше писал о 8 запросах в секунду? Сравните на этом фоне результат в 2500 обслуженных запросов в секунду. Увеличение производительности сервера в 312 (!) раз, утилизация полосы в 300 мегабит, возможность адаптироваться к нагрузкам, оценивать поведение пользователей и подстраиваться под него. Это лишь основа, база. На самом деле, сегодня GlassCubeServer, работая на десктопе на I7, обслуживает 4200 запросов в секунду. Не просто в пиках, а обслуживает в течение десятков часов нагрузочного тестирования. Я пишу 2500 помня о том, что не реализована ещё важная часть функционала, для работы которой потребуется время процессора.

Фантастика? Бред? Фейк? Нет. Это всего лишь результат попытки отвлечься от существующих решений. Попытки перестать плыть по течению, а выйти на берег и посмотреть на всё под другим углом.

Если Расмус принёс в жертву производительность, то я принёс в жертву беспредельную расширяемость. На сегодняшний день, как Вы видите по этому блогу, GlassCubeServer позволяет без проблем создать блог. Аналогично может быть создан и сайт. Причём, все действия по созданию сайта выполняются, условно говоря, мышью в графическом интерфейсе. Не нужно изучать языки программирования, разбираться с тем, как работает кеширование, искать и устанавливать анализаторы посещаемости, СУБД и прочее. Сервер несёт этот функционал в себе. Оттестированный и производительный код.

Какой высокопроизводительный веб-сервер Вы можете запустить с компакт-диска? GlassCubeServer. Да, он портативен, может быть перенесён с одного компьютера на другой обычным копированием. Никаких инсталляторов. Работает в любой версии Windows, начиная с 2000. Создайте сайт, включите демо-режим, заархивируйте файлы и отправьте архив заказчику.

GlassCubeServer будет расширяться через подключение библиотек. Это отдельная большая тема, к реализации которой я пока не приступал. Сейчас всё время отдано реализации основного функционала, базы. Приоритетна разработка механизмов миграции с других движков. Причём, анализ опыта многочисленных миграций, ошибок, позволяет создавать решение, которое позволит мигрировать на GlassCubeServer без потери посещаемости, что очень важно для давно работающих сайтов.

Категории

Microsoft (1015.04.2016)
Движок (1511.08.2013)
О блоге (315.04.2016)
SkyNet
Киборг (14 30.11.2017)
Идентификация личности (31 15.04.2016)
Роботы (5830.11.2017)
Интернет (3009.03.2016)
Видеонаблюдение (1207.01.2015)
NTP сервер (501.02.2017)

Истинный облик

Истинный облик

Информация

Этот сайт работает на GlassCubeServer - производительном портативном веб-сервере, разрабатываемым автором блога. На сегодняшний день скорости GCS достаточно для обслуживания 3000 - 4000 запросов страниц в секунду. Комплекс состоит из исполняемого файла и нескольких файлов для хранения данных, перемещается между серверами простым копированием. Может работать с флешки или компакт-диска (в режиме только для чтения). Управление материалами сайта, его оформлением выполняется из интерфейса Windows-приложения. Дистрибутив сервера недоступен для скачивания до момента его релиза, в данный момент проект находится, скорее, в стадии альфа-тестирования.