среда, 3 марта 2010 г.

Виртуализация на базе кластера (xen)

На Хабре обнаружил интересный пост – просьбу о помощи какую платформу для виртуализации выбрать. Проблема на самом деле для многих очень актуальна – виртуализация облегчает жизнь во многих сферах бизнеса как ИТ службам и разработчикам, так и конечным пользователям. В бытность своей работы над стартап-проектом по разработке ПО эта проблема возникала не один раз – ЧТО выбрать и КАК реализовать.


Одним из очень изящных решений - создание кластера высокой доступности на платформе XEN с возможностью миграции и использованием VLAN, DRBD, Heartbeat (статья Андрея Зентавр на OpenNet).


Cсылки по теме:


1. XEN Cluster HowTo


2. MySQL + DRBD/Heartbeat

GoGrid – гибридный хостинг

Хостинг-провайдер GoGrid предлагает для бизнеса любопытнейшие решения – гибридный хостинг: сочетает в себе масштабируемость/доступность облаков и удобство выделенных серверов.


Гибридный хостинг

Гибридный хостинг


Идея состоит в создании защищенной частной сети – связь (от 100Мбс) выделенных серверов и вычислительного облака. При этом сохраняется масштабируемость, присущая облаку и мощь/доступность выделенных серверов.


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


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

nginx (engine x) – отказоустойчивый HTTP сервер

nginx (engine x) — веб-сервер и почтовый прокси-сервер, работающий на Unix-подобных операционных системах (тестировалась сборка и работа на FreeBSD, OpenBSD, Linux, Solaris, Mac OS X).


http://sysoev.ru/nginx/


http://ru.wikipedia.org/wiki/Nginx


Основная функциональность HTTP-сервера:



Популярность


По данным Netcraft за декабрь 2009 года, число сайтов, обслуживаемых nginx, превышает 15,5 миллионов [2], что делает его третьим по популярности веб-сервером в мире.


Как и lighttpd nginx часто используют для отдачи статического содержимого, генерируемого «тяжёлым» веб-приложением, работающим под управлением другого веб-сервера.


Следующие проекты используют nginx:



Почему Apache — плохо?


