Pull to refresh

Новая функциональность Impress Application Server для Node.js

Reading time3 min
Views7.6K
Предоставляю вам краткий отчет об изменениях в Impress AS за последние несколько месяцев. Во-первых мы не пошли путем фреймворков, а ринулись в сферу серверов приложений, обеспечивая масштабирование в двух направлениях: (1) много приложений на одном сервере и (2) много серверов для одного приложения. Первое направление требовало развивать сендбоксинг (экранирования приложений друг от друга и от среды запуска), а второе направление предусматривало переход от кластера к многосерверному клауду. Тут нужно уточнить терминологию, в ноде кластером (cluster) принято называть способ многопоточного запуска приложений в режиме master/worker, поэтому, многосерверную инфраструктуру (с кластером на каждом сервере) мы будем называть клаудом (или прикладным облаком). Это облако ни как не связано с виртуализацией операционной системы, как это обычно ложно связывается в понимании широких масс. Облачные технологии совсем не обязаны быть организованы на базе технологий виртуализации, но другого простого способа масштабирования сейчас для массового потребления нет. Облачная виртуализация не гарантирует бесконечной виртуализации прикладных приложений, и всем разработчикам крупных высоконагруженных систем известно, что для сотен тысяч и десятков миллионов пользователей нужно создавать специальные прикладные решения, обеспечивающие прикладную виртуализацию, размазывающую задачи по серверам и объединяю их в одну, распределенно функционирующую, но централизовано управляемую систему. Именно эту задачу мы и взялись решать в Impress, надеюсь я отстоял терминологию и могу переходить к подробностям.

Новшества и версии


Сейчас есть две актуальные версии 0.0.71 и 0.1.2, которые можно установить соответственно:
npm install impress@0.0.71     # старый стиль приложений с поддержкой развертывания на множество серверов
npm install impress@0.1.2      # новый стиль приложений с сендбоксингом и поддержкой множества серверов

Все новогодние праздники были цинично потрачены на реализацию сендбоксинга и глубокий рефакторинг Impress. Переписано до 80% ядра и версия 0.1.2 оттестирована на приложениях, написанных для 0.0.71 с их минимальной коррекцией. Функционально в этих версиях все одинаково, кроме сендбоксинга и особенностей написания приложений. Рефакторинг из старого стиля в новый очень прост и сводится к замене обращения к API сервера приложений. На днях я выпущу небольшую инструкцию по портированию, т.к. есть уже достаточное количество внешних разработчиков, использующих Impress, подложить им такой подарок на НГ не хотелось бы. С инструкцией же они, справятся с портированием за несколько минут, надеюсь.

Итак, функциональные новшества, присутствующие в обоих версиях:
  • Реализация межпроцессового взаимодействия в виде трансляции сообщений между процессами через ZeroMQ (межсерверное взаимодействие) и IPC (в рамках одного сервера). Это необходимо, чтобы пользователи, приклеенные к своему процессу, могли взаимодействовать друг с другом.
  • Добавлена поддержка WebSocket (ее уже давно просили) и обновлена реализация Server-Sent Events. В демонстрационном приложении есть примеры их использования. Более того, эти протоколы могут быть доступны на том же порту (например 80), на котором приложения отдают свои страницы, просто по другому URL, что позволяет обойтись без CORS (кроссдоменных запросов, а другой порт, почему-то считается уже другим доменом).
  • Удалено много зависимостей, и модули используются только если они установлены и добавлены в конфигурацию. Это все благодаря библиотеке geoip-lite, которая решила вдруг оставлять 120Мб временных файлов и тяжелым драйверам БД, которые не все сразу нужны. Патч для geoip-lite я уже отправил автору, в npm его еще нет, но кому критично — ставьте через github, тут он уже доступен. UPD: как раз 2014-01-13 новая версия попала в npm.
  • Проведена оптимизация кеширования шаблонов, статики и обработчиков бизнес-логики, в том числе оптимизировано слежение за файловый системой и обновление кеша при изменении файлов на диске. А в новой версии, кеширование полностью переписано, чтобы обеспечить экранирование приложений в сандбоксах.

Слайд для заманивания на просмотр презентации (кликабилен)


Теперь, для пущей убедительности покажу крутой слайд, из презентации. Примеры кода в презентации актуальны только для версии 0.0.71, а булшитологические пафосные тексты актуальны и для 0.1.2, так что, просмотрите ее, чтобы получить общее представление о сервере приложений. Есть и англоязычная версия презентации. Я понимаю, что для глубокого ознакомления с Impress совершенно необходимы хорошие скринкасты, разнообразные примеры и статьи с объяснением этих примеров, они готовятся и будут доступны с ближайшее время. По поводу поддержки, интенсивности разработки и выхода версий, активности исправления обнаруженных багов и пожеланий по доработе, вы можете сложить впечатление на Гитхабе. Не стесняйтесь присылать вопросы и постать issues на русском или английском.

Ссылки


На Github: https://github.com/tshemsedinov/impress
В npm: https://npmjs.org/package/impress
Tags:
Hubs:
+12
Comments32

Articles