(http://greenmice.info/ru/node/115,  http://greenmice.info/ru/node/116)


Для начала нужно объяснить, как вообще работают сетевые серверы. Те, кто знаком с сетевым программированием, знают, что по сути существуют три модели работы сервера:



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

  2. Многопроцессная (многопоточная). Сервер открывает слушающий сокет. Когда приходит соединение, он принимает его, после чего создает (или берет из пула заранее созданных) новый процесс или поток, который может сколь угодно долго работать с соединением, а по окончании работы завершиться или вернуться в пул. Главный поток тем временем готов принять новое соединение. Это наиболее популярная модель, потому что она относительно просто реализуется, позволяет выполнять сложные и долгие вычисления для каждого клиента и использовать все доступные процессоры. Пример ее использования — Web-сервер Apache. Однако у этого подхода есть и недостатки: при большом количестве одновременных подключений создается очень много потоков (или, что еще хуже, процессов), и операционная система тратит много ресурсов на переключения контекста. Особенно плохо, когда клиенты очень медленно принимают контент. Получаются сотни потоков или процессов, занятых только отправкой данных медленным клиентам, что создает дополнительную нагрузку на планировщик ОС, увеличивает число прерываний и потребляет достаточно много памяти.

  3. Неблокируемые сокеты/конечный автомат. Сервер работает в рамках одного потока, но использует неблокируемые сокеты и механизм поллинга. Т.е. сервер на каждой итерации бесконечного цикла выбирает из всех сокетов тот, что готов для приема/отправки данных с помощью вызова select(). После того, как сокет выбран, сервер отправляет на него данные или читает их, но не ждет подтверждения, а переходит в начальное состояние и ждет события на другом сокете или же обрабатывает следующий, в котором событие произошло во время обработки предыдущего. Данная модель очень эффективно использует процессор и память, но достаточно сложна в реализации. Кроме того, в рамках этой модели обработка события на сокете должна происходить очень быстро — иначе в очереди будет скапливаться много событий, и в конце концов она переполнится. Именно по такой модели работает nginx. Кроме того, он позволяет запускать несколько рабочих процессов (так называемых workers), т.е. может использовать несколько процессоров.


Итак, представим следующую ситуацию: на HTTP-сервер с каналом в 1 Гбит/с подключается 200 клиентов с каналом по 256 Кбит/с:


Что происходит в случае Apache? Создается 200 потоков/процессов, которые относительно быстро генерируют контент (это могут быть как динамические страницы, так и статические файлы, читаемые с диска), но медленно отдают его клиентам. Операционная система вынуждена справляться с кучей потоков и блокировок ввода/вывода.

Nginx в такой ситуации затрачивает на каждый коннект на порядок меньше ресурсов ОС и памяти. Однако тут выявляется ограничение сетевой модели nginx: он не может генерировать динамический контент внутри себя, т.к. это приведет к блокировкам внутри nginx. Естественно, решение есть: nginx умеет проксировать такие запросы (на генерирование контента) на любой другой веб-сервер (например, все тот же Apache) или на FastCGI-сервер.


Рассмотрим механизм работы связки nginx в качестве «главного» сервера и Apache в качестве сервера для генерации динамического контента:


Nginx принимает соединение от клиента и читает от него весь запрос. Тут следует отметить, что пока nginx не прочитал весь запрос, он не отдает его на «обработку». Из-за этого обычно «ломаются» практически все индикаторы прогресса закачки файлов — впрочем, существует возможность починить их с помощью стороннего модуля upload_progress (это потребует модификации приложения).

После того, как nginx прочитал весь ответ, он открывает соединение к Apache. Последний выполняет свою работу (генерирует динамический контент), после чего отдает свой ответ nginx, который его буферизует в памяти или временном файле. Тем временем, Apache освобождает ресурсы.

Далее nginx медленно отдает контент клиенту, тратя при этом на порядки меньше ресурсов, чем Apache.


Такая схема называется фронтэнд + бэкенд (frontend + backend) и применяется очень часто.

вторник, 2 февраля 2010 г.

UbuntuOne собираются портировать на Windows

UbuntuOne (сервис хранилища-облака от разразработчиков дистрибутива Ubuntu Linix) собираются портировать на платформу Windows. Идея заманчива - многие используют в качестве среды работы (и разработки) ОС Windows, так почему бы не использовать кроссплатформенность в таком замечательном сервисе. Проблема совместимости (синхронизации и расшаривания) между различными платформами до сих пор остается актуальной в большинстве подобных сервисов.

пятница, 22 января 2010 г.

Либимый сервис с любимым антивирусом

Хорошая новость - Google "скрестился" с Avast:
Google добавил новый антивирус в пакет программ Google Pack. «Avast Free Antivirus, который включен в состав Google Pack – этот обычный Avast Free Antivirus. Последние тесты от AV-Comparatives.org показали, что самыми лучшими антивирусами являются Avast, Avira и Microsoft Security Essentials. В декабре руководство Avast анонсировало, что компания будет поддерживать браузер Google Chrome и предлагать своим пользователям установить его.

четверг, 15 октября 2009 г.

Настройка авторизации на web-сервере apache с помощью персональных SSL-сертификатов

Очень грамотная и технически развернутая статья (де-факто - руководство) по настройке авторизации на web-сервере с помощью персональных SSL-сертификатов.
Автор раскрывает проблему безопасности серьезных сайтов, при которой юзвери зачастую сами открывают дыры:
Не всегда авторизация на web-ресурсах по логину и паролю безопасна, к тому же при такой авторизации возникает необходимость заставлять пользователей использовать длинный и безопасный пароль, а не как это обычно бывает – «qwerty» или еще хуже просто «1″. Более безопасный способ это авторизация по персональным сертификатам и ключам, что мы и попробуем сделать.

среда, 23 сентября 2009 г.

"Железный" предел

Всегда очень живо интересовался методикой оценки нагрузочной способности серверов. К сожалению только реальный мониторинг позволяет понять какую нагрузку выдерживает сервер. Итак приведу параметры сервера виртуальных машин, при котором нагрузка на вышеозначенный сервер достигает уровня, при котором работать становится затруднительно.
---------
Hardware:
CPU: Quad 6700
RAM: 4Gb (800)
HDD: SATA150 RAID10
Video: Nvidia GeForce8800GTS

Host Software:
Linux openSuse 11 + Xen
--------


На хост-машине запущено 12 виртуалок следующей конфигурации:
--------
CPU: 2
RAM: 384-512Mb
HDD: 20Gb

VM Soft:
Linux openSuse 11
Apache2 + PHP5 + MySQL
FTP, SSH, NX сервера
Сервер обработки транзакций (C++)
--------
Сотрудники отдела разработок работают с виртуалками через ssh/ftp и если необходимо NX (замена глючного VNC - NX-сервер: www.nomachine.com)
Так вот 11 и 12 виртуальные машины - уже довольно сильно нагружают хост-сервер. Работа всех остальных виртуалок становится заметно медленнее, загрузка процессора, диска и памяти на хост-сервере 80-90% (10% Xen под себя держит).